← Notizen

Tools · · 3 Min. Lesezeit

Warum Agenten eigene CLIs brauchen

Der Großteil meiner Arbeit läuft heute über Coding-Agenten. Sie lesen Tickets, fragen Datenbanken ab, prüfen Pull Requests und ändern Infrastruktur. Die Werkzeuge dafür wurden für Menschen gebaut: hcloud, mysql, die Jira-Weboberfläche, die API von Bitbucket. Menschen überfliegen, scrollen und wissen, wann sie aufhören. Agenten lesen jedes Byte, zahlen dafür in Tokens und tun genau das, was der Befehl erlaubt.

Also habe ich angefangen, CLIs für Agenten zu schreiben. Sie folgen AXI, einem offenen Satz von zehn Designprinzipien für agentengerechte Tools, und sind auf npm veröffentlicht:

Tool Für Kann es schreiben?
mongo-axi MongoDB Nein, nur lesend
mysql-axi MySQL Nein, nur lesend
bb-axi Pull-Request-Reviews in Bitbucket Kommentare, Freigaben
atl-axi Jira-Issues, Sprints, Statuswechsel Feldänderungen, Kommentare
hetzner-axi Hetzner-Cloud-Server, Firewalls, Volumes, DNS Destruktive oder kostenpflichtige Änderungen brauchen --confirm

Drei Regeln, die am meisten zählen

1. Nur lesend, solange kein Mensch anders entschieden hat. mongo-axi und mysql-axi können nicht schreiben. Das ist kein Flag, das ein Agent umschalten kann: Die Schreibbefehle liegen in separaten Paketen (mongo-rw-axi, mysql-rw-axi), die nur mit einer Datenbank auf dem lokalen Rechner sprechen. Erlaube ich mongo-axi in den Berechtigungen eines Agenten, steht ihm überhaupt kein Schreibbefehl zur Verfügung. Deshalb lässt es sich gefahrlos automatisch freigeben, und genau darum geht es: Einen Agenten, der vor jeder Abfrage fragen muss, nutzt niemand.

2. Alles, was Geld kostet oder Daten zerstört, zeigt zuerst eine Vorschau. hetzner-axi server delete web-1 gibt aus, was passieren würde, und hält an. Erst --confirm führt es aus, und jede Änderung wartet, bis Hetzners eigene Aktion abgeschlossen ist, bevor sie zurückmeldet. Agenten sind selbstsicher; die Vorschau gibt dem Menschen einen Moment, den falschen Servernamen zu bemerken.

3. Die Ausgabe ist für ein Modell, nicht für ein Terminal. Ergebnisse kommen in TOON zurück, einem kompakten Tabellenformat, mit Anzahlen, einem klaren „nichts gefunden“ bei leerer Liste und ein, zwei Hinweisen auf den nächsten Befehl. Eine Serverliste ist ein paar Zeilen statt einer Seite JSON. Weniger Tokens heißt günstigere Läufe und, wichtiger, weniger Rauschen, das das Modell falsch lesen kann.

Secrets bleiben aus dem Transkript

Agentensitzungen werden protokolliert. Alles, was ein Agent eintippt, kann in einem Transkript landen, deshalb nimmt hetzner-axi nie ein Token als Argument. Es liest es von der Standardeingabe oder aus einer Umgebungsvariable und legt es im Schlüsselbund des Betriebssystems ab. Der Agent nutzt das Token, ohne es sehen zu müssen.

Was sich geändert hat

Als diese Website auf neue Server umzog, legte ein Agent die DNS-Einträge mit hetzner-axi an. Kein Dashboard wurde geöffnet, und das API-Token tauchte nie im Chat auf. Einen Eintrag hinzuzufügen gehört nicht zu den Befehlen, die auf --confirm warten, also erschien der Eintrag ohne Vorschau; diese Lücke will ich schließen.

Dieses Muster bringe ich auch in Kundenprojekte mit: Bevor ein Agent ein System anfasst, wird festgelegt, was er lesen darf, was er ändern darf und wo ein Mensch freigibt. Dann bekommt er ein Werkzeug, das nicht mehr kann als das.

Alle fünf gibt es auf npm, unter MIT-Lizenz.

Die Gespräche führe ich derzeit auf Englisch oder Rumänisch.