name: pty-agent description: Interactive CLI program proxy via subprocess or pseudo-terminal (PTY). Use when: (1) must maintain ongoing dialog with interactive programs (REPLs, debuggers, Servers) — send input and wait for specific prompts; (2) process may block, crash, or pop up GUI windows — need real-time state detection; (3) simulating user interaction tests. DO NOT use for: non-interactive scripts, web/HTTP API calls, GUI interfaces. If a plain script suffices, do not use this tool. allowed-tools: Bash, Read, Write, Edit
PTY-Agent
PTY-Agent 是一个命令行交互式程序交互代理,通过subprocess或伪终端(PTY)与交互式 CLI 程序双向通信
原理:程序后台有运行一个守护进程,由守护进程接受用户命令,对应CLI进行操作
程序位于app.py,运行方法:python app.py ...
何时使用
- 迫不得已必须与交互式程序持续对话,需要发送输入并等待特定输出(提示符)后再继续,如GDB、服务器Server、大程序的编译操作。但是能写脚本执行就不用PTY-Agent
- 进程可能阻塞或执行时间过长 — 需要定期检测状态
- 子进程可能崩溃 — 需要实时感知崩溃事件
- 被要求进行模拟用户操作的测试
何时不使用
- 非交互式任务
- 完全能写脚本执行、调试
- GUI界面,浏览器,复杂的TUI程序
命令速查
| 命令 | 用途 | 典型选项 | 示例 |
|------|------|----------|------|
|start/stop| 手动启动/停止守护进程;启动守护进程exec可实现,一般无需手动 | | |
| exec <new-session-id> <options> | 执行命令以启动会话 | -c "<command>"(req), -t "<regex>", --timeout <seconds>, --cwd <path> | exec id_py -c "python -i" -t ">>>" |
| send <session-id> "<content>" [options] | 发送输入到运行中的会话 | -t "<regex>", --timeout <seconds> | send id_py "print(1)" -t ">>>" |
| read <session-id> [options] | 读取会话输出 | --lines, --grep | read myid --lines 10 |
| list | 列出所有会话 | | |
| kill <session-id> | 终止会话 | | |
| events <session-id> [options] | 查看会话事件 | --last <N>, --since <iso-datetime\|HH:MM> | events myid --last 10 |
| closewin <session-id> <window-handle> | 关闭 GUI 窗口;<window-handle>支持十进制或 0x十六进制| |
命令 send 的返回条件
| 模式 | 条件 | 返回信息 | |------|------|----------| | 带trigger | 匹配到正则 | 增量输出 | | 带idle-timeout | 静默超时 | 增量输出 | | 带timeout | 达到超时 | 增量输出 | | 都不带 | 达到默认超时 | 增量输出 | | 未关闭GUI检测 | 检测到GUI窗口(subprocess不一定可用) | GUI窗口信息+增量输出 | | | 有进程崩溃 | 相关事件+增量输出 | | | 程序退出 | 增量输出 |
注:高效利用本程序的条件返回功能,及时根据对应程序的输出结果更新条件(特别是-t),灵活使用不同的返回条件。不建议终端执行Sleep,不建议反复send后又read
exec 用法
python app.py exec <session-id> <options>
选项基本与 send 一致 特殊选项:
-c "<command>"(req) 执行的命令,必填--shell <shell>支持cmd/powershell/pwsh/bash(默认PowerShell,环境不支持自动回退CMD);只有在exec启动时才能配置终端--pty启用完整伪终端(不支持|、&&等shell语法)--force-pty-mode忽略--pty下的shell操作符检测
--cwd <path>子进程工作目录,不填则默认为调用者(客户端)的工作目录;如果与期望工作目录不一致,建议指定
send 用法
python app.py send <session-id> "<content>" [options]
选项
-t/--trigger "<regex>"匹配正则--newline— 换行后才检查正则触发条件, 与-t搭配
--timeout <seconds>等待超时(默认120s)--idle-after-first-output首次输出后才开始检测静默,与--idle-timeout搭配- 注:高效利用本程序的条件返回功能,及时根据对应程序的输出结果更新条件(特别是
-t),灵活使用不同的返回条件。不建议终端执行Sleep,不建议反复send后又read
--idle-timeout <seconds>输出静默超时,程序在指定时间内不输出时触发条件--full返回终端全部数据(数据大,尽量用--lines N)--json-escapingJSON 转义模式,将<content>进行JSON转义(\\ \" \n \t \r \uXXX ...),建议在发送多行内容时使用
<content>末尾自动追加换行
没有--input参数
引号处理规则(命令行层)
- cmd 写
\"嵌套:-c "python -c \"print(1)\"" - PowerShell/Pwsh 外层单引号,内层双引号:
-c 'python -c "print(1)"'
read 用法
python app.py read <session-id> [options]
选项:
--lines <N>最后 N 行--lines start:end范围行--grep "<regex>"正则过滤--offset <bytes>增量读取--full返回终端全部数据(数据大,尽量用--lines N)
events 完整用法
python app.py events <session-id> [options]
选项:
--last N--since <iso-datetime\|HH:MM>--until <iso-datetime\|HH:MM>
全局/通用选项
--keep-ansi保留控制码--color- 启用终端颜色输出--output-by-natural-language自然语言输出--encoding <encoding>终端编码,乱码时设置utf-8/gbk/gb2312/gb18030/big5--no-debug禁用响应中的 debug 输出(进程树/GUI 窗口/事件)--show-config [KEY]查看当前调用配置--default <KEY> <VALUE>临时覆盖默认配置(可用键:output-by-natural-language/timeout/newline/keep-ansi/encoding/debug,<VALUE>是配置值或者on/off)
输出格式
- JSON 模式(默认)— stdout 仅输出 JSON,每行一个 JSON 对象,。所有非命令响应(守护进程启停信息、配置查询、帮助文本、警告等)也以 JSON 格式输出:
- 命令响应:
{"type": "result", ...}/{"type": "ok", ...}/{"type": "error", ...} - 守护进程信息:
{"type": "info", "message": "[pty-agent] 守护进程已启动 (端口 12345)"} - 配置查询:
{"type": "config", "content": "当前调用配置:\n ..."} - 帮助文本:
{"type": "help", "content": "usage: pty-agent ..."} - 警告信息:
{"type": "warning", "message": "..."}
- 命令响应:
- 自然语言模式 — 使用
--output-by-natural-language切换
示例场景
长时运行进程监控 + 中途读取 + 终止
app.py exec srv -c "python server.py" --idle-timeout 3 # 启动,idle-timeout 使首次输出后快速返回
app.py read srv --lines 20 # 中途查看最近20行输出
app.py read srv --offset 1024 # 增量读取(从上次 offset 继续)
app.py read srv --grep "ERROR" # 只看错误行
app.py kill srv # 不再需要时终止
进程崩溃检测
app.py exec job -c "python worker.py" --idle-timeout 5 # 启动,idle-timeout 等待输出
# 若进程崩溃,返回中 trigger.reason="ended",program.exit_code 非零,error_message 含崩溃信息
app.py events job --last 10 # 查看崩溃事件详情(process_crash 类型)
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.