关于 terminal-control
Terminal Control 是供 Agent 检查和操作终端应用的技能,通过可见屏幕状态进行交互。它结合命名会话、确定性输入以及可选的录制和证据导出。
主要功能
- 01读取可见终端屏幕
- 02启动和管理命名会话
- 03发送键盘与鼠标输入
- 04等待界面文本出现
- 05保存截图并录制会话
适用场景
- 01检查全屏终端界面
- 02自动执行可重复的终端交互
- 03让编辑器保持可见并由人操作
- 04按需录制终端演示
MCP 相关
该技能说明了 MCP Agent 的使用方式,包括列出会话和查询结构化状态。它建议使用带有 `waitFor` 的 `interact` 工具,将输入、就绪检查和屏幕读取合并处理。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ anomalyco/ terminal-control --skill terminal-control安装后在 Claude Code 中输入/terminal-control确认已加载。
详细介绍
终端控制
使用 termctrl 观察终端实际可见状态,并以确定的方式进行交互。
从最精简的工作流开始
当无需进一步交互时,读取已稳定的临时终端应用可见屏幕:
termctrl show -- my-terminal-app
需要交互或重复检查时,让应用保持运行:
termctrl start app -- my-terminal-app
termctrl wait app "Ready"
termctrl show app
termctrl send app text:help enter
termctrl wait app "Commands"
termctrl show app
termctrl stop app
使用后务必停止已命名的会话,除非用户明确要求保留运行中的进程。
在当前终端窗格中保持应用可见并由人类控制,同时向 Agent 提供相同的会话控制:
termctrl run -- /usr/bin/nvim
termctrl run editor -- nvim
不带 NAME 的形式会使用可执行文件的基本名称(nvim),若名称冲突则会失败;它不会自动选择带后缀的名称。运行多个副本时,请指定名称。
选择正确的观察方式
- 使用
show查看当前可见的屏幕文本。分析全屏 TUI 时,优先使用它。 - 使用
logs查看普通屏幕工具和类似日志的命令所保留的可读输出。 - 仅在需要持久化产物时使用
save --format ... --out ...。 - 仅在明确使用
--record录制时间线后,才使用video。
不要把日志当作备用屏幕 TUI 的可见状态。
默认情况下,命名会话的读取会立即返回。仅在有意等待输出稳定时才添加等待时间。wait 默认等待五秒;只有需要更改时才设置 --timeout。
快速演示时,让会话保持运行,除非有意放慢输入,否则省略 --pace-ms,并在一次 shell 调用中组合已知的状态转换:
termctrl send app text:help enter && termctrl wait app "Commands" && termctrl show app
文本出现后,等待即会结束;超时是最长等待时间,而非固定延迟。不要在这些命令之间插入休眠。交互期间检查文本,仅在需要视觉检查或用户要求提供证据时保存 PNG,并在操作应用后导出视频。使用 MCP 时,优先使用带 waitFor 的 interact,以便在一次工具调用中组合键盘输入、就绪检测和屏幕读取。
精确驱动输入
使用 text:<value> 发送纯文本,并将命名按键作为独立的输入单元:
termctrl send app text:/connect enter
termctrl send app down enter
termctrl send app ctrl-c
printf '%s' 'multiline prompt' | termctrl send app --stdin
发送输入后使用 wait,不要休眠或假设界面已经更新。
对于支持鼠标的应用,使用带类型的鼠标命令和从零开始的单元格坐标:
termctrl mouse app move 12 4
termctrl mouse app click 12 4
termctrl mouse app down 12 4
termctrl mouse app move 20 4
termctrl mouse app up 20 4
未按住按键时,move 会悬停;按下、移动和抬起则用于拖动。--button right 或 middle、--shift、--alt 和 --ctrl 均为可选项。应用必须启用鼠标报告;悬停需要启用任意事件跟踪。超出调整后视口范围的坐标会导致失败。不要通过注入原始转义序列来绕过已禁用的鼠标报告。如果命令有此要求,请重启较早创建的命名会话。
录制演示时,可选择使用 video --pointer-overlay,以平滑移动、轻微按压形变和淡入淡出的效果显示鼠标输入。该功能默认使用 60 fps,且不会延迟实际输入。使用 --pointer-reduced-motion 可仅保留淡入淡出效果。剪辑、变速和定格编辑均沿用同一源时钟。只有带类型的鼠标命令会提供叠加层证据;原始字节和转发的人类输入不会。show/save 保持为纯终端证据,与视频叠加层分开。
操作 OpenTUI 应用
对于 OpenCode 等应用,请使用 OpenTUI 主机握手:
termctrl start app --host opentui --cols 112 --rows 34 -- opencode
termctrl wait app "/connect"
termctrl show app
termctrl show app --format semantic
如果应用需要更大的可见区域,请使用 resize。有意重启应用后,使用 restart app 复用已存储的启动设置。
有意保留证据
仅保存请求的格式:
termctrl save app --format txt --format png --out artifacts/current
仅当用户需要保留时间线或视频时,才录制演示。会话运行期间添加标记,停止后检查标记,然后使用明确的编辑计划导出:
termctrl start app --record artifacts/run.termctrl -- my-terminal-app
termctrl wait app "Ready"
termctrl mark app ready
termctrl send app text:demo enter
termctrl wait app "Done" --timeout 60000
termctrl mark app done
termctrl stop app
termctrl markers artifacts/run.termctrl
termctrl show --recording artifacts/run.termctrl --at-marker done
termctrl video artifacts/run.termctrl --edit artifacts/run-edit.json --footer --out artifacts/run.mp4
当终端文本需要保持可读时,谨慎设置编辑计划中的 speed 值。如果最后一帧是重点,请使用 hold_ms 或 --tail-ms。如果精美演示需要在底部页脚显示片段说明、已用时间码和 TERMINAL CONTROL 品牌标识,请传入 --footer;普通视频则省略。
请将 .termctrl 录制文件、ANSI 转录文本、屏幕内容、命令参数和终端输入视为可能包含敏感信息。除非确有需要,否则不要保留,也不要不必要地暴露其内容。
从问题中恢复
- 运行
termctrl status app检查状态和启动设置。 - 运行
termctrl list查找正在运行的命名会话。缩小查找范围时,可添加--state、--command或--cwd;仅当需要查看已保留但已退出或不可用的条目时,才使用--all。 - MCP Agent 可以向
list_sessions传入state、command或cwd,并使用get_session_status({ name })获取完整的结构化状态,无需解析 CLI 输出。 - 如果会话套接字路径过长,请在启动会话前将
TERMCTRL_RUNTIME_DIR设置为/tmp下的短路径私有目录。 - 如果无法使用
termctrl,请通过cargo install terminal-control安装 Terminal Control,或询问用户要使用哪个已安装的二进制文件。