Agent
同时运行多个 Agent
让一支 Agent 队伍并排工作,一眼读出它们的实时状态,并知道每个 Agent 是通过哪条信号汇报的——hooks、终端标题,还是最后才用的屏幕。
Termio 就是为同时运行多个 Agent 造的。侧栏是你的控制台:每个会话是一行,每一行都汇报 它的 Agent 此刻在做什么。任何终端都能让你同时开好几个 Agent;这里换来的是你不必盯着 它们。
内置的 Agent
Termio 开箱即认常见的编程 Agent:
| Agent | 命令行 |
|---|---|
| Claude Code | claude |
| Codex | codex |
| OpenCode | opencode |
| OpenCode 2 | opencode2 |
| Pi | pi |
| Amp | amp |
| Droid | droid |
| Cursor | cursor-agent |
| Copilot | copilot |
| Kimi | kimi |
| Qwen Code | qwen |
| Antigravity | agy |
| Crush | crush |
| Cline | cline |
| Hermes | hermes |
| Grok | grok |
其中任何一个只要装在你的 PATH 上,就会出现在启动选项里。普通 shell 始终可用。用的是
别的工具?任何命令行工具都能成为一等 Agent——参见
自定义 Agent。
这里的 PATH 指那台机器自己的 PATH:Termio 会去工作区所在的机器上找它们,所以一台
VPS 提供的是装在它上面的那些。设置 ▸ Agent 会直接在那一行里说出来——未安装在
devbox 上——而不是把它藏在一个设备选择器后面。

Termio 通过你真正的登录 shell 启动每个 Agent,所以你的 shell 配置准备的一切——版本管理器、
往 PATH 里加的路径、凭据——都和在 iTerm 里一模一样地在那儿。如果一个 Agent 明明装了,
Termio 却说找不到,那几乎总是 PATH 的问题;Agent 页会把这件事说出来,并且命令字段接受
绝对路径。
每个 Agent 汇报什么
状态并不是对每个 Agent 都用同一种方式猜出来的,而当一个状态点不动时,这个差别值得知道。
每个 Agent 在自己的清单里声明它的通道:hooks 是 Agent 自己汇报
每一轮,只要它存在就是权威;标题是从终端标题里读出来的带内信号;进度是 OSC 9;4
进度序列。这些都没声明的 Agent,就从窗格本身来读——看它的输出还动不动,而不是去匹配屏幕上
的词;后者只发生在清单把模式写明了的 Agent 身上。
| Agent | 状态信号 | 能恢复对话 |
|---|---|---|
| Claude Code | hooks + 标题 | 是 |
| Codex | hooks + 标题 | 是 |
| Grok | hooks + 标题 + 进度 | 是 |
| Qwen Code | hooks + 标题 | 是 |
| Pi | hooks | 是 |
| OpenCode | hooks(插件) | 是 |
| OpenCode 2 | hooks(插件) | —— |
| Amp | hooks | —— |
| Cursor | hooks | —— |
| Copilot | hooks | —— |
| Kimi | hooks | —— |
| Cline | hooks | —— |
| Droid | hooks | —— |
| Crush | 屏幕规则 + 进度 | —— |
| Antigravity | 输出活动 | —— |
| Hermes | 输出活动 | —— |
「能恢复对话」的意思是,重新打开会话会把 Agent 放回同一段对话,而不是一段空白——参见 什么会留下来。没有这一项的 Agent 会在同一个目录里重新跑一遍。
打开 Agent 实时状态后,hooks 会按每台设备各自替你装好。一台在你打开这个开关之前就设置 好的机器上没有 hooks,这就是远程会话的状态点始终不动的常见原因——参见 状态 hooks 与会话控制。
一眼读出状态
每个会话行都带一个实时状态点——工作中、空闲、完成,或需要你。 侧栏指南解释了每种状态的含义, 核心概念讲了信号从哪里来。
真正重要的区别是完成和需要你。一轮跑完是完成——一个平静的提示,告诉你有活儿在 你不在的时候落地了。需要你留给那种确实无法继续的 Agent:一个权限提示、一个问题、一个 选择。把这两者混为一谈,正是让一支队伍变成一堆警报的原因,所以 Termio 让「好了」保持安静, 把响亮的那个状态留给唯一那种走开就要赔上时间的情况。

状态会向上汇总。项目那一行概括它里面的会话,菜单栏托盘概括全部——所以你可以整个人在别的 应用里,仍然在第一时间知道有东西需要你。
跳过权限提示
不少 Agent 都带一个让它不再每次调用工具前都问的标志。只要有,Termio 就把它接到一个开关上, 而不是让你去记它怎么拼:在设置 ▸ Agent 里为某个 Agent 打开,Termio 就会在启动时追加 那个 Agent 自己的标志。
这是关于这个 Agent 的一个长期决定,所以和它的命令路径不同,它不是按设备的——这个标志
会跟着这个 Agent 的每一次启动,在每一台机器上。打开开关之前先看清那个标志:它们是厂商自己
的逃生口,有些交出去的东西不止是提示。Codex 的是
--dangerously-bypass-approvals-and-sandbox,在放弃审批的同时也放弃了它的沙箱。Termio
只追加厂商写明的东西;它自己不加任何沙箱。
一个无人看管运行的 Agent,恰恰是你最想给它一条真正状态通道的那个。先打开 hooks,再关掉 提示,否则你失去的正是那条本来会告诉你它停下来了的信号。
切换而不丢失位置
点一个会话会立刻把它带到前面;其余的继续在后台跑。因为每个会话都是跑在它那台机器上的真实 进程,Agent 不会因为不在屏幕上而暂停——你切换工作区、关掉窗口时也一样。在一个会话里起一段 长任务,切到另一个,等第一个举手时再回来。
当会话多到一只手数不过来时,⇧⌘O 能直接按名字跳到任意一个——参见
导航。
让两个 Agent 别动同一批文件
两个 Agent 在同一个检出里一定会撞车:同一个工作树、同一个索引、同一个分支。解法不是协调, 而是分开——给每条线一个自己的 Git worktree,各指一个 Agent 过去。Termio 直接从 Git 读 worktree 并把它们嵌在项目下面,所以这是一次右键,而不是一步配置。参见 Git worktree。
让 Agent 互相驱动
一旦一支队伍变成常态,你接下来想要的就是让一个 Agent 来管这支队伍。termio sessions 就是
这套 API:一个 Agent 可以列出它的同级、按一个提示词开出新的、回答一个卡住的会话,以及阻塞
到某一轮结束——全都走一个本地 socket,并限定在它自己的项目里。
termio sessions list
termio sessions spawn "update the changelog for 0.54" --agent codex
termio sessions watch它是可选的,打开它的同时还会安装一个小技能,让你的 Agent 知道这些命令存在。完整的动词参考 见命令行工具,开关见会话控制。