Codex가 서브에이전트 프롬프트 암호화를 시작함
Codex가 서브에이전트 프롬프트 암호화를 시작함 | GeekNews
Codex CLI의 MultiAgentV2가 spawn_agent, send_message, followup_task 메시지를 암호화하면서, 부모 롤아웃·이력·추적에서 위임 내용을 사람이 읽을 수 없게 되는 감사 추적 회귀 가 발생함
2026년 6월 5일 병합된 PR #26210 이후 InterAgentCommunication.content는 비워지고 페이로드가 encrypted_content에만 저장되며, 수신자 이력과 통신 로그도 암호문 을 기록함
문제는 구독·모델·플랫폼과 무관하고 MultiAgentV2가 활성화된 0.137.0 이후 빌드에 해당하며, 암호화 도구 스키마의 요청 검증 실패를 다루는 #26753과는 별개임
제안된 수정은 수신 모델용 암호화 message와 로컬 감사용 필수 평문 필드를 함께 보관하되, 전달 식별에는 암호문이나 ID를 사용하고 평문 감사 데이터 에는 동일한 크기 제한을 적용하는 방식임
spawn_agent용 프로토타입은 별도 스냅샷 커밋에 구현됐지만 send_message와 followup_task, 이력·재생·디버그 화면까지 같은 계약을 적용하는 작업은 남아 있으며, 이슈는 아직 Open 상태 임
발생 범위와 회귀 조건
암호화 변경 PR #26210 은 2026년 6월 5일 병합됐으며, 이를 포함하고 MultiAgentV2를 활성화한 0.137.0 이후 빌드 가 대상임
영향받는 도구는 spawn_agent, send_message, followup_task이며 구독, 모델, 운영체제, 터미널 환경과는 무관함
로컬 환경 상태가 아니라 병합된 코드 동작에서 확인되는 회귀이므로 Codex doctor 보고서는 해당하지 않음
재현 절차는 다음과 같음
1. PR #26210을 포함한 빌드에서 MultiAgentV2를 활성화함
2. 모델이 spawn_agent, send_message, followup_task 중 하나를 호출하게 함
3. 부모 롤아웃·이력·추적에서 서브에이전트 작업을 확인함
4. 작업이나 메시지 본문 대신 암호문 만 확인됨
사라진 로컬 감사 정보
암호화된 전달 자체는 프라이버시 강화로 이해할 수 있지만, 현재 구현은 로컬 롤아웃 이력, 추적 축약, 부모 측 감사·디버그 화면에서도 사람이 읽을 수 있는 내용을 제거함
그 결과 사후 롤아웃 검토에서 다음 질문에 답하기 어려움
spawn_agent가 자식 에이전트에 어떤 작업을 부여했는지
서브에이전트에 어떤 메시지를 보냈는지
특정 자식 스레드가 왜 생성됐는지
이슈 #26753 은 암호화 도구 스키마가 요청 검증 과정에서 400 오류를 반환하는 문제이며, 이번 이슈는 스키마가 승인된 뒤의 감사 가능성과 디버깅 가능성 을 다룸
목표는 암호화 전달을 반드시 되돌리는 것이 아니라, 암호화를 유지하면서 로컬에서 위임 내용을 읽을 수 있게 하는 것임
현재 코드의 데이터 흐름
이력과 로그에 암호문이 남는 이유
수신 측 기록 경로 는 to_model_input_item()이 만든 모델용 ResponseItem을 대화 이력과 롤아웃에 저장함
암호화 통신에서는 이 항목에 읽을 수 있는 감사 문구가 아니라 암호화 전달 페이로드 가 포함됨
롤아웃에는 InterAgentCommunicationMetadata와 해당 ResponseItem이 함께 영속화됨
구조화 통신 로그 도 content가 비어 있으면 encrypted_content를 이벤트의 content로 대체함
이 구조에서는 사람이 읽는 메시지로 표시되는 필드에도 암호문이 들어가므로, 단순히 전달 암호화를 유지하는 것과 로컬 감사 데이터를 보존하는 요구가 분리되지 않음
제안된 이중 콘텐츠 계약
기존 암호화 message는 수신 모델 전달용 페이로드 로 유지함
각 MultiAgentV2 통신 도구에 필수 평문 감사 필드를 추가함
spawn_agent: task_message
send_message, followup_task: task_message 또는 message_text처럼 일관된 이름
핸들러 경계에서 빈 평문 감사 값을 거부함
InterAgentCommunication에는 두 값을 함께 저장함
encrypted_content: 암호화된 message
content: 사람이 읽을 수 있는 감사 사본
to_model_input_item()은 변경하지 않아 수신 모델에는 로컬 감사 사본이 아닌 암호문만 전달 함
부모 도구 호출과 롤아웃에는 평문 필드를 영속화하고, 구조화 추적의 상호작용 간선과 로컬 통신 로그에도 이를 유지함
도구 호출과 자식 전달 항목의 상관관계는 평문 일치가 아니라 암호문 또는 ID 로 판별함
평문 필드는 감사 메타데이터이며 암호화 전달의 식별자를 대체하지 않음
새 평문 감사 필드에는 대응하는 위임 메시지와 동일한 강제 크기 제한을 적용해 롤아웃이나 컨텍스트 항목이 무제한으로 커지지 않게 함
spawn_agent 프로토타입과 남은 작업
완료 조건과 현재 상태
부모 롤아웃과 이력에서 v2 spawn_agent, send_message, followup_task의 평문을 읽을 수 있어야 함
암호화가 활성화된 경우에도 자식 모델은 암호화된 전달 페이로드만 받아야 함
구조화된 롤아웃 추적 간선에는 크기가 제한된 평문 message_content가 들어가야 함
통신 로그는 평문 감사 콘텐츠가 있으면 이를 사용하고, 읽을 수 있는 메시지 필드에 암호문을 대신 넣지 않아야 함
재개·재생은 감사 사본을 보존하되 이를 자식 모델 컨텍스트에 주입하지 않아야 함
기존 평문 v1 통신 동작은 바뀌지 않아야 함
세 가지 v2 도구 모두에 대해 읽을 수 있는 로컬 감사 데이터 와 암호화된 수신 모델 입력 을 함께 검증하는 회귀 테스트가 필요함
제공된 페이지에서는 이슈가 Open 상태이며, 상위 저장소에 수정이 병합됐다는 결과는 없음
원문 보기
https://news.hada.io/topic?id=31449