Unterm

Unterm 的全部功能

完整清单:每一个控制面、每一项能力,以及为什么这样设计。

阅读高级用法 →

60 秒看懂 Unterm

所有数字都能在源码 / Releases 里核对 · 每次发布刷新
最新版本
v0.71.18 · 2026-10-04 · MIT
内置 AI agent
7 个签名 manifest —— Claude Code · Codex CLI · Gemini CLI · OpenCode · Aider · Kimi Code CLI · Trae Agent。从 unterm.app/api/agents/manifests 拉 Ed25519 签名信封,每个 agent 可选认证模式。
价格
永久 $0 · 无付费层 · 无订阅 · 无内购
平台
macOS(universal)· Linux x86_64 + arm64(.deb + AppImage)· Windows 10/11 x64 + arm64(.msi + 便携 .zip)—— 每个版本 9 个安装包
安装包大小
DMG 50 MB · .deb 27 MB · AppImage 43 MB · MSI 43 MB(x86_64 / x64)
空闲内存
~110 MB · 随开启 pane 线性增长
界面语言
9 种 — en · 简体 · 繁體 · 日本語 · 한국어 · Deutsch · Français · Italiano · हिन्दी
控制面
MCP(TCP 上的 JSON-RPC)· HTTP 网页设置 · unterm-cli · GUI — 同一份 JSON 状态四个入口共用
已验证 agent 集成
Claude Code · Cursor · Codex CLI · 自定义 Python / Node MCP 客户端 — 都走同一个 socket,约 30 行代码
数据收集
零遥测 · 无账号 · 无统计 · 所有服务仅监听 127.0.0.1
技术栈
Rust · 原生 next-core 引擎 · wgpu · MCP(line-delimited JSON-RPC)· Tailwind + Alpine 网页设置
v0.18 · AI Agent 启动器

每个编码 agent 都能一键装上。零配置门槛。

如果你同时试过多个 AI 编码 CLI,你知道那个税:npm install、OAuth、申请 API key、~/.config/<vendor>/<每家格式不同>、环境变量、不同身份隔离。Unterm v0.18 把这一切收进一个设置 tab + 一个 CLI 子命令。没有任何其它终端在做这件事。

Claude Code
Anthropic
OAuth · BYO key · gateway
Codex CLI
OpenAI
ChatGPT OAuth · BYO key · gateway
Gemini CLI
Google
Google OAuth · BYO key · Vertex
OpenCode
SST
BYO key · local
Aider
Open-source
BYO key · local
01 · one click

GUI 装或 CLI 装都行

在 agent 卡片上点 安装,或者跑 unterm-cli agent install <id>。Unterm 按你的平台跑对应的命令 (npm / pipx 等),验证 binary 进了 PATH,自动重新探测。

02 · subscription-safe

默认走官方订阅,BYO key 仍是 opt-in

大部分 agent 都有官方账号 / 订阅登录路径(Claude Pro、ChatGPT Plus、Google AI Pro)。Unterm 默认就是这个模式 —— 永远不偷偷往 session 里注入 API key。只有当你确实想按 token 计费或者走企业 gateway 时,才显式切到「自带 key」或「自定义端点」。

03 · signed catalog

Ed25519 签名 manifest 目录

agent 列表和安装命令不是写死在 Unterm 里 —— 而是从 unterm.app/api/agents/manifests 拉的签名信封。即使 CDN 被攻破也推不了 curl | sh 到你机器上,公钥 baked 进每个 Unterm binary。

AI 控制终端,MCP 让它落地。

大多数终端把 AI 嵌进二进制里。Unterm 反着来:AI 留在外面,把终端作为一个表面开放出来,任何外部 agent 都能通过 MCP 抓握它。终端是被控制的那一方,agent 是干活的那一方。

典型场景

一个 AI 通过终端控制另一个 AI。

外层 agent 拿着终端会话,切换 cwd,启动分屏里的内层 coding agent,读取日志,并在仓库变绿之前持续迭代。

01
打开仓库

外层 agent 先把当前 pane 指向项目根目录,这样每条命令、日志和截图都锚定在同一个工作目录里。

02
启动内层 agent

它在分屏里拉起一个 coding agent,把任务交给它,让这个 agent 在终端内部完成编辑循环。

03
读取、重试、发布

外层 agent 读取测试输出和 pane 状态,必要时继续重试,只有等终端显示工作完成后才进入提交或发布。

outer agent → inner agent
demo
→ open /work/auth-service in a new tab and start a coding agent
unterm session.create { cwd: "/work/auth-service" }
→ { session_id: "7", pid: 41208 }
unterm exec.run { id: "7", command: "claude" }
→ inner agent ready
unterm exec.run { id: "7", command: "cargo test" }
running 142 tests
test result: ok. 142 passed; 0 failed
unterm screen.scrollback_text { id: "7" }
→ { text: "…build is green, commit the fix", row_count: 142 }
$
zsh · ~/work/auth-service · 80×24 · mcp:4

Unterm 的三种用法

我们没为单一工作流设计。MCP 表面让每个角色都通过不同入口拿到同一套控制平面。

🤖
AI 工程师

从 Claude Code、Cursor 或自己的 agent 控制多个终端 pane。每个 pane 一个任务;agent 决定在哪儿打字。多实例 NATO 命名(alpha、bravo、charlie…)让跨窗口路由变得简单。

  • 导演/工人模式:外层 agent 监督 pane 里的内层 agent
  • 长任务监视:发起构建,轮询到 idle,决定下一步
  • 多 pane 编排:把工作分到多个项目,聚合结果
  • 带 token 脱敏的录制,供 review 和微调
⚙️
DevOps 与 SRE

GUI 能做的事 cron 也能做。unterm-cli 在每个 release 里都有;任何下游想要原始 JSON-RPC 都可以用 --json。运维脚本、面板、Runbook 同一个表面。

  • 自动代理探测:macOS scutil / Windows registry / GNOME gsettings
  • 无头截图、pane 读取,便于事故文档
  • 录制 → markdown 用于 Runbook 生成,默认 PII 脱敏
  • 无埋点、无登录,所有服务绑定 127.0.0.1
🔧
高级用户与开源 hacker

MIT 授权,自 v0.61 起跑在自研 next-core 内核上(约 12k 行、10 个直接依赖),自带一流 agent 集成。GitHub 上接受 PR。自己编译;二进制 CLI 每个 release 都打包。Web Settings UI 是 Tailwind + Alpine SPA——fork 页面,改颜色。

  • macOS 通用 arm64 + x86_64 二进制,Developer ID 签名
  • Linux .deb(apt)和 AppImage(任意发行版)
  • Windows MSI(WiX 6)+ 便携 .zip
  • 9 种语言开箱即用,自动跟随系统 locale

四个控制面,一个引擎

每个 Unterm 窗口都会启动一个本地 MCP 服务和一个 HTTP 设置服务。从任意一个入口都能读写同一份 JSON 状态。

🔌
MCP 服务

127.0.0.1:19876 上按行分隔的 JSON-RPC,需 auth token 鉴权。开 shell、读 pane 状态、截图、控制会话。

⚡
unterm-cli

在任意 shell、cron 任务或脚本里使用同一套表面。它只是本地 MCP 之上的一层 JSON-RPC 客户端,不重复实现业务逻辑。

🖥️
网页设置

在浏览器里配置,而不是在字符网格里折腾。Tailwind + Alpine SPA,地址 127.0.0.1:19877。主题、代理、录制、语言。

🌍
9 种语言

en / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Français / Italiano / हिन्दी 开箱即用,自动识别系统语言。

🎬
会话录制

按 OSC 133 分块的 markdown,内置脱敏。录制文件保存在 <cwd>/.unterm/sessions/。

📸
区域截图

在状态栏一键框选截图。PNG 存到磁盘,图像进剪贴板,路径进文本剪贴板。

🌐
代理自动检测

自动检测 macOS、Windows、GNOME 与环境变量,也支持手动 HTTP/SOCKS 地址、命名节点、轮换及 Clash/mihomo 控制器。

⚙️
GPU 渲染

使用 Unterm 原生 next-core 终端引擎与跨平台 wgpu 渲染。

完整的控制面

不是截图导览,而是每个 agent 和脚本都能调用的真实表面:30 个命名空间下 152 个 MCP 方法,外加 34 个 CLI 命令,全部返回同一份 JSON。

152
MCP 方法
30
命名空间
34
CLI 命令
4
控制面
22ms
启动到 MCP 可用
~12k
内核源码行数
🛩️ Agent 座舱
cockpit · fleet.* · review.* · 11

实时看到每个 CLI agent 的状态(干活中 / 等你 / 空闲),从 Agent 收件箱一键跳到需要你的那个,在隔离的 git worktree 里为同一个任务启动 N 个 agent 编队,再对它们的产出审阅、合并或回滚——GUI、MCP、CLI 都能操作。

agent.status · cockpit.inbox · fleet.launch · fleet.retry · review.verify · review.diff · review.merge · review.rollback
🪟 会话与分屏
session.* · 27

从终端外创建、切分、聚焦、调整尺寸、销毁 pane。逐字符往任意 pane 打字、读它的 cwd、轮询到 idle —— 完全不用模拟按键。

create · split · focus · resize · input · destroy · history · idle · cwd
👁️ 屏幕读取
screen.* · 8

拉取实时 viewport 文本、把完整 scrollback 作一个字符串、光标位置、或正则搜索。detect_errors 标出失败命令供 agent 响应。

text · scrollback_text · search · cursor · detect_errors · scroll
▶️ 命令执行
exec.* · 5

跑命令并流式拿输出、run-and-wait 拿退出码、发原始字节、查状态、取消、或投递 POSIX 信号 —— 结构化结果,不是刮屏。

run · run_wait · send · status · cancel · signal.send
🤖 AI agent 启动器
agent · 7 CLIs

安装、登录、配置、启动 Claude Code / Codex / Gemini / OpenCode / Aider。mcp-stdio 桥接把每个 agent 自动接回当前终端的 MCP server。

install · auth · launch · config · mcp-stdio bridge
🪪 身份 profile
profile · 7 sniffers

把窗口绑到一套开发者身份 —— GitHub PAT、AWS keys、npm token、SSH key、git 作者。凭据存在系统 vault;7 个嗅探器只读发现已有的。

list · current · create · switch · delete
🛰️ 多实例
instance.* · 8

每个窗口是一个 NATO 命名实例(alpha、bravo、charlie…)。列举机器上每个活着的 Unterm、聚焦其一、或改标题 —— agent 按 cwd 或标题在窗口间路由任务。

list · info · focus · set_title
🎬 会话录制
recording · markdown

把任意 pane 录成按 OSC 133 命令块切分的 Markdown —— 每块带命令、输出、退出码和耗时 —— 并脱敏 token。录制可通过 MCP 或 CLI 列出、读取、导出。没有回放功能:旧的 asciicast record / replay 命令已移除。

recording_start · stop · status · list · read · export_markdown
📸 截图与上传
capture.* · 6 + upload

截全屏、某个窗口或一个矩形区域(macOS 和 Windows;Linux 上目前返回“尚未实现”);在所有平台把 pane 的整段回滚渲染成一张长图 PNG;在 macOS 上给其他应用的窗口截长图;读剪贴板;或把文件直传你自己的阿里云 OSS / 腾讯 COS / 七牛桶并拿回公开 URL —— 全走 MCP。

screen · window · select · clipboard · scrollback · window_scroll · upload.file
🌐 代理管理
proxy.* · 12

读 OS 代理状态、在配置好的节点间切换、测延迟、或应用 / 清除系统代理覆盖(macOS scutil · Windows 注册表 · Linux env)—— 零 URL 粘贴。

status · switch · nodes · speedtest · configure · disable · env
🛡️ 治理与审计
governance · 9

每次 agent 写入都记录其身份;写入确认策略把控首次接触。测试策略判定、跑内置自测套件、读 liveness/readiness 标志。

audit_log · policy.check/set · agent.identify · selftest.run · server.health
💾 工作区
workspace.* · 3

保存当前窗口完整的 pane / tab 布局、列出已存布局、恢复其一 —— agent 可以给一组工作快照,之后再拉回来。

save · restore · list
📖 自描述表面
meta.surface

meta.surface 一次调用返回每个 MCP 方法(含参数 schema)、每个 CLI 子命令、每个生效的快捷键 —— 刚连进来的 agent 不查文档就学会整套 API。

reference · show-keys · settings · theme · lang

agent 和脚本通过 MCP(TCP 上的 JSON-RPC)和 unterm-cli 二进制使用这套表面;人用的是 GUI 和 网页设置,后者的 HTTP API 脚本也能调用。四个入口互有重叠,但并不一一对应——比如主题、语言和 unterm.conf 就不在 MCP 上。一次 meta.surface(或 unterm-cli reference)往返就实时返回全部 MCP 方法、CLI 命令和快捷键。

Unterm 真正与众不同的地方

三条你自己能 grep / build / run 验证的差异。没营销话术。

🤖 v0.18
你启动每个 AI 编码 agent 的终端

v0.18 让 Unterm 变成 Claude Code / Codex CLI / Gemini CLI / OpenCode / Aider 的一键启动器。每个 agent 的安装命令、OAuth 流程、API key、原生配置文件都由 unterm.app 服务的签名 manifest 描述;runtime 把 key 落进系统 keychain、用 preserve_unknown_keys 写 agent 自己的 JSON/TOML/YAML 配置、把 Unterm 自己暴露为 MCP server 给 agent 用、把 session 入审计 —— 全部从 CLI 和新的 AI Agent Web Settings tab 都能驱动。

🪟 v0.17
AI 从终端外切分屏

session.split + session.focus 通过 MCP 让外部 agent(Claude Code、Cursor、自己写的脚本)把当前窗口左 / 右 / 上 / 下切开并把焦点交给新 pane —— 不用模拟任何按键。Hero 的 Python 例子就在用。其他终端都没把 pane 几何暴露给外部进程。

👁️ v0.16
每一次 agent 写入都可审计、可撤销、可复盘

每一次 session.input / exec.send 都记录调用 agent 的身份。新 agent 首次写入会触发 Allow / Block / Always-allow 横幅。信任写到 ~/.unterm/trusted_agents.json,可在网页设置 MCP 标签里一键撤销。状态栏显示实时 MCP 写入次数。

体验细节

日常用得到的小细节

都不是宣传级特性,但日复一日加起来就是顺手。

👻
跨 pane 的 ghost text

Fish 风格的灰色预测,从任意 pane 的 shell history 续写当前输入;→ 或 End 接受。

✨
session.suggest 建议条

Agent 可以「提议」命令而不直接写入 PTY —— 在状态栏上方显示;Tab 接受,Alt+Enter 接受并执行。

📋
区域截图 → 剪贴板

从状态栏框选任意矩形;PNG 落盘、图像入剪贴板、文件路径作文本一次到位。

🎨
主题 + 每 tab 的 CWD

内置 7 套主题;unterm-cli theme set midnight 一键热切换。状态栏显示当前 pane 的 $HOME 相对路径。

📁
macOS Finder 原生右键

Finder 右键 → Open in Unterm。用 AppleScript Services 扩展,应用内不堆右键菜单。

🪪
状态栏身份芯片

当前窗口绑定的身份 profile(GitHub PAT / AWS keys / npm token)会显示在状态栏;点击切到下一个 profile 的新窗口。

🚦
零配置代理

自动读 macOS scutil / Windows 注册表 / GNOME gsettings / 环境变量。一个开关。不用粘贴 URL。

🌐
OSC 133 分块录制

录制按 shell prompt 边界自动切块。每块带命令、输出、退出码、耗时 —— 都可搜。

v0.71.6 鼠标流

右键就是粘贴。复制交给选中。

整个复制粘贴闭环都在鼠标上,但两半分在两个动作里:松开选区,内容已经在剪贴板;按右键,就在光标处粘贴——有没有选区都一样。永远不弹上下文菜单,没有东西需要关掉。

🖱️
选中——已经复制了

拖选输出,或者直接双击一个词。按键一松,文本就已经在剪贴板上。没有第二个手势要记,也没有什么要按下去确认。

📥
按右键——粘贴

一个键只做一件事:在提示符处粘贴,不管当前有没有选区。从一个 pane 复制、点进另一个、按右键——命令搬过去了,零键盘。剪贴板为空时安静无操作,绝不报错。

⌃
Ctrl+点击,macOS 惯例

macOS 把 Ctrl+点击视为副击,Unterm 也一样——触控板、Magic Mouse 或任何第三方驱动都适用。只有纯 Ctrl 才触发,你自定义的 Ctrl 组合鼠标绑定和 Ctrl+Shift 拖窗完全不受影响。macOS 会把这一个动作派发成两个事件,Unterm 只响应一次。vim、Claude Code 这类接管鼠标的 TUI 里行为相同。

v0.71.6 起改成这样。以前只要有选区,右键就是复制——重复了选中已经做完的事,代价是它本来要做的那次粘贴没发生。

since v0.55 Agent 座舱

终端现在看得见跑在里面的 agent

Claude Code、Codex、Gemini、Aider——每个 pane 都在汇报谁在干活、谁在等你、改了什么。零配置即可用;一条命令升级到 hook 级精确汇报。

Agent 收件箱:Codex 等待批准,Claude 已完成,Claude 工作中
🛰️ 每个 tab 上的实时状态

四层信号——官方 hooks、标题/OSC 解析、进程识别、屏幕启发——折叠为每个 pane 的一个状态:干活中(呼吸蓝点)、等你(琥珀色)、完成、空闲。顶栏跨窗口计数,一有 agent 等你立刻转为警示色。

📥 Agent 收件箱

Ctrl+Shift+A:所有窗口的所有 agent,等待中的排最前,显示卡了多久、卡在什么上。Enter 直接跳到那个 pane。“过去按个 y”现在只要两次按键。

🚀 Fleet:一个任务,N 个 agent

让 claude × 2 + codex 赛跑同一个任务——每个成员在仓库旁自己的 git worktree 和分支里,自己的 tab、自己的状态角标。你的工作区分毫不动。

🔍 Review:改动全程有据可查

agent 一动工,Unterm 就为仓库拍快照(dangling commit——不碰 HEAD、index 和你的文件)。逐行 diff 含 agent 新建的文件,squash 合并到暂存区(commit 由你来做),可回滚到任意快照,成员产出并排对比。

🔌 和其他一切一样,完全可编程

座舱本身就是 MCP + CLI:agent.status、cockpit.inbox、fleet.launch、review.merge……编排型 agent 可以在无人值守下启动编队、审阅 diff。本地优先——这一切不经过任何云。

阅读 Agent 座舱文档 →

v0.71 有什么新变化

一台没有显卡驱动的机器也能把终端打开,第二扇窗从 587 毫秒变成 31 毫秒,shell 活得比开它的那扇窗久,中日韩文字终于能按文字复制——最近八个版本,七张卡。

v0.71.18 终端里直接显示图片

Unterm 现在能显示内嵌图片——kitty 图形协议、iTerm2 内嵌图片和 sixel,chafa、img2sixel、viu、timg 和 unterm-cli imgcat 都会直接显示图片本身。图片随旁边的文字一起滚动、留在回滚历史里、在窗格边缘干净裁切,并只属于绘制它的那一屏(含备用屏)。查询像素格子大小的程序会得到真实值。Agent 可以用 screen.images 列出图片。另外:配置里的 [platform.*] 分段现在生效,close_confirmation 可用,无效的设置会说明原因。

v0.71.17 自己就能更新,也知道命令是怎么结束的

一键更新:unterm-cli update、命令面板里的「安装更新」或 Web 设置里的按钮,会下载新版本、校验 SHA-256(macOS 还校验签名),然后重启进新版本。shell 集成自动加载到 zsh、bash、fish 和 PowerShell:失败的命令会在标签上标 ▲,而只是输出里出现「error」字样的不会。Agent 向终端要的东西也都有了:Shift+Enter 不再等同于 Enter(kitty 键盘协议)、颜色查询按你的主题回答、标签下的进度条(OSC 9;4)、整屏重绘不再撕裂(mode 2026)。另外:Windows 的 shell 菜单里有 Git Bash 和每个 WSL 发行版;崩溃对话框可以打开预填好的 GitHub issue;可以用 Homebrew 和 Scoop 安装。

v0.71 没有显卡驱动的机器,也能把终端打开

启动只试硬件那两条路,试完就不试了。一台没有可用显示驱动的 Windows 机器上——虚拟机、干净装的系统、远程桌面——DX12 找得到适配器却配不出表面,OpenGL 压根没有驱动可找,于是终端以「no working GPU path」拒绝启动,而 WARP 一直在那台机器上:它随 D3D12 发货,不需要任何驱动,只是从来没人问过它。现在回退链的末端是软件光栅器。同一版里:`unterm-cli start` 交接不成而另起一个进程时会说出来——那个退路要付出一份额外的 GPU 适配器和一个共用的 Core;provider manifest 也终于能通过读它的那份契约。

v0.68 一个进程,N 扇窗,第二扇 31 毫秒

第二扇窗从前是第二个 Unterm:又一个 GPU 适配器、又一条 Core 连接、587 毫秒的等待。现在它开在已经跑着的那个进程里,31 毫秒。窗口有了 id,`instance.new_window` 会回答它刚造出来的那一个,`instance.focus` 认它;一个会话只属于一扇窗,关窗关掉的是视图,shell 留在 Core 里交给剩下的窗。只有最后一扇窗才问你是不是真要退出。

v0.68 能把 agent 托管进去的终端,而不是隔着玻璃喊话

能力现在住在租约后面:agent 申请一份,在一把你看得见的钥匙下使用,你撤销时它就失去——而不是每个调用方都攥着同一个没有边界的 socket。批准变得可以回答了,问题说的是「接下来要发生什么」,而不是碰巧实现它的那个方法名。fleet 改为持久存储而不是一个 JSON 文件,跑到一半崩了不再丢掉「谁在做什么」。

v0.66 关掉窗口,shell 留着

「在后台继续运行」终于在屏幕上留下了东西——三个平台都有的托盘指示器,报出还活着几个会话,一次点击把驻留的窗口唤回来。agent 也能做同一件事:`instance.focus` 会唤醒一扇驻留的窗,而不是在它上面失败。两个关闭按钮不再对你的 shell 各执一词——正是那个分歧让「关闭」按哪一个意思就变一次。

v0.64 中日韩文字:复制是字,选中是词,输入不碎

输入中日韩文字曾经碎成 `<009d>` 那样的字节垃圾——GUI 把一个自己从没设过的 locale 交给了 shell。复制出来的是网格里的占位格而不是文字,于是粘贴回来带着窟窿。双击选中半个词,另一半丢了。现在宽字符就是一个字符:选中时是,剪贴板上是,输入进来也是。另外重绘风暴也结束了——比较帧的方式错了,于是不管有没有东西动过都重画一遍。

v0.63 会话归一个进程所有——而且安装包这次真的装得全

unterm-core 现在持有你的会话:每用户一个进程,装着 shell、回滚与分屏布局,承载整个 MCP 控制面,在窗口之间接力(v0.62)。退出最后一个窗口时它也随之结束,除非那扇窗驻留在托盘,或 Core 以 --headless 启动。v0.63 是安装体验该得的那一版:core 守护进程真正进了全部九种安装包;设置页在 Core 模式下可用;emoji 第一次画得出来——捆绑的字体是 FreeType 画不了的 COLRv1;停顿后打字延迟从 96ms 降到 8ms;macOS 换上新标;Windows 右键新增「Open in Unterm tab」。

v0.61 自研内核:启动 22ms 即有可用控制面

Unterm 不再基于 WezTerm fork。next-core 是为本产品自研的终端内核 —— 解析器、屏幕模型、PTY 运行时、字体栈、wgpu 渲染器,并以 ~12k 源码行 / 10 个直接依赖为硬预算。启动到 MCP 控制面就绪 22ms(旧内核 7.1s),空闲占用 6.6% 单核(旧 80%),20 万行吞吐持平。对旧内核的功能对齐按 159 项需求台账逐项收口,排版全面原生化:macOS 真红绿灯、pt 精确字号、CJK 渲染彻底修正。详见博客。

View all releases on GitHub →

六条原则,没有例外

01
本地优先,不上云

所有服务、所有 API 端点、所有录制都在 127.0.0.1 上。无需登录,没有遥测,没有订阅。你的 shell 历史只属于你。

02
AI 待在终端之外

没有聊天浮层,没有内嵌 AI 面板,终端里没有模型。终端就是那块表面——Claude Code、Cursor、你的脚本通过 MCP 抓住它。它唯一会做的预测,是 shell 提示符处根据你自己历史生成的灰色幽灵文字;在运行着 Claude Code 这类 agent 的 pane 里它不出现。

03
MCP 是一等控制面

面向 agent 的功能都带 MCP 方法和 CLI 命令一起发布。例外是刻意的:主题、语言和配置文件留在你手里——网页设置、<code class="font-mono text-xs">unterm-cli</code> 和 <code class="font-mono text-xs">unterm.conf</code>——这样没有 agent 会在会话中途改你终端的样子。

04
跨平台一致才算正确

一个功能在 Windows 上能用、在 macOS 或 Linux 上却出问题,那就是 bug,不是“暂不支持”。Mac、Linux、Windows 一起发布。

05
做减法,不做装饰

属于系统的能力就交给系统。AI 生成留在终端之外,核心功能保持本地运行,macOS 上的 Finder 集成使用原生扩展。

06
尊重订阅。默认 OAuth。

你通过 Unterm 装一个 AI agent 时,默认认证模式是厂商官方订阅 (OAuth) —— 走你已购的 Pro / Plus / Team 套餐。Unterm 永远不偷偷往 session 里注入 API key;只有当你在配置表单里把认证模式显式切到「自带 API key」或「自定义端点」时,才会按 token 计费。是 opt-in,不是默认行为。

终端不需要内置 AI。
终端需要被 AI 控制。

这是 Unterm 和 Warp 的根本分岐——不是功能差距,是方向差别。

寿命错配

终端是用三十年的工具,AI 模型是六个月一换的组件。把 AI 焊死在终端里,等于让寿命最长的工具被寿命最短的组件定义——模型一过时,整个终端跟着过时。

你已经有 agent 了

Claude Code、Codex、Gemini CLI、Aider——你已经在用世界上最强的编码 agent,它们每个月都在变强。终端里再内置一个聊天框,只是多一个要登录的副驾驶,而且永远不如你正在用的那个。

缺的是“抓手”,不是“大脑”

agent 不缺智能,缺的是看见和操作终端的手。Unterm 把终端做成 MCP 可控面:开 pane、跑命令、读屏、滚屏长截图、改设置、录会话——agent 像人一样用终端,而不是隔着玻璃看。

Warp 的答案:把 AI 装进终端
  • AI 内嵌在终端 UI 里,绑定它的云——登录、订阅、配额
  • 用它选的模型,按它的节奏升级
  • AI 核心闭源,你的命令上下文走它的服务器
Unterm 的答案:把终端交给 AI
  • 终端是 MCP 可控面——任何 agent 即插即驱动,今天的或明年的
  • 你选 agent、你选模型,Unterm 永不绑定
  • MIT 全开源,一切都在 127.0.0.1——无登录、无订阅、无遥测

三十年后你还会在用终端。到时候驱动它的 AI 是哪一个,没人知道——所以唯一面向未来的终端,是把“被驱动”做到极致的那一个。

Unterm vs 原生终端 vs 付费 AI 终端

原生终端(Terminal.app)是你已经有的基线;Warp 是付费的 AI 终端;iTerm2 和 Ghostty 是免费的高级终端。Unterm 走自己的赛道:一切外部 agent 能从外面抓握的能力。

能力 Unterm Terminal.app Warp iTerm2 Ghostty
agent 优先 原生 付费 免费 免费
可从外部经 MCP 驱动 ✓ ✗ ✗ ✗ ✗
每个动作都有可脚本化 CLI ✓ ✗ ✗ Python API ✗
内置 AI 编码 agent 启动器 ✓ ×7 ✗ ✗ ✗ ✗
agent 自动接回终端 MCP ✓ ✗ ✗ ✗ ✗
Agent 座舱(收件箱 · 编队 · 审阅) ✓ ✗ ~ cloud ✗ ✗
身份 profile(一窗一套凭据) ✓ ✗ ✗ ✗ ✗
多实例编排 ✓ ✗ ✗ ✗ ✗
会话录制 → markdown ✓ md ✗ ~ ✓ ✗
MCP 截图 + 文件上传 ✓ (Linux ~) ✗ ✗ ~ ✗
选中即复制,右键即粘贴——无菜单 ✓ gesture menu menu menu menu
内置代理管理 ✓ ✗ ✗ ✗ ✗
本地优先,无云端 / 无登录 ✓ ✓ ✗ ✓ ✓
AI 内嵌进终端 ✗ 刻意如此 ✗ ✓ (cloud) plugin ✗
GPU 渲染 ✓ ✗ ✓ ✓ ✓
macOS + Linux + Windows ✓ ✗ ✓ macOS mac+Linux
客户端开源 ✓ MIT ✗ ✗ ✓ GPL ✓ MIT
原生界面语言 ✓ ×9 OS en en en
价格 $0 $0 免费+付费 $ $0 $0

✓ 有 · ✗ 无 · ~ 部分 · ×N 数量。「AI 内嵌」那行的 ✗ 刻意如此 正是整个产品主张:Unterm 把 AI 留在外面,把终端本身作为它抓握的表面。

反映 2026-05 公开可查的功能。Warp 闭源,有云端支撑的免费层 + 付费 Team/Pro;iTerm2 提供 Python 脚本 API 和一个 opt-in 的 AI 命令插件;Ghostty 暂无 Windows 版本。欢迎在 GitHub 上指正。

常见问题

Unterm 是什么?

一个跨平台终端模拟器,内置 MCP、HTTP 和 CLI 控制面。产品主张是终端作为可被 MCP 控制的表面:任何外部 AI agent 都能从外面驱动它,而不是把 AI 塞进终端本身。

怎么知道 Claude Code 在等我确认?

Unterm 跟踪每个 pane 的 agent 状态。当 Claude Code(或 Codex、Gemini、Aider)卡在确认上时,它的 tab 圆点变琥珀色、顶栏 chip 变警示色并计数、agent 升到收件箱(Ctrl+Shift+A)最顶端——Enter 直接跳到那个 pane。Claude Code 和 Gemini 零配置即可检测;“unterm-cli agent enable-hooks”可升级到 hook 级精确汇报。

能并行跑多个 Claude Code 实例而互不冲突吗?

可以——这正是 Fleet 的用途。“unterm-cli fleet launch --agents claude,claude,codex -- 任务”给每个成员在仓库旁分配独立的 git worktree 和分支,互相之间、以及和你的工作区之间都完全隔离。每个成员有自己的 tab 和实时状态角标,Review 页可以并排对比它们的产出。

如何审阅或撤销 AI agent 的改动?

agent 一开始干活,Unterm 就为仓库拍快照——一个 dangling git commit,不碰 HEAD、index 和你的文件。Review 页(Web 设置里)显示逐行 diff(含 agent 新建的文件),可以把满意的产出 squash 合并到暂存区(commit 由你来做)、丢弃不要的、或把工作区回滚到任意快照。

Unterm 支持哪些 AI 编码 agent?

启动器可一键安装并接线 Claude Code、Codex CLI、Gemini CLI、OpenCode 和 Aider。座舱的状态检测还开箱识别 kimi、trae、cursor-agent;任何发出标准终端信号(标题、OSC 9/777、BEL)的 agent 都能获得基础跟踪。任何工具都可以通过“unterm-cli agent signal”接入。

怎么只用鼠标完成复制粘贴?

选中即复制,右键即粘贴。拖选或双击后松开鼠标,文字就已经在剪贴板上。右键总是在光标处粘贴——不管有没有选区,在每个 pane 里都一样,包括接管鼠标的程序(vim、htop、Claude Code):右键由 Unterm 处理,不会转给它们。在这类程序里,按住 Shift 拖动来选择。macOS 上单按 Ctrl+点击等同右键,鼠标中键也能粘贴。没有需要关闭的上下文菜单,剪贴板为空时安静无操作。

它怎么和 Claude Code、Cursor 或其他 agent 配合?

每个 Unterm 窗口都会启动一个本地 MCP 服务(TCP、JSON-RPC、auth token 鉴权)。把你的 MCP 客户端指向 127.0.0.1:<port> —— 端口和 token 在启动时写入 ~/.unterm/server.json。agent 可以开 shell、跑命令、读 pane 状态、截图、开关录制,以及使用 Agent Cockpit(状态、收件箱、fleet、审阅)。主题、语言和配置刻意不在 MCP 上;请在网页设置、用 unterm-cli 或在 unterm.conf 里修改。

如何用一个 agent 驱动多个 Unterm 窗口?

每个 Unterm 进程是一个实例,名字来自 NATO 字母表(alpha、bravo、…),记录在 ~/.unterm/instances/<name>.json。任意一个上调 instance.list 列举所有;按 cwd / title / 启动顺序选;用对应实例的 port 和 auth_token 连过去。~/.unterm/active.json 指向最近活的实例,给单实例 agent 兜底。

它和 Warp 有什么不同?

Warp 把 AI 嵌在一个封闭的云端编排器(Oz)里——Claude Code 这类外部工具没法从外面驱动 Warp。Unterm 走第三条路:让 AI 待在终端之外,把终端本身暴露为可被 MCP 控制的表面,任何 agent 都能抓住它。不上云,无需登录。

我的数据去哪儿了?

哪儿也不去。MCP 和网页设置服务只绑定 127.0.0.1。会话录制保存在 <project>/.unterm/sessions/,内置 token 脱敏。没有遥测、没有统计分析、无需登录,也没有任何云端往返。你的 shell 历史只属于你。

Unterm 会上报数据吗?

没有遥测、没有统计分析、没有崩溃或安装回报、不需要账号。Unterm 自己只会发出两种请求,都不带任何关于你的信息:(1) 检查更新 —— 启动约 20 秒后、之后每 6 小时,对 api.github.com/repos/zhitongblog/unterm/releases/latest 发一次普通 GET,User-Agent 固定为 unterm-update-check,不带任何标识;结果缓存在 ~/.unterm/update_check.json。(2) AI agent 目录 —— 你打开网页设置的 AI Agents 页或运行 unterm-cli agent 命令时,向 unterm.app/api/agents/manifests 发 GET,只在 User-Agent 里带 Unterm 版本号和一个缓存 ETag;请求失败就用内置在程序里的签名副本。这两项目前都没有设置开关——需要完全离线的话,请在防火墙里屏蔽这两个域名。其余流量都是你自己发起的:下载、上传到你自己的存储桶、对你自己代理节点的健康检查,以及你的 shell 做的事。

有付费版或高级特性吗?

没有。Unterm 是 MIT 协议,同一个二进制包含所有功能。无订阅、无 Pro 版、无插件市场、无「付费解锁分屏」。如果想支持项目,页脚的「赞助」是唯一的方式。

安装包和运行时占多大?

macOS DMG ~50 MB · Linux .deb 27 MB · AppImage 43 MB · Windows MSI 43 MB。空闲、单窗口时常驻内存 ~110 MB,每多一个 pane 线性增加。原生 next-core 引擎通过 wgpu 渲染,运行成本通常主要来自每个 pane 中的 shell 和应用。

Unterm 会按系统语言自动切吗?

会。首次启动会读 OS 语言(macOS 上 defaults、Linux 上 $LANG、Windows 上注册表)然后在 9 种界面语言中选最接近的。可以在 Web Settings → Language 按窗口覆盖。翻译文件在 unterm-services/src/i18n/locales/*.json,欢迎 PR。

能阻止一个失控 agent 在我的仓库里跑 rm -rf 吗?

几道闸。(1) MCP 服务只监听 127.0.0.1 —— 不对网络开放。(2) 走 auth token 鉴权;token 在 ~/.unterm/instances/<name>.json,没有这个文件读权限的 agent 连都连不上。(3) 每个请求都被归入七个风险等级之一——read、local_mutation、exec、external_side_effect、credential_access、financial、destructive。读操作直接放行;本地改动和执行命令不弹确认,但受你策略里的禁止 / 允许命令模式约束;external_side_effect 及以上要等你点头,而凭据、钱和破坏性操作的那次同意只管这一次调用。(4) 往 shell 里打字算 exec,所以挡在 agent 和 rm -rf 之间的是首次写入横幅:新 agent 第一次往 pane 写入时会出现 Allow / Block / Always-allow,审计日志记录每一次写入尝试和调用方身份。可以随时在网页设置的 MCP 标签里撤销信任。

怎么用脚本控制它?

用 unterm-cli:session list、proxy status、theme set midnight、session record start、screenshot。任意子命令加上 --json 就输出原始 JSON-RPC,适合 shell 管道和 cron 任务。

哪些平台有签名和公证?

macOS:通用 arm64 + x86_64 DMG,Developer ID 签名,Apple 公证 + stapled(无 Gatekeeper 警告)。Linux:Debian/Ubuntu 用 .deb,任意发行版用 AppImage。Windows:WiX 构建的 MSI 安装包和便携 .zip。每个 minor tag 都发到 GitHub Releases。

它开源吗?

是,采用 MIT 许可。目前 GUI 与终端运行时使用 Unterm 原生 next-core 引擎,MCP、Web 设置、录制、i18n 和发布工具都在同一个仓库里。源码:github.com/zhitongblog/unterm。

如何参与贡献?

在 GitHub 上开 issue 或 PR。Bug、需求、讨论都在一个队列里。我们把累积的修复打成 minor 版本——patch 级别的版本不会触发 CI 构建。文档在仓库里 /docs。