docs(readme): back to the minimal keyword layout

Revert the prose-first structure from #1046 to the earlier feature list
and keyword table, keeping its two factual fixes: shells survive quitting
the app (after a reboot the layout, screen, and supported agent
conversations come back), and the agent matrix has a past-sessions column.
This commit is contained in:
l0ng-ai
2026-10-03 20:43:10 +08:00
parent 162a8e971a
commit 73cd393590
2 changed files with 166 additions and 233 deletions
+84 -125
View File
@@ -1,10 +1,10 @@
<div align="center">
<img src="assets/app-icon.svg" alt="" width="96" height="96" />
<img src="assets/app-icon.svg" alt="tty7" width="88" height="88" />
<h1>tty7</h1>
### tty7
**The terminal that outlives its window.**
**A terminal workbench: persistent sessions, remote work, agents.**
<sub>Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty</sub>
@@ -12,8 +12,9 @@
[![CI](https://github.com/l0ng-ai/tty7/actions/workflows/ci.yml/badge.svg)](https://github.com/l0ng-ai/tty7/actions/workflows/ci.yml)
[![Version](https://img.shields.io/github/v/release/l0ng-ai/tty7?label=version&color=3FDD8C)](https://github.com/l0ng-ai/tty7/releases)
[![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux-3FDD8C)](https://github.com/l0ng-ai/tty7/releases)
[![License](https://img.shields.io/badge/license-Apache--2.0-3FDD8C)](LICENSE)
[![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux-blue)](https://github.com/l0ng-ai/tty7/releases)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
[![Discord](https://img.shields.io/badge/Discord-join%20chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/s3dethqz2V)
<sub>English · [简体中文](README.zh-CN.md)</sub>
@@ -21,123 +22,44 @@
<a href="assets/tour.mp4"><img src="assets/tour.webp" alt="One-minute tour of tty7: agents across repos, one agent driving another through the CLI, the prompt editor, diffs, dragging panes, and sessions that survive quitting the app" width="900" /></a>
<sub>▶ <a href="assets/tour.mp4">Watch in full quality</a></sub>
</div>
<br />
## Why
Most terminals tie your shells to a window. Close the window and the shells die
with it. So people run tmux inside their terminal to keep them alive, which
works, but it means learning a second set of keys and keeping a second config
file, just to get around the window.
A background server owns your shells and panes — not the window. Everything
below follows from that.
tty7 takes a simpler approach. The shells belong to a server running in the
background, and the window only shows them. Close the window and nothing happens
to the shells. Most of what's interesting about tty7 follows from that one
decision.
## Quitting doesn't kill anything
Quit tty7 and every shell keeps running. Your build doesn't notice.
A reboot is different. The processes are gone, because that's what a reboot
does. But each pane comes back with its layout and the last of what was on
screen, and supported agents pick up the same conversation where they left off.
You don't need tmux for any of this, and there's nothing to configure.
→ [What survives what](docs/getting-started/concepts.mdx)
## Agents that run agents
A lot of people now run several coding agents at once, in several repos. Which
means spending the day switching between windows to see which one finished and
which one is waiting for an answer. That's not work a person should have to do.
tty7 recognizes 26 coding CLIs, including Claude Code, Codex, Gemini, Cursor,
and OpenCode, and puts all of them in one sidebar: whether each is working or
waiting, a notification when one needs you, and its branch and diff. You can see
at a glance which one wants you.
Once an agent's status is something a program can ask about, the one asking
doesn't have to be you. It can be another agent. The whole loop is four
commands, with no framework, and it works whether or not the GUI is open:
```sh
PANE=$(tty7 split --v) # give the worker a pane
tty7 send "$PANE" 'claude "add tests for the parser"' --enter
tty7 wait "$PANE" --until waiting,done --changed --timeout 600 # until it's done or stuck
tty7 capture "$PANE" --plain # read what happened
```
tty7 doesn't wrap the agents or sit between you and them. The agent you start
is the real one, running in an ordinary PTY. Simple things are more likely to
keep working.
→ [Orchestrating agents](docs/agents/orchestration.mdx) ·
[agent skill](skills/tty7/SKILL.md) · [full support matrix](#supported-agents)
## Remote is the same thing
A remote workspace is the same server, running on the other machine. The window
here just shows it. Tabs, panes, the file tree, git, and diffs all live over
there, and no files get synced. Connect from a different laptop and everything
is where you left it.
So remote isn't really a separate feature. It's the local case with the server
somewhere else.
The SSH client is tty7's own, written in Rust, so it doesn't depend on the
system's ssh. It has profiles with keychain secrets, jump hosts, SFTP, and
automatic port forwarding. The remote `tty7-server` installs once and doesn't
need root.
→ [Remote workspaces](docs/remote/workspaces.mdx)
## Speed
Speed isn't the point of tty7, but it shouldn't be a weakness either, and it
turns out not to be. `cat` on an 11 MB file takes 95 ms; the next fastest
terminal we measured takes 179. DOOM-fire runs at 888 fps; the next best manages
617. The method and scripts are public, and one command reproduces them.
| | **tty7** | Alacritty | Ghostty | Kitty |
|---|---:|---:|---:|---:|
| Plaintext I/O — 11 MB `cat` <sub>(lower = better)</sub> | **95 ms** | 239 ms | 179 ms | 185 ms |
| [DOOM-fire](https://github.com/const-void/DOOM-fire-zig) frame rate <sub>(higher = better)</sub> | **888 fps** | 485 fps | 552 fps | 617 fps |
| Cold-launch memory | 116 MB¹ | 105 MB | 128 MB | 130 MB |
<sub>Apple M1 Pro, macOS 26.3.1, 155×40 grid, five-run averages, 2026-07-04. ¹ GUI 105 MB + the persistent server 11 MB.
Methodology and one-command reproduction: [`scripts/bench/`](scripts/bench/README.md).</sub>
## Everything else
The rest is details, but details are most of what makes a tool pleasant to use.
The prompt has suggestions from your history, tab completion that explains each
option, syntax highlighting, and real multi-line editing, and <kbd>⌃ R</kbd>
searches your history. <kbd>⌘ P</kbd> searches everything. <kbd>⌘ J</kbd> opens
a side panel with processes, ports, files, changes, and GitHub issues and PRs.
Shell integration works in zsh, bash, fish, PowerShell, and WSL without
installing anything.
→ [Full documentation](docs/) · [keyboard shortcuts](docs/reference/keyboard-shortcuts.mdx) ·
[config.json](docs/reference/configuration.mdx) · [CLI reference](docs/cli/reference.mdx)
- **Performance** — ~2× the throughput of Alacritty, Ghostty, or Kitty ([benchmarks](#benchmarks))
- **Persistent sessions** — quit the app and your shells keep running; after a reboot, layout, screen, and supported agent conversations come back. No tmux
- **Agent-aware** — Claude Code, Codex & co.: status, notifications, and git context for every repo at once
- **Scriptable by agents** — one agent opens a pane for another, hands off a task, waits, and reads the result, with or without the GUI running
- **Editor-grade input** — suggestions, completion, highlighting, history search, with no plugin to install
- **Remote development** — files, repos, panes, and git data stay on the remote machine, over a native SSH stack
## Install
Native builds on [**Releases**](https://github.com/l0ng-ai/tty7/releases/latest):
Native builds for macOS, Windows, and Linux on [**Releases**](https://github.com/l0ng-ai/tty7/releases):
| | | |
|---|---|---|
| **macOS** | `…-macos-arm64.dmg` · `…-x86_64.dmg` | drag into Applications |
| **Windows** | `…-setup.exe` · portable `….zip` | |
| **Linux** | `…-x86_64.AppImage` | `chmod +x` and run — X11/Wayland libraries bundled |
## What's inside
| | |
|---|---|
| **macOS** | `.dmg` for Apple silicon or Intel — drag into Applications |
| **Windows** | `-setup.exe`, or the portable `.zip` |
| **Linux** | `.AppImage` — `chmod +x` and run; X11/Wayland libraries bundled |
Give your agents the CLI skill:
```sh
npx skills add l0ng-ai/tty7 # install
npx skills update tty7 # update later
```
| **Agent-aware** | per-pane detection (26 CLIs) · status dot · notifications · branch + diff · tray icon when input is needed · resume after reboot · reopen any past session from Search Everywhere · one-key launch · tab sidebar grouped by repository, with pinned groups |
| **CLI + Skills** | bundled `tty7` CLI · [agent skill](skills/tty7/SKILL.md) · `run` streams a command and exits with its code · `split` · `send` · `wait --until free` · `capture` |
| **Editor-grade input** | ghost suggestions from history · explained tab completion · syntax highlighting · multi-line editing · click places the caret · <kbd>⌃ R</kbd> fuzzy history |
| **Window** | tabs & splits · <kbd>⌘ P</kbd> Search Everywhere · <kbd>⌘ F</kbd> scrollback search · hibernate a tab to free its memory · IME |
| **Side panel** | <kbd>⌘ J</kbd> · process tree and listening ports · file tree · changes and diffs · find in files · GitHub issues and pull requests, read-only, signed in through `gh` |
| **Shell integration** | injected when a pane starts, nothing to install · prompt marks · working directory · exit codes · command-finished notifications · zsh, bash, fish, PowerShell, WSL, remote panes |
| **Remote workspaces** | remote files, repos, changes, diffs, worktrees, tabs, and panes · reconnect from any client and continue where you left off |
| **SSH** | native russh stack: profiles with keychain secrets · SFTP panel · port forwarding · jump hosts · one-time, unprivileged `tty7-server` install |
## Supported agents
@@ -149,20 +71,20 @@ that tells tty7 which session to fork. **Past sessions** are read from the agent
own history files and listed in Search Everywhere, where <kbd>⏎</kbd> resumes one.
<details>
<summary>The full support matrix</summary>
<summary>The full support matrix, all twenty-six</summary>
| Agent | Detected | Status · resume | Fork | Past sessions |
|---|:-:|:-:|:-:|:-:|
| **Claude Code** | ✓ | ✓ | ✓ | ✓ |
| **Codex** | ✓ | ✓ | ✓ | ✓ |
| **TraeCode** | ✓ | ✓ | ✓ | |
| **Grok** | ✓ | ✓ | ✓ | |
| **TraeCode** | ✓ | ✓ | ✓ | |
| **Grok** | ✓ | ✓ | ✓ | |
| **OpenCode** | ✓ | ✓ | ✓ | ✓ |
| **Oh My Pi** | ✓ | ✓ | ✓ | ✓ |
| **Prime Agent** | ✓ | ✓ | ✓ | |
| **Prime Agent** | ✓ | ✓ | ✓ | |
| **Droid** | ✓ | ✓ | ✓ | ✓ |
| **Qwen Code** | ✓ | ✓ | ✓ | ✓ |
| **Goose** | ✓ | ✓ | ✓ | |
| **Goose** | ✓ | ✓ | ✓ | |
| **Qoder CLI** | ✓ | ✓ | ✓ | ✓ |
| **Qoder CN CLI** | ✓ | ✓ | ✓ | ✓ |
| **CodeBuddy** | ✓ | ✓ | ✓ | ✓ |
@@ -170,18 +92,55 @@ own history files and listed in Search Everywhere, where <kbd>⏎</kbd> resumes
| **Copilot** | ✓ | ✓ | | ✓ |
| **Kimi Code** | ✓ | ✓ | | ✓ |
| **Pi** | ✓ | ✓ | | ✓ |
| **Crush** | ✓ | ✓ | | |
| **Antigravity** | ✓ | ✓ | | |
| **Crush** | ✓ | ✓ | | |
| **Antigravity** | ✓ | ✓ | | |
| **Cursor** | ✓ | ✓ | | ✓ |
| Aider | ✓ | | | |
| Amp | ✓ | | | |
| Auggie | ✓ | | | |
| Hermes | ✓ | | | |
| Vibe | ✓ | | | |
| Empryo | ✓ | | | |
| Aider | ✓ | | | |
| Amp | ✓ | | | |
| Auggie | ✓ | | | |
| Hermes | ✓ | | | |
| Vibe | ✓ | | | |
| Empryo | ✓ | | | |
</details>
None of them are wrapped or proxied — the agent you start is the agent you get,
in a normal PTY, with its own interface. An agent launched through a wrapper
script can be mapped to one by name with `agent_commands` in `config.json`.
Every agent on your `PATH` is also a row in Search Everywhere (**Agent: Claude Code**, …)
that opens it in a new tab, and the New Tab menu names the ones you have actually
run. `agent_launch` sets the command line it starts with.
## Documentation
Full documentation lives in [**`docs/`**](docs/) —
[keyboard shortcuts](docs/reference/keyboard-shortcuts.mdx) ·
[config.json](docs/reference/configuration.mdx) ·
[CLI reference](docs/cli/reference.mdx). The agent-facing CLI interface is also
documented in [skills/tty7/SKILL.md](skills/tty7/SKILL.md).
Install the skill with:
```sh
npx skills add l0ng-ai/tty7 # install
npx skills update tty7 # update later
```
## Benchmarks
Same machine, same day, same 155×40 grid — Apple M1 Pro, macOS 26.3.1,
five-run averages (2026-07-04):
| | **tty7** | Alacritty | Ghostty | Kitty |
|---|---:|---:|---:|---:|
| Plaintext I/O — 11 MB `cat` <sub>(lower = better)</sub> | **95 ms** | 239 ms | 179 ms | 185 ms |
| [DOOM-fire](https://github.com/const-void/DOOM-fire-zig) frame rate <sub>(higher = better)</sub> | **888 fps** | 485 fps | 552 fps | 617 fps |
| Cold-launch memory | 116 MB¹ | 105 MB | 128 MB | 130 MB |
<sub>¹ GUI 105 MB + the persistent server 11 MB.</sub>
Methodology and one-command reproduction: [`scripts/bench/`](scripts/bench/README.md).
---
<div align="center">
+82 -108
View File
@@ -1,10 +1,10 @@
<div align="center">
<img src="assets/app-icon.svg" alt="" width="96" height="96" />
<img src="assets/app-icon.svg" alt="tty7" width="88" height="88" />
<h1>tty7</h1>
### tty7
**关掉窗口,终端还在。**
**终端工作台:会话常驻、远程开发、原生支持 agent。**
<sub>纯 Rust · GPU 渲染基于 Zed 的 gpui · VT 内核来自 Alacritty</sub>
@@ -12,8 +12,9 @@
[![CI](https://github.com/l0ng-ai/tty7/actions/workflows/ci.yml/badge.svg)](https://github.com/l0ng-ai/tty7/actions/workflows/ci.yml)
[![Version](https://img.shields.io/github/v/release/l0ng-ai/tty7?label=version&color=3FDD8C)](https://github.com/l0ng-ai/tty7/releases)
[![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux-3FDD8C)](https://github.com/l0ng-ai/tty7/releases)
[![License](https://img.shields.io/badge/license-Apache--2.0-3FDD8C)](LICENSE)
[![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Windows%20%C2%B7%20Linux-blue)](https://github.com/l0ng-ai/tty7/releases)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
[![Discord](https://img.shields.io/badge/Discord-%E5%8A%A0%E5%85%A5%E8%AE%A8%E8%AE%BA-5865F2?logo=discord&logoColor=white)](https://discord.gg/s3dethqz2V)
<sub>[English](README.md) · 简体中文</sub>
@@ -21,126 +22,66 @@
<a href="assets/tour.mp4"><img src="assets/tour.webp" alt="tty7 一分钟演示:多仓库 agent、一个 agent 通过 CLI 驱动另一个、提示符编辑器、diff、拖动 pane、退出应用后会话仍在运行" width="900" /></a>
<sub>▶ <a href="assets/tour.mp4">观看高清版</a></sub>
</div>
<br />
## 为什么
大部分终端把 shell 挂在窗口上。窗口一关,shell 就跟着死了。为了不让它死,大家又在终端里再套一层
tmux,学一套新的快捷键,写一份配置文件。这是在窗口的限制上再加一层绕路。
shell 和窗格由后台常驻的 server 持有,而不是窗口。下面这些特性几乎都源自这一设计。
tty7 的做法很简单:shell 归后台的 server 管,窗口只负责显示。窗口关了,shell 照样活着。
下面这些特性,几乎都是从这一点自然推出来的,并不需要额外发明什么。
## 退出应用,会话不断
退出 tty7,所有 shell 原地接着跑,编译不会断。
重启电脑,进程当然没了,这是操作系统层面的事。但布局和屏幕上最后的内容会回来,
已支持的 agent 也会接上原来的对话。
不需要 tmux,不需要配置。
→ [退出、重启后分别保留什么](docs/getting-started/concepts.mdx)
## agent 指挥 agent
现在很多人同时开好几个 agent,在好几个仓库里干活,然后就在窗口之间来回切,看哪个跑完了,
哪个在等你回话。这种事不应该由人来做。
tty7 能认出 26 个编程 CLI(Claude Code、Codex、Gemini、Cursor、OpenCode 等),把它们的状态、
通知、分支和 diff 放在同一个侧边栏里。哪个需要你,一眼就知道。
再往前走一步:既然状态能用命令查到,那调度 agent 的就不一定是人,也可以是另一个 agent。
整个流程就四行,不需要任何框架,GUI 不开也能跑:
```sh
PANE=$(tty7 split --v) # 给干活的 agent 开个 pane
tty7 send "$PANE" 'claude "add tests for the parser"' --enter
tty7 wait "$PANE" --until waiting,done --changed --timeout 600 # 等它做完,或卡住需要人
tty7 capture "$PANE" --plain # 读取输出
```
tty7 不给 agent 套壳,也不做代理。你启动的就是原版 agent,跑在普通的
PTY 里。简单的东西才可靠。
→ [编排 agent](docs/agents/orchestration.mdx) ·
[agent skill](skills/tty7/SKILL.md) · [完整支持矩阵](#支持的-agent)
## 远程机器也一样
远程工作区就是在远端跑同一个 server,本地只负责显示。标签页、pane、文件树、git、diff
都在远端,文件不用同步。换台电脑连上去,还是你离开时的样子。
这跟本地其实是同一件事,只不过 server 换了个地方。
SSH 是 tty7 自己用 Rust 实现的,不依赖系统的 ssh。profile、keychain、跳板机、SFTP、端口自动转发都有。
远端的 `tty7-server` 装一次就好,不需要 root。
→ [远程工作区](docs/remote/workspaces.mdx)
## 性能
性能不是 tty7 的卖点,但也不能是短板。`cat` 一个 11 MB 的文件,tty7 用 95 ms,第二名 179 ms。
DOOM-fire 跑到 888 fps,第二名 617 fps。测试方法和脚本都公开,一条命令就能复现。
| | **tty7** | Alacritty | Ghostty | Kitty |
|---|---:|---:|---:|---:|
| 纯文本 I/O:`cat` 一个 11 MB 文件 <sub>(越低越好)</sub> | **95 ms** | 239 ms | 179 ms | 185 ms |
| [DOOM-fire](https://github.com/const-void/DOOM-fire-zig) 帧率 <sub>(越高越好)</sub> | **888 fps** | 485 fps | 552 fps | 617 fps |
| 冷启动内存 | 116 MB¹ | 105 MB | 128 MB | 130 MB |
<sub>Apple M1 Pro,macOS 26.3.1,155×40 网格,五次取平均,2026-07-04。¹ GUI 占 105 MB,常驻 server 占 11 MB。
测试方法与一条命令复现:[`scripts/bench/`](scripts/bench/README.md)。</sub>
## 其他功能
剩下的都是细节,但细节做对了,用起来就是顺手。提示符有历史建议、带说明的 Tab 补全、语法高亮、
多行编辑,<kbd>⌃ R</kbd> 模糊搜索历史。<kbd>⌘ P</kbd> 随处搜索,<kbd>⌘ J</kbd> 打开侧边面板,
看进程、端口、文件、改动,还有 GitHub 的 issue 和 PR。shell 集成覆盖 zsh、bash、fish、PowerShell
和 WSL,什么都不用装。
→ [完整文档](docs/)(英文)· [快捷键](docs/reference/keyboard-shortcuts.mdx) ·
[config.json](docs/reference/configuration.mdx) · [CLI 参考](docs/cli/reference.mdx)
- **性能**:吞吐是 Alacritty、Ghostty、Kitty 的两倍左右([基准测试](#基准测试))
- **会话常驻**:退出应用,shell 照常运行;重启机器后,布局、屏幕内容和已支持的 agent 对话都会回来。不需要 tmux
- **Agent 感知**:Claude Code、Codex 等 agent 的状态、通知和 git 上下文,多个仓库一屏看完
- **可被 agent 驱动**:一个 agent 能给另一个开 pane、派活、等它跑完、读走结果,GUI 开不开都行
- **编辑器级输入**:建议、补全、高亮、历史搜索,不用装任何插件
- **远程开发**:文件、仓库、pane 和 git 信息都留在远端机器上,走自带的 SSH 栈
## 安装
到 [**Releases**](https://github.com/l0ng-ai/tty7/releases/latest) 下载对应平台的安装包:
macOS、Windows、Linux 的原生构建都在 [**Releases**](https://github.com/l0ng-ai/tty7/releases):
| | | |
|---|---|---|
| **macOS** | `…-macos-arm64.dmg` · `…-x86_64.dmg` | 拖进「应用程序」 |
| **Windows** | `…-setup.exe` · 免安装 `….zip` | |
| **Linux** | `…-x86_64.AppImage` | `chmod +x` 后直接运行,X11/Wayland 的库已打包在内 |
## 有什么
| | |
|---|---|
| **macOS** | `.dmg`,Apple 芯片和 Intel 各一版,拖进「应用程序」即可 |
| **Windows** | `-setup.exe`,或免安装的 `.zip` |
| **Linux** | `.AppImage`,`chmod +x` 后直接运行,X11/Wayland 依赖已打包 |
给 agent 装上 tty7 的 skill:
```sh
npx skills add l0ng-ai/tty7 # 安装
npx skills update tty7 # 后续更新
```
| **Agent 感知** | 逐 pane 识别 26 个 CLI agent · 状态点 · 通知 · 分支 + diff · 需要输入时托盘图标提醒 · 重启后续上会话 · 在随处搜索里找回任意历史会话 · 一键启动 · 侧边栏按仓库分组,可置顶 |
| **CLI + Skills** | 安装包自带 `tty7` CLI · [agent skill](skills/tty7/SKILL.md) · `run` 转发命令输出并原样返回退出码 · `split` · `send` · `wait --until free` · `capture` |
| **编辑器级输入** | 基于历史的内联补全建议 · Tab 补全附带说明 · 语法高亮 · 多行编辑 · 点击定位光标 · <kbd>⌃ R</kbd> 模糊搜索历史 |
| **窗口** | 标签页与分屏 · <kbd>⌘ P</kbd> 随处搜索 · <kbd>⌘ F</kbd> 回滚搜索 · 休眠标签页以释放内存 · 输入法 |
| **侧边面板** | <kbd>⌘ J</kbd> · 进程树与监听端口 · 文件树 · 改动与 diff · 在文件中查找 · GitHub issue 与 PR(只读,通过 `gh` 登录) |
| **Shell 集成** | pane 启动时自动注入,不用你装什么 · 提示符边界 · 工作目录 · 退出码 · 命令跑完发通知 · 覆盖 zsh、bash、fish、PowerShell、WSL 和远程 pane |
| **远程工作区** | 远端的文件、仓库、改动、diff、worktree、标签页和 pane · 从任意客户端重连,接着离开时的位置继续 |
| **SSH** | 自带 russh 实现,不依赖外部 ssh:profile 凭据存入 keychain · SFTP 面板 · 端口转发 · 跳板机 · `tty7-server` 只需安装一次,无需 root |
## 支持的 agent
**识别**无需配置:品牌头像、分支与 diff、标签页标题。
**状态**要在「设置 → 集成」里为对应 agent 装一个 hook(点一下就行)。装好后才有状态点、通知、托盘提醒、`tty7 wait`,以及重启后恢复会话。
**Fork** 需要两个条件:agent 本身有 fork 命令,并且装了 hook,这样 tty7 才知道要 fork 哪个会话。
**历史会话**直接读 agent 自己的历史文件,列在随处搜索里,回车即可恢复。
**状态**需要在设置 → 集成 中为该 agent 安装 hook,一次点击,之后才有状态点、通知、托盘提醒、`tty7 wait` 和重启后恢复会话。
**Fork** 两个条件都要:agent 自己提供 fork 命令,且 hook 已装——tty7 得知道 fork 的是哪个会话。
**历史会话**从 agent 自己的历史文件读取,列在随处搜索里,<kbd>⏎</kbd> 即可续上。
<details>
<summary>完整支持矩阵</summary>
<summary>26 个 agent 的完整支持矩阵</summary>
| Agent | 识别 | 状态 · 重启恢复 | Fork | 历史会话 |
|---|:-:|:-:|:-:|:-:|
| **Claude Code** | ✓ | ✓ | ✓ | ✓ |
| **Codex** | ✓ | ✓ | ✓ | ✓ |
| **TraeCode** | ✓ | ✓ | ✓ | |
| **Grok** | ✓ | ✓ | ✓ | |
| **TraeCode** | ✓ | ✓ | ✓ | |
| **Grok** | ✓ | ✓ | ✓ | |
| **OpenCode** | ✓ | ✓ | ✓ | ✓ |
| **Oh My Pi** | ✓ | ✓ | ✓ | ✓ |
| **Prime Agent** | ✓ | ✓ | ✓ | |
| **Prime Agent** | ✓ | ✓ | ✓ | |
| **Droid** | ✓ | ✓ | ✓ | ✓ |
| **Qwen Code** | ✓ | ✓ | ✓ | ✓ |
| **Goose** | ✓ | ✓ | ✓ | |
| **Goose** | ✓ | ✓ | ✓ | |
| **Qoder CLI** | ✓ | ✓ | ✓ | ✓ |
| **Qoder CN CLI** | ✓ | ✓ | ✓ | ✓ |
| **CodeBuddy** | ✓ | ✓ | ✓ | ✓ |
@@ -148,18 +89,51 @@ npx skills update tty7 # 后续更新
| **Copilot** | ✓ | ✓ | | ✓ |
| **Kimi Code** | ✓ | ✓ | | ✓ |
| **Pi** | ✓ | ✓ | | ✓ |
| **Crush** | ✓ | ✓ | | |
| **Antigravity** | ✓ | ✓ | | |
| **Crush** | ✓ | ✓ | | |
| **Antigravity** | ✓ | ✓ | | |
| **Cursor** | ✓ | ✓ | | ✓ |
| Aider | ✓ | | | |
| Amp | ✓ | | | |
| Auggie | ✓ | | | |
| Hermes | ✓ | | | |
| Vibe | ✓ | | | |
| Empryo | ✓ | | | |
| Aider | ✓ | | | |
| Amp | ✓ | | | |
| Auggie | ✓ | | | |
| Hermes | ✓ | | | |
| Vibe | ✓ | | | |
| Empryo | ✓ | | | |
</details>
tty7 不包装、不代理其中任何一个 —— 你启动的就是那个 agent 本身,运行在普通 PTY 中,界面仍然是它自己的。
如果你通过 wrapper 脚本启动 agent,在 `config.json` 的 `agent_commands` 里把脚本名映射到对应 agent 即可。
PATH 上的每个 agent 也都能在随处搜索里找到(**Agent:Claude Code** 等),会在新标签页中启动它;新建标签页菜单会列出真正用过的那几个。`agent_launch` 可以设置它的启动命令行。
## 文档
完整文档在 [**`docs/`**](docs/),英文:
[快捷键](docs/reference/keyboard-shortcuts.mdx) ·
[config.json](docs/reference/configuration.mdx) ·
[CLI 参考](docs/cli/reference.mdx)。
agent 如何调用这套 CLI,另见 [skills/tty7/SKILL.md](skills/tty7/SKILL.md)。
安装 skill:
```sh
npx skills add l0ng-ai/tty7 # 安装
npx skills update tty7 # 后续更新
```
## 基准测试
同一台机器、同一天、同样的 155×40 网格:Apple M1 Pro,macOS 26.3.1,每项运行五次取平均(2026-07-04)。
| | **tty7** | Alacritty | Ghostty | Kitty |
|---|---:|---:|---:|---:|
| 纯文本 I/O:`cat` 一个 11 MB 文件 <sub>(越低越好)</sub> | **95 ms** | 239 ms | 179 ms | 185 ms |
| [DOOM-fire](https://github.com/const-void/DOOM-fire-zig) 帧率 <sub>(越高越好)</sub> | **888 fps** | 485 fps | 552 fps | 617 fps |
| 冷启动内存 | 116 MB¹ | 105 MB | 128 MB | 130 MB |
<sub>¹ GUI 占 105 MB,常驻 server 占 11 MB。</sub>
测试方法与一条命令复现:[`scripts/bench/`](scripts/bench/README.md)。
---
<div align="center">