You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make non-Claude agent CLIs first-class citizens of the live experience: a per-agent format: field selecting a stream adapter, instead of the current implicit Claude-only detection.
Motivation
The execution contract is already provider-agnostic — any CLI that reads the prompt on stdin and writes markdown to stdout works, and an agent can override command/args (so codex exec - or gemini -p run today). But everything rich comes from internal/agent/stream.go, which only parses claude -p --output-format stream-json (detected by isStreamJSON(args)). With any other provider the live log is raw stdout with no per-subagent panes, and token usage and quota never show up.
Proposed Solution
New optional field on the agent block and on each AgentDef: format: claude-stream | codex-json | plain (default: today's behavior — claude-stream when the args ask for stream-json, plain otherwise).
Turn the current streamParser into an interface producing the existing internal events (log line with agent attribution, usage delta, limits); stream.go becomes the Claude adapter.
Add a codex-json adapter for codex exec --json (JSONL) as the second implementation proving the interface; a Gemini CLI adapter can follow the same shape.
Description
Make non-Claude agent CLIs first-class citizens of the live experience: a per-agent
format:field selecting a stream adapter, instead of the current implicit Claude-only detection.Motivation
The execution contract is already provider-agnostic — any CLI that reads the prompt on stdin and writes markdown to stdout works, and an agent can override
command/args(socodex exec -orgemini -prun today). But everything rich comes frominternal/agent/stream.go, which only parsesclaude -p --output-format stream-json(detected byisStreamJSON(args)). With any other provider the live log is raw stdout with no per-subagent panes, and token usage and quota never show up.Proposed Solution
agentblock and on eachAgentDef:format: claude-stream | codex-json | plain(default: today's behavior —claude-streamwhen the args ask forstream-json,plainotherwise).streamParserinto an interface producing the existing internal events (log line with agent attribution, usage delta, limits);stream.gobecomes the Claude adapter.codex-jsonadapter forcodex exec --json(JSONL) as the second implementation proving the interface; a Gemini CLI adapter can follow the same shape.Acceptance Criteria
format:is accepted per agent and inherited from theagentblockcodex-jsonagent shows a readable live log and token usageREADMEdocuments a working recipe per supported providerRelated: #3 (dollar cost reporting — the price table should be keyed by provider/model from day one), #12, #13.