docs(readme): rewrite in minimal style, reposition as terminal workbench

Slim the READMEs to an index (why / install / what's inside / benchmarks);
move feature details, keybindings, and performance notes to docs/features.md
(en + zh-CN). New tagline: a terminal workbench — shells, sessions, SSH,
coding agents. Sync the Cargo.toml description.
This commit is contained in:
l0ng-ai
2026-07-16 11:45:33 +08:00
parent e5dab7ee44
commit 501fd4a7de
5 changed files with 222 additions and 212 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
name = "tty7"
version = "0.16.1"
edition = "2024"
description = "A terminal built on Zed's gpui that never loses your session — daemon-backed, shell-aware"
description = "A terminal workbench: shells, persistent sessions, SSH, coding agents — GPU-rendered on Zed's gpui, pure Rust"
repository = "https://github.com/l0ng-ai/tty7"
license = "Apache-2.0"
readme = "README.md"
+26 -111
View File
@@ -4,9 +4,9 @@
### tty7
**A GPU-rendered terminal in pure Rust.**
**A terminal workbench: shells, sessions, SSH, coding agents.**
<sub>GPU rendering on Zed's gpui · VT core from Alacritty</sub>
<sub>Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty</sub>
<br />
@@ -15,92 +15,44 @@
[![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)
[**Why tty7**](#why-tty7) · [**Install**](#install) · [**Features**](#features) · [**Benchmarks**](#benchmarks) · [**Keybindings**](#keybindings)
<sub>English · [简体中文](README.zh-CN.md)</sub>
</div>
## Why tty7
## Why
- **Fast** — about 2× the throughput of Alacritty, Ghostty, or Kitty on the
same hardware ([benchmarks](#benchmarks))
- **A modern prompt** — completion, syntax highlighting, and history search
built in; no plugins to assemble
- **Sessions that survive** — close the window or quit the app, your shells
keep running; no tmux
- **Zero config** — zsh, bash, fish, and PowerShell work out of the box
Native builds for macOS, Windows, and Linux ship with every release.
- **Fast** — ~2× the throughput of Alacritty, Ghostty, or Kitty ([benchmarks](#benchmarks))
- **Sessions persist** — quit or reboot; your shells keep running, no tmux
- **Editor-grade input** — completion, syntax highlighting, history search built in; zero config for zsh, bash, fish, PowerShell
- **Agent-aware** — recognizes Claude Code & co. in a pane: status, notifications, session resume
## Install
Download the build for your platform from
[**Releases**](https://github.com/l0ng-ai/tty7/releases):
Native builds for each platform on [**Releases**](https://github.com/l0ng-ai/tty7/releases):
- **macOS** — `tty7-<version>-macos-arm64.dmg` (Apple Silicon) or `…-x86_64.dmg`
(Intel); open it and drag `tty7.app` into Applications.
- **Windows** — `…-windows-x86_64-setup.exe` (installer: Start Menu shortcut +
uninstall entry), or `…-windows-x86_64.zip` (portable: unzip and run
`tty7.exe`).
- **Linux** — `…-linux-x86_64.AppImage` (recommended: bundles the x11/wayland
libraries, so it runs on Fedora / Arch / etc. with no extra packages —
`chmod +x` and run), or `…-linux-x86_64.tar.gz` (bare binary; extract and run
`./tty7`, needs the usual x11/wayland runtime libraries installed).
| | | |
|---|---|---|
| **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 libs bundled |
## Features
## What's inside
### At the prompt
- **Ghost suggestions** — your history completes the whole line as you type; <kbd>→</kbd> to accept
- **Tab completion that explains** — every flag and subcommand with its description, for ~100 common commands
- **Syntax highlighting** — as you type, nothing to install
- **Fuzzy history search** — <kbd>⌃ R</kbd> shows what you ran, where, and whether it failed
- **History from day one** — your existing shell history just works, and carries across sessions
- **Real line editing** — selection, word motion, undo
### In the window
- **Tabs & splits** — always open in the current directory
- **Command palette** <kbd>⌘ P</kbd> · scrollback search <kbd>⌘ F</kbd>
- **⌘-click links** · desktop notifications
- **Eight themes** · CJK / IME input
### CLI coding agents
tty7 recognizes third-party coding agents running in a pane (Claude Code,
Codex, Gemini CLI, Aider, Amp, OpenCode, and ~10 more) and enriches them — it
never wraps or replaces the agent.
- **Brand avatars** — the tab chip / sidebar row shows which agent runs where; custom wrappers map in via `agent_commands` in `config.json`
- **Live status dot** — working (blue) / needs your input (amber) / done (green), driven by agent-reported events over an OSC channel; run *Agent: Install Claude Code Hooks* from the palette to wire Claude Code up
- **Notifications that matter** — "needs your permission…" the moment an agent blocks on you, and "finished after Ns" per turn, honoring your notification policy
- **Branch at a glance** — each sidebar row shows its pane's git branch and working-tree diff (`+N M`), refreshed on `cd` and when a command finishes
- **Session resume** — panes lost to a reboot re-launch their agent conversation (`claude --resume …`) on restore (`restore_agent_sessions`, on by default)
- **Context feed** — palette commands send the current selection or the repo's `git diff` to the running agent as a ready-made prompt
### SSH connection manager
A native Rust SSH stack (russh) is the **only** path — profiles, credentials,
and SFTP without ever shelling out to `ssh`. There is no system-ssh compat mode.
- **QuickConnect** — type `user@host[:port]` in the palette and connect; IPv6 `[::1]:port` supported
- **Saved profiles** — full connection config with passwords / passphrases in the OS keychain, never on disk
- **`~/.ssh/config` aliases** — type one to connect (resolved natively — common fields, best-effort — over russh), or import them as profiles in Settings
- **GUI auth** — in-pane sheets for password, key passphrase, 2FA, and host-key confirmation (new vs. changed)
- **Built-in SFTP** — a slide-in file panel: browse, upload / download, rename / delete / chmod, drag to Finder
- **Port forwarding** — Local / Remote / Dynamic, preconfigured or added live, plus ⌘-click `localhost:PORT` to auto-forward
- **Jump hosts & proxies** — multi-hop via profile references or `ProxyJump`, ProxyCommand, SOCKS5 / HTTP
| Entry point | Connects via |
| | |
|---|---|
| Saved profiles · QuickConnect · typed `user@host[:port]` | Native russh — SFTP · keychain · GUI auth · L/R/D forwards |
| `~/.ssh/config` aliases | Resolved natively, then russh (`Match`/canonicalize/GSSAPI unsupported — no fallback) |
| **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> palette · <kbd>⌘ F</kbd> scrollback search · eight themes · IME |
| **Coding agents** | per-pane agent detection (~17 CLIs): status dot, notifications, branch + diff, resume after reboot |
| **SSH** | native russh stack: profiles with keychain secrets, SFTP panel, port forwarding, jump hosts |
Details for every row: [docs/features.md](docs/features.md). Keybindings: <kbd>⌘ ,</kbd>
opens Settings — browse and remap everything, tmux preset included
([full list](docs/features.md#keybindings)).
## Benchmarks
All four terminals measured back-to-back on the same machine, same day, same
155×40 grid — Apple M1 Pro, macOS 26.3.1, five-run averages (2026-07-04):
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 |
|---|---:|---:|---:|---:|
@@ -110,44 +62,7 @@ All four terminals measured back-to-back on the same machine, same day, same
<sub>¹ GUI 105 MB + the persistent daemon 11 MB.</sub>
Where the speed comes from:
- The PTY is read at device speed and parsed in large batches, off the render path
- Hot paths are lock-free — a big `cat` never waits on drawing
- The daemon buffers up to 16 MiB ahead of the window before backpressure applies
Methodology (how each terminal is driven, grid fairness, known pitfalls) and
one-command reproduction live in [`scripts/bench/`](scripts/bench/README.md) —
run it yourself.
## Keybindings
Keys are shown in macOS notation — on Windows and Linux, read <kbd>⌘</kbd> as
<kbd>Ctrl</kbd>. Open Settings with <kbd>⌘ ,</kbd> to browse or remap them all.
The essentials:
| | |
|---|---|
| <kbd>⌘ T</kbd> · <kbd>⌘ W</kbd> · <kbd>⌘ ⇧ T</kbd> | new tab · close tab · reopen closed tab |
| <kbd>⌘ 1</kbd>…<kbd>⌘ 9</kbd> · <kbd>⌃ ⇥</kbd> · <kbd>⌃ ⇧ ⇥</kbd> | jump to tab 19 · next tab · previous tab |
| <kbd>⌘ D</kbd> · <kbd>⌘ ⇧ D</kbd> | split right · split down |
| <kbd>⌘ ]</kbd> · <kbd>⌘ [</kbd> | next pane · previous pane |
| <kbd>⌘ ⌥ ←→↑↓</kbd> | focus the pane in that direction |
| <kbd>⌘ ⏎</kbd> · <kbd>⌘ ⇧ ⏎</kbd> | toggle fullscreen · maximize / restore the pane |
| <kbd>⌘ K</kbd> | clear the screen and scrollback |
| <kbd>⌘ P</kbd> | command palette |
| <kbd>⌘ F</kbd> | search the scrollback |
| <kbd>⌃ R</kbd> | fuzzy-search shell history |
| <kbd>⌘ +</kbd> · <kbd>⌘ </kbd> · <kbd>⌘ 0</kbd> | font size up · down · reset |
**Settings → Keybindings** lists every shortcut. Click one, press the new keys
(<kbd>Esc</kbd> cancels, <kbd>Backspace</kbd> resets to default), and it takes
effect immediately. Pane resize and swap have no default keys — bind them here or
run them from the command palette. Prefer tmux muscle memory? Flip the **tmux**
preset to remap pane/tab actions onto a prefix (default <kbd>⌃ B</kbd>): <kbd>⌃ B</kbd>
<kbd>C</kbd> opens a tab, <kbd>⌃ B</kbd> <kbd>%</kbd> splits, <kbd>⌃ B</kbd> then an
arrow moves focus. A bare prefix reaches the shell after a brief pause, and
`prefix` + an unbound key is passed straight through to the terminal.
Methodology and one-command reproduction: [`scripts/bench/`](scripts/bench/README.md).
---
+25 -100
View File
@@ -4,9 +4,9 @@
### tty7
**纯 Rust 编写的 GPU 渲染终端**
**终端工作台:shell、会话、SSH、coding agent**
<sub>GPU 渲染基于 Zed 的 gpui · VT 内核来自 Alacritty</sub>
<sub>纯 Rust · GPU 渲染基于 Zed 的 gpui · VT 内核来自 Alacritty</sub>
<br />
@@ -15,85 +15,43 @@
[![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%E7%BE%A4%E7%BB%84-5865F2?logo=discord&logoColor=white)](https://discord.gg/s3dethqz2V)
[**为什么是 tty7**](#为什么是-tty7) · [**安装**](#安装) · [**功能**](#功能) · [**基准测试**](#基准测试) · [**快捷键**](#快捷键)
<sub>[English](README.md) · 简体中文</sub>
</div>
## 为什么是 tty7
## 为什么
- **快** —— 同一台机器上,吞吐约为 Alacritty、Ghostty、Kitty 的
2 倍([基准测试](#基准测试)
- **现代的提示符** —— 补全、语法高亮、历史搜索全部内置,不用东拼西凑插件
- **会话不死** —— 关窗口、退应用,shell 照样运行;无需 tmux
- **零配置** —— zsh、bash、fish、PowerShell 开箱即用
macOS、Windows、Linux 三平台原生构建,每个 release 一起打出。
- **快** —— 吞吐约为 Alacritty、Ghostty、Kitty 的 2 倍([基准测试](#基准测试)
- **会话常驻** —— 退应用、重启机器,shell 照样运行;无需 tmux
- **编辑器级输入** —— 补全、语法高亮、历史搜索内置;zsh、bash、fish、PowerShell 零配置
- **认识 agent** —— 识别 pane 里的 Claude Code 等:状态、通知、会话恢复
## 安装
[**Releases**](https://github.com/l0ng-ai/tty7/releases) 下载对应平台的构建
三平台原生构建都在 [**Releases**](https://github.com/l0ng-ai/tty7/releases)
- **macOS** —— `tty7-<version>-macos-arm64.dmg`Apple Silicon)或 `…-x86_64.dmg`
Intel);打开后把 `tty7.app` 拖进「应用程序」即可。
- **Windows** —— `…-windows-x86_64-setup.exe`(安装包:带开始菜单快捷方式和
卸载入口),或 `…-windows-x86_64.zip`(便携版:解压后运行 `tty7.exe`)。
- **Linux** —— `…-linux-x86_64.AppImage`(推荐:已打包 x11/wayland 依赖库,
Fedora / Arch 等发行版免装依赖,`chmod +x` 后直接运行),或
`…-linux-x86_64.tar.gz`(裸二进制,解压后运行 `./tty7`,需自行装齐常见的
x11/wayland 运行时库)。
| | | |
|---|---|---|
| **macOS** | `…-macos-arm64.dmg` · `…-x86_64.dmg` | 拖进「应用程序」 |
| **Windows** | `…-setup.exe` · 便携版 `….zip` | |
| **Linux** | `…-x86_64.AppImage` | `chmod +x` 直接跑,x11/wayland 依赖已打包 |
## 功能
## 有什么
### 提示符
- **影子建议** —— 边打字边用你的历史补全整条命令,<kbd>→</kbd> 接受
- **会解释的 Tab 补全** —— 每个 flag、每个子命令都带说明,覆盖约 100 个常用命令
- **语法高亮** —— 边打边亮,什么都不用装
- **模糊历史搜索** —— <kbd>⌃ R</kbd> 看到每条命令在哪跑的、什么时候、有没有失败
- **历史开箱即用** —— 你已有的 shell 历史直接生效,并跨会话延续
- **真正的行编辑** —— 选区、词级移动、撤销
### 窗口
- **标签页与分屏** —— 永远开在当前目录
- **命令面板** <kbd>⌘ P</kbd> · 回滚搜索 <kbd>⌘ F</kbd>
- **⌘ 点击打开链接** · 桌面通知
- **8 套主题** · CJK / 输入法输入
### CLI coding agent
tty7 能识别 pane 里跑着的第三方 coding agentClaude Code、Codex、Gemini CLI、Aider、Amp、OpenCode 等约 17 个)并为其增强体验 —— 只观察、只加分,绝不包裹或替代 agent 本身。
- **品牌头像** —— 标签 chip / 侧栏行显示每个 pane 跑的是哪个 agent;自定义包装命令可通过 `config.json``agent_commands` 映射
- **实时状态点** —— 工作中(蓝)/ 等你输入(琥珀)/ 完成(绿),由 agent 自己上报的 OSC 事件驱动;在命令面板运行 *Agent: Install Claude Code Hooks* 一键接通 Claude Code
- **真正有用的通知** —— agent 卡在等你批准的那一刻弹 "needs your permission…",每轮结束弹 "finished after Ns",遵循你的通知策略
- **一眼看分支** —— 侧栏每行显示该 pane 的 git 分支和工作区改动(`+N M`),`cd` 或命令跑完时自动刷新
- **会话恢复** —— 重启后无法重连的 pane 会自动续上 agent 对话(`claude --resume …``restore_agent_sessions`,默认开启)
- **上下文回填** —— 面板命令把当前选区或仓库 `git diff` 打包成 prompt 直接喂给正在跑的 agent
### SSH 连接管理器
**唯一**路径就是原生 Rust SSH 栈(russh)—— profile、凭据、SFTP 全部内置,绝不 shell 出 `ssh`。没有系统 ssh 兼容模式。
- **QuickConnect** —— 面板里打 `user@host[:port]` 回车即连;支持 IPv6 `[::1]:port`
- **保存 profile** —— 完整连接配置,密码 / passphrase 进 OS keychain,绝不落盘
- **`~/.ssh/config` alias** —— 直接输入 alias 即连(原生解析常用字段,尽力而为,走 russh),也可在设置页一键导入为 profile
- **GUI 认证** —— pane 内 sheet 输入密码、私钥 passphrase、2FA,并确认主机密钥(新主机 vs 已变更)
- **内置 SFTP** —— 滑入式文件面板:浏览、上传 / 下载、重命名 / 删除 / chmod,可拖进 Finder
- **端口转发** —— Local / Remote / Dynamic,预配置或运行时增删,外加 ⌘ 点击 `localhost:PORT` 一键转发
- **跳板与代理** —— 经 profile 引用或 `ProxyJump` 多跳、ProxyCommand、SOCKS5 / HTTP
| 入口 | 连接方式 |
| | |
|---|---|
| 保存 profile · QuickConnect · 输入 `user@host[:port]` | 原生 russh —— SFTP · keychain · GUI 认证 · L/R/D 转发 |
| `~/.ssh/config` alias | 原生解析后走 russh`Match`/canonicalize/GSSAPI 不支持,且无回退) |
| **输入** | 历史影子建议 · 带说明的 Tab 补全 · 语法高亮 · 多行编辑 · 点击定位光标 · <kbd>⌃ R</kbd> 模糊历史搜索 |
| **窗口** | 标签页与分屏 · <kbd>⌘ P</kbd> 命令面板 · <kbd>⌘ F</kbd> 回滚搜索 · 8 套主题 · 输入法 |
| **Coding agent** | 按 pane 识别约 17 个 CLI agent:状态点、通知、分支 + diff、重启后续上会话 |
| **SSH** | 原生 russh 栈:profile 凭据进 keychain、SFTP 面板、端口转发、跳板机 |
每一行的细节见 [docs/features.zh-CN.md](docs/features.zh-CN.md)。快捷键:<kbd>⌘ ,</kbd>
打开设置,可查看、重绑全部键位,含 tmux 预设([完整列表](docs/features.zh-CN.md#快捷键))。
## 基准测试
四款终端在同一台机器上依次测完,网格统一 155×40 —— Apple M1 Pro
macOS 26.3.1取五次运行的平均值(2026-07-04):
同一台机器、同一天、统一 155×40 网格 —— Apple M1 PromacOS 26.3.1
取五次运行的平均值(2026-07-04):
| | **tty7** | Alacritty | Ghostty | Kitty |
|---|---:|---:|---:|---:|
@@ -103,40 +61,7 @@ macOS 26.3.1,取五次运行的平均值(2026-07-04):
<sub>¹ GUI 105 MB + 常驻守护进程 11 MB。</sub>
速度从哪来:
- 以设备速度读取 PTY,在渲染路径之外成批解析
- 热路径全程无锁 —— 再大的 `cat` 也不会阻塞在渲染上
- 触发背压前,守护进程最多可领先窗口缓冲 16 MiB
测试方法(每款终端怎么驱动、网格是否公平、有哪些坑)连同一键复现脚本,都放在
[`scripts/bench/`](scripts/bench/README.md),欢迎自己跑一遍。
## 快捷键
下表按 macOS 记法书写 —— 在 Windows 和 Linux 上,把 <kbd>⌘</kbd> 读作
<kbd>Ctrl</kbd>。按 <kbd>⌘ ,</kbd> 打开设置,可查看或重新映射全部键位。最常用的几个:
| | |
|---|---|
| <kbd>⌘ T</kbd> · <kbd>⌘ W</kbd> · <kbd>⌘ ⇧ T</kbd> | 新建标签页 · 关闭标签页 · 恢复关闭的标签页 |
| <kbd>⌘ 1</kbd>…<kbd>⌘ 9</kbd> · <kbd>⌃ ⇥</kbd> · <kbd>⌃ ⇧ ⇥</kbd> | 跳到第 1–9 个标签页 · 下一个 · 上一个标签页 |
| <kbd>⌘ D</kbd> · <kbd>⌘ ⇧ D</kbd> | 向右分屏 · 向下分屏 |
| <kbd>⌘ ]</kbd> · <kbd>⌘ [</kbd> | 下一个窗格 · 上一个窗格 |
| <kbd>⌘ ⌥ ←→↑↓</kbd> | 按方向切换焦点窗格 |
| <kbd>⌘ ⏎</kbd> · <kbd>⌘ ⇧ ⏎</kbd> | 切换全屏 · 最大化 / 还原窗格 |
| <kbd>⌘ K</kbd> | 清屏并清空回滚缓冲区 |
| <kbd>⌘ P</kbd> | 命令面板 |
| <kbd>⌘ F</kbd> | 搜索回滚缓冲区 |
| <kbd>⌃ R</kbd> | 模糊搜索 shell 历史 |
| <kbd>⌘ +</kbd> · <kbd>⌘ </kbd> · <kbd>⌘ 0</kbd> | 字号增大 · 减小 · 重置 |
**Settings → Keybindings** 列出全部快捷键。点一行、按下新键即可(<kbd>Esc</kbd>
取消,<kbd>Backspace</kbd> 恢复默认),改完立即生效。窗格缩放与交换默认不绑定键 ——
在这里绑定,或从命令面板执行。习惯 tmux?打开 **tmux** 预设,把窗格/标签页操作
映射到前缀键(默认 <kbd>⌃ B</kbd>):<kbd>⌃ B</kbd> <kbd>C</kbd> 新建标签页,
<kbd>⌃ B</kbd> <kbd>%</kbd> 分屏,<kbd>⌃ B</kbd> 接方向键切换焦点。单独按前缀键会在
短暂延迟后送达 shell,`前缀` + 未绑定的键会原样透传给终端。
测试方法与一键复现脚本:[`scripts/bench/`](scripts/bench/README.md)。
---
+86
View File
@@ -0,0 +1,86 @@
# Features
<sub>English · [简体中文](features.zh-CN.md)</sub>
## Input
- **Ghost suggestions** — your history completes the whole line as you type; <kbd>→</kbd> to accept
- **Explained tab completion** — every flag and subcommand with its description, for ~100 common commands
- **Syntax highlighting** — as you type, nothing to install
- **Fuzzy history search** — <kbd>⌃ R</kbd> shows what you ran, where, and whether it failed
- **History from day one** — your existing shell history works as-is and carries across sessions
- **Line editing** — click to place the caret, mouse selection, word motion, undo
- **Multi-line editing** — wrapped and multi-line commands edit in place; the grid shifts to keep the caret visible
## In the window
- **Tabs & splits** — always open in the current directory
- **Command palette** <kbd>⌘ P</kbd> · scrollback search <kbd>⌘ F</kbd>
- **⌘-click links** · desktop notifications · copy on select (opt-in, Settings → Terminal → Clipboard)
- **Eight themes** · CJK / IME input
## Coding agents
tty7 recognizes third-party coding agents running in a pane (Claude Code,
Codex, Gemini CLI, Aider, Amp, OpenCode, and ~10 more) and adds around them —
it never wraps or replaces the agent.
- **Brand avatars** — the tab chip / sidebar row shows which agent runs where; custom wrappers map in via `agent_commands` in `config.json`
- **Status dot** — working (blue) / needs your input (amber) / done (green), driven by agent-reported events over an OSC channel; run *Agent: Install Claude Code Hooks* from the palette to wire Claude Code up
- **Notifications** — "needs your permission…" the moment an agent blocks on you, and "finished after Ns" per turn, honoring your notification policy
- **Branch at a glance** — each sidebar row shows its pane's git branch and working-tree diff (`+N M`), refreshed on `cd` and when a command finishes
- **Session resume** — panes lost to a reboot re-launch their agent conversation (`claude --resume …`) on restore (`restore_agent_sessions`, on by default)
- **Context feed** — palette commands send the current selection or the repo's `git diff` to the running agent as a ready-made prompt
## SSH
A native Rust SSH stack (russh) is the **only** path — profiles, credentials,
and SFTP without shelling out to `ssh`. There is no system-ssh compat mode.
- **QuickConnect** — type `user@host[:port]` in the palette and connect; IPv6 `[::1]:port` supported
- **Saved profiles** — full connection config with passwords / passphrases in the OS keychain, never on disk
- **`~/.ssh/config` aliases** — type one to connect (resolved natively — common fields, best-effort — over russh), or import them as profiles in Settings
- **GUI auth** — in-pane sheets for password, key passphrase, 2FA, and host-key confirmation (new vs. changed)
- **Built-in SFTP** — a slide-in file panel: browse, upload / download, rename / delete / chmod, drag to Finder
- **Port forwarding** — Local / Remote / Dynamic, preconfigured or added live, plus ⌘-click `localhost:PORT` to auto-forward
- **Jump hosts & proxies** — multi-hop via profile references or `ProxyJump`, ProxyCommand, SOCKS5 / HTTP
| Entry point | Connects via |
|---|---|
| Saved profiles · QuickConnect · typed `user@host[:port]` | Native russh — SFTP · keychain · GUI auth · L/R/D forwards |
| `~/.ssh/config` aliases | Resolved natively, then russh (`Match`/canonicalize/GSSAPI unsupported — no fallback) |
## Keybindings
Keys are shown in macOS notation — on Windows and Linux, read <kbd>⌘</kbd> as
<kbd>Ctrl</kbd>. The essentials:
| | |
|---|---|
| <kbd>⌘ T</kbd> · <kbd>⌘ W</kbd> · <kbd>⌘ ⇧ T</kbd> | new tab · close tab · reopen closed tab |
| <kbd>⌘ 1</kbd>…<kbd>⌘ 9</kbd> · <kbd>⌃ ⇥</kbd> · <kbd>⌃ ⇧ ⇥</kbd> | jump to tab 19 · next tab · previous tab |
| <kbd>⌘ D</kbd> · <kbd>⌘ ⇧ D</kbd> | split right · split down |
| <kbd>⌘ ]</kbd> · <kbd>⌘ [</kbd> | next pane · previous pane |
| <kbd>⌘ ⌥ ←→↑↓</kbd> | focus the pane in that direction |
| <kbd>⌘ ⏎</kbd> · <kbd>⌘ ⇧ ⏎</kbd> | toggle fullscreen · maximize / restore the pane |
| <kbd>⌘ K</kbd> | clear the screen and scrollback |
| <kbd>⌘ P</kbd> | command palette |
| <kbd>⌘ F</kbd> | search the scrollback |
| <kbd>⌃ R</kbd> | fuzzy-search shell history |
| <kbd>⌘ +</kbd> · <kbd>⌘ </kbd> · <kbd>⌘ 0</kbd> | font size up · down · reset |
**Settings → Keybindings** (<kbd>⌘ ,</kbd>) lists every shortcut. Click one,
press the new keys (<kbd>Esc</kbd> cancels, <kbd>Backspace</kbd> resets to
default), and it takes effect immediately. Pane resize and swap have no default
keys — bind them here or run them from the command palette.
**tmux preset** — remaps pane/tab actions onto a prefix (default <kbd>⌃ B</kbd>):
<kbd>⌃ B</kbd> <kbd>C</kbd> opens a tab, <kbd>⌃ B</kbd> <kbd>%</kbd> splits,
<kbd>⌃ B</kbd> then an arrow moves focus. A bare prefix reaches the shell after
a brief pause; `prefix` + an unbound key passes straight through.
## Performance notes
- The PTY is read at device speed and parsed in large batches, off the render path
- Hot paths are lock-free — a big `cat` never waits on drawing
- The daemon buffers up to 16 MiB ahead of the window before backpressure applies
+84
View File
@@ -0,0 +1,84 @@
# 功能
<sub>[English](features.md) · 简体中文</sub>
## 输入
- **影子建议** —— 边打字边用你的历史补全整条命令,<kbd>→</kbd> 接受
- **带说明的 Tab 补全** —— 每个 flag、每个子命令都带说明,覆盖约 100 个常用命令
- **语法高亮** —— 边打边亮,什么都不用装
- **模糊历史搜索** —— <kbd>⌃ R</kbd> 看到每条命令在哪跑的、什么时候、有没有失败
- **历史开箱即用** —— 你已有的 shell 历史直接生效,并跨会话延续
- **行编辑** —— 点击定位光标、鼠标选区、词级移动、撤销
- **多行编辑** —— 折行和多行命令原地编辑;网格自动上移,光标始终可见
## 窗口
- **标签页与分屏** —— 永远开在当前目录
- **命令面板** <kbd>⌘ P</kbd> · 回滚搜索 <kbd>⌘ F</kbd>
- **⌘ 点击打开链接** · 桌面通知 · 划选即复制(可选,设置 → 终端 → 剪贴板)
- **8 套主题** · CJK / 输入法输入
## Coding agent
tty7 能识别 pane 里跑着的第三方 coding agentClaude Code、Codex、Gemini CLI、
Aider、Amp、OpenCode 等约 17 个)并在其外围加功能 —— 绝不包裹或替代 agent 本身。
- **品牌头像** —— 标签 chip / 侧栏行显示每个 pane 跑的是哪个 agent;自定义包装命令可通过 `config.json``agent_commands` 映射
- **状态点** —— 工作中(蓝)/ 等你输入(琥珀)/ 完成(绿),由 agent 自己上报的 OSC 事件驱动;在命令面板运行 *Agent: Install Claude Code Hooks* 一键接通 Claude Code
- **通知** —— agent 卡在等你批准的那一刻弹 "needs your permission…",每轮结束弹 "finished after Ns",遵循你的通知策略
- **一眼看分支** —— 侧栏每行显示该 pane 的 git 分支和工作区改动(`+N M`),`cd` 或命令跑完时自动刷新
- **会话恢复** —— 重启后无法重连的 pane 会自动续上 agent 对话(`claude --resume …``restore_agent_sessions`,默认开启)
- **上下文回填** —— 面板命令把当前选区或仓库 `git diff` 打包成 prompt 直接喂给正在跑的 agent
## SSH
**唯一**路径就是原生 Rust SSH 栈(russh)—— profile、凭据、SFTP 全部内置,
不 shell 出 `ssh`,也没有系统 ssh 兼容模式。
- **QuickConnect** —— 面板里打 `user@host[:port]` 回车即连;支持 IPv6 `[::1]:port`
- **保存 profile** —— 完整连接配置,密码 / passphrase 进 OS keychain,不落盘
- **`~/.ssh/config` alias** —— 直接输入 alias 即连(原生解析常用字段,尽力而为,走 russh),也可在设置页一键导入为 profile
- **GUI 认证** —— pane 内 sheet 输入密码、私钥 passphrase、2FA,并确认主机密钥(新主机 vs 已变更)
- **内置 SFTP** —— 滑入式文件面板:浏览、上传 / 下载、重命名 / 删除 / chmod,可拖进 Finder
- **端口转发** —— Local / Remote / Dynamic,预配置或运行时增删,外加 ⌘ 点击 `localhost:PORT` 一键转发
- **跳板与代理** —— 经 profile 引用或 `ProxyJump` 多跳、ProxyCommand、SOCKS5 / HTTP
| 入口 | 连接方式 |
|---|---|
| 保存 profile · QuickConnect · 输入 `user@host[:port]` | 原生 russh —— SFTP · keychain · GUI 认证 · L/R/D 转发 |
| `~/.ssh/config` alias | 原生解析后走 russh`Match`/canonicalize/GSSAPI 不支持,且无回退) |
## 快捷键
下表按 macOS 记法书写 —— 在 Windows 和 Linux 上,把 <kbd>⌘</kbd> 读作
<kbd>Ctrl</kbd>。最常用的几个:
| | |
|---|---|
| <kbd>⌘ T</kbd> · <kbd>⌘ W</kbd> · <kbd>⌘ ⇧ T</kbd> | 新建标签页 · 关闭标签页 · 恢复关闭的标签页 |
| <kbd>⌘ 1</kbd>…<kbd>⌘ 9</kbd> · <kbd>⌃ ⇥</kbd> · <kbd>⌃ ⇧ ⇥</kbd> | 跳到第 1–9 个标签页 · 下一个 · 上一个标签页 |
| <kbd>⌘ D</kbd> · <kbd>⌘ ⇧ D</kbd> | 向右分屏 · 向下分屏 |
| <kbd>⌘ ]</kbd> · <kbd>⌘ [</kbd> | 下一个窗格 · 上一个窗格 |
| <kbd>⌘ ⌥ ←→↑↓</kbd> | 按方向切换焦点窗格 |
| <kbd>⌘ ⏎</kbd> · <kbd>⌘ ⇧ ⏎</kbd> | 切换全屏 · 最大化 / 还原窗格 |
| <kbd>⌘ K</kbd> | 清屏并清空回滚缓冲区 |
| <kbd>⌘ P</kbd> | 命令面板 |
| <kbd>⌘ F</kbd> | 搜索回滚缓冲区 |
| <kbd>⌃ R</kbd> | 模糊搜索 shell 历史 |
| <kbd>⌘ +</kbd> · <kbd>⌘ </kbd> · <kbd>⌘ 0</kbd> | 字号增大 · 减小 · 重置 |
**Settings → Keybindings**<kbd>⌘ ,</kbd>)列出全部快捷键。点一行、按下新键即可
<kbd>Esc</kbd> 取消,<kbd>Backspace</kbd> 恢复默认),改完立即生效。窗格缩放与
交换默认不绑定键 —— 在这里绑定,或从命令面板执行。
**tmux 预设** —— 把窗格/标签页操作映射到前缀键(默认 <kbd>⌃ B</kbd>):
<kbd>⌃ B</kbd> <kbd>C</kbd> 新建标签页,<kbd>⌃ B</kbd> <kbd>%</kbd> 分屏,
<kbd>⌃ B</kbd> 接方向键切换焦点。单独按前缀键会在短暂延迟后送达 shell,
`前缀` + 未绑定的键原样透传给终端。
## 性能说明
- 以设备速度读取 PTY,在渲染路径之外成批解析
- 热路径全程无锁 —— 再大的 `cat` 也不会阻塞在渲染上
- 触发背压前,守护进程最多可领先窗口缓冲 16 MiB