github.com via Hacker News

Codex chiffre les messages inter-agents, l'audit local disparaît

TL;DR

  • La PR #26210 « Encrypt multi-agent v2 message payloads » chiffre les charges utiles échangées entre agents Codex depuis les versions postérieures à 0.137.0.
  • Le champ `content` de InterAgentCommunication est désormais vide et seul `encrypted_content` est stocké, ce qui rend muets les rollouts locaux et la relecture parent.
  • Le rapporteur demande un champ compagnon en clair (par exemple `task_message`) pour préserver l'audit local sans revenir sur le chiffrement côté modèle.

Une issue ouverte sur le dépôt openai/codex reproche au projet une régression introduite par la PR #26210, « Encrypt multi-agent v2 message payloads ». Depuis les versions postérieures à 0.137.0, quand MultiAgentV2 est activé, le texte des tâches déléguées aux sous-agents n'est plus lisible dans les rollouts locaux.

Le rapporteur ne conteste pas le principe du chiffrement côté livraison au modèle. Il pointe une conséquence collatérale, formulée noir sur blanc dans l'issue: le chemin de livraison chiffré « removes the human-readable task/message text from local rollout history, trace reduction, and parent-side audit/debug surfaces ». Techniquement, `InterAgentCommunication::new_encrypted()` initialise le champ `content` comme chaîne vide et ne stocke la charge utile que dans `encrypted_content`, ce qui rend muettes trois questions basiques listées dans le ticket: quelle tâche `spawn_agent` a-t-il donné à l'enfant, quel message a été envoyé à un sous-agent, et pourquoi un thread enfant a-t-il existé lors d'une relecture a posteriori.

Ce qui rend le sujet intéressant au-delà de Codex, c'est que dans une stack agentique le prompt délégué est souvent la seule preuve locale qu'une équipe conserve pour comprendre un comportement bizarre, reconstruire un incident, ou satisfaire un audit interne. Passer ce canal en ciphertext par défaut déplace la connaissance du côté du fournisseur du modèle et casse potentiellement les outils tiers d'observabilité construits sur ces rollouts.

Le rapporteur propose une sortie honnête plutôt qu'un retour en arrière: garder le chiffrement pour ce qui part vers le modèle enfant, mais exiger un champ compagnon en clair (par exemple `task_message`), rejeter les valeurs vides, et persister ce plaintext borné dans le rollout parent et les traces structurées. C'est le compromis « dual-write » classique des pipelines de logging sensibles, appliqué au canal inter-agents.

Le caveat honnête, c'est que l'issue est côté demande, pas côté réponse. Elle ne dit pas si les mainteneurs Codex acceptent le principe, quelle clef est utilisée pour le chiffrement, ni si un opt-out local existe déjà. Pour les équipes qui ont bâti conformité, triage ou observabilité par-dessus les rollouts Codex, le point à surveiller est simplement la réponse des mainteneurs à cette proposition de dual-field: c'est elle qui décidera si l'auditabilité locale reste un citoyen de première classe.