Instrumente · · 3 min de citit
De ce au nevoie agenții de propriile CLI-uri
Cea mai mare parte din munca mea trece acum prin agenți de programare. Citesc tichete, interoghează baze de date, verifică pull request-uri și modifică infrastructura. Instrumentele pe care le folosesc pentru asta au fost făcute pentru oameni: hcloud, mysql, interfața web Jira, API-ul Bitbucket. Oamenii citesc în diagonală, derulează și știu când să se oprească. Agenții citesc fiecare byte, plătesc pentru el în tokeni și fac exact cât permite comanda.
Așa că am început să scriu CLI-uri pentru agenți. Respectă AXI, un set deschis de zece principii de design pentru instrumente adaptate agenților, și sunt publicate pe npm:
| Instrument | Pentru | Poate scrie? |
|---|---|---|
mongo-axi |
MongoDB | Nu, doar citire |
mysql-axi |
MySQL | Nu, doar citire |
bb-axi |
Verificarea pull request-urilor în Bitbucket | Comentarii, aprobări |
atl-axi |
Tichete Jira, sprinturi, tranziții | Editări de câmpuri, comentarii |
hetzner-axi |
Servere, firewalluri, volume și DNS în Hetzner Cloud | Modificările distructive sau cu cost cer --confirm |
Cele trei reguli care contează cel mai mult
1. Doar citire, dacă un om nu a decis altfel. mongo-axi și mysql-axi nu pot scrie. Nu e un flag pe care un agent îl poate schimba: comenzile de scriere stau în pachete separate (mongo-rw-axi, mysql-rw-axi), care lucrează doar cu o bază de date de pe calculatorul local. Dacă permit mongo-axi în permisiunile unui agent, agentul nu are la dispoziție nicio comandă de scriere. Asta îl face sigur de aprobat automat, și tocmai acesta e scopul: un agent care trebuie să ceară voie înaintea fiecărei interogări e un agent pe care nu-l folosește nimeni.
2. Tot ce costă bani sau distruge date arată întâi o previzualizare. hetzner-axi server delete web-1 afișează ce s-ar întâmpla și se oprește. Doar --confirm execută comanda, iar fiecare modificare așteaptă ca acțiunea din Hetzner să se termine înainte de a raporta. Agenții sunt siguri pe ei; previzualizarea îi dă omului un moment să observe numele greșit al serverului.
3. Ieșirea este pentru un model, nu pentru un terminal. Rezultatele vin în TOON, un format compact de tabel, cu numărători, un mesaj clar „nu s-a găsit nimic” când lista e goală și unul sau două indicii pentru comanda următoare. O listă de servere înseamnă câteva rânduri în loc de o pagină de JSON. Mai puțini tokeni înseamnă rulări mai ieftine și, mai important, mai puțin zgomot pe care modelul să-l interpreteze greșit.
Secretele rămân în afara transcrierii
Sesiunile agenților sunt înregistrate. Orice scrie un agent poate ajunge într-o transcriere, așa că hetzner-axi nu primește niciodată un token ca argument. Îl citește de la intrarea standard sau dintr-o variabilă de mediu și îl păstrează în keychain-ul sistemului de operare. Agentul folosește tokenul fără să fie nevoie să-l vadă.
Ce s-a schimbat
Când acest site s-a mutat pe servere noi, un agent a creat înregistrările DNS cu hetzner-axi. Nu s-a deschis niciun dashboard, iar tokenul API nu a apărut niciodată în conversație. Adăugarea unei înregistrări nu este una dintre comenzile care așteaptă --confirm, așa că înregistrarea a apărut fără previzualizare; e o lipsă pe care vreau s-o corectez.
Același model îl aplic și în proiectele pentru clienți: înainte ca un agent să atingă un sistem, se decide ce poate citi, ce poate modifica și unde aprobă un om. Apoi primește un instrument care nu poate face mai mult de atât.
Toate cinci sunt pe npm, sub licență MIT.