name: coding-agent description: 通过后台进程运行Codex CLI、Claude Code、OpenCode或Pi Coding Agent进行程序化控制。 metadata: { “otto”: { “emoji”: “🧩”, “requires”: { “anyBins”: [“claude”, “codex”, “opencode”, “pi”] } }, }
编码代理(bash优先)
使用bash(可选后台模式)进行所有编码代理工作。简单高效。
⚠️ 需要PTY模式!
编码代理(Codex、Claude Code、Pi)是交互式终端应用程序,需要伪终端(PTY)才能正常工作。没有PTY,你会得到损坏的输出、缺少颜色,或者代理可能挂起。
运行编码代理时始终使用pty:true:
# ✅ 正确 - 使用PTY
bash pty:true command:"codex exec '你的提示'"
# ❌ 错误 - 没有PTY,代理可能损坏
bash command:"codex exec '你的提示'"
Bash工具参数
| 参数 | 类型 | 描述 |
|---|---|---|
command |
string | 要运行的shell命令 |
pty |
boolean | 用于编码代理! 为交互式CLI分配伪终端 |
workdir |
string | 工作目录(代理只能看到此文件夹的上下文) |
background |
boolean | 在后台运行,返回sessionId用于监控 |
timeout |
number | 超时时间(秒),到期时终止进程 |
elevated |
boolean | 在主机上运行而不是沙箱(如果允许) |
进程工具操作(用于后台会话)
| 操作 | 描述 |
|---|---|
list |
列出所有运行/最近的会话 |
poll |
检查会话是否仍在运行 |
log |
获取会话输出(可选偏移/限制) |
write |
发送原始数据到stdin |
submit |
发送数据 + 换行(如键入并按下Enter) |
send-keys |
发送键令牌或十六进制字节 |
paste |
粘贴文本(可选括号模式) |
kill |
终止会话 |
快速开始:一次性任务
对于快速提示/聊天,创建临时git仓库并运行:
# 快速聊天(Codex需要git仓库!)
SCRATCH=$(mktemp -d) && cd $SCRATCH && git init && codex exec "你的提示在这里"
# 或在真实项目中 - 使用PTY!
bash pty:true workdir:~/Projects/myproject command:"codex exec '为API调用添加错误处理'"
为什么需要git init? Codex拒绝在可信git目录外运行。创建临时仓库解决此问题以进行草稿工作。
模式:workdir + background + pty
对于较长任务,使用后台模式与PTY:
# 在目标目录中启动代理(使用PTY!)
bash pty:true workdir:~/project background:true command:"codex exec --full-auto '构建贪吃蛇游戏'"
# 返回sessionId用于跟踪
# 监控进度
process action:log sessionId:XXX
# 检查是否完成
process action:poll sessionId:XXX
# 发送输入(如果代理提问)
process action:write sessionId:XXX data:"y"
# 使用Enter提交(如键入"yes"并按下Enter)
process action:submit sessionId:XXX data:"yes"
# 如有需要则终止
process action:kill sessionId:XXX
为什么workdir重要: 代理在专注的目录中启动,不会漫游读取不相关文件(如你的soul.md 😅)。
Codex CLI
模型: gpt-5.2-codex是默认(设置在~/.codex/config.toml)
标志
| 标志 | 效果 |
|---|---|
exec "prompt" |
一次性执行,完成后退出 |
--full-auto |
沙箱化但在工作空间中自动批准 |
--yolo |
无沙箱,无批准(最快,最危险) |
构建/创建
# 快速一次性(自动批准) - 记住PTY!
bash pty:true workdir:~/project command:"codex exec --full-auto '构建暗模式切换'"
# 后台用于较长工作
bash pty:true workdir:~/project background:true command:"codex --yolo '重构认证模块'"
审查PR
⚠️ 关键:永远不要在Otto自己的项目文件夹中审查PR! 克隆到临时文件夹或使用git worktree。
# 克隆到临时文件夹以安全审查
REVIEW_DIR=$(mktemp -d)
git clone https://github.com/user/repo.git $REVIEW_DIR
cd $REVIEW_DIR && gh pr checkout 130
bash pty:true workdir:$REVIEW_DIR command:"codex review --base origin/main"
# 完成后清理:删除$REVIEW_DIR
# 或使用git worktree(保持主分支完整)
git worktree add /tmp/pr-130-review pr-130-branch
bash pty:true workdir:/tmp/pr-130-review command:"codex review --base main"
批量PR审查(并行大军!)
# 首先获取所有PR引用
git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'
# 部署大军 - 每个PR一个Codex(全部使用PTY!)
bash pty:true workdir:~/project background:true command:"codex exec '审查PR #86。git diff origin/main...origin/pr/86'"
bash pty:true workdir:~/project background:true command:"codex exec '审查PR #87。git diff origin/main...origin/pr/87'"
# 监控所有
process action:list
# 发布结果到GitHub
gh pr comment <PR#> --body "<审查内容>"
Claude Code
# 使用PTY以获得正确的终端输出
bash pty:true workdir:~/project command:"claude '你的任务'"
# 后台
bash pty:true workdir:~/project background:true command:"claude '你的任务'"
OpenCode
bash pty:true workdir:~/project command:"opencode run '你的任务'"
Pi Coding Agent
# 安装:npm install -g @mariozechner/pi-coding-agent
bash pty:true workdir:~/project command:"pi '你的任务'"
# 非交互模式(仍推荐PTY)
bash pty:true command:"pi -p '总结src/'"
# 不同提供商/模型
bash pty:true command:"pi --provider openai --model gpt-5-mini -p '你的任务'"
注意: Pi现在启用了Anthropic提示缓存(PR #584,合并于2026年1月)!
使用git worktrees并行修复问题
为并行修复多个问题,使用git worktrees:
# 1. 为每个问题创建worktrees
git worktree add -b fix/issue-78 /tmp/issue-78 main
git worktree add -b fix/issue-99 /tmp/issue-99 main
# 2. 在每个中启动Codex(后台 + PTY!)
bash pty:true workdir:/tmp/issue-78 background:true command:"pnpm install && codex --yolo '修复问题 #78: <描述>。提交并推送。'"
bash pty:true workdir:/tmp/issue-99 background:true command:"pnpm install && codex --yolo '修复问题 #99: <描述>。提交并推送。'"
# 3. 监控进度
process action:list
process action:log sessionId:XXX
# 4. 修复后创建PRs
cd /tmp/issue-78 && git push -u origin fix/issue-78
gh pr create --repo user/repo --head fix/issue-78 --title "fix: ..." --body "..."
# 5. 清理
git worktree remove /tmp/issue-78
git worktree remove /tmp/issue-99
⚠️ 规则
- 始终使用pty:true - 编码代理需要终端!
- 尊重工具选择 - 如果用户要求Codex,使用Codex。
- 编排器模式:不要自己手写补丁。
- 如果代理失败/挂起,重新启动它或向用户询问方向,但不要静默接管。
- 耐心等待 - 不要因为"慢"而终止会话
- 使用process:log监控 - 检查进度而不干扰
- 构建使用–full-auto - 自动批准更改
- 审查使用普通模式 - 不需要特殊标志
- 并行可行 - 运行多个Codex进程以进行批量工作
- 永远不要在~/agent/中启动Codex - 它会读取你的灵魂文档并对组织结构产生奇怪想法!
- 永远不要在~/Projects/otto/中检出分支 - 那是LIVE Otto实例!
进度更新(关键)
当你在后台启动编码代理时,保持用户知情。
- 启动时发送1条短消息(什么在运行 + 在哪里)。
- 然后只在有变化时再次更新:
- 里程碑完成(构建完成,测试通过)
- 代理提问 / 需要输入
- 遇到错误或需要用户操作
- 代理完成(包括更改内容 + 位置)
- 如果终止会话,立即说明你终止了它以及原因。
这防止用户只看到"代理在回复前失败"而不知道发生了什么。
完成时自动通知
对于长时间运行的后台任务,在提示中附加唤醒触发,以便在代理完成时立即通知Otto(而不是等待下一个心跳):
... 你的任务在这里。
当完全完成后,运行此命令通知我:
otto gateway wake --text "完成:[简短总结构建了什么]" --mode now
示例:
bash pty:true workdir:~/project background:true command:"codex --yolo exec '构建REST API用于待办事项。
当完全完成后,运行: otto gateway wake --text \"完成:构建了带有CRUD端点的待办事项REST API\" --mode now'"
这触发立即唤醒事件 — Skippy在几秒内被ping到,而不是10分钟。
学习要点(2026年1月)
- PTY至关重要: 编码代理是交互式终端应用。没有
pty:true,输出损坏或代理挂起。 - 需要git仓库: Codex不会在git目录外运行。使用
mktemp -d && git init进行草稿工作。 - exec是你的朋友:
codex exec "prompt"运行并干净退出 - 非常适合一次性任务。 - submit vs write: 使用
submit发送输入 + Enter,write用于无换行的原始数据。 - 调侃有效: Codex对俏皮的提示反应良好。尝试让它为你的项目写一首俳句。