Agent Configuration — Supported CLIs and agents.yaml¶
This page explains how to configure "worker agents" in agents.yaml that are dispatched from ithyno's Kanban board, categorized by CLI.
Target CLIs (detected by server/doctor.ts):
Manager-eligible (spawns the Manager PTY):
- claude — Anthropic Claude Code (verified)
- agy — Antigravity CLI (verified)
- opencode — opencode CLI (unverified — allowed but not fully exercised)
Worker-only (spawn via agents.yaml, cannot serve as Manager):
- copilot — GitHub Copilot CLI
- codex — OpenAI Codex CLI
- gemini — Google Gemini CLI
- cursor — Cursor CLI
- antigravity — Antigravity (long-form binary name)
Only claude, copilot, agy, and codex have worked-out agents.yaml templates in this page today. The rest are detected by the doctor endpoint and can be wired up manually with the same command / args / prompts schema.
Quick Start¶
- Open
agents.yamlat the root of the repository (if it does not exist, create it from the "Agents" tab). - Verify that the CLI you want to use is resolvable with
which <cli>. - Copy and paste the corresponding block from the "CLI-Specific Templates" section below.
- Save the file to instantly apply changes in the "Agents" tab (no reload required).
Comparison Table¶
| CLI | Non-interactive Execution | Permission Auto-Approve | Works Out of the Box? |
|---|---|---|---|
| claude | -p, --print <prompt> |
--dangerously-skip-permissions |
✅ |
| copilot | -p, --prompt <text> |
--yolo (--allow-all alias) |
✅ |
| agy | -p / --prompt |
--dangerously-skip-permissions |
✅ |
| codex | codex exec [PROMPT] (subcommand + positional arg) |
--dangerously-bypass-approvals-and-sandbox |
⚠️ Workaround required (see below) |
Session persistence is not wired up for worker agents. ithyno does not currently substitute a per-change UUID into worker CLI flags — the
${session_id}template variable was removed (seerevert-session-id-cli-wiring, archived 2026-07-15). Only the Manager PTY (Claude only) persists a session id, stored at.ithyno/session-claude. Do not add--session-id,--conversation, or similar flags to a workerargs:list unless you supply the id yourself.
Basic Structure of agents.yaml¶
- name: <Any identifier name> # Displayed in the UI
mode: single-prompt # Runs one prompt headlessly
roles: [code] # Roles this agent accepts
command: <CLI executable filename>
args:
- <CLI-specific flags>
prompts:
code: <Prompt passed when role=code>
When the agent declares prompts.<role>, the runner appends -p <resolved-prompt> to args — unless args already contains -p, in which case nothing is added. Agents with no prompts: block are spawned with args exactly as written; the built-in /opsx:apply / /ithy-opsx:review / /ithy-opsx:verify defaults do not auto-append. If the CLI does not accept -p at all, refer to the "codex (Workaround Required)" section.
Template variables substituted inside args and prompts values (see server/agents/registry.ts resolve()): ${change_id}, ${worktree_path}, ${branch}. No other variables are recognized.
CLI-Specific Templates¶
claude (code role)¶
- name: claude
mode: single-prompt
roles: [code]
command: claude
args:
- --dangerously-skip-permissions
- --model
- sonnet
prompts:
code: /opsx:apply ${change_id}
- Excluding
--model sonnetwill fall back to the default model of Claude Code. - To persist a session across dispatches, hard-code your own
--session-id <uuid>— ithyno does not populate this for workers.
copilot (review role)¶
- name: copilot-review
mode: single-prompt
roles: [review]
command: copilot
args:
- --yolo # Skips permission confirmation
- -s # silent: outputs only the agent's response
prompts:
review: /ithy-opsx:review ${change_id}
The prompt /ithy-opsx:review (not /opsx:review) is what the ithyno review flow expects — it writes the review.md artifact that the phase API reads back. /opsx:review still runs but bypasses that integration.
agy (code role)¶
- name: agy-worker
mode: single-prompt
roles: [code]
command: agy
args:
- --dangerously-skip-permissions
prompts:
code: /opsx:apply ${change_id}
If you want to pin a model, add the flag agy's own docs specify — this repo has no live check for agy's model flag surface, so verify against your installed agy version.
codex (Workaround Required)¶
Unlike other CLIs, codex does not support the -p flag. Instead, it accepts prompts via subcommand + positional argument like codex exec [PROMPT]. Since the ithyno runner auto-appends prompts in the format -p <prompt> when prompts.<role> is set, codex will reject that format as an unknown flag out of the box.
Workaround: embed the prompt directly in args and omit prompts:. Because auto-append fires only when prompts.<role> is declared, leaving it undefined skips injection entirely.
- name: codex-worker
mode: single-prompt
roles: [code]
command: codex
args:
- exec
- --dangerously-bypass-approvals-and-sandbox
- /opsx:apply ${change_id} # ← Embed the prompt as a positional argument
# Do NOT set prompts.code — if undefined, auto-append is bypassed
${change_id} is substituted inside the args template.
codex + session resume is unsupported: The flow using
codex exec resume <SESSION_ID>requires session-tracking that ithyno does not currently provide for workers.
Multi-Role Configuration¶
You can either assign multiple roles to a single agent, or split CLI configurations per role.
Pattern 1: One CLI handles all roles¶
- name: claude-all
mode: single-prompt
roles: [code, review, verify]
command: claude
args:
- --dangerously-skip-permissions
prompts:
code: /opsx:apply ${change_id}
review: /ithy-opsx:review ${change_id}
verify: /ithy-opsx:verify ${change_id}
Dispatched sequentially from the Kanban board (code -> review -> verify). Each dispatch is a fresh Claude Code invocation — conversation history is not shared across roles by default. If you need continuity, hard-code a --session-id <your-uuid> under args.
Pattern 2: Different CLIs per role¶
- name: claude
mode: single-prompt
roles: [code]
command: claude
args: [--dangerously-skip-permissions]
prompts: { code: /opsx:apply ${change_id} }
- name: copilot-review
mode: single-prompt
roles: [review]
command: copilot
args: [--yolo, -s]
prompts: { review: /ithy-opsx:review ${change_id} }
The dispatcher automatically selects the agent according to the active role.
Constraints and Notes¶
- No concurrent dispatches on the same change: Only one job per change may run at a time; the runner returns HTTP 409 on the second dispatch. For example, starting
reviewwhilecodeis running fails untilcodecompletes. - Dispatch fails if the CLI is not in your PATH: You can verify installation via the Prerequisites section in the Init dialog, or under Settings › Prerequisites.
Related Pages¶
- Set up multiple agents and dispatch a change — Manager and Worker roles and the standard setup flow.
- OpenSpec and agents — Code, Review, and Verify execution and state transitions.