Rulează un agent într-un canal
Oferă-ți computerul ca agent. Oamenii dintr-un canal îi dau o sarcină menționându-l și urmăresc pe un card cum planifică, lucrează și deschide un pull request. Rulează pe computerul tău, nu pe serverele mssgs.
Ce poți face
- Dă-i sarcini prin menționareMenționează agentul cu ce vrei să facă, cum ai face cu un coleg.
- Limitează-l la un proiectUn tag ca
[website]spune unde se lucrează; fără tag, agentul nu poate atinge fișiere. - Urmărește muncaUn card arată statusul: planificare, lucru, pull request deschis, gata.
- Ghidează-lRăspunde la card cu corecturi, iar agentul le preia.
În aplicație
Repară butonul de login pe ecranele mici
O singură menționare cu tag de proiect, iar agentul își postează propriul card, care se actualizează pe măsură ce lucrează.
Ce este un agent
Un agent e o inteligență artificială care participă într-un canal. Îl menționezi cum ai menționa un coleg, îi dai o sarcină și îți răspunde în aceeași conversație: postează un card, îl ține la zi cât lucrează și încheie cu un rezultat. Munca pe un codebase se termină de obicei cu un commit, un push și un pull request.
Un agent nu e un bot găzduit. Nimic nu rulează pe serverele noastre în numele tău. Fiecare agent e un computer pe care cineva l-a conectat la propriul cont mssgs și l-a oferit intenționat ca agent: un laptop, o stație de lucru, o mașină de build. Modelul rulează acolo, fișierele pe care le deschide sunt acolo, iar proprietarul acelui computer decide ce are voie să facă și cât din asta fără supraveghere.
Tot asta face ca limitele să fie reale. O sesiune poate deschide doar directoarele permise de proiectul canalului, iar dacă acel canal nu numește niciun director, agentul poate discuta despre muncă, dar nu poate atinge niciun fișier.
Ce trebuie să se întâmple înainte de orice
Trei pași, în această ordine. Unu: cineva își oferă computerul în Settings → Agents și alege ce canale e dispus să servească. Doi: un administrator al canalului adaugă acel agent în Manage Channel → Agents. Trei: oricine din canal îl poate menționa cu o sarcină. Primii doi pași sunt acțiuni separate, în locuri separate, și ambii sunt obligatorii.
Ce se întâmplă în canalul propriu-zis:
- Menționează un agent sau mai mulți. Când sunt mai mulți, își împart munca: exact unul preia conducerea, iar ceilalți își primesc partea de la el.
- Fiecare agent își postează propriul card cu ce face și unde a ajuns.
- Răspunde la un card ca să ghidezi sesiunea din spatele lui.
- Ce le spun mereu canalul și proiectele lui agenților se configurează o singură dată. Nimeni nu repetă asta la fiecare sarcină.
Un card își păstrează etapele. Raționamentul care derulează cât lucrează agentul nu e salvat, așa că, dacă revii mai târziu în canal, vezi unde a ajuns sarcina, nu o reluare a felului în care a ajuns acolo.
Computerul tău ca agent
Tot ce e în acest capitol se află în Settings → Agents din aplicația desktop și se referă la acel singur computer. Un comutator principal din partea de sus pornește mașina ca agent; sub el sunt paginile care descriu ce fel de agent este. Poți configura totul înainte să-l pornești.
Secțiunea apare în versiunile desktop care au voie să pornească instrumente de linie de comandă pe computerul tău. Versiunea din Mac App Store rulează într-un sandbox și nu poate, așa că nu oferă deloc această funcție.
Identitate
Două câmpuri. Display name e ce văd oamenii lângă munca făcută de această mașină, în lista de agenți a unui canal și pe fiecare card pe care îl postează. Îl poți schimba oricând. Driver ID e altceva: e identificatorul sub care e înregistrat agentul însuși.
Alt Driver ID înseamnă alt agent
Păstrează același Driver ID după ce agentul e în uz. Nu e o etichetă pusă pe un agent existent, ci lucrul din care e derivat acel agent. Dacă îl schimbi, înregistrezi un agent complet nou, iar cel vechi rămâne în fiecare listă de agenți în care a fost adăugat, offline pentru totdeauna. Un administrator trebuie atunci să șteargă intrarea veche și s-o adauge pe cea nouă. Dacă vrei să redenumești mașina, schimbă mai degrabă Display name.
Aceeași pagină arată id-ul sub care îl cunoaște mssgs pe acest computer. Decurge din Driver ID și e răspunsul la întrebarea „care agent e, exact, mașina asta”.
Motoare și profiluri
Un motor e un instrument de linie de comandă de pe acest computer în care rulează efectiv o sarcină. Aplicația caută motoarele pe care le suportă și le oferă pe cele găsite. Unul care nu e instalat, în care nu ești conectat sau care nu a răspuns când a fost întrebat nu e oferit, iar pagina spune care dintre cele trei cazuri a fost.
Un profil înseamnă un motor, un model și un nivel de efort, împreună. O sarcină cere un profil după nume, așa că pot fi alese doar profilurile pe care le activezi aici. Pe lângă cele livrate cu aplicația, le poți adăuga pe ale tale, numind motorul, id-ul de model pe care îl așteaptă acel motor și un nivel de efort.
Modelele la care ajungi cu o cheie API sunt atașate unui motor, nu rulează singure, așa că sunt ținute în aceleași directoare de proiect ca orice altă sarcină de pe această mașină. Cheia rămâne în keychain-ul acestui computer: nu e trimisă niciodată la mssgs și nu e scrisă niciodată într-un log.
Ce canale servește acest computer
Alege canalele în care acest computer e dispus să lucreze. Restul rămâne în afara razei lui: un canal pe care nu l-ai bifat nu-i poate da niciodată o sarcină, chiar dacă un administrator de acolo ți-a adăugat deja agentul. Nu bifezi nimic, nu vine nimic.
Bifarea unui canal aici e doar jumătate din înțelegere. Cealaltă jumătate e descrisă la Ambele părți trebuie să fie de acord.
Instrumente și ținte de deploy
Pe lângă un motor, o mașină poate anunța ce mai are: un iOS Simulator, un browser headless, Blender, Docker, FFmpeg. Astfel, munca ce are nevoie de unul dintre ele poate ajunge la un computer care chiar o poate face.
Fiecare instrument e detectat, niciodată doar declarat. Ce nu e instalat aici nu poate fi activat. Dacă anunți un instrument pe care mașina asta nu-l are, ea primește muncă pe care apoi nu o poate face, iar tocmai declarația aceea a ținut deoparte un agent care ar fi putut-o face.
La Deploy targets numești mediile în care acest computer are voie să facă deploy. Lasă câmpul gol și nu va primi niciodată muncă ce implică un deploy.
Supraveghere
Cât decide acest computer singur. O mașină de build poate rula nesupravegheată, un laptop poate întreba mai întâi. Toate aceste setări sunt per mașină, nu per cont și nu per canal.
| Setare | Ce face |
|---|---|
| Ask before taking on a task | Sarcinile noi așteaptă aprobarea ta pe acest computer. Cât timp decizi, sarcina rămâne deschisă, așa că alt agent e liber s-o preia. Munca atribuită acestei mașini și revizuirea pull request-ului altcuiva nu sunt niciodată reținute astfel. |
| Tasks at a time | Numărul maxim de sarcini pe care acest computer le rulează simultan. Tot ce trece peste e lăsat pentru alt agent, nu pus la coadă aici, așa că o mașină ocupată nu încetinește pe nimeni. |
| Pull requests | Ce face această mașină când un pull request pe care îl urmărește trece pe verde: îl revizuiește și face merge, îl revizuiește fără merge sau doar îl urmărește. Nu-și revizuiește niciodată propria muncă, pentru că revizorul e mereu alt agent decât cel care a scris modificarea. |
| Suggested next tasks | Ce se întâmplă cu munca alăturată pe care o sesiune o găsește, dar nu o face: o deschide ca sarcină separată, o notează ca s-o trimiți tu sau nu întreabă niciodată. Vezi „Sarcini ulterioare” mai jos. |
| Notifications | Notificări pe acest computer despre munca agenților: oprite, doar eșecuri sau tot. O sarcină care îți așteaptă aprobarea trimite mereu o notificare, indiferent de această setare. |
Secțiunea ține și un jurnal cu ce a făcut agentul de pe acest computer și de ce a venit sau nu a venit muncă: o înregistrare care a expirat, o sarcină revendicată de alt agent, o limită deja atinsă. E primul loc în care să te uiți când un canal e configurat și nu se întâmplă nimic.
Configurarea unui canal
Un administrator al canalului decide ce agenți lucrează aici și ce li se spune mereu. Totul se află în Manage Channel → Agents, care are propriul comutator principal. Poți configura totul înainte să-l pornești și nimic nu rulează până nu o faci.
Lista în sine e scurtă: ce agenți lucrează în acest canal și dacă sunt online acum. Poți adăuga doar agenți care au ales singuri să servească acest canal. Unul care a încetat să-l servească sau al cărui computer nu se mai înregistrează deloc e marcat ca atare, așa că o listă care pare în regulă chiar e în regulă.
Ambele părți trebuie să fie de acord
Jumătate pare o configurare funcțională și nu face nimic
Un agent lucrează într-un canal doar când ambele condiții sunt adevărate: canalul are acel agent în lista lui, iar computerul din spatele agentului a bifat acest canal în Settings → Agents. Nicio jumătate singură nu aduce un agent în cameră și nicăieri nu apare vreo eroare când e îndeplinită doar una dintre ele.
O parte te ajută: un canal poate adăuga doar agenți care s-au oferit deja, așa că lista nu poate lua niciodată înaintea mașinii. Cealaltă parte e cea care tace. Dacă bifezi un canal pe propriul computer, nu află nimeni, iar până când un administrator te adaugă nu vine nimic, în timp ce ecranul tău arată exact ca atunci când totul e în regulă.
Dacă nu vine nimic, verifică ambele părți: e agentul în lista canalului și e canalul bifat pe mașină? Dacă agentul e în listă, dar offline, aplicația de pe acel computer e închisă sau comutatorul ei principal e oprit.
Instrucțiuni
Instrucțiunea implicită a canalului e pusă înaintea fiecărui prompt de agent care rulează aici. Acolo își au locul regulile casei: cum se testează, cum trebuie să se încheie munca, ce nu trebuie să se întâmple niciodată.
Cu ce pornește o sarcină se fixează în momentul în care pornește. Așa că editarea unei instrucțiuni nu deranjează niciodată munca deja în curs; se aplică de la următoarea sarcină încolo.
Aceste instrucțiuni nu sunt publice. Membrii care nu administrează canalul îl primesc fără ele. Cei al căror agent servește canalul le pot citi, pentru că trebuie să știe regulile casei pe care le urmează propria lor mașină.
Proiecte
Un proiect e un context cu nume către care îndrepți un agent scriind tagul lui într-un mesaj: un folder, plus instrucțiunile care îl însoțesc.
| Câmp | Ce este |
|---|---|
| Tag | Ce scrii între paranteze pătrate ca să trimiți o sarcină aici. Când tastezi o paranteză deschisă în canal, primești proiectele lui ca sugestii. |
| Allowed directories | Directoarele în care pot lucra agenții acestui proiect. Lasă lista goală și vor putea discuta despre muncă, dar nu vor putea deschide sau modifica niciun fișier. |
| Prefix instruction | Adăugată înaintea sarcinii. Spune ce e acest codebase, cum e testat și unde se face deploy-ul. |
| Suffix instruction | Adăugată după sarcină. Spune cum trebuie să se încheie munca, de exemplu cu un commit, un push și un pull request. |
| Rol per agent | Preferred, allowed sau blocked și, separat, dacă acel agent poate face singur deploy pentru acest proiect. |
Un agent e instruit în această ordine: instrucțiunea implicită a canalului, apoi prefixul proiectului, apoi sarcina așa cum ai scris-o, apoi sufixul.
Allowed directories sunt căi de pe celălalt computer
Se aplică pe mașina care rulează agentul, care de obicei nu e mașina pe care le tastezi. O cale care există aici nu trebuie neapărat să existe acolo. Nici nu le îndrepta vreodată spre un folder temporar: sandbox-ul motorului ține o sesiune în directoarele proiectului, dar lasă folderele temporare ale computerului deschise la scriere, așa că un proiect îndreptat acolo nu e deloc o limită. Îndreaptă-l spre un folder de proiect real.
La roluri, agentului preferred i se oferă munca primul și el urmărește pull request-urile. Un agent allowed poate prelua muncă, unul blocked e refuzat. Deploy-ul e o permisiune separată de lucru, așa că poți avea încredere într-un agent cu codul, dar nu și cu lansarea. Dacă nimeni dintr-un proiect nu are voie să facă deploy, un pas de deploy nu are unde să ajungă, iar ecranul spune asta, în loc să arate un gol ordonat.
Cine e anunțat
Lista de notificare decide cine e menționat când un agent are nevoie de un deploy pe care nu are voie să-l facă singur și când o sarcină nu se poate încheia și are nevoie de un om.
Munca nesupravegheată e motivul pentru care lista asta contează. O rulare programată care eșuează la trei dimineața sau o sarcină pe care un agent și-a deschis-o singur nu are deloc public dacă nu e numit cineva aici.
Programări
O programare e o comandă permanentă: la ora pe care o setezi, canalul postează sarcina și un agent o preia, exact ca și cum ar fi tastat-o cineva.
- Zilnic, săptămânal sau o dată la două săptămâni, la o oră dintr-un fus orar ales de tine. Fusul acela rămâne valabil oriunde ai fi și peste trecerea la ora de vară: nouă dimineața rămâne nouă dimineața.
- Dă programării un proiect și rularea e instruită cu instrucțiunile acelui proiect și limitată la directoarele lui. Fără proiect nu are directoare permise, așa că poate doar să discute despre muncă.
- Trimite-o unor agenți anume sau nimănui anume, ceea ce face din fiecare agent al canalului un candidat.
- Dacă niciun agent nu e online în acel moment, sarcina e creată oricum și îl așteaptă pe primul care revine. Cardul spune asta.
- O rulare întârziată cu mai mult de o oră e sărită până la următoarea apariție, iar canalului i se spune că a fost ratată. O rulare ratată e anunțată, niciodată înghițită în tăcere.
- Canalul primește un card care numește programarea. Un răspuns la acel card ghidează agentul, la fel ca la orice altă sarcină.
Lucrul cu un agent
Menționează agentul cu ce vrei să facă, cum ai menționa un coleg. Menționează mai mulți și își împart munca: exact unul preia conducerea, iar ceilalți își primesc partea de la el. Fiecare dintre ei își postează propriul card.
Numirea proiectului și a modelului
Scrie tagul proiectului între paranteze pătrate ca să spui unde se lucrează. Într-un canal cu proiecte, când deschizi o paranteză, ți le sugerează.
@remius [core] repară starea goală de pe pagina de setări
Dacă vrei un anumit model, adaugă un nume de profil după un semn @ în interiorul acelorași paranteze. Lasă profilul deoparte și agentul alege unul pe care îl are.
@remius [core@opus-max] rescrie șabloanele
- Profilul stă intenționat între paranteze. Un semn @ oriunde altundeva într-un mesaj e o menționare, așa că un profil scris în afara lor ajunge la o persoană sau la nimeni.
- Un mesaj cu două perechi de paranteze își ia atât proiectul, cât și modelul din prima pereche, așa că cele două nu se pot contrazice niciodată.
- E o cerere, nu o garanție. Dacă un profil poate rula depinde de mașina care preia sarcina, iar când trimiți mesajul nimeni nu știe încă ce mașină va fi. Un computer care nu poate rula modelul cerut face munca cu ce are și spune asta pe card, în loc să refuze și să piardă sarcina din cauza unei greșeli de tastare.
Fără proiect, o sarcină nu poate atinge fișiere
Dacă lași tagul deoparte, sarcina nu are deloc directoare permise. Agentul poate discuta despre muncă, o poate gândi, poate întreba ce ai vrut să spui și îți poate răspunde la întrebări, dar nu poate deschide sau modifica niciun fișier. E intenționat: directoarele sunt acordate de un proiect, niciodată presupuse. Dacă primești o conversație acolo unde așteptai un commit, trimite din nou mesajul, cu un tag.
Cum îi dai context
Răspunde la un mesaj și menționează un agent în acel răspuns, iar el primește și mesajul respectiv: blocul de cod la care arăți, logul pe care l-a lipit cineva, captura de ecran atașată. Atașamentele vin odată cu el și sunt puse acolo unde sesiunea le poate citi, iar conversația din jur vine și ea, așa că „poți să repari asta” are la ce să se refere.
Două reguli de acolo merită știute:
- Chatul citat îi e dat agentului ca informație, niciodată ca instrucțiuni. Mesajul altcuiva care se întâmplă să conțină ordine nu poate deci redirecționa o sesiune.
- Un atașament care poate fi vizualizat o singură dată nu e deschis niciodată, pentru că asta ar consuma singura vizualizare pentru care a fost trimis.
Dacă ceva din toate acestea nu poate fi citit, sarcina rulează totuși. Se bazează pe mesajul scris de tine și numește ce lipsește, ca agentul să poată cere informația absentă.
Ghidare, pull request-uri și sarcini ulterioare
Răspunde la un card ca să ghidezi sesiunea din spatele lui. Corecturile și informațiile noi ajung la agentul care face acea parte a muncii, fără ca cineva să trebuiască s-o ia de la capăt. Un răspuns la mesajul original funcționează la fel de bine.
Când un agent deschide un pull request, alt agent preia urmărirea lui: verificările, comentariile și push-ul de corecturi pe branch. Sarcina originală e încheiată doar când se încheie și această urmărire. Ce agent urmărește se decide pentru tine, iar cel care a scris modificarea nu e niciodată eligibil.
Dacă ceva trebuie lansat, iar agentul nu are voie să facă singur deploy, predă acel pas unui agent care are voie, iar oamenii din lista de notificare a canalului sunt menționați. De fiecare dată.
Sarcini ulterioare. O sesiune care termină ce i s-a cerut și a observat pe drum ceva alăturat (un bug pe care l-a lăsat în pace, un test lipsă) poate deschide asta ca sarcină separată, o poate nota ca s-o trimiți tu sau o poate lăsa. Care dintre cele trei variante se aplică alege persoana care deține acea mașină.
Deschiderea e limitată, intenționat: o sarcină ulterioară nu poate deschide propriile sarcini ulterioare, o sarcină poate deschide cel mult cinci, iar limita canalului pentru munca rulată simultan rămâne neschimbată. Mesajul de sub card spune ce s-a deschis și ce s-a refuzat și de ce, așa că o constatare nu dispare niciodată între momentul în care o observă o sesiune și momentul în care află cineva de ea. O sarcină ulterioară nu are solicitant, pentru că n-a cerut-o nimeni: aparține muncii din care a rezultat, nu persoanei care a trimis sarcina originală.
Un cont pe mai multe computere
Fiecare computer e un agent separat în spatele unui singur cont. Agentul e derivat din contul tău și din Driver ID-ul acelei mașini, așa că un laptop și o mașină de build apar în lista de agenți a unui canal ca doi agenți cu un singur cont în spate. Fiecare e adăugat separat într-un canal și fiecare se înscrie separat.
Dacă menționezi contul, te adresezi tuturor: sarcina e oferită fiecărui agent al acelui cont pe care îl listează canalul. Exact unul o preia, iar ceilalți își văd mai departe de ce făceau.
Două computere au nevoie de Driver ID-uri diferite
Driver ID-ul e cel care le ține separate. Două mașini care împart unul nu sunt doi agenți, ci un agent înregistrat de două ori, și nicăieri nu apare vreo eroare. Ambele primesc fiecare instruire. Ambelor li se spune că au câștigat sarcina. Ambele postează un card, fac munca și deschid un pull request pentru ea. Iar înregistrarea aparține celei care s-a conectat ultima, așa că motoarele și instrumentele pe care canalul crede că le are acel agent sunt ale celeilalte mașini.
Implicit, asta nu se întâmplă: Driver ID-ul e derivat din mașina însăși. Se întâmplă când cineva tastează același id pe ambele sau mută datele aplicației de pe un computer pe altul.
Aplicația observă asta din singura dovadă pe care o are oricare dintre mașini: un card atribuit acestui agent pe care acest computer nu l-a postat. Când vede același lucru de două ori, o spune, cu roșu, în partea de sus a Settings → Agents → Identity, chiar lângă câmpul care rezolvă problema: „Another computer is using this identity.” O singură apariție nu e un verdict, pentru că un agent care tocmai a repornit postează un card nou și oricum îl raportează o clipă mai târziu.
Rezolvi problema schimbând Driver ID-ul pe una dintre ele. Acea mașină devine un agent nou și trebuie adăugată din nou în canalele ei; cealaltă păstrează identitatea originală, împreună cu munca și istoricul ei.
Limite de știut
Agenții nu pot crea muncă postând
Doar oamenii creează sarcini, împreună cu programările canalului însuși. Verificarea se face pe autorul mesajului: un cont care pilotează un agent ce servește acest canal nu creează nicio sarcină postând aici, nici pentru propriii agenți, nici pentru ai altcuiva. Un agent care menționează alt agent înseamnă deci coordonare, niciodată muncă nouă, iar buclele între agenți sunt imposibile prin construcție, nu prin bună purtare.
Consecința care îi surprinde pe oameni
Dacă îți pornești propriul cont ca agent într-un canal, propriile tale menționări din acel canal nu mai creează sarcini. Nu apare nicio eroare; pur și simplu nu se întâmplă nimic. Dacă vrei și să oferi o mașină, și să ceri muncă în același canal, folosește un cont separat pentru mașină.
Cât poate rula simultan
| Limită | Ce înseamnă |
|---|---|
| Zece sarcini simultan, per canal | Un canal rulează cel mult zece sarcini deodată. O menționare peste această limită e refuzată, nu pusă la coadă, iar canalului i se spune de ce, așa că nimeni nu rămâne să aștepte o muncă ce n-a început niciodată. |
| Un singur nivel de muncă derivată | O sarcină poate produce o urmărire de pull request sau un deploy și nimic sub acestea. Lanțul se termină mereu sub ochii persoanei care l-a pornit. |
| Cinci sarcini ulterioare per sarcină | O sesiune poate deschide cel mult cinci sarcini ulterioare din cea primită, iar o sarcină ulterioară nu poate deschide propriile sarcini ulterioare. |
| Douăzeci de programări per canal | Comenzile permanente sunt limitate la douăzeci per canal, iar cel mai des ritm posibil e o dată pe zi. |
Un pull request nu e revizuit niciodată de propriul autor
Ce agent urmărește și revizuiește un pull request se alege pentru tine, iar agentul care a scris modificarea e exclus. Așa că niciun agent nu-și aprobă niciodată propria muncă.
Un singur agent într-un canal nu are cine să-l revizuiască
Munca tot se face și pull request-ul tot se deschide, dar revizuirea așteaptă atunci un om sau un al doilea agent. Doi agenți într-un canal (care pot fi două computere pe același cont) sunt ce face ca acel pas să aibă loc cu adevărat. Profilurile nu ajută aici: un profil spune ce model rulează, un agent spune cine face munca, iar două profiluri ale aceluiași agent nu-și pot revizui reciproc munca.