自定义 Agent
往 ~/.termio/config/agents 里放一个小小的 JSON 清单,就能让 Termio 认识任何命令行工具——给它名字、图标和实时状态识别,它就和内置 Agent 一样是一等公民。
Termio 内置了常见的编程 Agent,但这个目录是开放的:任何命令行工具都能成为一等 Agent。 你用一个小小的 JSON 清单描述它,从此它就出现在新建会话菜单、设置 ▸ Agent 列表和 侧栏里,带着自己的名字、图标和实时状态——和 Claude Code 或 Codex 别无二致。
要运行任意命令行工具,你其实不需要清单——随时可以起一个普通 shell 在里面跑。清单的 作用是把它提升为真正的 Agent,带图标和状态识别。
添加一个 Agent
把一个 JSON 文件放进你的配置文件夹,以该 Agent 的 id 命名:
~/.termio/config/agents/<id>.json
一份最小的清单只需要 id、name 和启动用的 command:
{
"id": "myagent",
"name": "My Agent",
"command": "myagent --fancy"
}
Termio 只在启动时读取一次这个文件夹,所以添加或修改清单后请重启应用。之后你在任何 新建会话的地方都能看到它;像其他 Agent 一样,从 设置 ▸ Agent 里启用、排序或调整 它的命令。
用内置 Agent 的 id(例如 claudeCode)作为文件名可以覆盖它——想通过包装脚本
启动 Claude Code、同时保留它的图标和 hooks 时很方便。
清单字段
| 字段 | 必填 | 含义 |
|---|---|---|
id | ✓ | 稳定的标识与持久化键(字母、数字、-、_、.)。 |
name | ✓ | 菜单和侧栏里显示的名字。 |
command | 启动的程序与参数。省略则打开你的登录 shell。可执行文件必须在 PATH 上。 | |
icon | 图标——见下文。默认是一个通用字形。 | |
status | 用于实时状态的屏幕匹配规则——见下文。 | |
resume | 重新打开的会话如何续上原来那段对话——一个由启动参数模板和会话存储描述组成的对象。参见 Agent 终端协议。省略则每次启动都是全新的。 | |
permissionBypassFlag | 当你为该 Agent 打开「跳过权限确认」时追加的参数。 | |
tint | 一个十六进制颜色(例如 "#14B8A6"),用于给「工作中」指示器上色。 |
图标
指向一个 SF Symbol,或者一张和清单放在一起的图片:
"icon": { "symbol": "sparkles" }
"icon": { "path": "myagent.png" }
用 path 时,把图片文件放在同一个文件夹里、.json 的旁边。
实时状态
如果你的 Agent 没有 hook 机制,Termio 仍然可以用正则匹配终端画面来读它的状态。把表示
「忙」的模式列在 working 下,把表示「在等你」的模式列在 attention 下:
"status": {
"working": ["thinking", "Running"],
"attention": ["approve\\?", "Continue\\? \\(y/n\\)"]
}
命中 attention 的行会把会话切到 需要你(键名沿用协议里的叫法;它优先于 working,
因为提示可能出现在仍在转的标题下面);命中 working 的行把它标为 工作中。每种状态的
含义见 侧栏状态参考。
自带 hook 机制的 Agent(比如那些内置的)通过 hooks 获得更精确的状态,而不是靠扫屏幕。
那条路径见 会话控制——对自定义 Agent 来说,上面的
status 正则是最省事的方案。