Skip to content

a2a_fleet codex receiver: rc=1 "no parseable output" against codex-cli 0.136.0 — exec arg contract drift (template targets 0.135.0) #97

Description

@Interstellar-code

Summary

The managed codex A2A receiver fails every turn against the installed codex-cli 0.136.0. The peer deploys, wires into fleet.yaml, appears in the dashboard/Matrix3D, and receives messages — but the actual codex exec invocation returns rc=1 with no parseable output, so the peer never replies. Observed in the dashboard thread:

[error] codex exited rc=1 with no parseable output: Reading additional input from stdin...

Discovered during end-to-end QA of the mode-aware dashboard (switchui Matrix3D NousResearch#183). Visualization/routing are correct — this is purely the receiver's CLI invocation.

Environment

  • a2a_fleet plugin v0.8.6 (installed ~/.hermes/hermes-agent)
  • codex-cli 0.136.0 (codex --version)
  • Receiver template documents the contract for codex-cli 0.135.0 (templates/codex_receiver.py lines 27-35, 303-322)

Root cause (likely): exec arg-contract drift 0.135 → 0.136

templates/codex_receiver.py builds the turn argv with the prompt as a positional arg:

# first turn  (line ~321)
cmd = ["codex", "exec", full_prompt, "-s", sandbox]
# resume turn (line ~318)
cmd = ["codex", "exec", "resume", thread_id, full_prompt]

…and runs it via _subprocess_runner (Popen, line ~595). The template even pre-documents the stderr line as benign for 0.135.0:

# line ~601
# stderr note: codex writes "Reading additional input from stdin..." to stderr

On 0.136.0 that stderr line is no longer benign — it accompanies rc=1 + empty/unparseable stdout, which the receiver surfaces as the error above. This strongly suggests codex exec in 0.136 either:

  • no longer accepts the prompt as a bare positional (now expects it on stdin or behind a flag), so the process blocks/errors waiting on stdin, or
  • changed the --json event stream so the "last item.completed / agent_message" parse (lines ~44) yields nothing.

Repro

  1. Deploy the codex receiver into a repo (deploy_codex_receiver, repo /Users/rohits/.hermes/hermes-agent).
  2. fleet_send any message to the codex peer (e.g. "Reply with only the word PONG").
  3. Dashboard thread shows [error] codex exited rc=1 with no parseable output: Reading additional input from stdin...; no reply is produced.

Suggested investigation / fix

  1. Diff codex exec --help between 0.135.0 and 0.136.0 — confirm whether the prompt positional was removed / stdin became required.
  2. If stdin is now the input channel: pass full_prompt via Popen.communicate(input=...) instead of argv, and ensure _subprocess_runner wires stdin=PIPE (currently the stdin note implies stdin isn't fed).
  3. If only the --json event schema changed: update the final-reply parser (template lines ~36-47) to the 0.136 event shape.
  4. Re-pin/verify the documented "Subprocess CLI contract" version in the template + add a codex --version compat check in _probe_codex_cli() (currently only checks presence, codex_deploy.py:337) that warns on an untested major/minor.
  5. Add a smoke test under tests/plugins/a2a_fleet/ that runs one real codex exec turn and asserts a parseable reply, gated on codex-cli availability.

Impact

Codex managed mode is non-functional for replies on the current CLI — it appears in the fleet but every turn errors. cc receivers are unaffected (different CLI). Medium severity (feature-degraded, no data loss, clear error surface).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions