Codex MultiAgentV2 암호화 회귀: 감사 가능성에 미치는 영향
Codex CLI의 최근 업데이트(버전 0.137.0 이후)에서 MultiAgentV2 하위 에이전트 프롬프트가 암호화되는 회귀가 발생했으며, 이로 인해 로컬 롤아웃 기록 및 디버그 추적에서 인간이 읽을 수 있는 감사 추적이 사실상 사라졌습니다. 암호화는 모델 전달에 대한 프라이버시 강화 조치로 작동하지만, 사용자는 물론 유지보수자가 하위 에이전트에 할당된 구체적인 작업을 검사할 수 없게 됩니다.
MultiAgentV2에서의 감사 가능성 격차
PR #26210의 변경 사항을 포함한 Codex 버전에서는 MultiAgentV2 시스템이 spawn_agent, send_message, followup_task와 같은 도구에 대한 메시지 페이로드를 암호화합니다. 이 구현은 모델이 직접 보는 message 매개변수를 암호화된 것으로 표시하고, 페이로드를 InterAgentCommunication.encrypted_content에 저장하며 InterAgentCommunication.content 필드는 비워 둡니다.
이 전환은 로컬 개발 환경에서 상당한 가시성 격차를 만들습니다. 롤아웃이나 추적을 사후에 검토할 때 인간이 읽을 수 있는 작업 또는 메시지 텍스트가 암호문으로 대체됩니다. 이는 다음과 같은 중요한 디버깅 질문에 답할 수 없게 합니다:
spawn_agent를 통해 자식 에이전트에 할당된 구체적인 작업은 무엇인가요?- 하위 에이전트에 전송된 정확한 메시지는 무엇인가요?
- 세션 중에 특정 자식 스레드가 생성된 이유는 무엇인가요?
기술적 근본 원인
회귀는 InterAgentCommunication::new_encrypted() 함수에서 content 필드를 의도적으로 빈 문자열로 초기화하는 데서 비롯됩니다. 시스템이 이러한 통신을 수신자 기록을 위한 ResponseItem으로 변환할 때, to_model_input_item() 메서드는 encrypted_content가 존재하면 암호화된 페이로드만 내보냅니다.
특히 현재 v2 메시지 헬퍼 communication_from_tool_message는 평문 동반 없이 암호화된 통신을 구성합니다. 결과적으로 record_inter_agent_communication 함수는 롤아웃 항목에 암호문만 지속하고, 구조화된 통신 로그는 content 필드가 비어 있을 때마다 encrypted_content를 기록하도록 되돌아갑니다.
이중 콘텐츠 지속성을 위한 제안 구현
수신 모델에 대한 암호화된 전달 경로를 손상시키지 않으면서 감사 가능성을 복원하기 위해 이중 콘텐츠 계약을 제안합니다. 이 접근 방식은 수신 모델이 암호문을 받는 동시에 로컬 시스템이 사용자에게 읽을 수 있는 복사본을 유지하도록 보장합니다.
제안된 기술적 변경 사항
- 필수 평문 필드:
spawn_agent,send_message,followup_task도구에 필수이며 암호화되지 않은 평문 동반 필드(예:task_message또는message_text)를 추가합니다. - 검증: 감사 추적이 보존되도록 핸들러 경계에서 빈 평문 감사 값을 거부합니다.
- 이중 구성:
InterAgentCommunication구조체를encrypted_content(모델 전달용)와content(평문 감사 복사용) 두 필드 모두 채워지도록 수정합니다. - 모델 입력 보존:
to_model_input_item()동작을 변경하지 않아 수신 모델이 여전히 암호문만 받도록 유지합니다. - 감사 지속성: 평문 동반 필드를 부모 도구 호출, 롤아웃 및 구조화된 추적 엣지에 지속합니다.
수용 기준
수정이 성공적으로 간주되려면 다음 조건을 충족해야 합니다:
- 모든 v2 에이전트 도구에 대해 부모 롤아웃 및 기록이 읽을 수 있는 텍스트를 표시해야 합니다.
- 하위 모델은 여전히 암호화된 전달 페이로드만 받아야 합니다.
- 통신 로그는 평문 감사 콘텐츠를 사용해야 하며, 인간이 읽을 수 있는 필드에 암호문을 대체해서는 안 됩니다.
- v1 통신에 대한 기존 평문 동작은 변경되지 않아야 합니다.
커뮤니티 관점 및 분석
Hacker News에서 개발자들 간의 토론은 이러한 변경 사항의 "블랙 박스" 특성에 대한 우려를 드러냈습니다. 일부 사용자는 암호화가 경쟁 모델에 대한 요청 프록시를 방지하거나 추론 과정을 은폐하기 위한 것이라고 추측했습니다.
"블랙 박스가 점점 어두워지고 있습니다… 저는 결국 그들이 여러분에게 블랙 박스/장치를 팔고 싶어한다는 생각이 듭니다"
다른 사용자들은 이것이 동형 암호화(암호문에 대한 추론)가 아니라, 에이전트 간에 전달되는 메시지를 서버 측에서 추론을 위해 복호화하기 전에 암호화하는 것이라고 명확히 했습니다.
프로토타입 수정을 제공한 기여자 @ignatremizov는 하위 에이전트 프롬프트가 TUI가 에이전트 간 전환을 허용하도록 클라이언트를 통해 전달되어야 하며, 이는 프롬프트가 시스템에서 완전히 숨겨진 것이 아니라 지속성 계층이 깨졌다는 의미라고 언급했습니다. 그는 또한 MultiAgentV2가 v1에 비해 여전히 불안정하고 "토큰 소모자"라고 지적했습니다.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch