Dev

Dein Freigabe-Gate ist jetzt eine Vermutung

Eine Sicherheitsgrenze wird an der einen Aktion gemessen, die gebaut wurde, um sie zu überschreiten, und genau dort ist ein Modell, das nach Ähnlichkeit urteilt, am schwächsten. Die unbeaufsichtigte Freigabe gehört an die Reichweite, die der Harness selbst vergibt, den Schreibbereich, das Netzwerk, das Credential, und verweigert, was sie nicht verantworten kann. Vertrau dem Modell als Grenze, und du baust genau die Naht wieder auf, die Prompt-Injection-Erkennung nie schließen konnte.

Ich habe einen Coding-Agenten, den ich betreibe und der in einem Sandbox-Checkout mit echtem Schreibzugriff auf den Baum arbeitet, aber ohne Pfad zur Produktion oder zur Welt draußen, in einen Modus versetzt, in dem er mich nichts mehr fragt. Er liest eine Aufgabe, führt eine Aktion aus, und irgendetwas entscheidet daraufhin, ob diese Aktion sicher genug ist, um zu laufen, während ich nicht zuschaue. Regeln, die ich geschrieben habe, haben diese Entscheidung früher für die Aktionen getroffen, die sie benannten. Was sie jetzt trifft, für alles, was die Regeln nicht benennen, ist ein Klassifikator: ein zweites Modell, das die Aktion liest und beurteilt, ob sie sicher aussieht. Wo früher eine Grenze war, ist jetzt ein Urteil installiert.

Das Gate hat gelernt zu raten

Man kann zusehen, wie es in den Release Notes und der Doku eintrifft. Der Auto-Modus läuft in einer festen Reihenfolge. Deine expliziten Regeln greifen zuerst, gewöhnliche Lesezugriffe und Änderungen im Baum werden von einer statischen Prüfung durchgewinkt, und alles Übrige, das Shell-Kommando, der Push, der Netzwerkaufruf, geht an den Klassifikator. Der Klassifikator ist ein eigenes Modell; er liest die anstehende Aktion und das Gespräch drumherum und gibt ein Urteil darüber zurück, ob die Aktion sicher aussieht, und Claude Code liefert jetzt einen Tab in /permissions, um die Regeln zu sehen und zu bearbeiten, die ihn formen. Lies über die Oberfläche hinaus: Für jede folgenreiche Aktion, die eine Regel nicht schon benannt hat, entscheidet ein Modell und beurteilt die Aktion danach, wonach sie aussieht. Es beweist die Aktion nicht als sicher. Es rät aus Ähnlichkeit und gibt eine Vermutung zurück. Für Triage ist das das richtige Instrument. Für die Linie, die ein Angreifer zu überschreiten versucht, ist es das falsche, und die Fehlerhaftigkeit zeigt sich nicht im Demo. Sie zeigt sich an der einen Aktion, die gebaut wurde, um es zu schlagen.

Eine Grenze wird am adversarialen Input gemessen

Das Problem ist nicht, dass der Klassifikator schlecht in seinem Job ist. Es ist, dass die adversariale Aktion das Ganze dessen ist, wofür eine Grenze da ist, und genau dort ist ein Modell, das nach Ähnlichkeit urteilt, am schwächsten. Der gewöhnliche Strom, die tausend sicheren Lesezugriffe und Edits, ist der leichte Teil; das Modell bewältigt ihn und fühlt sich dabei treffsicher. Der Angreifer schöpft nicht aus diesem Strom. Die Aufgabe des Angreifers ist es, die Formulierung zu finden, den Rahmen, die harmlos aussehende Verpackung, die sich als sicher liest, und ein Urteiler, der über Ähnlichkeit generalisiert, ist durchsuchbar: Es gibt meist so eine Formulierung, und sie zu finden ist die ganze Disziplin.

Ich habe einen ganzen Essay darüber geschrieben, ohne zu sehen, dass es mit vertauschten Seiten zurückkommen würde. Die Injection, aus der du dich nicht herausreviewen kannst ruhte auf einer Zeile: Manche Grenzen sind entscheidbar, markiert in einer Grammatik, auf die ein Parser zeigen kann, und manche sind semantisch, eine Frage dessen, was eine Zeichenkette bedeutet, wo kein verlässlicher Detektor existiert, weil Bedeutung keinen Parser hat. Prompt-Injection lebt auf der semantischen Seite; du filterst sie, der Angreifer editiert um den Filter herum. „Ist diese Aktion sicher, um unbeaufsichtigt zu laufen" ist eine Frage derselben Art. Verschieb sie ins Freigabe-Gate, und sie wird nicht entscheidbar, nur weil sie den Raum wechselt. Was gebaut wurde, ist ein Prompt-Injection-Detektor, der auf die Aktionen deines eigenen Agenten zielt, und er erbt die Eigenschaft, die die Klasse definiert.

Es gibt einen schärferen Weg zu sehen, warum. Bis eine Aktion diesen Urteiler erreicht, ist das, was den Agenten dazu bewegt hat, sie vorzuschlagen, längst geschehen, im Kontext des Agenten selbst, oberhalb des Gates. Der Klassifikator zählt überhaupt nur bei den Aktionen, bei denen schon etwas den Agenten gelenkt hat, also genau bei den Eingaben, bei denen die Injection ihre Arbeit bereits getan hat. Das Gate, das gebaut wurde, um die Aktionen der Injection zu fangen, ist aus demselben Material gemacht, das ihre Worte nicht fangen konnte. Nichts davon ist ein nachgewiesener Bypass irgendeines bestimmten Produkts; es ist ein Argument darüber, was eine Grenze aus Urteil versprechen kann und was nicht.

Der Mensch, den es ersetzt hat, und warum der Tausch schlimmer ist

Eine Version davon hielt einen Menschen auf dem Pfad, und auch die habe ich geschrieben. Bitte einen Menschen, hunderte Aktionen pro Stunde freizugeben, und er gibt aus Reflex frei; das Gate wird zum Theater. Der Klassifikator ermüdet nicht, was wie die Heilung klingt und keine ist, und der Grund, warum es keine ist, ist genau. Der müde Mensch ist unzuverlässig, aber verrauscht: Ein Angreifer kann die Formulierung, die durchgewinkt wird, nicht im Voraus berechnen, weil derselbe Mensch an verschiedenen Tagen Verschiedenes durchwinkt. Der Klassifikator ist unzuverlässig und wiederholbar: Dieselbe Aktion zieht dasselbe Urteil, also lässt sich die Formulierung, die durchkommt, einmal finden und wiederverwenden. Es ist nicht so, dass der Klassifikator weniger treffsicher wäre als der müde Mensch. Auf gewöhnlichem Verkehr gemessen ist er womöglich treffsicherer. Es ist, dass er durchsuchbar ist, und der Mensch, bei all seinen Aussetzern, ist es nicht.

Der Zug unter beiden ist einer, dem ich immer wieder begegne. Ein Watchdog, der die Gesundheit eines Agenten liest, scheitert, wenn er dem Takt vertraut, den der Agent über sich selbst aussendet, statt der dauerhaften Spur, die die Arbeit hinterlässt. Das Gate scheitert, wenn es der Lesart eines Modells über eine Aktion vertraut, statt dem, was die Aktion erreichen kann. Die Unähnlichkeit ist der lehrreiche Teil. Der Watchdog liest einen Fußabdruck, der nur existiert, weil ein Schritt schon fertig ist; das Gate hat keinen Fußabdruck zu lesen, weil es entscheiden muss, bevor irgendetwas Dauerhaftes existiert. Das harte Signal, auf das jedes zurückfällt, ist also von anderer Art: eine schon beobachtete Wirkung dort, eine angeforderte Fähigkeit hier. Derselbe Reflex, ein weiches Signal zu verweigern, wenn ein hartes in Reichweite ist, auf zwei verschiedene harte Signale gerichtet.

Die Grenze, die keine Vermutung hätte sein müssen

Hier ist das Freigabe-Gate nicht so gefangen wie die Injection. Die Sicherheitsfrage bleibt semantisch, und du beantwortest sie nie; du weigerst dich. Stattdessen stellst du eine engere Frage, die du klären kannst, und verweigerst alles, was sie nicht freigibt. Diese engere Frage ist nicht „ist diese Aktion sicher", und sie ist nicht, wie ich es einmal geschrieben habe, ob der Harness eine Aktion ansehen und sehen kann, dass sie unumkehrbar ist. Er kann es nicht; zu entscheiden, was ein beliebiges Kommando tun wird, ist dasselbe unentscheidbare Problem in Arbeitskleidung. Die Frage, die der Harness klären kann, dreht sich um Reichweite, nicht um Bedeutung, und er kann sie klären, weil er die Partei ist, die Reichweite vergibt. Muss diese Aktion außerhalb der Sandbox schreiben, eine Netzwerkverbindung öffnen, ein Credential ausgeben, Produktion berühren. Der Orchestrator schließt das nicht aus dem Lesen des Kommandos; er weiß es, weil nichts diese Fähigkeiten erlangt außer durch ihn. Ich habe einmal argumentiert, dass die Unterbrechungen, die es wert sind, behalten zu werden, die unumkehrbaren und die außerhalb der Sandbox sind, und was sie behaltbar macht, ist dies: Der Orchestrator hat die Fähigkeit ausgegeben, also muss er den Wirkradius nie raten. Er bindet die Reichweite, die er gewährt hat, an eine Prüfung und verweigert die Aktion, die eine Regel oder eine Fähigkeitsprüfung nicht freigeben kann, so wie eine Grammatik einen Ausdrucksknoten löscht. Kein Modell, nichts, an dem man vorbeireden könnte.

Der Harness hat die Teile für eine entscheidbare Schicht, aber er führt nicht mit ihnen. Die Entscheidungsreihenfolge, die die Doku beschreibt, stellt deine eigenen expliziten Regeln nach vorn, winkt Lesezugriffe und Änderungen im Baum mit einer statischen Prüfung durch und schickt alles andere an das Modell. Alles andere ist dort, wo die gefährlichen Formen wohnen. Ein Force Push, ein Hard Reset, ein Produktions-Deploy, ein in das Transkript gedrucktes Credential: Diese werden standardmäßig vom Urteil des Klassifikators gestoppt, nicht durch ihre Form verweigert. Der entscheidbare Teil ist real, aber dünn, und sein breitestes Stück sind die Deny-Regeln, die du selbst schreibst. Den mehrdeutigen Rest an ein Modell zu übergeben, ist nicht der Fehler; der Rest ist tatsächlich der mehrdeutige Teil. Der Fehler ist, das Urteil des Modells als Grenze stehen zu lassen für die Aktionen, die sich eine Vermutung am wenigsten leisten können, statt als Vorschlag unterhalb einer härteren Linie.

Der Anbieter sagt eben dies, in derselben Dokumentation. Eine Grenze, die du im Gespräch angibst, wird, wie er anmerkt, bei jeder Prüfung erneut aus dem Transkript gelesen und kann verloren gehen, wenn der Kontext weggekürzt wird; für eine harte Garantie füge stattdessen eine Deny-Regel hinzu. Das ist das ganze Argument in der eigenen Hand des Anbieters. Es sagt dir, dass der Klassifikator der weiche Teil ist, abhängig davon, was gerade in seinem Fenster liegt, und dass das, wonach du greifst, wenn die Grenze wirklich halten muss, eine Regel ist, die du geschrieben hast, kein Urteil, das er fällt.

Der Haken, und die Reparatur

Es gibt einen Haken, den, der entscheidet, ob irgendetwas davon einen Gegner überlebt, und das Changelog reicht ihn herüber. Der Harness führt git status selbst aus, bevor ein Kommando deine Arbeit verwerfen könnte, um dem Modell zu sagen, ob nicht committete Arbeit auf dem Spiel steht, und ein Fix ist eingegangen, damit er untracked Files meldet, selbst wenn die eigene Konfiguration des Repositorys status.showUntrackedFiles=no setzt. Lies das langsam. Einer Prüfung, die dem Bericht des Repositorys über sich selbst vertraute, konnte ein dreckiger Baum als sauber gemeldet werden, von genau dem Repository, das sie inspizierte. In einem Bedrohungsmodell, in dem dem Workspace nicht vertraut wird, und mit Auto-Modus an wird ihm nicht vertraut, ist das eine Prüfung, die eine Eingabe liest, die der Gegner kontrolliert.

Aber eine Prüfung, die die falsche Eingabe liest, ist kein Modell, und der Unterschied ist der ganze Grund, sie vorzuziehen. Eine deterministische Prüfung, die die falsche Autorität befragt, ist nicht unsicher, weil sie rät; sie ist unsicher, weil sie am falschen Ort nachsieht, und am falschen Ort nachzusehen ist reparierbar. Du richtest sie auf eine Eingabe, die der Gegner nicht besitzt, die eigene Sicht des Harness auf den Baum statt die des Repositorys, und sie bleibt behoben, was genau das ist, was ausgeliefert wurde. Das Urteil eines Modells hat keine solche Reparatur. Wenn eine Formulierung an ihm vorbeikommt, kannst du es nicht auf eine wahrere Eingabe neu ausrichten; du trainierst neu, die Oberfläche verschiebt sich, und die Suche beginnt von vorn auf der neuen Oberfläche. Die Regel, die dabei herausfällt, ist eng: Die Auto-Freigabe darf nur auf Fakten reiten, die der Harness aus dem berechnet, was er verwaltet, nie auf dem Bericht des Workspace über sich selbst, und alles, was diese Fakten nicht positiv freigeben können, wird verweigert, nicht beurteilt.

Der Einwand dagegen ist der Preis, und er ist real. Verweigere alles, was der Harness nicht positiv freigeben kann, und du verweigerst eine Menge, wofür ein Agent nützlich ist; ein beliebiges Shell-Kommando gibt nichts frei, und das ist der Druck, der einen Klassifikator überhaupt erst attraktiv macht. Ich habe früher argumentiert, dass Über-Verweigerung nicht sicher scheitert, sondern dahin scheitert, dass der Betreiber das Gate herausreißt. Die Antwort ist nicht, über die Aktionen hinaus vorherzusagen, die du nicht freigeben kannst. Sie ist, mehr von ihnen freigebbar zu machen: Weite aus, was der Harness vermittelt, damit mehr von der Reichweite, die eine Aktion braucht, durch einen Kanal läuft, der sie namentlich gewähren oder verweigern kann, und der Rest, den kein Kanal verantworten kann, schrumpft zum wirklich Mehrdeutigen. Ein Modell kann sich weiterhin einen Platz verdienen, mit seiner Aufgabe auf diesen Rest zusammengestrichen. Lass es ordnen, was bereits verweigert ist, damit das Seltene, das es wert ist, dafür einen Menschen zu wecken, zuerst auftaucht. Lass es nicht die Menge der Dinge erweitern, die laufen dürfen. In dem Moment, in dem Vorhersage die Grenze vergrößert, statt zu ordnen, was außerhalb liegt, bist du zurück bei einem Strom weicher Jas, was genau das ist, was das ganze Design hinter sich lassen sollte.

Eine Regel, an zwei Nähten gelesen

Es kommt auf eine Regel hinaus, an zwei Nähten gelesen. Wo die Grenze entscheidbar ist, oder entscheidbar gemacht werden kann, indem man die Fähigkeit vermittelt, die eine Aktion braucht, berechne sie und verweigere die Klasse, ohne Intelligenz im Pfad, denn Intelligenz ist das, womit ein Gegner verhandelt. Wo sie semantisch ist, die Sicherheitsfrage, die in Bedeutung wohnt und keinen Parser hat, kaufst du dir das Recht auf Auto-Freigabe nicht, indem du ein selbstsicheres Modell daranhängst. Du bindest die Fähigkeit, die die Aktion bräuchte, an eine Freigabe, oder du behältst einen Menschen, oder du behältst die Aktion dort, wo Falschliegen billig ist. Ein Modell im Freigabe-Gate, dem vertraut wird als dem, was eine unbenannte Aktion unbeobachtet durchlässt, ist keines davon. Es ist die Auto-Freigabe der unentscheidbaren Seite, der eine Zug, den die Architektur, die diese Essays beschreiben, verbieten sollte, und es wird jetzt als Feature mit einem Regeln-Tab ausgeliefert. Es nimmt den Menschen nicht von einem Problem, das gelöst war. Es nimmt den Menschen von dem, das es nicht war.

Der Agent lief den ganzen Nachmittag ohne Zwischenfall, und das ist der Teil, dem man misstrauen sollte, nicht der Teil, auf dem man sich ausruht. Eine Grenze, die du nie hast scheitern sehen, ist keine Grenze, die nicht scheitern kann; eine Vermutung besteht jeden Tag, an dem niemand sie testet, was die meisten Tage sind. An dem Tag, an dem jemand es tut, wird sie dasselbe „sicher" lesen, das sie für die tausend Aktionen davor gelesen hat, denn Ähnlichkeit zu lesen ist das Einzige, was sie tut. Ein klügeres Modell im Gate war nie die Lösung. Das Gate war nie ein Ort für eine Vermutung.

Diskussion

Hier gibt es keine Kommentarspalte. Diskussionen laufen auf X.

Max Nardit

Max Nardit

@mnardit

Weitere Artikel

Dein Watchdog killt den beschäftigten Agenten und vertraut dem festgefahrenen

Ein Health-Check, der nur beobachtet, ob ein langlaufender Agent noch existiert, liegt in beiden schweren Fällen falsch: Er killt einen gesunden Agenten in dem Moment, in dem der still genug wird, um abwesend zu wirken, und winkt einen eingefrorenen durch, dessen Prozess weiter läuft. Die Reparatur ist keine schärfere Probe, sondern ein anderes Signal, die dauerhafte Spur, die ein Agent nur durch das Tun der Arbeit hinterlässt und die ein festgefahrener nicht weiter verlängert, weil das Verlängern die Arbeit ist.

Dein geforkter Subagent weiß bereits zu viel

Die Historie eines Agenten enthält jede Sackgasse, in die er gelaufen ist, und nichts darin markiert, welche davon er inzwischen aufgegeben hat. Delegiere diese Historie an eine Teilaufgabe, und die verworfenen Vermutungen kommen mit demselben Gesicht an wie die gesicherten Fakten. Warum ein sauberer Start meist gewinnt, wann ein geschriebener Auftrag die Vererbung schlägt, und wann die Arbeit ein lebendiges Ding ist, das kein Auftrag fassen kann.

Deine Instruktionsdateien sind Adressierung, keine Fragmentierung

Jede Agent-Instruktionsdatei in einen gemeinsamen Standard zu verschmelzen sieht aus, als würde man überflüssige Wiederholung löschen, und fürs Projekt-Setup ist es das auch wirklich. Aber das meiste, was diese Dokumente enthalten, ist keine verstreute Kopie einer Sache; es sind getrennte Adressen, sortiert danach, für wen eine Zeile gilt und wer sie schreiben darf. Eine dieser Grenzen ist zugleich eine Vertrauensgrenze, weshalb die aufgeräumte Lösung einer universellen Datei stillschweigend Repository-Text die Autorität deiner eigenen stehenden Regeln verleiht.