Agents overview
Pick the agent that writes the code. AO supports five today, and they're swappable per-project.
The agent is the piece that actually writes code. Everything else in AO — worktrees, runtimes, notifiers — is plumbing around it.
PR metadata is captured automatically. Non-Claude-Code agents (Codex, Cursor, Aider, OpenCode) use ~/.ao/bin/gh and ~/.ao/bin/git PATH wrappers that intercept commands like gh pr create and record the resulting PR number and branch so the dashboard stays in sync. Claude Code uses PostToolUse hooks in .claude/settings.json instead — the same metadata is written through Claude Code's native hook system. Both approaches are set up transparently by AO; you don't need to configure anything.
Supported agents
| Agent | Slot name | Binary | Session resume |
|---|---|---|---|
| Claude Code | claude-code | claude | ✅ --resume |
| Codex | codex | codex | ✅ codex resume <threadId> |
| Cursor | cursor | agent | ❌ |
| Aider | aider | aider | ❌ |
| OpenCode | opencode | opencode | ✅ via OpenCode session API |
Choosing
- Want session resume (pick up where you left off)? Claude Code, Codex, or OpenCode.
- One-shot per session is fine? Any of the five.
- Pair-programming style editor? Aider.
- Native IDE-like behavior in the terminal? Cursor.
How AO talks to them
Two patterns exist:
- Agent-native hooks — Claude Code ships a PostToolUse hook in
.claude/settings.json. AO's workspace bootstrap installs it; the agent writes activity events directly to AO's JSONL. - PATH wrappers — Codex, Cursor, Aider, and OpenCode don't have a hook system. AO installs small shell wrappers in
~/.ao/bin/ghand~/.ao/bin/gitand prepends them toPATH. When the agent runsgh pr createorgit commit, the wrapper records metadata (PR number, branch, etc.) so the dashboard knows what the agent did.
Neither approach requires you to change your agent's config — AO sets it up transparently.
Mixing agents
Per-project overrides:
agent: claude-code # global default
projects:
api:
repo: myorg/api
agent: codex
web:
repo: myorg/web
agent: cursorYou can also override at spawn time:
ao spawn 42 --agent codexGreat for A/B testing which agent does better on a specific kind of issue.