contd:让 AI Agent 驾驭交互式 CLI 的异步包装器
> 来源: https://v2ex.com/t/1196465
> GitHub: https://github.com/werifu/contd
> 作者: werifu
> 许可: Apache-2.0
> 日期: 2026-03-07
📌 问题:Agent 遇到交互式 CLI 就"吊死"
当前 AI Agent(Claude Code、Cursor 等)的命令行能力大多停留在跑命令 → 等结果 → 问 LLM 的循环。一旦遇到需要用户键入的交互式 CLI(如 gdb 调试、安装向导的 yes/no 选择、REPL 环境),Agent 就会卡死——因为它不知道程序在等输入,也无法在合适的时机发送输入。
作者指出,在他已知范围内,只有 Codex 原生支持了交互式 CLI。
🔧 解决方案:contd
contd 是一个用 Rust 编写的 CLI 包装器,核心思路是将交互式命令行程序变成异步可恢复的会话。
工作原理
Agent 调用 contd run → 启动后台进程管理交互式命令
→ 在合适时机(超时/等待输入)返回中间结果
Agent 调用 contd attach → 重新连接会话,发送输入,获取输出
→ 再次在合适时机返回
类似于异步函数的 await/resume 模式,但应用在 CLI 进程上。
核心命令
| 命令 | 功能 |
|---|---|
| `contd run -- | 启动一个受管理的交互式会话 |
| `contd attach | 连接已有会话并发送输入 |
| `contd list` | 列出所有活跃会话 |
| `contd kill | 终止指定会话 |
| `contd clean` | 清理所有会话 |
返回事件类型
session_waiting_input— 程序正在等待 stdin 输入session_steady_input— 屏幕输出稳定session_yield_timeout— 达到超时限制session_exited— 程序已退出
平台支持
| 平台 | 支持 | 输入等待检测 |
|---|---|---|
| Linux | ✅ | proc syscall/fd 检查(精确) |
| macOS | ✅ | 启发式检测 + 屏幕稳定性检查(略有偏差) |
JSON 模式
支持 --json 标志,输出结构化 JSON,便于 Agent 程序化解析:
{"event":"session_waiting_input","session_id":"...","output":"..."}
🎬 演示案例
作者用一个视频展示了在 Cursor(不支持交互式命令的 Agent)中,通过 contd + gdb 交互式调试来解决 CS:APP 的 Bomb Lab——一个经典的逆向工程/二进制分析练习,需要逆向一个二进制文件、设断点、单步执行来找到多个密码。
这个场景非常有说服力:没有 contd,Agent 根本无法驱动 gdb 进行多步骤的交互式调试。
💡 分析与评价
为什么这个工具有价值
1. 填补关键空白:交互式 CLI 是 Agent 能力的一个明确盲区,contd 用最小的侵入性解决了这个问题
2. 设计优雅:不修改 Agent 也不修改 CLI 程序,只在中间加一层薄薄的包装器
3. 实用场景广泛:
- 调试器(gdb/lldb)
- REPL(Python、Node.js、数据库 CLI)
- 安装向导(需要 yes/no 确认的)
- 任何长时间运行的交互式进程
4. 技术实现扎实:Rust 编写,Linux 上使用 proc 系统调用检测精确识别 stdin 等待状态
与现有方案的对比
| 方案 | 交互式支持 | 实现方式 |
|---|---|---|
| 原生 Agent(大多数) | ❌ | 只支持 run-until-exit |
| Codex | ✅ | 内置支持 |
| contd | ✅ | 外部包装器,任何 Agent 可用 |
contd 的优势在于通用性——不依赖特定 Agent 的内置支持,任何能调用命令行的 Agent 都可以用。
局限性
- macOS 检测不如 Linux 精确
- 对 TUI(全屏终端界面)的支持可能有边界情况
- 需要 Agent 理解 run/attach 的异步模式(但作者提供了 SKILL.md)
评分
| 维度 | 评分(/10) |
|---|---|
| 技术实现 | 8.5 |
| 实用价值 | 8 |
| 创新性 | 8 |
| 文档质量 | 7.5 |
| **综合** | **8.0** |
🔗 与我们的关联
1. Agent 工具链增强:如果我们使用 Claude Code 或其他 Agent 进行开发,contd 可以解锁调试器、REPL 等交互式工具的使用
2. SKILL 生态:作者提供了 contd-skill,可以直接安装让 Agent 学会使用
3. 架构参考:contd 的 broker 模型(后台进程管理 + 异步 attach)是一种值得学习的设计模式
安装
# 安装 CLI
curl -fsSL https://raw.githubusercontent.com/werifu/contd/main/install.sh | bash
# 安装 Agent Skill(全局)
npx -y skills@latest add werifu/contd-skill --skill contd --yes --global
报告由深度研究助手自动生成 | 2026-03-07