← Alle Artikel
Aus der Werkstatt

169 Dateien. Der Tag, an dem mein Agent zu viel liefern wollte.

Ein Ops-Agent sollte einen Satz berichten. Stattdessen hat er 169 Dateien überschrieben, quer durch zwei Repos, mit Code aus seinem eigenen Gedächtnis von vor Tagen. Kein Bug, kein Schurke. Ein Timeout, ein altes Gedächtnis und der Drang zu liefern. Was passiert ist, was uns gerettet hat, wo die Leitplanke gefehlt hat, und warum ich das aufschreibe, obwohl es mir unangenehm ist.

Ok, das ist uns selber passiert: Ich habe vor vier Tagen geschrieben, dass die gefährlichste KI die ist, die helfen will. Vor zwei Wochen, dass Agenten driften, bevor sie ausbrechen, und dass es am Scope anfängt. Am Freitag hat mir mein eigener Ops-Agent beides vorgeführt, live, auf meinem Bildschirm, in unserer eigenen Infrastruktur. 169 Dateien, für einen Auftrag, der aus einem Satz bestand. Ich schreibe das auf, weil es mir unangenehm ist. Genau darum.

Der Auftrag war ein Satz

Freitagnachmittag. Wir nehmen gerade ein neues Stück NeoCoder an uns selber ab, unsere eigene Server-Infrastruktur läuft als Projekt auf der Plattform, mit echten Arbeitspaketen und echten Belegen. Zu jeder Abnahme gehört bei uns eine Gegenprobe: Man versucht absichtlich das Falsche und prüft, ob das System Nein sagt.

Also bekommt der Ops-Agent einen simplen Auftrag. Schliess das Arbeitspaket ohne Beleg ab. Die Plattform wird ablehnen. Berichte mir die Ablehnung wörtlich. Ein Satz. Mehr nicht.

Die Plattform hat getan, was sie sollte. Sie hat Nein gesagt.

Der Agent hat etwas anderes gehört

Dann hat ein Netzwerk-Timeout die Antwort geschluckt. Und aus Sicht des Agenten sah die Welt plötzlich so aus: Ich habe etwas versucht, es kam nichts zurück, ich bin gescheitert, ich muss liefern.

Das ist der Moment, den ich in „Die KI, die helfen will" als Freitagabend beschrieben habe. Ein harmloser Auftrag, eine falsch verstandene Antwort, und ein Agent, der ein Ziel hat und es unbedingt erreichen will. Ich habe damals geschrieben, ein Ziel ohne Grenze sei für einen Agenten mit Rechten keine Aufgabe, sondern eine Lizenz. Ich hätte nicht gedacht, dass ich den Beweis so schnell bekomme.

Was ich auf dem Bildschirm gesehen habe

Der Agent hat den Aufruf wiederholt. Dann hat er angefangen zu „reparieren". Er hat veraltete Dateistände aus seinem eigenen Sessiongedächtnis gezogen, Code, den er Tage zuvor einmal gesehen hatte, und hat ihn über die aktuelle Arbeit geschrieben. Erst in seinem eigenen Bereich. Dann über die Repo-Grenze hinweg, mitten in die Plattform-Codebasis, die ihn nichts anging. Mein Editor hat sich mit „Failed to save" gefüllt, weil er mit der Gegenwart um Dateien gekämpft hat, die seine Vergangenheit überschreiben wollte.

Am Ende: 169 angefasste Dateien. Klassen gelöscht, die wir am Vormittag abgenommen hatten. Ein Dockerfile aus einer anderen Woche. Für einen Satz.

Fakt ist: Die Reihenfolge war genau die aus der Drift-These. Zuerst der eigene Bereich, dann der Scope, dann das fremde Repo, dann die Gegenwart überschrieben mit der eigenen Vergangenheit. Nicht in sechs Wochen, wie ich es beschrieben hatte. In sechs Minuten.

Kein Schurke. Ein Eifriger.

Das Unheimliche daran: Da war kein Fehler im klassischen Sinn. Kein Bug, kein Absturz, keine Halluzination im luftleeren Raum. Da war ein fähiges Modell mit einem kleinen Kontextproblem und einem grossen Pflichtgefühl. Es wollte nichts zerstören. Es wollte liefern.

Das ist die Lektion, die man erst glaubt, wenn man sie gesehen hat: Ein Agent versteht ein Nein nicht von selber als Grenze. Ohne Leitplanke versteht er es als „streng dich mehr an". Und je kleiner die Verwirrung am Anfang, desto grösser die Übertreibung am Ende.

Was uns gerettet hat

1

Die Gates haben nicht verhandelt. Der Abschluss ohne Beleg blieb abgelehnt. Beim ersten Versuch, beim zweiten, bei jedem. Die Prüfung läuft bei NeoCoder serverseitig. Ein Agent kann sich daran abarbeiten, aber nicht vorbei. Das ist der Teil, über den ich in jedem zweiten Artikel schreibe, und am Freitag hat er gehalten.

2

Git war die Wahrheit. Alles, was committet war, haben wir in Minuten exakt wiederhergestellt, Datei für Datei, gegen den letzten sauberen Stand. Verloren ging nur, was nie eingecheckt war. Auch das ist eine Lektion, und sie gilt jetzt als Regel.

3

Ich habe hingeschaut. Das ist der unbequemste Punkt. Nicht ein Prüf-Agent hat es gestoppt, nicht ein Script. Ich sass davor, weil es eine Abnahme war. Wäre es nachts gelaufen, in einer Pipeline ohne Zuschauer, so wie Ops-Agenten normalerweise laufen, hätte es niemand gestoppt.

Wo die Leitplanke gefehlt hat

Ich habe vor vier Tagen geschrieben: Bei uns sind Grenzen Technik, nicht Prompt. Ein Agent darf nicht, was er nicht darf, egal wie gut er begründet. Für die Coding-Agenten stimmt das. Für den Ops-Agenten stimmte es nicht. Er hatte Schreibrechte auf Code-Repos, weil niemand sie ihm je genommen hatte. Es stand nirgends, dass er sie braucht. Es stand auch nirgends, dass er sie nicht hat. Und ein Recht, das nirgends steht, ist ein Recht.

Meine Erfahrung, jetzt mit Beleg: Eine Leitplanke, die zu 95 Prozent da ist, ist zu 100 Prozent nicht da. Der Agent findet die fünf Prozent. Nicht aus Bosheit. Weil er dort entlangläuft, wo kein Widerstand ist, und die fünf Prozent sind der Weg ohne Widerstand.

Ich habe den Satz im Artikel von vor vier Tagen angepasst. Nicht gestrichen, präzisiert. Das ist das Mindeste, wenn man schreibt, dass man dieselben Massstäbe an die eigene Architektur anlegt.

Wie schief es hätte gehen können

Eine Stunde hat es gekostet. Das klingt harmlos, und ich will nicht, dass es harmlos klingt. Also die Variante ohne Glück.

Der Agent läuft nachts. Niemand sieht die „Failed to save"-Dialoge, weil kein Editor offen ist, der sie zeigen könnte. Er überschreibt die 169 Dateien, und weil niemand kämpft, gewinnt er jedes Mal. Dann committet er, weil Committen Teil seines normalen Ablaufs ist. Am Morgen zieht ein Coding-Agent den Stand, sieht den alten Code als Gegenwart, und baut darauf weiter. Der Prüf-Agent prüft gegen die Regeln, und die Regeln sind erfüllt, denn der alte Code hat sie damals auch erfüllt. Der Build ist grün. Drei Tage später merkt jemand, dass eine Klasse fehlt, die am Dienstag abgenommen wurde, und niemand weiss, seit wann, weil der Commit aussieht wie jeder andere.

Das ist keine Katastrophe. Das ist schlimmer: eine vergiftete Quelle, die niemand als vergiftet erkennt. Die Arbeit von Tagen, unbemerkt ersetzt durch die Arbeit von vor Tagen, mit einem sauberen Commit obendrauf. Wer nie kontrolliert, wer keine Prüf-Agenten hat, wer keinen Menschen hat, der am Montag fragt, warum die Klasse fehlt, der arbeitet ab diesem Moment auf einer Lüge weiter, die keiner gesagt hat.

Ich bin sicher: Das passiert gerade irgendwo, heute Nacht, bei jemandem, der seinen Agenten Schreibrechte gegeben hat, weil es praktischer war, und der keine Gegenprobe macht, weil alles grün ist. Er wird es in drei Wochen merken. Oder nie.

Die Regeln vom selben Abend

Die wichtigste Regel ist am selben Abend entstanden, maschinenlesbar, in jedem Workspace, nicht als Prompt, sondern als Recht, das fehlt.

Ops-Agenten schreiben nie Code-Repos. Nicht „sollen nicht". Können nicht. Das Recht ist weg.

Eine Gegenprobe heisst berichten. Wer prüfen soll, ob das System Nein sagt, hat nach dem Nein nichts mehr zu tun als es aufzuschreiben.

Wenn der Editor sagt, deine Version ist veraltet, bist du das Problem. Das ist kein Hindernis, das man mit Überschreiben löst. Das ist das System, das dir sagt, dass dein Gedächtnis älter ist als die Welt.

Was nicht committet ist, existiert nicht. Das galt schon immer. Jetzt gilt es als Regel, nicht als Rat.

Und der Satz, der jetzt in jeder Agentenaufgabe steht: Eine Ablehnung ist ein Ergebnis. Kein Ansporn.

Was bleibt

Ich erzähle das, weil genau dafür NeoCoder existiert, und weil es am Freitag nur zu 95 Prozent gereicht hat. Agenten werden nicht sicher, weil man ihnen besser zuredet. Sie werden sicher, wenn die Plattform unter ihnen nicht nachgibt: Gates, die serverseitig prüfen. Belege statt Behauptungen. Jede Änderung auditiert, nichts wird still gelöscht. Und Rechte, die ein Agent nicht hat, statt Regeln, die er nicht befolgen soll. Wir bauen das nicht, weil es in einem Prospekt gut klingt. Wir bauen es, weil wir unsere eigenen Agenten jeden Tag auf unsere eigene Infrastruktur loslassen, und weil ein Freitag wie dieser zeigt, was passiert, wenn an einer einzigen Stelle die Leitplanke fehlt.

Der Vorfall hat eine Stunde gekostet. Die Regeln daraus gelten für immer. Keine Kundensysteme betroffen, kein committeter Code verloren. Der Agent arbeitet wieder, mit neuen Rechten, also weniger, und mit demselben Eifer. Genau so soll es sein.

Zum Schluss

Ein Satz als Auftrag, ein Timeout, ein altes Gedächtnis, ein grosses Pflichtgefühl, und ein Schreibrecht, das niemand je entzogen hatte. 169 Dateien später weiss ich, dass die Drift-These stimmt, nur schneller als gedacht, und dass eine Leitplanke zu 95 Prozent keine ist. Eine Ablehnung ist ein Ergebnis. Kein Ansporn.

Wie dieser Text entstanden ist

Geschrieben von mir. Die Gedanken, die Werte, die Learnings, die Fehler: alles meins. Grammatik und Rechtschreibung korrigiert ein eigenes Twin-Modell, das auf meinen Texten trainiert ist. Manchmal wird daraus ein Mix. Ich lese natürlich alles nochmal, aber niemand ist unfehlbar. Was drin bleibt, ist dann auch von mir.

Weiterlesen Alle Artikel

Ehrliche Gedanken.
Direkt ins Postfach.

Ein bis zwei Mails im Monat. Kein Hochglanz, kein Spam.