# Supported agents

> What Rexa shows for each agent, and the files it writes into each agent's config.

Rexa supports five agent CLIs through bundled adapters. Install the CLIs yourself; Rexa does not ship them.

| Agent        | Command          |
| ------------ | ---------------- |
| Claude Code  | `claude`         |
| Codex        | `codex`          |
| Cursor Agent | `cursor-agent`   |
| OpenCode     | `opencode`       |
| Pi           | `pi`             |

## What each agent supports

|                              | Claude Code | Codex | Cursor Agent | OpenCode | Pi  |
| ---------------------------- | :---------: | :---: | :----------: | :------: | :-: |
| Live card                    | ✓           | ✓     | ✓            | ✓        | ✓   |
| "Your turn" status           | ✓           | ✓     | —            | ✓        | —   |
| Interrupted status           | ✓           | ✓     | ✓            | ✓        | ✓   |
| Session history              | ✓           | ✓     | ✓            | ✓        | ✓   |
| Transcript                   | ✓           | ✓     | Partial      | Partial  | ✓   |
| Subagent transcripts         | ✓           | —     | —            | —        | —   |
| Skill and plugin toggles     | ✓           | ✓     | —            | —        | —   |
| Plan usage in status bar     | ✓           | ✓     | —            | —        | —   |

- **Cursor Agent** fires no hook for approval prompts, so its card shows Working while it waits on you. Its transcripts have no tool results, and chats started in a subfolder have none.
- **OpenCode** transcripts have no per-turn timing or token use.
- **Pi** reports state from its session file only, with no "Your turn" status.
- **Codex** lists the newest 100 sessions per worktree.

## Files Rexa writes

Each adapter installs hooks, session context and skill links into its agent's own config. This runs every time Rexa starts. Hook entries Rexa adds end in `# rexa-hook <id>`; entries from other tools are kept.

| Agent        | Writes                                                                                      |
| ------------ | ------------------------------------------------------------------------------------------- |
| Claude Code  | Hooks in `~/.claude/settings.json`; a link at `~/.claude/skills/rexa`                      |
| Codex        | Hooks in `~/.codex/hooks.json`; `notify` in `~/.codex/config.toml` if unset; links in `~/.codex/skills/` |
| Cursor Agent | Hooks in `~/.cursor/hooks.json`; links in `~/.cursor/skills/`                              |
| OpenCode     | A plugin link at `~/.config/opencode/plugins/rexa`; links in `~/.config/opencode/skills/`. Only if `~/.config/opencode` exists. |
| Pi           | `~/.pi/agent/extensions/rexa.ts`; links in `~/.pi/agent/skills/`. Only if `~/.pi/agent` exists. |

The hooks call `rexa post <agent>` to report state, and `rexa context` to tell the agent it runs inside Rexa. Outside a Rexa terminal, both do nothing.

## Check, repair or remove

```bash [Terminal]
rexa claude setup --check    # report; exit code 1 if something needs fixing
rexa claude setup            # install or repair
rexa claude setup --remove   # remove everything Rexa wrote
```

Replace `claude` with `codex`, `cursor`, `opencode` or `pi`. Rexa reinstalls on the next launch, so to keep an adapter off, disable it too:

```bash [Terminal]
rexa extension disable rexa-claude-adapter
```

Adapter ids follow the pattern `rexa-<agent>-adapter`; `rexa extension ls` lists them.

## Known limits

- **Codex asks you to trust new hooks** in its startup review. Rexa's hooks do nothing until you trust them.
- **Codex** always uses `~/.codex`; a custom `CODEX_HOME` is not followed.
- **Cursor Agent sessions resumed with `--resume`** get no Rexa session context.
- **OpenCode** always uses `~/.config/opencode`; XDG overrides are not followed.
