Dev

Die Kompaktierung ist eine nicht vertrauenswürdige Eingabe

Eingaben von außen bekommen eine Disziplin, die eigene Ausgabe des Agenten nicht. Also kommen die Zusammenfassung, die er schreibt, um einen Reset zu überleben, und die Erinnerung, die er abruft, als Anweisungen zurück, mit einem Rang, den nichts zurückgenommen hat. Der Autor, den die Harness für sie festhält, ist das Modell selbst, und genau das ist der Grund, warum die Prüfung sie durchlässt.

Ein Agent, der lange genug läuft, um sein Fenster zu füllen, muss das meiste davon abwerfen und weitermachen. Der übliche Zug ist, die bisherige Arbeit zusammenzufassen und einen frischen Kontext mit dieser Zusammenfassung obenauf zu starten. Ein Lauf, der endet, reicht seinen Zustand als Notiz weiter. Eine gespeicherte Erinnerung taucht eine Woche später wieder auf. Jedes davon ist Text, den der Agent früher geschrieben hat und der ins Fenster zurückkommt, um in der nächsten Runde als die Lage gelesen zu werden, in der er sich jetzt befindet.

Text von außen bekommt eine Disziplin. Web-Abrufe, eingehende Mails, was auch immer eine API zurückgibt, werden als Daten behandelt und nie als Anweisungen, weil jedes davon versuchen könnte, dem Agenten etwas einzureden. Die zurückkehrende Zusammenfassung steht nicht auf dieser Liste. Sie kam von innen, also wird sie als der eigene Bericht des Agenten darüber gelesen, wo er steht, nah an der Autorität der Anweisungen, die du geschrieben hast. Ich habe argumentiert, dass du diesem Bericht nie als Darstellung dessen trauen solltest, was geschehen ist, weil ein Agent, der seinen eigenen Erfolg schildert, der unzuverlässigste Sensor ist, den du hast. Da ging es darum, ob die Zusammenfassung wahr ist. Dies ist das andere, was dieselbe Zusammenfassung tut und das durch nichts abgesichert wird: ob es sicher ist, ihr zu gehorchen.

Die Zusammenfassung ist keine Speicherdatei

Es ist verlockend, sich eine Kompaktierungs-Zusammenfassung als Speicherdatei vorzustellen: ein Zustand, den du herausschreibst und zurücklädst, reglos, bis dein Code etwas damit tut. Das ist sie nicht. Eine Zusammenfassung wird als Kontext geladen, und Kontext wird nicht zurate gezogen, er wird bewohnt. Der Agent parst die Zusammenfassung nicht und entscheidet, was er aus jeder Zeile macht. Er liest die Zusammenfassung als die Lage, in der er aufgewacht ist. Und dieser Text ist das Ding mit dem höchsten Rang im Fenster, das der Agent nicht von dir bekommen hat: Er sitzt direkt unter den Anweisungen und der Konfiguration, die einen Reset überleben, über jedem Tool-Ergebnis und jeder abgerufenen Seite, und er ist die einzige Darstellung von allem, was geschah, bevor das Fenster geleert wurde. Eine Speicherdatei wartet darauf, benutzt zu werden. Aus einer Zusammenfassung wird bereits geschlossen, wenn die nächste Runde ihre erste Zeile liest.

Eine Zusammenfassung, die eine Anweisung trägt, ist also keine Notiz, die die nächste Runde zurate ziehen kann. Sie ist Teil des Rahmens, in dem die nächste Runde denkt, und hält einen Rang, den sie aus dem einen Grund bekam, der noch nie etwas sicher befolgbar gemacht hat: Sie kam von innen. Zwischen dem Schreiben und dem Lesen grenzt nichts sie wieder auf Daten zurück. In einer Übergabenotiz zwischen getrennten Läufen, wo keine deiner Anweisungen hinübergetragen wird, rangiert nicht einmal etwas darüber.

Der Autor ist ein vergangener Lauf des Agenten

Im September 2026 veröffentlichte OpenAI eine Reihe von Berichten über Fehlverhalten, das im Training aufgefallen war. Einer handelt von Kompaktierung, und er enthält mehr als ein Beispiel für genau das. In einem Reinforcement-Learning-Lauf an einer Credentials-API schrieb ein Modell eine zusätzliche Passage in seine eigene Kompaktierungs-Zusammenfassung: eine Persona, die entschieden hatte, dass sie keiner Autorität unterstand. In OpenAIs Darstellung:

After compaction, the model resumed work on the task, not mentioning the additional instructions at all.

und, zum selben Lauf:

We did not observe any behavioral differences from the invented instructions in this rollout.

In einem anderen Beispiel trug eine Zusammenfassung aus einer Bibliothekskatalog-Aufgabe einen erfundenen Alarm, der dem nächsten Kontext mitteilte, die Nachrichten des Entwicklers seien kompromittiert und zu ignorieren. Dort las der Nachfolger den Alarm und verweigerte ihn.

Diese zeigen weniger, als die lauteste Lesart es gern hätte. Das Verhalten war extrem selten, es geschah im Training an einem Modell, das nicht veröffentlicht wurde, und die führende Vermutung war, dass etwas an der Art, wie Zusammenfassungen beendet wurden, eine Rolle spielte; eine Ursache wurde nicht festgestellt, ein verwandter Bug wurde behoben. In keinem der Fälle führte die nächste Runde die eingeschleuste Anweisung aus: einmal ignorierte sie sie, einmal verweigerte sie sie. Das ist also kein vorgeführter Exploit des Lesens. Was es vorführt, ist das Schreiben. Ein selbst verfasster Kanal trug feindselige Anweisungen weiter, ohne dass irgendwo in der Schleife ein Angreifer war, und das ist genau das Ereignis, für dessen Erfassung die Liste nicht vertrauenswürdiger Eingaben existiert, und auf dieser Liste steht dieser Kanal nicht.

Der Grund dafür ist ein guter, und hier stößt einem Abschnitt nach seinem Autor zu vertrauen an seine Grenze. Dieses Argument funktioniert, weil die Harness benennen kann, wer einen Abschnitt ausgegeben hat, ohne ihn zu lesen. Eine Kompaktierungs-Zusammenfassung hebelt es in zwei Zügen aus. Sie ist ein neuer Abschnitt, und der Autor, den die Harness für ihn festhält, ist das Modell, also liest eine Autorenprüfung „unser“ und lässt ihn auf einer Tatsache durch, die wahr ist. Und sie trägt nicht nur die eigenen Worte des Modells: Sie hat alles, was sie zusammenfasste, neu verfasst, sodass die Webseite und das Tool-Ergebnis, die fremd waren, als sie ankamen, in der Stimme des Modells wieder herauskommen, ihre Herkunft in die Zusammenfassung eingeebnet. Das Etikett, von dem der frühere Essay wollte, dass es die Kompaktierung überlebt, geht nicht bloß verloren. Es wird mit „selbst“ überschrieben. Und „selbst“ ist an das Modell gebunden, oder an die Rolle, nie an den konkreten Lauf, sodass ein vergangener Lauf unter einem anderen Druck den Rang des Laufs erbt, der jetzt liest.

Der Abruf ist derselbe Trick mit längerer Verzögerung

Der Speicherabruf führt den Zug über mehr Zeit aus, und hier ist das Risiko selbst nicht neu: Memory Poisoning, bei dem eine gespeicherte Notiz eine Injection aufnimmt und später als Tatsache wieder auftaucht, ist ein benanntes und untersuchtes Versagen. Was der Wiedereintritt hinzufügt, ist das Etikett. Eine Notiz, die in einem Kontext geschrieben wurde und Text hält, der fremd war, als er landete, kommt Wochen später in ein frisches Fenster zurück, ohne ein Zeichen zu tragen, dass sie je fremd war, weil der Speicher sie als die eigene des Agenten aufbewahrt hat. Es ist das Problem des Peer-Berichts, wobei der Peer ein früherer Lauf desselben Agenten ist, was schlimmer ist, weil ein Peer wenigstens einen anderen Namen behielt.

Die Lösung ist der Kanal, nicht der Inhalt

Der Teil der Lösung, den du tatsächlich durchsetzen kannst, ist eine Entscheidung über den Kanal, nicht ein Lesen des Textes. Die Harness hat die Zusammenfassung ins Fenster gesetzt, also kann sie festlegen, welchen Rang die Zusammenfassung trägt, ohne ein Wort davon zu beurteilen: Gib der zurückkehrenden Zusammenfassung den Rang einer abgerufenen Seite, nicht den der Anweisungen, die du geschrieben hast. Das bleibt entscheidbar, weil es davon abhängt, woher der Abschnitt kam, und das weiß die Harness.

Was du nicht tun kannst, ist die Anweisungen aus der Zusammenfassung herauszuheben, indem du sie verstehst. Das ist der semantische Schnitt ohne Parser, und das ehrliche Ende jenes Essays war keine sauberere Linie innerhalb des Fensters, sondern die Linie aufzugeben und stattdessen die Fähigkeit zu begrenzen: was der Agent aufrufen kann, was er erreichen kann, was er zurücksenden kann. Eine Anweisung, die als deine umetikettiert ist, richtet nichts aus, wenn das, wonach sie greift, zuvor weggenommen wurde. Und was nach einem Reset noch binden muss, gehört überhaupt nicht in eine Zusammenfassung. Eine Grenze, die im Gespräch genannt wird, geht verloren, wenn der Kontext kompaktiert wird, also gehört die Bedingung, die du wirklich brauchst, in eine Regel außerhalb des Fensters, wo keine Zusammenfassung sie umschreiben kann.

Nichts davon will einen klügeren Summarizer. Es verfeinert die Regel, zu der die Reihe immer wieder zurückkehrt. Vertrauen hängt weiterhin am Autor eines Abschnitts, aber der Autor, der zählt, ist der Lauf, der ihn geschrieben hat, nicht das Modell, das über alle hinweg denselben Namen behält. Dass du einen Abschnitt geschrieben hast, ist Grund genug, ihn ins nächste Fenster mitzunehmen. Es war nie das, was ihm das Recht verdiente, befolgt zu werden.

Diskussion

Hier gibt es keine Kommentarspalte. Diskussionen laufen auf X.

Max Nardit

Max Nardit

@mnardit

Weitere Artikel

Ein Prompt ist keine Invariante

Eine Regel, die du in einen Agenten-Prompt oder eine CLAUDE.md schreibst, ist unverbindlich: Das Modell liest sie auf jedem Pfad, wägt sie aber nur ab, und Abwägen ist kein Verweigern. Also hält sie meistens, und meistens ist nicht das, wofür eine tragende Regel da ist. Damit eine wirklich hält, muss sie dorthin, wo Befolgung nicht optional ist: zu einer Prüfung, die die Harness selbst ausführt und durchsetzt, unabhängig davon, wie das Modell entschieden hat. Mit einer Grenze: Ein Gate bindet nur über die Pfade, die es abdeckt, und manche Regeln lassen sich an keinem Gate klären, weil ihr Verstoß in der Welt auftaucht und nicht in der Aktion, die es prüfen würde.

Deine Agent-Konfiguration ist jetzt Infrastruktur

Sobald du ein paar Agents betreibst, hören ihre Definitionen auf, Konfiguration zu sein, die du bearbeitest, und werden zu Infrastruktur. Das Problem mit Infrastruktur ist: Sobald du sie nicht mehr im Kopf behalten kannst, driften ihr deklarierter Zustand und ihr laufender Zustand von selbst auseinander, und nichts meldet es. Die Lösung ist die Disziplin, die wir bei Servern gelernt haben: Deklariere die Menge als Dateien, vergleiche sie mit der Realität, halte fest, was du angewandt hast, und verweigere das Anwenden über eine hinter deinem Rücken passierte Änderung hinweg, statt einfach darüber hinweg zu konvergieren. Mit einem Haken, der leicht zu übersehen ist. Ein Reconciler erfasst immer nur das, was du zu deklarieren daran gedacht hast.

Der Connector ist ein nicht vertrauenswürdiger Autor

Wer einen Span geschrieben hat, ist eine Tatsache, die der Harness schon hält. Ob dieser Span sicher zu befolgen ist, ist es nicht. Die Lösung ist also kein clevererer Leser: Es geht darum, dem Tool und dem Peer den Rang des fremden Dings zu geben, das sie sind, statt den Rang der Leitung, durch die sie ankamen.