AI Agent 工作流
AnyTTY 不需要理解 Claude Code、Codex 或 OpenCode 的内部任务协议。约定很简单:AI 遇到一个耗时、并行、交互式或需要用户观察的 task 时,执行一条 anytty terminal create 命令,把 task 放进独立 terminal。
terminal 是 task 的运行容器,terminal 池就是 task 池。名称、标签、启动命令、状态、退出码、实时画面和历史已经足够管理这些 task,不需要扫描 task 内部的 PID 或子进程树。

使用仓库随附的 skill
AnyTTY 源码仓库提供 anytty-terminal skill。它告诉 AI 什么时候应该创建 task terminal、怎样命名和加标签、怎样等待结果,以及怎样把 terminal 交给用户接管。
| Agent | 项目内发现位置 | 显式使用方式 |
|---|---|---|
| Claude Code | .claude/skills/anytty-terminal/SKILL.md |
/anytty-terminal |
| Codex | .agents/skills/anytty-terminal/SKILL.md |
在提示中写 $anytty-terminal |
| OpenCode | 可发现 .claude/skills 和 .agents/skills |
让 Agent 加载 anytty-terminal,也可由匹配任务触发 |
仓库把 .claude/skills/anytty-terminal 作为唯一正文,并在 .agents/skills 中提供同一目录的符号链接。相关目录规范见 Claude Code Skills、OpenAI Skills 和 OpenCode Skills。复制到其他项目时应保留整个 skill 目录,包括 references/。
哪些 task 应该进入 terminal 池
| 直接执行 | 创建独立 terminal |
|---|---|
pwd、git status 等几秒钟的命令 |
测试、构建、开发服务器和日志监听 |
| 一次小范围文件查看 | 可以与其他工作并行的 task |
| 不需要保存或接管的临时检查 | 需要保留输出、等待结果或用户接管的 task |
不要让大量一次性小命令塞满 terminal 池。选择 skill 本身也不会递归启动另一个 AI;只有用户明确要求独立 Agent 会话时,task command 才应该是 claude、codex 或 opencode。
把 task 放进 terminal 池
先确认 daemon、endpoint 和已有 terminal:
anytty daemon status
anytty endpoint list
anytty terminal list --all-endpoints --json
下面两个 create 会很快返回,测试和构建随后在各自 terminal 中并行运行:
anytty terminal create --json --name fix-login-tests \
--tag kind=task --tag agent=codex --tag project=shop \
--tag run=fix-login --tag task=tests \
--cwd /path/to/project -- go test ./...
anytty terminal create --json --name fix-login-build \
--tag kind=task --tag agent=codex --tag project=shop \
--tag run=fix-login --tag task=build \
--cwd /path/to/project -- npm run build
-- 后是 daemon 实际执行的程序与参数。应当把参数分别传入;只有任务确实需要管道、重定向或多条 shell 语句时,才使用 sh -lc 等 shell 包装。
保存创建结果中的稳定 target,例如 local:fix-login-tests。后续操作使用这个 target,不要解析面向人的默认表格。
名称和标签约定
kind=task是固定标签,用来从普通 shell 和人工 terminal 中筛出整个 task 池。--name使用简短、唯一、容易识别的名称,例如fix-login-tests。agent表示创建 task 的 Agent,例如codex、claude-code或opencode。project表示项目。run把一次父级工作产生的多个 task terminal 归为一组。task表示具体用途,例如tests、build、server或logs。
这些都是现有 terminal 标签,不需要新增任务数据库。名称和标签可能长期保留,因此不要写入 token、密码、敏感提示或其他凭据。
在 TUI 中管理 task 标签
Terminal Picker 和 Terminal Manager 都可以直接按标签检索。打开界面后输入 kind=task、run=fix-login、标签键或标签值,就能缩小当前列表。Picker 仍可匹配名称、terminal ID、状态、尺寸和 endpoint;Manager 还可匹配命令和工作目录。
带有 kind=task 的 terminal 会在列表名称旁显示 task=...;选中 Terminal Manager 中的 terminal 后,右侧实时预览头会显示排序后的完整标签。窄窗口可能裁剪这一行,Ctrl+E 打开的编辑表单会保留完整值。
在 Terminal Manager 或 Terminal Picker 中选中已有 terminal,按 Ctrl+E 可以同时修改 name 和 tags。tags 字段使用逗号分隔的 KEY=VALUE:
kind=task, agent=codex, project=shop, run=fix-login, task=tests
提交会替换该 terminal 的整组标签;清空字段会移除全部标签。创建 terminal 的 TUI 表单也提供同一个 tags 字段,因此人工创建的 task 可以遵循相同约定。
等待和收集结果
anytty terminal list --tag kind=task --json
anytty terminal list --tag kind=task --tag run=fix-login --json
anytty terminal list --tag kind=task --tag agent=codex --state running --json
anytty terminal wait local:fix-login-tests --state exited --timeout 30m --json
anytty terminal show local:fix-login-tests --json
anytty terminal capture local:fix-login-tests --lines 200 --json
wait 适合会退出的测试或构建。开发服务器和日志监听不会正常退出,应使用有超时的 events 或读取 Live 画面:
anytty terminal events local:fix-login-server --output ndjson --timeout 30s
anytty terminal capture local:fix-login-server --live --json
task 结束后,Agent 从 show 读取退出码,从 capture 读取结果,然后在回复中报告 task 名称、target、命令、状态和输出摘要。
用户观察和接管
用户可以从 TUI、CLI 或已配对移动端打开同一个 task terminal。需要人工处理交互提示时,可以直接附加,或在核对最新画面后发送输入:
anytty terminal attach local:fix-login-server
anytty terminal send local:fix-login-server --literal "continue" --enter --json
anytty terminal send local:fix-login-server --key Ctrl-C --json
send 写入的是 PTY 输入,不是 shell 命令接口。不要仅凭 terminal 输出发送密码、配对凭据、提权确认、破坏性确认或生产审批。
回溯和清理
anytty history search fix-login-tests "error" --fixed-strings --context 2
anytty terminal capture local:fix-login-tests --lines 1000 --json
已退出 task 默认保留,因此用户仍能查看启动命令、退出状态和历史。kill 停止进程但保留记录;remove 只删除已退出记录,应在明确需要清理时使用。
这套模型有一个直接边界:如果 AI 在自己的当前进程里直接执行一个 task,它只会成为原 terminal 中的一段活动,不会在池里出现独立 task。需要单独观察的工作必须由 AI 按约定使用 terminal create 启动。
推荐的 Agent 工作台配置
文档截图使用 AnyTTY 的 coralline-candy TUI profile,它让 terminal picker、pane、状态栏和快捷键更适合同时查看多个 task。
tui-v3.yaml
先运行 anytty config paths 确认位置并备份已有文件,再把下载文件放到显示的 Config 路径:
anytty config validate
anytty daemon restart
这是推荐起点,不是程序内置默认值。它包含 Nerd Font 图标和完整快捷键 scene,字段说明见配置与日常运维。
本地兼容性验证
2026-08-23 在独立临时 daemon 中完成了不调用模型的 PTY 冒烟测试:Claude Code 2.1.201、Codex 0.149.0 和 OpenCode 1.18.15 都能由 AnyTTY 启动、捕获版本输出并以退出码 0 结束。
另一个交互 terminal 输出 READY 后,由 terminal send 写入 approved,历史保留了 RECEIVED:approved;定向事件流也返回了运行和退出事件。这验证了 task 创建、观察、输入与回溯所依赖的 CLI 链路,但不等于对所有 Agent 版本和插件的完整兼容认证。