Problem
flows logs <run> --step <agent-step> renders Claude transcripts, but not Codex transcripts. For a Codex step it prints only frame placeholders:
LOG f92bf832-… step agent-17 199,195 bytes complete
── attempt 1 · 199,121 bytes ──
frame thread.started (76 chars, not rendered here — see --raw)
frame item.completed (43,944 chars, not rendered here — see --raw)
…
frame turn.completed (166 chars, not rendered here — see --raw)
In the software-factory preset the reviewer steps run on Codex, so the most important verdict in the run cannot be read without --raw plus hand parsing. The verdict here was "One P2 remains … review.clean was not created".
Proposal
Teach packages/sdk/src/cloud-transcript.ts (parseAgentTranscript / renderAgentTranscript) the Codex JSONL vocabulary:
thread.started, turn.started and turn.completed (with usage)
item.started / item.completed for these item types: agent_message, reasoning, command_execution (command, exit code, bounded output), file_change (paths), mcp_tool_call, and error
Render it in the same shape as Claude transcripts: numbered tool calls with bounded arguments and result sizes, and agent messages printed in full (redacted). The final agent message is the step's answer.
The flows status --cloud step summary already counts Codex tool calls (tools: command_execution ×13), so the parser partly knows the shape. Only logs rendering is missing.
Acceptance
- A fixture Codex transcript renders its commands, file changes and final agent message.
- Unknown frame types still fall back to the placeholder line.
- Redaction applies to every rendered string.
- Mutation-prove the renderer.
Problem
flows logs <run> --step <agent-step>renders Claude transcripts, but not Codex transcripts. For a Codex step it prints only frame placeholders:In the software-factory preset the reviewer steps run on Codex, so the most important verdict in the run cannot be read without
--rawplus hand parsing. The verdict here was "One P2 remains …review.cleanwas not created".Proposal
Teach
packages/sdk/src/cloud-transcript.ts(parseAgentTranscript/renderAgentTranscript) the Codex JSONL vocabulary:thread.started,turn.startedandturn.completed(with usage)item.started/item.completedfor these item types:agent_message,reasoning,command_execution(command, exit code, bounded output),file_change(paths),mcp_tool_call, anderrorRender it in the same shape as Claude transcripts: numbered tool calls with bounded arguments and result sizes, and agent messages printed in full (redacted). The final agent message is the step's answer.
The
flows status --cloudstep summary already counts Codex tool calls (tools: command_execution ×13), so the parser partly knows the shape. Onlylogsrendering is missing.Acceptance