mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-04 08:01:59 +00:00
* feat(search): replace the command palette with tabbed Search Everywhere The palette was one flat list that every new kind of row had to be squeezed into: tabs and SSH hosts rode along as "Switch to Tab: …" and "SSH: …" commands, and the only way to narrow to one kind was a magic seed word. Search Everywhere splits it into sources behind one trait — All, Actions, Terminals, Hosts — each with its own empty-query layout and ranking. The All tab shows each source's top rows, ordered by best match, with a row that opens the full tab. Tab / Shift-Tab walk the tabs and keep the query. - Terminals lists every open tab of every workspace (reusing the switcher's tab rows) and jumps to it wherever it lives, plus the shells and agents. - Hosts replaces the separate "Add Connection" input: a typed address or full `ssh …` line offers to connect. - Fixes Return doing nothing after a search that found nothing, or when the search opens pre-filtered: gpui-component re-picks the row from a stale frame; the delegate now re-arms the first row. - Fixes `ssh -p 2222 me@box` being offered as a quick-connect address with user `ssh -p 2222 me`. The keymap action stays `TogglePalette` so custom bindings keep working. * feat(search): a Sessions tab to resume past agent sessions Search Everywhere gains a Sessions tab listing the Claude Code and Codex sessions on this computer, read from ~/.claude/projects and ~/.codex/sessions ($CODEX_HOME). Sessions that ran in the focused tab's directory lead; the All tab offers the last three of them before anything is typed. Return opens a new tab in the session's directory and runs the agent's resume command with its configured launch flags. - Only each transcript's head and tail are read, off the window thread, and cached by path, size and mtime: ~170ms cold for 50 sessions, under 1ms warm. The search opens on the cached list and fills in. - Titles: /rename name, then the agent's own title (ai-title, Codex's session_index.jsonl), then the first thing typed, skipping harness injections. Codex rollouts it ran for itself (subagent/internal) and sessions never asked anything are left out. - A session whose directory is gone is refused with a notice rather than resumed where the agent cannot find it.
150 lines
5.2 KiB
Plaintext
150 lines
5.2 KiB
Plaintext
---
|
|
title: "Coding agents"
|
|
description: "What tty7 does around Claude Code, Codex, TraeCode, and 20 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-five 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` |
|
|
| 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` |
|
|
|
|
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`, `crush`, `codebuddy`, `empryo`, `prime-agent`).
|
|
|
|
## 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. The New Tab menu's
|
|
**Launch Agent…** row opens its Terminals tab on that list, and **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>
|