Skip to the content.

Feature matrix

Verified against local CLIs (approximate versions at packaging time): agy 1.x, grok 0.2.x, kimi 0.29.x, qwen 0.20.x, claude 2.1.x, codex 0.145.x. Re-check with <cli> --help — flags drift.

Unified wrapper flags

Flag Meaning
-m Model id
-t Wall / print timeout
-C Working directory (absolutized by wrappers)
-f Prompt file (preferred for long bundles)
-o Output format (where supported)
-r Read-only / plan / sandbox
-T Native multi-agent / ultracode preamble
--no-git Prepend no git-write guard
-- Passthrough remaining args to the underlying CLI

Missing flag values print error: <flag> requires a value (exit 2) instead of unbound variable.

Per-CLI capabilities

Capability agy grok claude codex kimi qwen
Headless print / exec -p + PTY -p / --prompt-file -p codex exec -p -p
Skip permissions --dangerously-skip-permissions bypassPermissions --dangerously-skip-permissions (cleared by -r/-P) sandbox + approvals flags auto on -p auto / --sandbox
Read-only mode --mode plan + sandbox --permission-mode plan --permission-mode plan -s read-only soft prompt guard --sandbox + guard
Worktree isolation (manual) --worktree --worktree (manual / review helpers) (manual) qwen review worktrees
Custom agents --agent, .agents/agents/ --agent, --agents JSON --agents JSON, claude agents ~/.codex/agents/*.toml --agent, --agent-file .qwen/agents/, /agents
Product “team” mode /teamwork-preview (Ultra) subagents (spawn_subagent) ultracode / workflows subagents + spawn_agents_on_csv sub-agent profiles Agent tool + review pipeline
Structured output plain text only (no json flag in older builds) plain/json/streaming-json, --json-schema text/json/stream-json, --json-schema --json, -o last message stream-json (wrapper cleans) -o json (wrapper extracts)
Cross-CLI fan-out via multi-cli-spawn same same same same same

Native multi-agent detail

agy

claude

codex

grok

kimi

qwen

Cross-CLI: multi-cli-spawn

See skills/multi-cli-spawn/SKILL.md.

Flag / artifact Meaning
--outdir / -O Required output directory
--seat name[:mods][@label] One parallel provider seat
-f / prompt args Shared brief
-t / -C / -r Timeout, cwd, all-seats readonly
--no-wait Return after spawn; poll .status yourself
<key>.status RUNNINGDONE rc=0 | BLOCKED rc=N
spawn.status Parent RUNNINGDONE (or SPAWNED if --no-wait)
CLI_AGENT_RESULT PASS / BLOCKED per seat after wait mode

Waiting: prefer foreground wait. Do not treat missing *.md mid-run as failure — answers are written when each seat finishes.