[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openclaw-openclaw-skills-coding-agent":3},{"error":4,"detail":5,"metadata":23,"markdownContent":24,"rawMarkdown":20},false,{"repo_full_name":6,"owner":7,"repo_name":7,"repo_forks":8,"skill_path":9,"repo_stars":10,"name":11,"category_id":12,"description":13,"file_tree":14,"skill_md_content":20,"skill_id":21,"skill_key":22},"openclaw/openclaw","openclaw",62348,"skills/coding-agent",323515,"coding-agent",1,"Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:\"acp\"), or any work in ~/clawd workspace (never spawn agents here). Claude Code: use --print --permission-mode bypassPermissions (no PTY). Codex/Pi/OpenCode: pty:true required.",[15],{"name":16,"path":17,"size":18,"type":19},"SKILL.md","skills/coding-agent/SKILL.md",11228,"file","---\nname: coding-agent\ndescription: 'Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:\"acp\"), or any work in ~/clawd workspace (never spawn agents here). Claude Code: use --print --permission-mode bypassPermissions (no PTY). Codex/Pi/OpenCode: pty:true required.'\nmetadata:\n  {\n    \"openclaw\": { \"emoji\": \"🧩\", \"requires\": { \"anyBins\": [\"claude\", \"codex\", \"opencode\", \"pi\"] } },\n  }\n---\n\n# Coding Agent (bash-first)\n\nUse **bash** (with optional background mode) for all coding agent work. Simple and effective.\n\n## ⚠️ PTY Mode: Codex/Pi/OpenCode yes, Claude Code no\n\nFor **Codex, Pi, and OpenCode**, PTY is still required (interactive terminal apps):\n\n```bash\n# ✅ Correct for Codex/Pi/OpenCode\nbash pty:true command:\"codex exec 'Your prompt'\"\n```\n\nFor **Claude Code** (`claude` CLI), use `--print --permission-mode bypassPermissions` instead.\n`--dangerously-skip-permissions` with PTY can exit after the confirmation dialog.\n`--print` mode keeps full tool access and avoids interactive confirmation:\n\n```bash\n# ✅ Correct for Claude Code (no PTY needed)\ncd /path/to/project && claude --permission-mode bypassPermissions --print 'Your task'\n\n# For background execution: use background:true on the exec tool\n\n# ❌ Wrong for Claude Code\nbash pty:true command:\"claude --dangerously-skip-permissions 'task'\"\n```\n\n### Bash Tool Parameters\n\n| Parameter    | Type    | Description                                                                 |\n| ------------ | ------- | --------------------------------------------------------------------------- |\n| `command`    | string  | The shell command to run                                                    |\n| `pty`        | boolean | **Use for coding agents!** Allocates a pseudo-terminal for interactive CLIs |\n| `workdir`    | string  | Working directory (agent sees only this folder's context)                   |\n| `background` | boolean | Run in background, returns sessionId for monitoring                         |\n| `timeout`    | number  | Timeout in seconds (kills process on expiry)                                |\n| `elevated`   | boolean | Run on host instead of sandbox (if allowed)                                 |\n\n### Process Tool Actions (for background sessions)\n\n| Action      | Description                                          |\n| ----------- | ---------------------------------------------------- |\n| `list`      | List all running/recent sessions                     |\n| `poll`      | Check if session is still running                    |\n| `log`       | Get session output (with optional offset/limit)      |\n| `write`     | Send raw data to stdin                               |\n| `submit`    | Send data + newline (like typing and pressing Enter) |\n| `send-keys` | Send key tokens or hex bytes                         |\n| `paste`     | Paste text (with optional bracketed mode)            |\n| `kill`      | Terminate the session                                |\n\n---\n\n## Quick Start: One-Shot Tasks\n\nFor quick prompts/chats, create a temp git repo and run:\n\n```bash\n# Quick chat (Codex needs a git repo!)\nSCRATCH=$(mktemp -d) && cd $SCRATCH && git init && codex exec \"Your prompt here\"\n\n# Or in a real project - with PTY!\nbash pty:true workdir:~/Projects/myproject command:\"codex exec 'Add error handling to the API calls'\"\n```\n\n**Why git init?** Codex refuses to run outside a trusted git directory. Creating a temp repo solves this for scratch work.\n\n---\n\n## The Pattern: workdir + background + pty\n\nFor longer tasks, use background mode with PTY:\n\n```bash\n# Start agent in target directory (with PTY!)\nbash pty:true workdir:~/project background:true command:\"codex exec --full-auto 'Build a snake game'\"\n# Returns sessionId for tracking\n\n# Monitor progress\nprocess action:log sessionId:XXX\n\n# Check if done\nprocess action:poll sessionId:XXX\n\n# Send input (if agent asks a question)\nprocess action:write sessionId:XXX data:\"y\"\n\n# Submit with Enter (like typing \"yes\" and pressing Enter)\nprocess action:submit sessionId:XXX data:\"yes\"\n\n# Kill if needed\nprocess action:kill sessionId:XXX\n```\n\n**Why workdir matters:** Agent wakes up in a focused directory, doesn't wander off reading unrelated files (like your soul.md 😅).\n\n---\n\n## Codex CLI\n\n**Model:** `gpt-5.2-codex` is the default (set in ~/.codex/config.toml)\n\n### Flags\n\n| Flag            | Effect                                             |\n| --------------- | -------------------------------------------------- |\n| `exec \"prompt\"` | One-shot execution, exits when done                |\n| `--full-auto`   | Sandboxed but auto-approves in workspace           |\n| `--yolo`        | NO sandbox, NO approvals (fastest, most dangerous) |\n\n### Building/Creating\n\n```bash\n# Quick one-shot (auto-approves) - remember PTY!\nbash pty:true workdir:~/project command:\"codex exec --full-auto 'Build a dark mode toggle'\"\n\n# Background for longer work\nbash pty:true workdir:~/project background:true command:\"codex --yolo 'Refactor the auth module'\"\n```\n\n### Reviewing PRs\n\n**⚠️ CRITICAL: Never review PRs in OpenClaw's own project folder!**\nClone to temp folder or use git worktree.\n\n```bash\n# Clone to temp for safe review\nREVIEW_DIR=$(mktemp -d)\ngit clone https://github.com/user/repo.git $REVIEW_DIR\ncd $REVIEW_DIR && gh pr checkout 130\nbash pty:true workdir:$REVIEW_DIR command:\"codex review --base origin/main\"\n# Clean up after: trash $REVIEW_DIR\n\n# Or use git worktree (keeps main intact)\ngit worktree add /tmp/pr-130-review pr-130-branch\nbash pty:true workdir:/tmp/pr-130-review command:\"codex review --base main\"\n```\n\n### Batch PR Reviews (parallel army!)\n\n```bash\n# Fetch all PR refs first\ngit fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'\n\n# Deploy the army - one Codex per PR (all with PTY!)\nbash pty:true workdir:~/project background:true command:\"codex exec 'Review PR #86. git diff origin/main...origin/pr/86'\"\nbash pty:true workdir:~/project background:true command:\"codex exec 'Review PR #87. git diff origin/main...origin/pr/87'\"\n\n# Monitor all\nprocess action:list\n\n# Post results to GitHub\ngh pr comment \u003CPR#> --body \"\u003Creview content>\"\n```\n\n---\n\n## Claude Code\n\n```bash\n# Foreground\nbash workdir:~/project command:\"claude --permission-mode bypassPermissions --print 'Your task'\"\n\n# Background\nbash workdir:~/project background:true command:\"claude --permission-mode bypassPermissions --print 'Your task'\"\n```\n\n---\n\n## OpenCode\n\n```bash\nbash pty:true workdir:~/project command:\"opencode run 'Your task'\"\n```\n\n---\n\n## Pi Coding Agent\n\n```bash\n# Install: npm install -g @mariozechner/pi-coding-agent\nbash pty:true workdir:~/project command:\"pi 'Your task'\"\n\n# Non-interactive mode (PTY still recommended)\nbash pty:true command:\"pi -p 'Summarize src/'\"\n\n# Different provider/model\nbash pty:true command:\"pi --provider openai --model gpt-4o-mini -p 'Your task'\"\n```\n\n**Note:** Pi now has Anthropic prompt caching enabled (PR #584, merged Jan 2026)!\n\n---\n\n## Parallel Issue Fixing with git worktrees\n\nFor fixing multiple issues in parallel, use git worktrees:\n\n```bash\n# 1. Create worktrees for each issue\ngit worktree add -b fix/issue-78 /tmp/issue-78 main\ngit worktree add -b fix/issue-99 /tmp/issue-99 main\n\n# 2. Launch Codex in each (background + PTY!)\nbash pty:true workdir:/tmp/issue-78 background:true command:\"pnpm install && codex --yolo 'Fix issue #78: \u003Cdescription>. Commit and push.'\"\nbash 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.'\"\n\n# 3. Monitor progress\nprocess action:list\nprocess action:log sessionId:XXX\n\n# 4. Create PRs after fixes\ncd /tmp/issue-78 && git push -u origin fix/issue-78\ngh pr create --repo user/repo --head fix/issue-78 --title \"fix: ...\" --body \"...\"\n\n# 5. Cleanup\ngit worktree remove /tmp/issue-78\ngit worktree remove /tmp/issue-99\n```\n\n---\n\n## ⚠️ Rules\n\n1. **Use the right execution mode per agent**:\n   - Codex/Pi/OpenCode: `pty:true`\n   - Claude Code: `--print --permission-mode bypassPermissions` (no PTY required)\n2. **Respect tool choice** - if user asks for Codex, use Codex.\n   - Orchestrator mode: do NOT hand-code patches yourself.\n   - If an agent fails/hangs, respawn it or ask the user for direction, but don't silently take over.\n3. **Be patient** - don't kill sessions because they're \"slow\"\n4. **Monitor with process:log** - check progress without interfering\n5. **--full-auto for building** - auto-approves changes\n6. **vanilla for reviewing** - no special flags needed\n7. **Parallel is OK** - run many Codex processes at once for batch work\n8. **NEVER start Codex in ~/.openclaw/** - it'll read your soul docs and get weird ideas about the org chart!\n9. **NEVER checkout branches in ~/Projects/openclaw/** - that's the LIVE OpenClaw instance!\n\n---\n\n## Progress Updates (Critical)\n\nWhen you spawn coding agents in the background, keep the user in the loop.\n\n- Send 1 short message when you start (what's running + where).\n- Then only update again when something changes:\n  - a milestone completes (build finished, tests passed)\n  - the agent asks a question / needs input\n  - you hit an error or need user action\n  - the agent finishes (include what changed + where)\n- If you kill a session, immediately say you killed it and why.\n\nThis prevents the user from seeing only \"Agent failed before reply\" and having no idea what happened.\n\n---\n\n## Auto-Notify on Completion\n\nFor long-running background tasks, append a wake trigger to your prompt so OpenClaw gets notified immediately when the agent finishes (instead of waiting for the next heartbeat):\n\n```\n... your task here.\n\nWhen completely finished, run this command to notify me:\nopenclaw system event --text \"Done: [brief summary of what was built]\" --mode now\n```\n\n**Example:**\n\n```bash\nbash pty:true workdir:~/project background:true command:\"codex --yolo exec 'Build a REST API for todos.\n\nWhen completely finished, run: openclaw system event --text \\\"Done: Built todos REST API with CRUD endpoints\\\" --mode now'\"\n```\n\nThis triggers an immediate wake event — Skippy gets pinged in seconds, not 10 minutes.\n\n---\n\n## Learnings (Jan 2026)\n\n- **PTY is essential:** Coding agents are interactive terminal apps. Without `pty:true`, output breaks or agent hangs.\n- **Git repo required:** Codex won't run outside a git directory. Use `mktemp -d && git init` for scratch work.\n- **exec is your friend:** `codex exec \"prompt\"` runs and exits cleanly - perfect for one-shots.\n- **submit vs write:** Use `submit` to send input + Enter, `write` for raw data without newline.\n- **Sass works:** Codex responds well to playful prompts. Asked it to write a haiku about being second fiddle to a space lobster, got: _\"Second chair, I code / Space lobster sets the tempo / Keys glow, I follow\"_ 🦞\n","ac083836-d9a4-5999-9b1a-55de525fd1e0","openclaw-openclaw-skills-coding-agent",{"name":11,"description":13},"\u003Ch1>Coding Agent (bash-first)\u003C/h1>\n\u003Cp>Use \u003Cstrong>bash\u003C/strong> (with optional background mode) for all coding agent work. Simple and effective.\u003C/p>\n\u003Ch2>⚠️ PTY Mode: Codex/Pi/OpenCode yes, Claude Code no\u003C/h2>\n\u003Cp>For \u003Cstrong>Codex, Pi, and OpenCode\u003C/strong>, PTY is still required (interactive terminal apps):\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># ✅ Correct for Codex/Pi/OpenCode\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec &#x27;Your prompt&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>For \u003Cstrong>Claude Code\u003C/strong> (\u003Ccode>claude\u003C/code> CLI), use \u003Ccode>--print --permission-mode bypassPermissions\u003C/code> instead.\n\u003Ccode>--dangerously-skip-permissions\u003C/code> with PTY can exit after the confirmation dialog.\n\u003Ccode>--print\u003C/code> mode keeps full tool access and avoids interactive confirmation:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># ✅ Correct for Claude Code (no PTY needed)\u003C/span>\n\u003Cspan class=\"hljs-built_in\">cd\u003C/span> /path/to/project &amp;&amp; claude --permission-mode bypassPermissions --\u003Cspan class=\"hljs-built_in\">print\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;Your task&#x27;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># For background execution: use background:true on the exec tool\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># ❌ Wrong for Claude Code\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;claude --dangerously-skip-permissions &#x27;task&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Bash Tool Parameters\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C/th>\n\u003Cth>Type\u003C/th>\n\u003Cth>Description\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>command\u003C/code>\u003C/td>\n\u003Ctd>string\u003C/td>\n\u003Ctd>The shell command to run\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pty\u003C/code>\u003C/td>\n\u003Ctd>boolean\u003C/td>\n\u003Ctd>\u003Cstrong>Use for coding agents!\u003C/strong> Allocates a pseudo-terminal for interactive CLIs\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>workdir\u003C/code>\u003C/td>\n\u003Ctd>string\u003C/td>\n\u003Ctd>Working directory (agent sees only this folder&#39;s context)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>background\u003C/code>\u003C/td>\n\u003Ctd>boolean\u003C/td>\n\u003Ctd>Run in background, returns sessionId for monitoring\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>timeout\u003C/code>\u003C/td>\n\u003Ctd>number\u003C/td>\n\u003Ctd>Timeout in seconds (kills process on expiry)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>elevated\u003C/code>\u003C/td>\n\u003Ctd>boolean\u003C/td>\n\u003Ctd>Run on host instead of sandbox (if allowed)\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ch3>Process Tool Actions (for background sessions)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Action\u003C/th>\n\u003Cth>Description\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>list\u003C/code>\u003C/td>\n\u003Ctd>List all running/recent sessions\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>poll\u003C/code>\u003C/td>\n\u003Ctd>Check if session is still running\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>log\u003C/code>\u003C/td>\n\u003Ctd>Get session output (with optional offset/limit)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>write\u003C/code>\u003C/td>\n\u003Ctd>Send raw data to stdin\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>submit\u003C/code>\u003C/td>\n\u003Ctd>Send data + newline (like typing and pressing Enter)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>send-keys\u003C/code>\u003C/td>\n\u003Ctd>Send key tokens or hex bytes\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paste\u003C/code>\u003C/td>\n\u003Ctd>Paste text (with optional bracketed mode)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>kill\u003C/code>\u003C/td>\n\u003Ctd>Terminate the session\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Chr>\n\u003Ch2>Quick Start: One-Shot Tasks\u003C/h2>\n\u003Cp>For quick prompts/chats, create a temp git repo and run:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Quick chat (Codex needs a git repo!)\u003C/span>\nSCRATCH=$(\u003Cspan class=\"hljs-built_in\">mktemp\u003C/span> -d) &amp;&amp; \u003Cspan class=\"hljs-built_in\">cd\u003C/span> \u003Cspan class=\"hljs-variable\">$SCRATCH\u003C/span> &amp;&amp; git init &amp;&amp; codex \u003Cspan class=\"hljs-built_in\">exec\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Your prompt here&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Or in a real project - with PTY!\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/Projects/myproject \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec &#x27;Add error handling to the API calls&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Why git init?\u003C/strong> Codex refuses to run outside a trusted git directory. Creating a temp repo solves this for scratch work.\u003C/p>\n\u003Chr>\n\u003Ch2>The Pattern: workdir + background + pty\u003C/h2>\n\u003Cp>For longer tasks, use background mode with PTY:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Start agent in target directory (with PTY!)\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec --full-auto &#x27;Build a snake game&#x27;&quot;\u003C/span>\n\u003Cspan class=\"hljs-comment\"># Returns sessionId for tracking\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Monitor progress\u003C/span>\nprocess action:\u003Cspan class=\"hljs-built_in\">log\u003C/span> sessionId:XXX\n\n\u003Cspan class=\"hljs-comment\"># Check if done\u003C/span>\nprocess action:poll sessionId:XXX\n\n\u003Cspan class=\"hljs-comment\"># Send input (if agent asks a question)\u003C/span>\nprocess action:write sessionId:XXX data:\u003Cspan class=\"hljs-string\">&quot;y&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Submit with Enter (like typing &quot;yes&quot; and pressing Enter)\u003C/span>\nprocess action:submit sessionId:XXX data:\u003Cspan class=\"hljs-string\">&quot;yes&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Kill if needed\u003C/span>\nprocess action:\u003Cspan class=\"hljs-built_in\">kill\u003C/span> sessionId:XXX\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Why workdir matters:\u003C/strong> Agent wakes up in a focused directory, doesn&#39;t wander off reading unrelated files (like your soul.md 😅).\u003C/p>\n\u003Chr>\n\u003Ch2>Codex CLI\u003C/h2>\n\u003Cp>\u003Cstrong>Model:\u003C/strong> \u003Ccode>gpt-5.2-codex\u003C/code> is the default (set in ~/.codex/config.toml)\u003C/p>\n\u003Ch3>Flags\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Flag\u003C/th>\n\u003Cth>Effect\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>exec &quot;prompt&quot;\u003C/code>\u003C/td>\n\u003Ctd>One-shot execution, exits when done\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--full-auto\u003C/code>\u003C/td>\n\u003Ctd>Sandboxed but auto-approves in workspace\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--yolo\u003C/code>\u003C/td>\n\u003Ctd>NO sandbox, NO approvals (fastest, most dangerous)\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Ch3>Building/Creating\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Quick one-shot (auto-approves) - remember PTY!\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec --full-auto &#x27;Build a dark mode toggle&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Background for longer work\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex --yolo &#x27;Refactor the auth module&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Reviewing PRs\u003C/h3>\n\u003Cp>\u003Cstrong>⚠️ CRITICAL: Never review PRs in OpenClaw&#39;s own project folder!\u003C/strong>\nClone to temp folder or use git worktree.\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Clone to temp for safe review\u003C/span>\nREVIEW_DIR=$(\u003Cspan class=\"hljs-built_in\">mktemp\u003C/span> -d)\ngit \u003Cspan class=\"hljs-built_in\">clone\u003C/span> https://github.com/user/repo.git \u003Cspan class=\"hljs-variable\">$REVIEW_DIR\u003C/span>\n\u003Cspan class=\"hljs-built_in\">cd\u003C/span> \u003Cspan class=\"hljs-variable\">$REVIEW_DIR\u003C/span> &amp;&amp; gh \u003Cspan class=\"hljs-built_in\">pr\u003C/span> checkout 130\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:\u003Cspan class=\"hljs-variable\">$REVIEW_DIR\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex review --base origin/main&quot;\u003C/span>\n\u003Cspan class=\"hljs-comment\"># Clean up after: trash $REVIEW_DIR\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Or use git worktree (keeps main intact)\u003C/span>\ngit worktree add /tmp/pr-130-review pr-130-branch\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:/tmp/pr-130-review \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex review --base main&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Ch3>Batch PR Reviews (parallel army!)\u003C/h3>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Fetch all PR refs first\u003C/span>\ngit fetch origin \u003Cspan class=\"hljs-string\">&#x27;+refs/pull/*/head:refs/remotes/origin/pr/*&#x27;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Deploy the army - one Codex per PR (all with PTY!)\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec &#x27;Review PR #86. git diff origin/main...origin/pr/86&#x27;&quot;\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex exec &#x27;Review PR #87. git diff origin/main...origin/pr/87&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Monitor all\u003C/span>\nprocess action:list\n\n\u003Cspan class=\"hljs-comment\"># Post results to GitHub\u003C/span>\ngh \u003Cspan class=\"hljs-built_in\">pr\u003C/span> comment &lt;PR#&gt; --body \u003Cspan class=\"hljs-string\">&quot;&lt;review content&gt;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>Claude Code\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Foreground\u003C/span>\nbash workdir:~/project \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;claude --permission-mode bypassPermissions --print &#x27;Your task&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Background\u003C/span>\nbash workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;claude --permission-mode bypassPermissions --print &#x27;Your task&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>OpenCode\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">bash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;opencode run &#x27;Your task&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>Pi Coding Agent\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Install: npm install -g @mariozechner/pi-coding-agent\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;pi &#x27;Your task&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Non-interactive mode (PTY still recommended)\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;pi -p &#x27;Summarize src/&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># Different provider/model\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;pi --provider openai --model gpt-4o-mini -p &#x27;Your task&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Note:\u003C/strong> Pi now has Anthropic prompt caching enabled (PR #584, merged Jan 2026)!\u003C/p>\n\u003Chr>\n\u003Ch2>Parallel Issue Fixing with git worktrees\u003C/h2>\n\u003Cp>For fixing multiple issues in parallel, use git worktrees:\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># 1. Create worktrees for each issue\u003C/span>\ngit worktree add -b fix/issue-78 /tmp/issue-78 main\ngit worktree add -b fix/issue-99 /tmp/issue-99 main\n\n\u003Cspan class=\"hljs-comment\"># 2. Launch Codex in each (background + PTY!)\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:/tmp/issue-78 background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;pnpm install &amp;&amp; codex --yolo &#x27;Fix issue #78: &lt;description&gt;. Commit and push.&#x27;&quot;\u003C/span>\nbash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:/tmp/issue-99 background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;pnpm install &amp;&amp; codex --yolo &#x27;Fix issue #99 from the approved ticket summary. Implement only the in-scope edits and commit after review.&#x27;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># 3. Monitor progress\u003C/span>\nprocess action:list\nprocess action:\u003Cspan class=\"hljs-built_in\">log\u003C/span> sessionId:XXX\n\n\u003Cspan class=\"hljs-comment\"># 4. Create PRs after fixes\u003C/span>\n\u003Cspan class=\"hljs-built_in\">cd\u003C/span> /tmp/issue-78 &amp;&amp; git push -u origin fix/issue-78\ngh \u003Cspan class=\"hljs-built_in\">pr\u003C/span> create --repo user/repo --\u003Cspan class=\"hljs-built_in\">head\u003C/span> fix/issue-78 --title \u003Cspan class=\"hljs-string\">&quot;fix: ...&quot;\u003C/span> --body \u003Cspan class=\"hljs-string\">&quot;...&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-comment\"># 5. Cleanup\u003C/span>\ngit worktree remove /tmp/issue-78\ngit worktree remove /tmp/issue-99\u003C/code>\u003C/pre>\u003C/div>\u003Chr>\n\u003Ch2>⚠️ Rules\u003C/h2>\n\u003Col>\n\u003Cli>\u003Cstrong>Use the right execution mode per agent\u003C/strong>:\u003Cul>\n\u003Cli>Codex/Pi/OpenCode: \u003Ccode>pty:true\u003C/code>\u003C/li>\n\u003Cli>Claude Code: \u003Ccode>--print --permission-mode bypassPermissions\u003C/code> (no PTY required)\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cstrong>Respect tool choice\u003C/strong> - if user asks for Codex, use Codex.\u003Cul>\n\u003Cli>Orchestrator mode: do NOT hand-code patches yourself.\u003C/li>\n\u003Cli>If an agent fails/hangs, respawn it or ask the user for direction, but don&#39;t silently take over.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cstrong>Be patient\u003C/strong> - don&#39;t kill sessions because they&#39;re &quot;slow&quot;\u003C/li>\n\u003Cli>\u003Cstrong>Monitor with process:log\u003C/strong> - check progress without interfering\u003C/li>\n\u003Cli>\u003Cstrong>--full-auto for building\u003C/strong> - auto-approves changes\u003C/li>\n\u003Cli>\u003Cstrong>vanilla for reviewing\u003C/strong> - no special flags needed\u003C/li>\n\u003Cli>\u003Cstrong>Parallel is OK\u003C/strong> - run many Codex processes at once for batch work\u003C/li>\n\u003Cli>\u003Cstrong>NEVER start Codex in ~/.openclaw/\u003C/strong> - it&#39;ll read your soul docs and get weird ideas about the org chart!\u003C/li>\n\u003Cli>\u003Cstrong>NEVER checkout branches in ~/Projects/openclaw/\u003C/strong> - that&#39;s the LIVE OpenClaw instance!\u003C/li>\n\u003C/ol>\n\u003Chr>\n\u003Ch2>Progress Updates (Critical)\u003C/h2>\n\u003Cp>When you spawn coding agents in the background, keep the user in the loop.\u003C/p>\n\u003Cul>\n\u003Cli>Send 1 short message when you start (what&#39;s running + where).\u003C/li>\n\u003Cli>Then only update again when something changes:\u003Cul>\n\u003Cli>a milestone completes (build finished, tests passed)\u003C/li>\n\u003Cli>the agent asks a question / needs input\u003C/li>\n\u003Cli>you hit an error or need user action\u003C/li>\n\u003Cli>the agent finishes (include what changed + where)\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>If you kill a session, immediately say you killed it and why.\u003C/li>\n\u003C/ul>\n\u003Cp>This prevents the user from seeing only &quot;Agent failed before reply&quot; and having no idea what happened.\u003C/p>\n\u003Chr>\n\u003Ch2>Auto-Notify on Completion\u003C/h2>\n\u003Cp>For long-running background tasks, append a wake trigger to your prompt so OpenClaw gets notified immediately when the agent finishes (instead of waiting for the next heartbeat):\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cpre>\u003Ccode class=\"hljs language-plaintext\">... your task here.\n\nWhen completely finished, run this command to notify me:\nopenclaw system event --text &quot;Done: [brief summary of what was built]&quot; --mode now\u003C/code>\u003C/pre>\u003C/div>\u003Cp>\u003Cstrong>Example:\u003C/strong>\u003C/p>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">bash pty:\u003Cspan class=\"hljs-literal\">true\u003C/span> workdir:~/project background:\u003Cspan class=\"hljs-literal\">true\u003C/span> \u003Cspan class=\"hljs-built_in\">command\u003C/span>:\u003Cspan class=\"hljs-string\">&quot;codex --yolo exec &#x27;Build a REST API for todos.\n\nWhen completely finished, run: openclaw system event --text \\&quot;Done: Built todos REST API with CRUD endpoints\\&quot; --mode now&#x27;&quot;\u003C/span>\u003C/code>\u003C/pre>\u003C/div>\u003Cp>This triggers an immediate wake event — Skippy gets pinged in seconds, not 10 minutes.\u003C/p>\n\u003Chr>\n\u003Ch2>Learnings (Jan 2026)\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>PTY is essential:\u003C/strong> Coding agents are interactive terminal apps. Without \u003Ccode>pty:true\u003C/code>, output breaks or agent hangs.\u003C/li>\n\u003Cli>\u003Cstrong>Git repo required:\u003C/strong> Codex won&#39;t run outside a git directory. Use \u003Ccode>mktemp -d &amp;&amp; git init\u003C/code> for scratch work.\u003C/li>\n\u003Cli>\u003Cstrong>exec is your friend:\u003C/strong> \u003Ccode>codex exec &quot;prompt&quot;\u003C/code> runs and exits cleanly - perfect for one-shots.\u003C/li>\n\u003Cli>\u003Cstrong>submit vs write:\u003C/strong> Use \u003Ccode>submit\u003C/code> to send input + Enter, \u003Ccode>write\u003C/code> for raw data without newline.\u003C/li>\n\u003Cli>\u003Cstrong>Sass works:\u003C/strong> Codex responds well to playful prompts. Asked it to write a haiku about being second fiddle to a space lobster, got: \u003Cem>&quot;Second chair, I code / Space lobster sets the tempo / Keys glow, I follow&quot;\u003C/em> 🦞\u003C/li>\n\u003C/ul>\n"]