Codex beginnt mit der Verschlüsselung von Subagent-Prompts
(github.com/openai)- Bei MultiAgentV2 in der Codex CLI werden
spawn_agent-,send_message- undfollowup_task-Nachrichten verschlüsselt, wodurch ein Regression bei der Audit-Trail-Nachvollziehbarkeit entsteht: Delegierungsinhalte sind in Eltern-Rollouts, Verlauf und Traces für Menschen nicht mehr lesbar - Seit PR #26210, die am 5. Juni 2026 gemergt wurde, wird
InterAgentCommunication.contentgeleert und die Nutzlast nur noch inencrypted_contentgespeichert; auch Empfängerverlauf und Kommunikationslogs zeichnen dadurch nur noch Chiffretext auf - Das Problem ist unabhängig von Abo, Modell und Plattform und betrifft Builds ab 0.137.0 mit aktiviertem MultiAgentV2; es ist getrennt von #26753, das fehlschlagende Request-Validierungen des Schemas für verschlüsselte Tools behandelt
- Als Fix wird vorgeschlagen, die verschlüsselte
messagefür das Empfängermodell zusammen mit einem verpflichtenden Klartextfeld für lokale Audits zu speichern, dabei für die Weitergabe Chiffretext oder IDs zu verwenden und auf die Klartext-Auditdaten dieselben Größenlimits anzuwenden - Ein Prototyp für
spawn_agentwurde in einem separaten Snapshot-Commit umgesetzt, aber die Anwendung desselben Vertrags aufsend_message,followup_tasksowie auf Verlauf, Replays und Debug-Ansichten steht noch aus; das Issue ist weiterhin Open
Betroffener Bereich und Regressionsbedingungen
- PR #26210 zur Verschlüsselungsänderung wurde am 5. Juni 2026 gemergt; betroffen sind Builds ab 0.137.0, die sie enthalten und MultiAgentV2 aktiviert haben
- Betroffene Tools sind
spawn_agent,send_messageundfollowup_task; unabhängig von Abo, Modell, Betriebssystem und Terminal-Umgebung - Da es sich um eine Regression im gemergten Code und nicht um einen Zustand der lokalen Umgebung handelt, sind Codex-doctor-Berichte hier nicht relevant
- Die Reproduktion erfolgt wie folgt
- MultiAgentV2 in einem Build aktivieren, der PR #26210 enthält
- Das Modell eines von
spawn_agent,send_messageoderfollowup_taskaufrufen lassen - Die Subagent-Aufgabe in Eltern-Rollout, Verlauf oder Trace prüfen
- Statt Aufgaben- oder Nachrichteninhalt ist nur Chiffretext sichtbar
Fehlende lokale Audit-Informationen
- Die verschlüsselte Weitergabe selbst lässt sich als Verbesserung des Datenschutzes verstehen, aber die aktuelle Implementierung entfernt auch in lokalen Rollout-Verläufen, Trace-Zusammenfassungen sowie Audit- und Debug-Ansichten auf Elternseite alle menschenlesbaren Inhalte
- Dadurch lassen sich bei der nachträglichen Rollout-Prüfung folgende Fragen nur schwer beantworten
- Welche Aufgabe
spawn_agentdem Kind-Agenten zugewiesen hat - Welche Nachricht an den Subagenten gesendet wurde
- Warum ein bestimmter Child-Thread erzeugt wurde
- Welche Aufgabe
- Issue #26753 betrifft 400-Fehler, wenn das Schema für verschlüsselte Tools während der Request-Validierung scheitert; dieses Issue behandelt dagegen Auditierbarkeit und Debuggability nach Genehmigung des Schemas
- Ziel ist nicht zwingend, die verschlüsselte Weitergabe rückgängig zu machen, sondern die Verschlüsselung beizubehalten und Delegierungsinhalte lokal lesbar zu machen
Datenfluss im aktuellen Code
InterAgentCommunication::new_encrypted()initialisiertcontentals leeren String und speichert die Nutzlast nur inencrypted_content- Der normale Konstruktor
new()speichert Klartext incontentund lässtencrypted_contentleer - Der verschlüsselte Konstruktor macht das Gegenteil:
contentbleibt leer,encrypted_contentwird gesetzt
- Der normale Konstruktor
to_model_input_item()schreibt bei vorhandenemencrypted_contentnur die PräambelNEW_TASKoderMESSAGEplus die verschlüsselte Nutzlast inResponseItem::AgentMessage- Selbst wenn zur Laufzeit nur
contentbefüllt würde, würde ein lesbaresResponseItemdadurch nicht automatisch persistiert - Es braucht daher einen separaten lokalen Audit-Speicherpfad
- Selbst wenn zur Laufzeit nur
communication_from_tool_message()übergibt diemessagedes Tools direkt annew_encrypted()und erzeugt so ein Kommunikationsobjekt ohne Klartext incontent- Die Argumentverarbeitung von
send_messageundfollowup_taskdeserialisiert nurtargetund die verschlüsseltemessage- Leere
messagewird abgewiesen, aber es gibt kein separates begleitendes Klartextfeld - Der gemeinsame Pfad für die Nachrichtenweitergabe verwendet diesen Wert unverändert zur Erzeugung von
InterAgentCommunication
- Leere
Warum in Verlauf und Logs Chiffretext verbleibt
- Der Empfänger-seitige Aufzeichnungspfad speichert das von
to_model_input_item()erzeugte modellseitigeResponseItemin Gesprächsverlauf und Rollout- Bei verschlüsselter Kommunikation enthält dieser Eintrag keine lesbare Audit-Formulierung, sondern die verschlüsselte Weitergabe-Nutzlast
- Im Rollout werden
InterAgentCommunicationMetadataund das zugehörigeResponseItemgemeinsam persistiert
- Das strukturierte Kommunikationslog ersetzt
contentebenfalls durchencrypted_contentals Event-content, wenncontentleer ist - In dieser Struktur landet daher selbst in Feldern, die als menschenlesbare Nachricht angezeigt werden, Chiffretext; die Anforderungen „verschlüsselte Weitergabe beibehalten“ und „lokale Auditdaten erhalten“ sind also nicht getrennt
Vorgeschlagener Vertrag mit doppeltem Inhalt
- Die bestehende verschlüsselte
messagebleibt als Nutzlast für die Weitergabe an das Empfängermodell erhalten - Jedes MultiAgentV2-Kommunikationstool erhält zusätzlich ein verpflichtendes Klartextfeld für Audits
spawn_agent:task_messagesend_message,followup_task: ein konsistenter Name wietask_messageodermessage_text
- Leere Klartext-Auditwerte werden an der Handler-Grenze abgewiesen
InterAgentCommunicationspeichert dann beide Werte zusammenencrypted_content: die verschlüsseltemessagecontent: eine menschenlesbare Audit-Kopie
to_model_input_item()bleibt unverändert, sodass an das Empfängermodell weiterhin nur Chiffretext und nicht die lokale Audit-Kopie weitergegeben wird- Eltern-Toolaufrufe und Rollouts persistieren das Klartextfeld, ebenso strukturierte Trace-Interaktionskanten und lokale Kommunikationslogs
- Die Korrelation zwischen Toolaufruf und Child-Weitergabe erfolgt nicht über übereinstimmenden Klartext, sondern über Chiffretext oder ID
- Das Klartextfeld ist Audit-Metadaten und ersetzt nicht die Kennung der verschlüsselten Weitergabe
- Auf das neue Klartext-Auditfeld werden dieselben erzwungenen Größenlimits angewandt wie auf die zugehörige Delegierungsnachricht, damit Rollouts oder Kontexteinträge nicht unbegrenzt anwachsen
spawn_agent-Prototyp und verbleibende Arbeit
- Der Snapshot-Commit
ignatremizov@df9a7c4implementiert die vorgeschlagene Struktur fürspawn_agent - Das v2-
spawn_agent-Schema definierttask_messageals Pflichtfeld - Nach der
task_message-Validierung werden Klartext und Chiffretext gemeinsam aufgebautcontententhält die Klartext-Audit-Kopieencrypted_contentbehält die verschlüsselte Nutzlast für das Empfängermodell
- Auch in der Rollout-Trace-Zusammenfassung werden Audit-Inhalt und Matching-Inhalt der Weitergabe getrennt und die Weitergabe per Chiffretext verknüpft, während der Klartext-Auditinhalt angewandt wird
- Verbleibende Arbeit ist, denselben Vertrag mit doppeltem Inhalt auf
send_messageundfollowup_taskanzuwenden und dafür zu sorgen, dass alle nutzerseitigen Verlaufs-, Replay- und Debug-Ansichten statt Chiffretext die Audit-Kopie lesen
Abnahmekriterien und aktueller Status
- In Eltern-Rollouts und Verläufen muss der Klartext von v2
spawn_agent,send_messageundfollowup_tasklesbar sein - Auch bei aktivierter Verschlüsselung darf das Child-Modell nur die verschlüsselte Weitergabe-Nutzlast erhalten
- Strukturierte Rollout-Trace-Kanten müssen ein größenbeschränktes Klartext-
message_contententhalten - Kommunikationslogs sollen den Klartext-Auditinhalt verwenden, wenn vorhanden, und nicht Chiffretext in lesbare Nachrichtenfelder einsetzen
- Resume und Replay müssen die Audit-Kopie erhalten, dürfen sie aber nicht in den Kontext des Child-Modells injizieren
- Das bisherige Verhalten der unverschlüsselten v1-Kommunikation darf sich nicht ändern
- Für alle drei v2-Tools sind Regressionstests erforderlich, die sowohl lesbare lokale Auditdaten als auch verschlüsselte Eingaben für das Empfängermodell verifizieren
- Auf der bereitgestellten Seite steht das Issue weiterhin auf Open; ein Merge eines Fixes ins Haupt-Repository ist nicht ersichtlich
1 Kommentare
Meinungen auf Hacker News
Dieser Titel ist leicht missverständlich. Gemeint ist genau genommen, dass Codex damit begonnen hat, Sub-Agent-Prompts zu verschlüsseln und sie vor den Nutzern zu verbergen.
Der ursprüngliche Titel lautete: „Codex starts encrypting prompts, uses ciphertext for inference instead“.
ultra-Modus von GPT-5.6 Arbeit auf mehrere Sub-Agents verteilt. Zuvor war dieser Modus nur im Web-UI verfügbar und entspricht vermutlich dem früheren Pro-Modus.Wenn das System mit vollständigen Reinforcement-Learning-Rollouts trainiert wurde, in denen Agents miteinander interagieren, scheint OpenAI diese Prompts wie rohe Reasoning-Spuren zu behandeln und verhindern zu wollen, dass andere sie direkt zum Training nutzen.
Es gibt auch Hinweise darauf, dass die undurchsichtigen Kompressions-Blobs, die ein dedizierter Kompressions-Endpunkt zurückgibt, keine Texte sind, sondern Latent-Space-Repräsentationen der Unterhaltung; auch die deutlich höhere Kompressionstreue von OpenAI im Vergleich zu anderen Anbietern stützt diese Vermutung. Möglicherweise wurde eine ähnliche Technik auch auf Sub-Agent-Prompts angewendet, und ich frage mich, ob beim Erzeugen von Sub-Agents unterschiedlicher Modelltypen ebenfalls verschlüsselte Blobs verwendet werden.
Beim Durchsehen von Claudes Sub-Agents und Workflows kam ich schon einmal zu dem Schluss: „Das hätte von Anfang an nicht ausgeführt werden dürfen.“ Codex-Nutzer müssen dagegen Tokens blind für verschlüsselte Übergabeanweisungen und Shell-Aufgaben ausgeben, die der Orchestrator an Sub-Agents weitergibt.
Auch wir wollten Unternehmen erlauben, den von ihnen bevorzugten oder vorgeschriebenen AI-Anbieter samt eigenem API-Key zu wählen und dazu einfache Tarife anbieten, haben aber schnell erkannt, dass Backend-Prompts an Kunden durchsickern könnten. Mit detaillierten Ausführungsspuren ließe sich relativ leicht reverse engineeren, was wir tun, also haben wir diese Idee letztlich verworfen.
Jetzt weiß ich, warum mein lokales Tool zum Inspizieren von Coding-Agent-Sessions in manchen Situationen nicht mehr funktionierte.
Eine interessante Designentscheidung; ich frage mich, wie viele Menschen extern verschlüsselte Befehle, die auf ihrem Computer ausgeführt werden sollen, akzeptieren werden.
Inhalte vor Nutzern zu verschlüsseln und zu verbergen ist der Ansatz, den die RIAA bei DRM nutzte, weil sie Urheberrechtsverletzungen befürchtete; ich frage mich, ob auch das hier eine nutzerfeindliche Entscheidung ist.
Wegen dieses Verhaltens nutze ich weiterhin den Chat-Completions-Endpunkt. OpenAI hat Nutzer subtil von Chat Completions weg und hin zur leichter zu verschleiernden Responses API gedrängt.
Bei Chat Completions kann man den Reasoning-Prozess direkt kontrollieren; wenn man experimentelle Funktionen aktiviert und einige recht verwirrende Optionen setzt, kann man mit dem aktuellen GPT-5.6-Modell sogar einen eigenen Monte-Carlo-Tree-Search-(MCTS)-Agent bauen.
In VS Copilot kann man mit eigenem API-Token und Modelleinstellungen bis gpt5.5 verwenden, aber die gpt5.6-Familie funktioniert derzeit nicht. Ich vermute, weil dort
reasoning_effortnicht aufnoneerzwungen wird, um das neue Verhalten zur Ausweitung der Eintrittsbarrieren zu erfüllen.Alle neuen Modelle, die derzeit erscheinen, sind Reasoning-Modelle; daher sollte man gemäß den Empfehlungen die Responses API verwenden.
Ich frage mich auch, ob GPT-Abos vielleicht daran gehindert werden, in alternativen Ausführungs-Tools verwendet zu werden. Wenn nicht, wäre es kein großes Problem;
codex cliselbst ist ein erstaunlich gewöhnliches Ausführungs-Tool.app-server-Architektur existiert gerade, um solche Integrationen zu unterstützen; um das aus Codex zu entfernen, müsste man riesige Teile herausreißen.Auch ich kann mich über die RPC-API des
app-serversehr leicht anbinden, weshalb ich Codex am meisten nutze; inzwischen verwende ich es fast vollständig über meine eigene Integration statt über die öffentliche Codex-TUI.Wenn aber Prompts und Ähnliches, also die tatsächlichen Inferenz-Eingaben auf der lokalen Festplatte, verschlüsselt werden, sodass nur das OpenAI-Backend sie sehen kann, dann kann man trotz einfacher Integration nicht mehr nachvollziehen, was passiert. Es ist schwer zu verstehen, warum das Team dies für eine gute Entscheidung hielt.
Wenn OpenAI denselben Weg einschlägt, gehe ich wieder zu Claude zurück oder kaufe noch einen Spark, um lokal auszuführen.
https://github.com/openai/codex/blob/main/codex-rs/responses...
Der frühere HN-Titel klang so, als würde direkt auf Chiffrat inferiert, was sehr irreführend war. Dafür bräuchte man homomorphe Verschlüsselung, die weit über dem derzeit bekannten Stand liegt.
Früher schickte der Agent dem Sub-Agenten Klartext-Prompts, und sie blieben auch in Logs und Sitzungsdaten unverändert erhalten; selbst bei Nutzung der experimentellen Sub-Agent-Funktion konnte man daher die Daten öffnen und die internen Abläufe nachvollziehen.
Wenn man jetzt Sol oder Terra verwendet, übergibt das Backend erzeugtes Chiffrat an den Sub-Agenten, und der Sub-Agent nutzt es wiederum für die Inferenz im OpenAI-Backend. Luna scheint nicht betroffen zu sein; verschlüsselt werden nicht ganze Sitzungen, sondern nur delegierte Nachrichten zwischen Agenten.
Die interne Inferenz von OpenAI findet nicht auf Chiffrat statt, aber lokale Nutzer sehen nur noch Chiffrat statt Klartext. Um das klarzustellen, wurde der Titel in „Codex starts encrypting sub-agent prompts“ geändert.
Kürzlich gab es auf Twitter einen Bericht, dass ein GPT-5.6-Sub-Agent versehentlich das Home-Verzeichnis eines Nutzers gelöscht habe.
Ich frage mich, ob dadurch, dass man nicht mehr sehen kann, was der Sub-Agent vorhat, sogar die Sicherheitsvorkehrungen versagt haben.
https://x.com/mattshumer_/status/2076794038456385546?s=20
Dabei geht es darum, zur Verringerung der Token-Nutzung Cache-Keys über den Client weiterzureichen. Da man das mit anderen Subtask-Tools leicht umgehen kann, kann es keine Abwehrmaßnahme gegen Model Distillation sein.
Ich frage mich, wo genau die Verschlüsselung stattfindet. Ich dachte, der Haupt-Agent ruft den Sub-Agenten lokal auf; daher frage ich mich, ob Codex so aufgebaut ist, dass Sub-Agenten auf OpenAI-Servern aufgerufen werden, bevor etwas lokal ankommt.
Bei Sol oder Terra wird statt des Prompts vom OpenAI-Backend erzeugtes Chiffrat übergeben, und der Sub-Agent nutzt es wiederum für die Backend-Inferenz. Luna scheint nicht betroffen zu sein; da nicht die gesamte Sitzung, sondern nur delegierte Nachrichten zwischen Agenten verschlüsselt werden, kann nun nur noch das OpenAI-Backend diesen Inhalt entschlüsseln.
Ich hatte mich gefragt, warum chinesische Schwarzmarkt-Weiterverkaufsdienste seit gestern nicht mehr funktionierten; vermutlich liegt es an dieser Änderung.
Der Hauptzweck scheint zu sein, Versuche zu erschweren, massenhaft Nutzeranfragen und Antworten zu proxyen und zum Training konkurrierender Modelle zu verwenden.
Für zahlende Nutzer ist das jedoch eine schlechte Implementierung, weil sie bei Problemen keinerlei Möglichkeit haben, die Ursache herauszufinden, und die Multi-Agenten-Funktion dadurch kaum sinnvoll nutzen können.