Appearance
Supported Code Agents
Otty integrates with the coding-agent CLIs you run yourself. You keep using the agent exactly as you would in any terminal — Otty plugs into it so the tab badges, notifications, history, resume, and (where the agent supports it) fork all work. The in-app experience is the same across every one.
| Agent | Command | How Otty connects | Resume | Fork |
|---|---|---|---|---|
| Claude Code | claude | Hooks in ~/.claude/settings.json | ✓ | ✓ |
| Codex | codex | Hooks in ~/.codex/hooks.json (+ hooks = true in config.toml) | ✓ | ✓ |
| OpenCode | opencode | Plugin in ~/.config/opencode/plugins | ✓ | ✓ |
| Cursor CLI | agent | Hooks in ~/.cursor/hooks.json | ✓ | — |
| Kimi Code | kimi | Hooks in ~/.kimi-code/config.toml (TOML [[hooks]]) | ✓ | — |
| Pi | pi | Extension in ~/.pi/agent/extensions | ✓ | ✓ |
| omp | omp | Extension in ~/.omp/agent/extensions | ✓ | ✓ |
Installation is one click: the first time Otty needs the integration it asks to install the hook or plugin into that agent's own config — it won't touch your other settings. See Setup to install, manage, or remove it.
Custom launch commands
Expand an agent under Settings → Integrations to override the command Otty uses when it starts, resumes, or forks that agent. This is useful for wrappers, absolute executable paths, and global flags. Otty appends the agent-specific session arguments, so enter claude --dangerously-skip-permissions, not a full claude --resume <id> command. Leave the field empty for the built-in default.
The same override can be written in the config file:
ini
agent-command = claude=claude --dangerously-skip-permissions
agent-command = codex=/opt/homebrew/bin/codex --profile workClaude Code
Anthropic's Claude Code CLI. Otty adds hook entries to ~/.claude/settings.json that report each turn's state (processing, idle, awaiting input).
- Resume reopens a past conversation with
claude --resume <id>. - Fork branches it into a new session with
claude --resume <id> --fork-session. - Transcripts live as JSONL under
~/.claude/projects/…, so History can search and reload them.
Codex
OpenAI's Codex CLI. Otty installs hooks into ~/.codex/hooks.json.
- Codex only runs hooks when the
hooksfeature is enabled in~/.codex/config.toml. Otty turns it on when it installs the hooks; if it ever gets switched off, Otty offers a one-click re-enable (then restart Codex in that tab). - Resume uses
codex resume <id>; Fork usescodex fork <id>.
OpenCode
The self-hosted OpenCode agent. Instead of hooks, Otty installs a small plugin into ~/.config/opencode/plugins.
- Resume uses
opencode --session <id>; Fork usesopencode --fork --session <id>. - Heads-up: OpenCode doesn't announce a session when you switch to it via
/sessions— Otty only picks it up once you send a message in that session. If a freshly-switched tab looks unlinked, type something and it connects.
Cursor CLI
Cursor's terminal agent, launched as agent (cursor.com/docs/cli). Otty adds entries to Cursor's JSON hooks in ~/.cursor/hooks.json that report each turn's state.
- Resume reopens a past conversation with
agent --resume <chatId>. - Fork is not offered — Cursor has no CLI fork command, so the Fork action stays greyed out.
- Transcripts live under
~/.cursor/projects/…/agent-transcripts/, so History can search and reload them.
Kimi Code
The kimi CLI (moonshotai/kimi-code). Its config home is ~/.kimi-code (override with $KIMI_CODE_HOME). Kimi exposes Claude-Code-style lifecycle hooks declared in TOML, so Otty adds an [[hooks]] entry to ~/.kimi-code/config.toml.
- Resume uses
kimi --session <id>. - Fork is not offered.
- Sessions are stored under
~/.kimi-code/sessions/…, so History can reload them.
Pi and omp
Pi (pi) and omp (omp) share one codebase — omp is a rebrand of pi — and both load TypeScript extensions the way OpenCode loads plugins. Otty installs one extension into ~/.pi/agent/extensions or ~/.omp/agent/extensions that reports each turn's state.
- Resume reopens a specific session with
pi --session <path>(omp --session <path>). - Fork branches it into a fresh session with
pi --fork <path>(omp --fork <path>). - Like OpenCode, pi/omp report the session id through the extension rather than a per-process file, so a freshly-switched tab links up once the agent emits its next lifecycle event.
Other Code Agents
Otty's deep integration — tab badges, notifications, history, resume, and fork — covers the agents above. Any other coding-agent CLI still runs fine in an Otty tab as a plain terminal program; it just won't light up those agent-aware features yet.
- Resume — an agent that wants its sessions to survive a terminal restart can adopt the Terminal Resume Protocol (OSC 88). It's a vendor-neutral, open spec, so any tool that emits it gets resume in Otty without a bespoke integration.
- Everything else is not implemented yet. We plan to open the other agent features up over time, likely through extensions or a similar mechanism.
Want your agent supported, or building one that should plug in? Get in touch at otty@appmakes.io.
See also
- Setup — install and manage the integration per agent.
- Working with Code Agents — what the integration gets you.
- History · Fork / Branch Session — resume and branch any captured session.