Synthèse automatique
PTY-Agent est un proxy qui pilote des programmes CLI interactifs (REPL, débogueurs, serveurs) via un démon lancé avec app.py, en envoyant des entrées et en attendant des motifs de sortie précis.
Points forts
- Envoi d'entrée avec attente par regex (-t), par silence de sortie (--idle-timeout) ou par timeout, ce qui évite les Sleep arbitraires
- Détection en temps réel des crashes, des sorties de programme et des fenêtres GUI pendant qu'une session tourne
- Gestion de session nommées (exec/send/read/kill/list/events) avec lecture incrémentale par lignes, offset ou grep
- Options d'encodage (utf-8, gbk, big5…) et mode d'échappement JSON pour envoyer du contenu multi-lignes de façon fiable
Limites
- Nécessite de lancer et maintenir un démon via app.py avant toute interaction
- Explicitement inadapté aux TUI complexes, navigateurs et interfaces graphiques, et le mode --pty casse les opérateurs shell comme | ou &&
- Les règles de quoting diffèrent entre cmd, PowerShell et bash, ce qui rend les commandes imbriquées fragiles
À utiliser lorsqu'un agent doit réellement dialoguer pas à pas avec un programme interactif comme GDB, un REPL Python ou un serveur, en attendant des invites précises.
À éviter si un simple script non interactif, un appel HTTP ou un outil CLI en une seule commande suffit à accomplir la tâche.
Analyse de sécurité
PrudenceThe skill is a legitimate orchestration wrapper for interactive CLI programs, but it intentionally provides powerful process-control capabilities: arbitrary command execution, persistent PTY sessions, process termination, and GUI window closing. There is no evidence of destructive, exfiltrating, or obfuscated behavior, so it is not risky, but it warrants caution because it can run and control arbitrary local programs.
- •Provides arbitrary command execution through `exec` and interactive PTY/subprocess sessions
- •Can terminate sessions/processes via `kill` and close GUI windows via `closewin`
- •Includes `--force-pty-mode` to bypass shell-operator detection, increasing execution flexibility
- •Defaults to PowerShell/CMD and can launch any CLI program, debugger, or server
Exemples
Start a new PTY session called py1 running `python -i` with trigger `>>>`, then send `print(sum(range(10)))` and wait for the next prompt.Use PTY-Agent to launch gdb on ./a.out, set a breakpoint at main, run, and read the backtrace after each stop.Start a session for `node server.js`, wait for 'listening', then check the events log to see whether the process crashed or exited.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 类型)
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/pty-agent-mrwakae7/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/pty-agent-mrwakae7' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/pty-agent-mrwakae7/download' --output '.skill-downloads/pty-agent-mrwakae7/SKILL.md.part' && mv '.skill-downloads/pty-agent-mrwakae7/SKILL.md.part' '.skill-downloads/pty-agent-mrwakae7/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Le fichier ne fournit pas un en-tête name/description exploitable pour cette procédure native. Le téléchargement reste disponible pour lecture ; utilisez le mode manuel ci-dessous.
Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/pty-agent-mrwakae7/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.