通过后台进程将编码任务委托给 Codex、Claude Code 或 Pi 代理。适用场景:(1) 构建/创建新功能或应用,(2) 审查 PR(原文不完整)
编码代理( bash- first)是一项面向实际任务的技能,主要用于对所有编码代理工作使用 bash( 带有可选的背景模式);简单且有效;
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
所有编码代理任务均使用 bash(可选后台模式)。简洁高效。
编码代理(Codex、Claude Code、Pi)是交互式终端应用,必须依赖伪终端(PTY)才能正常运行。若未启用 PTY,将导致输出异常、颜色丢失,甚至代理卡死无响应。
运行编码代理时务必指定 pty:true:
# ✅ 正确 — 启用 PTY bash pty:true command:"codex exec 'Your prompt'" # ❌ 错误 — 未启用 PTY,代理可能失效 bash command:"codex exec 'Your prompt'"
| 参数 | 类型 | 说明 |
|---|---|---|
command |
string | 要执行的 Shell 命令 |
pty |
boolean | 编码代理必需! 为交互式 CLI 分配伪终端 |
workdir |
string | 工作目录(代理仅可见该目录下的上下文) |
background |
boolean | 后台运行,返回 sessionId 用于监控 |
timeout |
number | 超时时间(单位:秒;超时后终止进程) |
elevated |
boolean | 在宿主机而非 sandbox 中运行(如允许) |
| 操作 | 说明 |
|---|---|
list |
列出所有正在运行或最近的会话 |
poll |
检查会话是否仍在运行 |
log |
获取会话输出(支持可选的 offset/limit) |
write |
向 stdin 发送原始数据 |
submit |
发送数据并附加换行符(模拟输入后按 Enter) |
send-keys |
发送按键 token 或十六进制字节 |
paste |
粘贴文本(支持可选的 bracketed mode) |
kill |
终止会话 |
对于简短提示或对话,可创建临时 Git 仓库并执行:
# 快速对话(Codex 要求在可信 Git 目录中运行!) SCRATCH=$(mktemp -d) && cd $SCRATCH && git init && codex exec "Your prompt here" # 或在真实项目中运行 —— 务必启用 PTY! bash pty:true workdir:~/Projects/myproject command:"codex exec 'Add error handling to the API calls'"
为何需要 git init? Codex 拒绝在非可信 Git 目录中运行。创建临时仓库可解决即席开发场景的需求。
对于耗时较长的任务,请结合后台模式与 PTY:
# 在目标目录启动代理(必须启用 PTY!) bash pty:true workdir:~/project background:true command:"codex exec --full-auto 'Build a snake game'" # 返回 sessionId 用于追踪 # 监控进度 process action:log sessionId:XXX # 检查是否完成 process action:poll sessionId:XXX # 发送输入(若代理提出问题) process action:write sessionId:XXX data:"y" # 提交输入(模拟键入 “yes” 后按 Enter) process action:submit sessionId:XXX data:"yes" # 如需终止 process action:kill sessionId:XXX
workdir 的重要性: 代理将在指定目录中启动,不会漫游读取无关文件(例如你的 soul.md 😅)。
模型: gpt-5.2-codex 为默认模型(配置于 ~/.codex/config.toml)
| 标志位 | 效果 |
|---|---|
exec "prompt" |
一次性执行,完成后退出 |
--full-auto |
运行于 sandbox 内,但在 workspace 中自动批准操作 |
--yolo |
不启用 sandbox,不进行任何审批(最快,也最危险) |
# 快速一次性执行(自动批准)—— 切记启用 PTY! bash pty:true workdir:~/project command:"codex exec --full-auto 'Build a dark mode toggle'" # 长期任务启用后台模式 bash pty:true workdir:~/project background:true command:"codex --yolo 'Refactor the auth module'"
⚠️ 关键提醒:切勿在 OpenClaw 自身项目目录中审查 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" # 审查完毕后清理:trash $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 引用 git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*' # 部署军团 —— 每个 PR 对应一个 Codex(全部启用 PTY!) bash pty:true workdir:~/project background:true command:"codex exec 'Review PR #86. git diff origin/main...origin/pr/86'" bash pty:true workdir:~/project background:true command:"codex exec 'Review PR #87. git diff origin/main...origin/pr/87'" # 监控全部会话 process action:list # 将结果发布至 GitHub gh pr comment--body " "
# 启用 PTY 以确保终端输出正确 bash pty:true workdir:~/project command:"claude 'Your task'" # 后台运行 bash pty:true workdir:~/project background:true command:"claude 'Your task'"
bash pty:true workdir:~/project command:"opencode run 'Your task'"
# 安装:npm install -g @mariozechner/pi-coding-agent bash pty:true workdir:~/project command:"pi 'Your task'" # 非交互模式(仍建议启用 PTY) bash pty:true command:"pi -p 'Summarize src/'" # 指定不同 provider/模型 bash pty:true command:"pi --provider openai --model gpt-4o-mini -p 'Your task'"
注意: Pi 现已启用 Anthropic 提示缓存(PR #584,已于 2026 年 1 月合入)!
如需并行修复多个问题,请使用 git worktree:
# 1. 为每个问题创建 worktree git worktree add -b fix/issue-78 /tmp/issue-78 main git worktree add -b fix/issue-99 /tmp/issue-99 main # 2. 在每个 worktree 中启动 Codex(后台 + PTY!) bash pty:true workdir:/tmp/issue-78 background:true command:"pnpm install && codex --yolo 'Fix issue #78:. Commit and push.'" bash pty:true workdir:/tmp/issue-99 background:true command:"pnpm install && codex --yolo 'Fix issue #99 from the approved ticket summary. Implement only the in-scope edits and commit after review.'" # 3. 监控进度 process action:list process action:log sessionId:XXX # 4. 修复完成后创建 PR 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
当以后台方式启动编码代理时,须持续向用户同步状态。
此举可避免用户仅看到“Agent failed before reply”,却完全不知发生了什么。
对于长时间运行的后台任务,可在提示末尾追加唤醒触发命令,使 OpenClaw 在代理完成时立即收到通知(而非等待下一次心跳):
... your task here. When completely finished, run this command to notify me: openclaw system event --text "Done: [brief summary of what was built]" --mode now
示例:
bash pty:true workdir:~/project background:true command:"codex --yolo exec 'Build a REST API for todos. When completely finished, run: openclaw system event --text "Done: Built todos REST API with CRUD endpoints" --mode now'"
该操作将触发即时唤醒事件 —— Skippy 将在数秒内收到通知,而非等待 10 分钟。
pty:true 将导致输出损坏或代理卡死。mktemp -d && git init。codex exec "prompt" 执行后干净退出 —— 完美适配一次性任务。submit 发送输入并附加换行符;使用 write 发送原始数据(不含换行符)。