--- title: Agents overview description: 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](/docs/plugins/agents/claude-code) | `claude-code` | `claude` | ✅ `--resume` | | [Codex](/docs/plugins/agents/codex) | `codex` | `codex` | ✅ `codex resume ` | | [Cursor](/docs/plugins/agents/cursor) | `cursor` | `agent` | ❌ | | [Aider](/docs/plugins/agents/aider) | `aider` | `aider` | ❌ | | [OpenCode](/docs/plugins/agents/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/gh` and `~/.ao/bin/git` and prepends them to `PATH`. When the agent runs `gh pr create` or `git 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: ```yaml agent: claude-code # global default projects: api: repo: myorg/api agent: codex web: repo: myorg/web agent: cursor ``` You can also override at spawn time: ```bash ao spawn 42 --agent codex ``` Great for A/B testing which agent does better on a specific kind of issue.