Files
tty7/docs/agents/overview.mdx
T
d3f7dadd5d feat(agents): Muse Code and jcode support, native hooks for Empryo, Muse Code and jcode (#1071)
* feat(agents): recognise Muse Code and jcode

Muse Code's `muse` launcher execs a versioned `muse-bin-<version>`
binary, so detection also maps that name to Muse. Muse resumes with
`muse resume <id>` (root options on either side of the subcommand);
jcode with `jcode --resume <id>`.

* feat(agents): install native Empryo and jcode hooks

* feat(agents): add jcode lifecycle hooks

* fix(agents): preserve jcode hooks and correct Empryo removal contract

* feat(agents): install Muse native plugin hooks

* docs(agents): list Empryo, Muse Code and jcode as hook-backed

* fix(i18n): translate Empryo, Muse Code and jcode search keywords

* fix(agents): read jcode hook payload from env, route its reports like Codex, bound muse CLI calls

jcode runs hooks with stdin closed and puts session_id/cwd in
JCODE_HOOK_PAYLOAD, so reports carried no session and resume never
learned an id. Its shared server also runs every session's hooks with
the first client's TTY7_PANE, so reports go through the same
session/directory routing as Codex. muse plugins calls now time out
after 30s and surface stderr. Adds ru strings for the new keys and
reattaches Kimi's doc comment to KIMI_HOOK_EVENTS.

* docs: count Muse Code and jcode in the README agent totals

---------

Co-authored-by: kalpakprod <307643502+kalpakprod@users.noreply.github.com>
Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>
2026-10-03 20:47:25 +08:00

155 lines
5.4 KiB
Plaintext

---
title: "Coding agents"
description: "What tty7 does around Claude Code, Codex, TraeCode, and 25 others — without ever wrapping them."
---
tty7 recognises coding agents running in a pane and builds around them. It does
not wrap them, proxy them, or replace their interface: the agent you start is
the agent you get, running in a normal PTY, with its own UI. tty7 adds the
things a terminal is in a position to add — who is running where, what they
need, and what changed.
<Frame caption="Agent sessions across several repos, each with its avatar, status dot, branch, and diff">
<img src="/images/agents-overview.webp" alt="Agent sessions in the tty7 sidebar" />
</Frame>
## Which agents
Twenty-eight CLIs are recognised on sight, by the command running in the pane:
| Agent | Command |
|---|---|
| Claude Code | `claude`, `claude-code` |
| Codex | `codex`, `codex-cli` |
| TraeCode | `traecli`, `traex` |
| Gemini | `gemini`, `gemini-cli` |
| Copilot | `copilot` |
| Cursor | `cursor-agent` |
| Amp | `amp` |
| OpenCode | `opencode` |
| Aider | `aider`, `aider-chat` |
| Goose | `goose` |
| Droid | `droid` |
| Grok | `grok` |
| Qwen Code | `qwen`, `qwen-code` |
| Kimi Code | `kimi`, `kimi-code` |
| Qoder CLI | `qoder`, `qodercli` |
| Qoder CN CLI | `qodercn`, `qoderclicn`, `qoder-cn` |
| Crush | `crush` |
| CodeBuddy | `codebuddy`, `codebuddy-code`, `cbc` |
| Auggie | `auggie` |
| Hermes | `hermes` |
| Vibe | `vibe`, `vibe-acp` |
| Antigravity | `agy`, `antigravity` |
| Pi | `pi` |
| Oh My Pi | `omp` |
| Prime Agent | `prime-agent` |
| Empryo | `empryo` |
| Muse Code | `muse`, `muse-bin-<version>` |
| jcode | `jcode` |
Detection sees through the usual disguises: a full path, a `.cmd` or `.exe` on
Windows, leading environment assignments, and an interpreter in front
(`node .../claude/cli.js`).
### Your own wrapper
If you launch agents through a wrapper script, map its name to an agent in
`config.json`:
```json
{
"agent_commands": {
"cc": "claude",
"work": "codex"
}
}
```
The key is your command's name; the value is one of the slugs above (`claude`,
`codex`, `traecli`, `gemini`, `aider`, `amp`, `opencode`, `copilot`, `cursor`, `goose`,
`droid`, `pi`, `auggie`, `hermes`, `vibe`, `antigravity`, `grok`, `qwen`,
`omp`, `kimi`, `qodercli`, `qoderclicn`, `crush`, `codebuddy`, `empryo`, `prime-agent`, `muse`, `jcode`).
## Quick launch
Every agent tty7 finds on your `PATH` is one row away in Search Everywhere: **Agent:
Claude Code**, **Agent: Codex**, and so on, most-used first — type `agent` in
its Terminals tab to list them. The New Tab menu names the ones you have
actually run, three at most, and **Other Agents…** opens that same list for the
rest. **New Agent Tab**
(<kbd>⌘ ⇧ A</kbd> on macOS, unbound elsewhere) starts whichever agent you used
last.
A launch always opens a new tab in the current tab's directory and types the
agent's command into its shell, so the agent is detected, tracked and resumed
exactly as if you had typed it — and quitting it leaves you at the prompt. Each
`Agent: …` command is bindable too, as `LaunchAgent:<slug>`.
By default an agent launches as its bare binary (`claude`, `codex`,
`cursor-agent`, …). Give it a command line of its own with `agent_launch`:
```json
{
"agent_launch": {
"claude": "claude --dangerously-skip-permissions",
"codex": "cx --profile work"
}
}
```
A wrapper named there (`cx` above) is recognised as that agent without an
`agent_commands` entry. To keep the flags a running agent was started with,
right-click its pane and choose **Set Current Launch Args as Default**; tty7
writes them into `agent_launch`, minus the session they resumed and any prompt.
In a remote workspace tty7 cannot read the far machine's `PATH`, so it offers
the agents it has already seen running there: start one by hand once and it
joins the list. A wrapper named in your local `agent_launch` is only recognised
over there if the remote `config.json` names it too.
## What you get for free
Just by running an agent in a pane:
<CardGroup cols={2}>
<Card title="Brand avatars" icon="id-badge">
The tab chip and sidebar row show which agent runs where, so ten tabs stay
legible.
</Card>
<Card title="Git context" icon="code-branch">
The branch and working-tree diff on the row, refreshed as the agent works.
</Card>
<Card title="Session resume" icon="rotate-left">
A pane lost to a reboot relaunches the conversation, carrying its original
flags. [More →](/agents/sessions)
</Card>
<Card title="Context feed" icon="paper-plane">
Actions that hand the current selection or the repo's `git diff` to
the running agent as a prompt.
</Card>
</CardGroup>
## What needs a hook
Live status — **working**, **needs your input**, **done** — comes from the agent
itself, over a channel tty7 installs into that agent's configuration. It powers
the status dots, the notifications, the tray icon, and `tty7 wait`.
Installing takes one click per agent under **Settings → Integrations**.
[Status and notifications →](/agents/status)
## Where to go next
<CardGroup cols={3}>
<Card title="Status and notifications" icon="circle-dot" href="/agents/status">
Hooks, status dots, the tray icon.
</Card>
<Card title="Sessions" icon="code-branch" href="/agents/sessions">
Resume, fork, and copying a session id.
</Card>
<Card title="Orchestration" icon="diagram-project" href="/agents/orchestration">
One agent driving another with `tty7 wait`.
</Card>
</CardGroup>