[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-deepgram-agent-orchestration":3,"mdc-8ziz7l-key":35,"related-repo-deepgram-agent-orchestration":795,"related-org-deepgram-agent-orchestration":875},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"agent-orchestration","orchestrate multiple AI agents","Use when you need to launch and drive other AI agents (Claude Code, Aider, Codex, etc.) through their terminal interfaces via wsh. Examples: \"run multiple Claude Code sessions in parallel on different tasks\", \"feed a task to an AI agent and handle its approval prompts\", \"coordinate several AI agents working on subtasks of a larger project\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"deepgram","Deepgram","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fdeepgram.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Automation","automation","tag",{"name":17,"slug":18,"type":15},"CLI","cli",{"name":20,"slug":21,"type":15},"Agents","agents",{"name":23,"slug":24,"type":15},"Multi-Agent","multi-agent",5,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fwsh","2026-07-12T08:29:40.028618",null,2,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":28},[],"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fwsh\u002Ftree\u002FHEAD\u002Fskills\u002Fagent-orchestration","---\nname: agent-orchestration\ndescription: >\n  Use when you need to launch and drive other AI agents (Claude Code, Aider,\n  Codex, etc.) through their terminal interfaces via wsh. Examples: \"run\n  multiple Claude Code sessions in parallel on different tasks\", \"feed a task\n  to an AI agent and handle its approval prompts\", \"coordinate several AI\n  agents working on subtasks of a larger project\".\n---\n\n> **IMPORTANT: EXECUTION CONTEXT**\n> This skill describes *what to do* — domain patterns and decision-making.\n> It does NOT describe *how* to call the API.\n>\n> 1. **If you have `wsh_*` tools** (check your toolkit for `wsh_send_input`,\n>    `wsh_get_screen`, etc.): use them directly. Operation names in this\n>    skill generally map to tool names (e.g., \"send input\" → `wsh_send_input`).\n>    When in doubt, list your available `wsh_*` tools.\n> 2. **If you do NOT have `wsh_*` tools**: you are in HTTP\u002Fcurl fallback mode.\n>    **DO NOT GUESS endpoints or CLI subcommands.**\n>    Load the full API reference first: search your workspace for\n>    `skills\u002Fcore\u002F` and read `SKILL.md`. It contains every endpoint\n>    with working curl examples and a bootstrap sequence.\n> 3. **Quick bootstrap**: `curl -sf --unix-socket ${XDG_RUNTIME_DIR:-\u002Ftmp}\u002Fwsh\u002Fdefault.http.sock http:\u002F\u002Flocalhost\u002Fhealth`\n>    — if that fails: `wsh server -L agent-$$ --ephemeral &` and retry.\n\n# wsh:agent-orchestration — Driving AI Agents\n\nYou can use wsh to launch and drive other AI agents — Claude\nCode, Aider, Codex, or any AI tool with a terminal interface.\nThis is not science fiction. You spawn the agent in a wsh\nsession, feed it tasks, handle its approval prompts, and\nreview its output. You become a manager of AI workers.\n\n## Why?\n\n- **Parallelism.** You can run 5 Claude Code sessions\n  simultaneously, each working on a different task.\n- **Delegation.** Break a large project into subtasks and\n  assign each to an agent session.\n- **Specialization.** Different agents have different\n  strengths. Orchestrate the right tool for each job.\n- **Automation.** Unattended workflows — an agent that\n  spawns agents, reviews their work, and merges the results.\n\n## Launching an Agent\n\nCreate a session with the agent as its command:\n\n    create session \"agent-auth\" with command: claude --print \"Implement user auth in src\u002Fauth.rs\"\n\nOr start a shell and launch the agent interactively:\n\n    create session \"agent-auth\"\n    send: claude\n    wait for idle\n    read screen — verify Claude Code has started\n    send: Implement user authentication in src\u002Fauth.rs\\n\n\nThe interactive approach gives you more control — you can\nset up the environment first, then launch the agent.\n\n## Agent Interaction Patterns\n\nAI agents aren't like regular CLI programs. They produce\nlong bursts of output, pause to think, ask for approval,\nand sometimes wait indefinitely for human input. You need\nto recognize these states.\n\n### The Agent Lifecycle\nMost AI terminal agents follow this pattern:\n\n    1. Startup — banner, loading, initialization\n    2. Thinking — reading files, planning (may be quiet\n       for seconds or minutes)\n    3. Working — producing output, writing code, running\n       commands\n    4. Approval — asking permission before a tool use or\n       destructive action\n    5. Waiting — idle, expecting the next task\n    6. Repeat from 2\n\n### Detecting Agent State\n\n**Startup:** Look for the agent's banner or welcome message.\nEach agent has a recognizable one. Wait for it before\nsending input.\n\n**Thinking:** The terminal may be silent for extended\nperiods. This is normal — don't assume it's stuck. Use\nlonger idle timeouts (10-30 seconds) and poll\npatiently. Look for spinner characters or progress\nindicators.\n\n**Approval prompts:** These are critical. Look for patterns\nlike:\n- \"Allow?\" \"Approve?\" \"Proceed?\" \"Y\u002Fn\"\n- \"Do you want to run this command?\"\n- A tool call description followed by a prompt\n- Highlighted or bold text asking for confirmation\n\n**Waiting for input:** After completing a task, the agent\nshows a prompt for the next instruction. Look for an\ninput indicator — a cursor, a `>`, or an explicit\n\"What would you like to do?\" message.\n\n### Idle Detection Is Tricky with Agents\nAgents think. Thinking produces no output. An idle\ntimeout of 2 seconds will trigger constantly during\nthinking phases. Use longer timeouts (10-30 seconds) and\nalways read the screen to distinguish \"thinking\" from\n\"waiting for input.\"\n\nWhen re-polling, use `last_generation` or `fresh=true` to\navoid busy-loop storms where the server responds immediately\nbecause nothing has changed since the last check.\n\n## Feeding Tasks\n\nKeep instructions clear and self-contained. The agent can't\nask you clarifying questions — or rather, it can, but you\nneed to detect and answer them programmatically.\n\n### Good Task Instructions\nBe specific. Include context the agent needs:\n\n    send: Add input validation to the POST \u002Fusers endpoint. \\\n    Reject requests where email is missing or malformed. \\\n    Return 400 with a JSON error body.\\n\n\nNot:\n\n    send: fix the users endpoint\\n\n\n### Scoping Tasks\nPrefer small, well-defined tasks over large ambiguous ones.\nAn agent working on \"implement the entire auth system\" will\nmake many decisions you might disagree with. An agent working\non \"add bcrypt password hashing to the User model\" has less\nroom to go sideways.\n\n## Handling Approvals\n\nMany agents ask for permission before taking actions. You\nhave three strategies:\n\n### Auto-Approve Everything\nIf you trust the agent and the task is low-risk, configure\nit to skip approvals:\n\n    send: claude --dangerously-skip-permissions\\n\n\nOnly do this for isolated, low-stakes work. Never for\nproduction systems.\n\n### Selective Approval\nRead the approval prompt, decide whether to approve:\n\n    read screen\n    # See: \"Run command: npm install express?\"\n    # Looks safe.\n    send: y\\n\n\n    read screen\n    # See: \"Run command: rm -rf \u002Ftmp\u002Fbuild\"\n    # Inspect further before approving.\n\n### Reject and Redirect\nIf the agent proposes something wrong, reject and explain:\n\n    send: n\\n\n    wait, read\n    send: Don't delete that directory. Use a fresh \\\n    build directory at \u002Ftmp\u002Fbuild-new instead.\\n\n\n## Reviewing Output\n\nAfter the agent finishes a task, review what it did:\n\n    read screen — see the final status\n    read scrollback — see the full conversation\n\nLook for: files changed, commands run, errors encountered,\ntests passed or failed. The scrollback is your audit trail.\n\n## Multi-Agent Coordination\n\nThe real power is running multiple agents in parallel. Each\ngets its own session, its own task, its own workspace.\n\n### The Delegation Pattern\n\n    1. Plan — break the project into independent subtasks\n    2. Spawn — create a session for each subtask\n    3. Launch — start an agent in each session with its task\n    4. Monitor — poll sessions, handle approvals\n    5. Review — read each agent's output when it finishes\n    6. Integrate — merge the results\n\n### Monitoring Multiple Agents\n\nPoll round-robin with short idle timeouts. You're\nlooking for approval prompts that need your attention:\n\n    for each agent session:\n        await idle (timeout_ms=3000)\n        read screen\n        if approval prompt detected:\n            evaluate and respond\n        if task complete:\n            review output, clean up session\n        if still working:\n            move to next session\n\nAgents that are thinking or working need no intervention.\nFocus your attention on agents that are blocked waiting\nfor approval or input.\n\n### Workspace Isolation\n\nGive each agent its own workspace to avoid conflicts.\nAgents editing the same files simultaneously will corrupt\neach other's work:\n\n    # Use git worktrees for code tasks\n    send to \"setup\": git worktree add \u002Ftmp\u002Fagent-auth feature\u002Fauth\n    send to \"setup\": git worktree add \u002Ftmp\u002Fagent-api feature\u002Fapi\n\n    create session \"agent-auth\", cwd: \u002Ftmp\u002Fagent-auth\n    create session \"agent-api\", cwd: \u002Ftmp\u002Fagent-api\n\nOr use separate branches, separate directories, or\nseparate repositories. The key principle: agents that\nmight touch the same files must not run in parallel\nwithout isolation.\n\n### Passing Results Between Agents\n\nAgents can't talk to each other directly. Use the\nfilesystem as the communication channel:\n\n    # Agent 1 produces an artifact\n    agent-1 writes to \u002Ftmp\u002Fapi-spec.json\n\n    # You read it and feed it to Agent 2\n    read \u002Ftmp\u002Fapi-spec.json\n    send to agent-2: Implement the client based on the\n    API spec at \u002Ftmp\u002Fapi-spec.json\\n\n\n## Pitfalls\n\n### Don't Over-Parallelize\nMore agents isn't always better. Each agent consumes\nresources — API rate limits, CPU, memory. And each agent\nyou run is one more you need to monitor. Start with 2-3\nagents and scale up once you're comfortable with the\nmonitoring rhythm.\n\n### Watch for Agents Talking to Each Other Accidentally\nIf two agents are running in the same git repo without\nworkspace isolation, one agent's changes (file writes,\nbranch switches, dependency installs) will affect the\nother. This causes bizarre failures that are hard to\ndiagnose. Always isolate.\n\n### Infinite Loops\nAn agent can get stuck — retrying a failing command,\nasking itself a question, or endlessly editing a file.\nIf you notice an agent producing repetitive output\nwithout progress, intervene:\n\n    send: Stop. The current approach isn't working. \\\n    Try a different strategy.\\n\n\nIf it persists, Ctrl+C and give it a fresh start with\nclearer instructions.\n\n### Don't Forget Cleanup\nAgent sessions with worktrees, temp files, and running\nprocesses leave debris. When the orchestration is done:\n- Exit or kill all agent sessions\n- Remove worktrees: `git worktree remove \u002Ftmp\u002Fagent-auth`\n- Clean up temp files\n- Verify the main repo is in a clean state\n\n### Know When Not to Orchestrate\nIf the task requires deep understanding of a complex\nsystem, one focused agent with good context will\noutperform three agents with shallow context.\nOrchestration works best when tasks are genuinely\nindependent and well-specified. If tasks are tightly\ncoupled, work them sequentially in a single session.\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,192,199,204,211,255,261,266,278,283,292,297,303,308,315,320,329,335,345,355,365,388,406,412,417,438,444,449,455,460,469,474,483,489,494,500,505,511,516,525,530,536,541,550,556,561,570,576,581,590,595,601,606,612,621,627,632,641,646,652,657,666,671,677,682,691,697,703,708,714,719,725,730,739,744,750,755,784,790],{"type":41,"tag":42,"props":43,"children":44},"element","blockquote",{},[45,73],{"type":41,"tag":46,"props":47,"children":48},"p",{},[49,56,58,64,66,71],{"type":41,"tag":50,"props":51,"children":52},"strong",{},[53],{"type":54,"value":55},"text","IMPORTANT: EXECUTION CONTEXT",{"type":54,"value":57},"\nThis skill describes ",{"type":41,"tag":59,"props":60,"children":61},"em",{},[62],{"type":54,"value":63},"what to do",{"type":54,"value":65}," — domain patterns and decision-making.\nIt does NOT describe ",{"type":41,"tag":59,"props":67,"children":68},{},[69],{"type":54,"value":70},"how",{"type":54,"value":72}," to call the API.",{"type":41,"tag":74,"props":75,"children":76},"ol",{},[77,127,166],{"type":41,"tag":78,"props":79,"children":80},"li",{},[81,95,97,103,105,111,113,118,120,125],{"type":41,"tag":50,"props":82,"children":83},{},[84,86,93],{"type":54,"value":85},"If you have ",{"type":41,"tag":87,"props":88,"children":90},"code",{"className":89},[],[91],{"type":54,"value":92},"wsh_*",{"type":54,"value":94}," tools",{"type":54,"value":96}," (check your toolkit for ",{"type":41,"tag":87,"props":98,"children":100},{"className":99},[],[101],{"type":54,"value":102},"wsh_send_input",{"type":54,"value":104},",\n",{"type":41,"tag":87,"props":106,"children":108},{"className":107},[],[109],{"type":54,"value":110},"wsh_get_screen",{"type":54,"value":112},", etc.): use them directly. Operation names in this\nskill generally map to tool names (e.g., \"send input\" → ",{"type":41,"tag":87,"props":114,"children":116},{"className":115},[],[117],{"type":54,"value":102},{"type":54,"value":119},").\nWhen in doubt, list your available ",{"type":41,"tag":87,"props":121,"children":123},{"className":122},[],[124],{"type":54,"value":92},{"type":54,"value":126}," tools.",{"type":41,"tag":78,"props":128,"children":129},{},[130,141,143,148,150,156,158,164],{"type":41,"tag":50,"props":131,"children":132},{},[133,135,140],{"type":54,"value":134},"If you do NOT have ",{"type":41,"tag":87,"props":136,"children":138},{"className":137},[],[139],{"type":54,"value":92},{"type":54,"value":94},{"type":54,"value":142},": you are in HTTP\u002Fcurl fallback mode.\n",{"type":41,"tag":50,"props":144,"children":145},{},[146],{"type":54,"value":147},"DO NOT GUESS endpoints or CLI subcommands.",{"type":54,"value":149},"\nLoad the full API reference first: search your workspace for\n",{"type":41,"tag":87,"props":151,"children":153},{"className":152},[],[154],{"type":54,"value":155},"skills\u002Fcore\u002F",{"type":54,"value":157}," and read ",{"type":41,"tag":87,"props":159,"children":161},{"className":160},[],[162],{"type":54,"value":163},"SKILL.md",{"type":54,"value":165},". It contains every endpoint\nwith working curl examples and a bootstrap sequence.",{"type":41,"tag":78,"props":167,"children":168},{},[169,174,176,182,184,190],{"type":41,"tag":50,"props":170,"children":171},{},[172],{"type":54,"value":173},"Quick bootstrap",{"type":54,"value":175},": ",{"type":41,"tag":87,"props":177,"children":179},{"className":178},[],[180],{"type":54,"value":181},"curl -sf --unix-socket ${XDG_RUNTIME_DIR:-\u002Ftmp}\u002Fwsh\u002Fdefault.http.sock http:\u002F\u002Flocalhost\u002Fhealth",{"type":54,"value":183},"\n— if that fails: ",{"type":41,"tag":87,"props":185,"children":187},{"className":186},[],[188],{"type":54,"value":189},"wsh server -L agent-$$ --ephemeral &",{"type":54,"value":191}," and retry.",{"type":41,"tag":193,"props":194,"children":196},"h1",{"id":195},"wshagent-orchestration-driving-ai-agents",[197],{"type":54,"value":198},"wsh:agent-orchestration — Driving AI Agents",{"type":41,"tag":46,"props":200,"children":201},{},[202],{"type":54,"value":203},"You can use wsh to launch and drive other AI agents — Claude\nCode, Aider, Codex, or any AI tool with a terminal interface.\nThis is not science fiction. You spawn the agent in a wsh\nsession, feed it tasks, handle its approval prompts, and\nreview its output. You become a manager of AI workers.",{"type":41,"tag":205,"props":206,"children":208},"h2",{"id":207},"why",[209],{"type":54,"value":210},"Why?",{"type":41,"tag":212,"props":213,"children":214},"ul",{},[215,225,235,245],{"type":41,"tag":78,"props":216,"children":217},{},[218,223],{"type":41,"tag":50,"props":219,"children":220},{},[221],{"type":54,"value":222},"Parallelism.",{"type":54,"value":224}," You can run 5 Claude Code sessions\nsimultaneously, each working on a different task.",{"type":41,"tag":78,"props":226,"children":227},{},[228,233],{"type":41,"tag":50,"props":229,"children":230},{},[231],{"type":54,"value":232},"Delegation.",{"type":54,"value":234}," Break a large project into subtasks and\nassign each to an agent session.",{"type":41,"tag":78,"props":236,"children":237},{},[238,243],{"type":41,"tag":50,"props":239,"children":240},{},[241],{"type":54,"value":242},"Specialization.",{"type":54,"value":244}," Different agents have different\nstrengths. Orchestrate the right tool for each job.",{"type":41,"tag":78,"props":246,"children":247},{},[248,253],{"type":41,"tag":50,"props":249,"children":250},{},[251],{"type":54,"value":252},"Automation.",{"type":54,"value":254}," Unattended workflows — an agent that\nspawns agents, reviews their work, and merges the results.",{"type":41,"tag":205,"props":256,"children":258},{"id":257},"launching-an-agent",[259],{"type":54,"value":260},"Launching an Agent",{"type":41,"tag":46,"props":262,"children":263},{},[264],{"type":54,"value":265},"Create a session with the agent as its command:",{"type":41,"tag":267,"props":268,"children":272},"pre",{"className":269,"code":271,"language":54},[270],"language-text","create session \"agent-auth\" with command: claude --print \"Implement user auth in src\u002Fauth.rs\"\n",[273],{"type":41,"tag":87,"props":274,"children":276},{"__ignoreMap":275},"",[277],{"type":54,"value":271},{"type":41,"tag":46,"props":279,"children":280},{},[281],{"type":54,"value":282},"Or start a shell and launch the agent interactively:",{"type":41,"tag":267,"props":284,"children":287},{"className":285,"code":286,"language":54},[270],"create session \"agent-auth\"\nsend: claude\nwait for idle\nread screen — verify Claude Code has started\nsend: Implement user authentication in src\u002Fauth.rs\\n\n",[288],{"type":41,"tag":87,"props":289,"children":290},{"__ignoreMap":275},[291],{"type":54,"value":286},{"type":41,"tag":46,"props":293,"children":294},{},[295],{"type":54,"value":296},"The interactive approach gives you more control — you can\nset up the environment first, then launch the agent.",{"type":41,"tag":205,"props":298,"children":300},{"id":299},"agent-interaction-patterns",[301],{"type":54,"value":302},"Agent Interaction Patterns",{"type":41,"tag":46,"props":304,"children":305},{},[306],{"type":54,"value":307},"AI agents aren't like regular CLI programs. They produce\nlong bursts of output, pause to think, ask for approval,\nand sometimes wait indefinitely for human input. You need\nto recognize these states.",{"type":41,"tag":309,"props":310,"children":312},"h3",{"id":311},"the-agent-lifecycle",[313],{"type":54,"value":314},"The Agent Lifecycle",{"type":41,"tag":46,"props":316,"children":317},{},[318],{"type":54,"value":319},"Most AI terminal agents follow this pattern:",{"type":41,"tag":267,"props":321,"children":324},{"className":322,"code":323,"language":54},[270],"1. Startup — banner, loading, initialization\n2. Thinking — reading files, planning (may be quiet\n   for seconds or minutes)\n3. Working — producing output, writing code, running\n   commands\n4. Approval — asking permission before a tool use or\n   destructive action\n5. Waiting — idle, expecting the next task\n6. Repeat from 2\n",[325],{"type":41,"tag":87,"props":326,"children":327},{"__ignoreMap":275},[328],{"type":54,"value":323},{"type":41,"tag":309,"props":330,"children":332},{"id":331},"detecting-agent-state",[333],{"type":54,"value":334},"Detecting Agent State",{"type":41,"tag":46,"props":336,"children":337},{},[338,343],{"type":41,"tag":50,"props":339,"children":340},{},[341],{"type":54,"value":342},"Startup:",{"type":54,"value":344}," Look for the agent's banner or welcome message.\nEach agent has a recognizable one. Wait for it before\nsending input.",{"type":41,"tag":46,"props":346,"children":347},{},[348,353],{"type":41,"tag":50,"props":349,"children":350},{},[351],{"type":54,"value":352},"Thinking:",{"type":54,"value":354}," The terminal may be silent for extended\nperiods. This is normal — don't assume it's stuck. Use\nlonger idle timeouts (10-30 seconds) and poll\npatiently. Look for spinner characters or progress\nindicators.",{"type":41,"tag":46,"props":356,"children":357},{},[358,363],{"type":41,"tag":50,"props":359,"children":360},{},[361],{"type":54,"value":362},"Approval prompts:",{"type":54,"value":364}," These are critical. Look for patterns\nlike:",{"type":41,"tag":212,"props":366,"children":367},{},[368,373,378,383],{"type":41,"tag":78,"props":369,"children":370},{},[371],{"type":54,"value":372},"\"Allow?\" \"Approve?\" \"Proceed?\" \"Y\u002Fn\"",{"type":41,"tag":78,"props":374,"children":375},{},[376],{"type":54,"value":377},"\"Do you want to run this command?\"",{"type":41,"tag":78,"props":379,"children":380},{},[381],{"type":54,"value":382},"A tool call description followed by a prompt",{"type":41,"tag":78,"props":384,"children":385},{},[386],{"type":54,"value":387},"Highlighted or bold text asking for confirmation",{"type":41,"tag":46,"props":389,"children":390},{},[391,396,398,404],{"type":41,"tag":50,"props":392,"children":393},{},[394],{"type":54,"value":395},"Waiting for input:",{"type":54,"value":397}," After completing a task, the agent\nshows a prompt for the next instruction. Look for an\ninput indicator — a cursor, a ",{"type":41,"tag":87,"props":399,"children":401},{"className":400},[],[402],{"type":54,"value":403},">",{"type":54,"value":405},", or an explicit\n\"What would you like to do?\" message.",{"type":41,"tag":309,"props":407,"children":409},{"id":408},"idle-detection-is-tricky-with-agents",[410],{"type":54,"value":411},"Idle Detection Is Tricky with Agents",{"type":41,"tag":46,"props":413,"children":414},{},[415],{"type":54,"value":416},"Agents think. Thinking produces no output. An idle\ntimeout of 2 seconds will trigger constantly during\nthinking phases. Use longer timeouts (10-30 seconds) and\nalways read the screen to distinguish \"thinking\" from\n\"waiting for input.\"",{"type":41,"tag":46,"props":418,"children":419},{},[420,422,428,430,436],{"type":54,"value":421},"When re-polling, use ",{"type":41,"tag":87,"props":423,"children":425},{"className":424},[],[426],{"type":54,"value":427},"last_generation",{"type":54,"value":429}," or ",{"type":41,"tag":87,"props":431,"children":433},{"className":432},[],[434],{"type":54,"value":435},"fresh=true",{"type":54,"value":437}," to\navoid busy-loop storms where the server responds immediately\nbecause nothing has changed since the last check.",{"type":41,"tag":205,"props":439,"children":441},{"id":440},"feeding-tasks",[442],{"type":54,"value":443},"Feeding Tasks",{"type":41,"tag":46,"props":445,"children":446},{},[447],{"type":54,"value":448},"Keep instructions clear and self-contained. The agent can't\nask you clarifying questions — or rather, it can, but you\nneed to detect and answer them programmatically.",{"type":41,"tag":309,"props":450,"children":452},{"id":451},"good-task-instructions",[453],{"type":54,"value":454},"Good Task Instructions",{"type":41,"tag":46,"props":456,"children":457},{},[458],{"type":54,"value":459},"Be specific. Include context the agent needs:",{"type":41,"tag":267,"props":461,"children":464},{"className":462,"code":463,"language":54},[270],"send: Add input validation to the POST \u002Fusers endpoint. \\\nReject requests where email is missing or malformed. \\\nReturn 400 with a JSON error body.\\n\n",[465],{"type":41,"tag":87,"props":466,"children":467},{"__ignoreMap":275},[468],{"type":54,"value":463},{"type":41,"tag":46,"props":470,"children":471},{},[472],{"type":54,"value":473},"Not:",{"type":41,"tag":267,"props":475,"children":478},{"className":476,"code":477,"language":54},[270],"send: fix the users endpoint\\n\n",[479],{"type":41,"tag":87,"props":480,"children":481},{"__ignoreMap":275},[482],{"type":54,"value":477},{"type":41,"tag":309,"props":484,"children":486},{"id":485},"scoping-tasks",[487],{"type":54,"value":488},"Scoping Tasks",{"type":41,"tag":46,"props":490,"children":491},{},[492],{"type":54,"value":493},"Prefer small, well-defined tasks over large ambiguous ones.\nAn agent working on \"implement the entire auth system\" will\nmake many decisions you might disagree with. An agent working\non \"add bcrypt password hashing to the User model\" has less\nroom to go sideways.",{"type":41,"tag":205,"props":495,"children":497},{"id":496},"handling-approvals",[498],{"type":54,"value":499},"Handling Approvals",{"type":41,"tag":46,"props":501,"children":502},{},[503],{"type":54,"value":504},"Many agents ask for permission before taking actions. You\nhave three strategies:",{"type":41,"tag":309,"props":506,"children":508},{"id":507},"auto-approve-everything",[509],{"type":54,"value":510},"Auto-Approve Everything",{"type":41,"tag":46,"props":512,"children":513},{},[514],{"type":54,"value":515},"If you trust the agent and the task is low-risk, configure\nit to skip approvals:",{"type":41,"tag":267,"props":517,"children":520},{"className":518,"code":519,"language":54},[270],"send: claude --dangerously-skip-permissions\\n\n",[521],{"type":41,"tag":87,"props":522,"children":523},{"__ignoreMap":275},[524],{"type":54,"value":519},{"type":41,"tag":46,"props":526,"children":527},{},[528],{"type":54,"value":529},"Only do this for isolated, low-stakes work. Never for\nproduction systems.",{"type":41,"tag":309,"props":531,"children":533},{"id":532},"selective-approval",[534],{"type":54,"value":535},"Selective Approval",{"type":41,"tag":46,"props":537,"children":538},{},[539],{"type":54,"value":540},"Read the approval prompt, decide whether to approve:",{"type":41,"tag":267,"props":542,"children":545},{"className":543,"code":544,"language":54},[270],"read screen\n# See: \"Run command: npm install express?\"\n# Looks safe.\nsend: y\\n\n\nread screen\n# See: \"Run command: rm -rf \u002Ftmp\u002Fbuild\"\n# Inspect further before approving.\n",[546],{"type":41,"tag":87,"props":547,"children":548},{"__ignoreMap":275},[549],{"type":54,"value":544},{"type":41,"tag":309,"props":551,"children":553},{"id":552},"reject-and-redirect",[554],{"type":54,"value":555},"Reject and Redirect",{"type":41,"tag":46,"props":557,"children":558},{},[559],{"type":54,"value":560},"If the agent proposes something wrong, reject and explain:",{"type":41,"tag":267,"props":562,"children":565},{"className":563,"code":564,"language":54},[270],"send: n\\n\nwait, read\nsend: Don't delete that directory. Use a fresh \\\nbuild directory at \u002Ftmp\u002Fbuild-new instead.\\n\n",[566],{"type":41,"tag":87,"props":567,"children":568},{"__ignoreMap":275},[569],{"type":54,"value":564},{"type":41,"tag":205,"props":571,"children":573},{"id":572},"reviewing-output",[574],{"type":54,"value":575},"Reviewing Output",{"type":41,"tag":46,"props":577,"children":578},{},[579],{"type":54,"value":580},"After the agent finishes a task, review what it did:",{"type":41,"tag":267,"props":582,"children":585},{"className":583,"code":584,"language":54},[270],"read screen — see the final status\nread scrollback — see the full conversation\n",[586],{"type":41,"tag":87,"props":587,"children":588},{"__ignoreMap":275},[589],{"type":54,"value":584},{"type":41,"tag":46,"props":591,"children":592},{},[593],{"type":54,"value":594},"Look for: files changed, commands run, errors encountered,\ntests passed or failed. The scrollback is your audit trail.",{"type":41,"tag":205,"props":596,"children":598},{"id":597},"multi-agent-coordination",[599],{"type":54,"value":600},"Multi-Agent Coordination",{"type":41,"tag":46,"props":602,"children":603},{},[604],{"type":54,"value":605},"The real power is running multiple agents in parallel. Each\ngets its own session, its own task, its own workspace.",{"type":41,"tag":309,"props":607,"children":609},{"id":608},"the-delegation-pattern",[610],{"type":54,"value":611},"The Delegation Pattern",{"type":41,"tag":267,"props":613,"children":616},{"className":614,"code":615,"language":54},[270],"1. Plan — break the project into independent subtasks\n2. Spawn — create a session for each subtask\n3. Launch — start an agent in each session with its task\n4. Monitor — poll sessions, handle approvals\n5. Review — read each agent's output when it finishes\n6. Integrate — merge the results\n",[617],{"type":41,"tag":87,"props":618,"children":619},{"__ignoreMap":275},[620],{"type":54,"value":615},{"type":41,"tag":309,"props":622,"children":624},{"id":623},"monitoring-multiple-agents",[625],{"type":54,"value":626},"Monitoring Multiple Agents",{"type":41,"tag":46,"props":628,"children":629},{},[630],{"type":54,"value":631},"Poll round-robin with short idle timeouts. You're\nlooking for approval prompts that need your attention:",{"type":41,"tag":267,"props":633,"children":636},{"className":634,"code":635,"language":54},[270],"for each agent session:\n    await idle (timeout_ms=3000)\n    read screen\n    if approval prompt detected:\n        evaluate and respond\n    if task complete:\n        review output, clean up session\n    if still working:\n        move to next session\n",[637],{"type":41,"tag":87,"props":638,"children":639},{"__ignoreMap":275},[640],{"type":54,"value":635},{"type":41,"tag":46,"props":642,"children":643},{},[644],{"type":54,"value":645},"Agents that are thinking or working need no intervention.\nFocus your attention on agents that are blocked waiting\nfor approval or input.",{"type":41,"tag":309,"props":647,"children":649},{"id":648},"workspace-isolation",[650],{"type":54,"value":651},"Workspace Isolation",{"type":41,"tag":46,"props":653,"children":654},{},[655],{"type":54,"value":656},"Give each agent its own workspace to avoid conflicts.\nAgents editing the same files simultaneously will corrupt\neach other's work:",{"type":41,"tag":267,"props":658,"children":661},{"className":659,"code":660,"language":54},[270],"# Use git worktrees for code tasks\nsend to \"setup\": git worktree add \u002Ftmp\u002Fagent-auth feature\u002Fauth\nsend to \"setup\": git worktree add \u002Ftmp\u002Fagent-api feature\u002Fapi\n\ncreate session \"agent-auth\", cwd: \u002Ftmp\u002Fagent-auth\ncreate session \"agent-api\", cwd: \u002Ftmp\u002Fagent-api\n",[662],{"type":41,"tag":87,"props":663,"children":664},{"__ignoreMap":275},[665],{"type":54,"value":660},{"type":41,"tag":46,"props":667,"children":668},{},[669],{"type":54,"value":670},"Or use separate branches, separate directories, or\nseparate repositories. The key principle: agents that\nmight touch the same files must not run in parallel\nwithout isolation.",{"type":41,"tag":309,"props":672,"children":674},{"id":673},"passing-results-between-agents",[675],{"type":54,"value":676},"Passing Results Between Agents",{"type":41,"tag":46,"props":678,"children":679},{},[680],{"type":54,"value":681},"Agents can't talk to each other directly. Use the\nfilesystem as the communication channel:",{"type":41,"tag":267,"props":683,"children":686},{"className":684,"code":685,"language":54},[270],"# Agent 1 produces an artifact\nagent-1 writes to \u002Ftmp\u002Fapi-spec.json\n\n# You read it and feed it to Agent 2\nread \u002Ftmp\u002Fapi-spec.json\nsend to agent-2: Implement the client based on the\nAPI spec at \u002Ftmp\u002Fapi-spec.json\\n\n",[687],{"type":41,"tag":87,"props":688,"children":689},{"__ignoreMap":275},[690],{"type":54,"value":685},{"type":41,"tag":205,"props":692,"children":694},{"id":693},"pitfalls",[695],{"type":54,"value":696},"Pitfalls",{"type":41,"tag":309,"props":698,"children":700},{"id":699},"dont-over-parallelize",[701],{"type":54,"value":702},"Don't Over-Parallelize",{"type":41,"tag":46,"props":704,"children":705},{},[706],{"type":54,"value":707},"More agents isn't always better. Each agent consumes\nresources — API rate limits, CPU, memory. And each agent\nyou run is one more you need to monitor. Start with 2-3\nagents and scale up once you're comfortable with the\nmonitoring rhythm.",{"type":41,"tag":309,"props":709,"children":711},{"id":710},"watch-for-agents-talking-to-each-other-accidentally",[712],{"type":54,"value":713},"Watch for Agents Talking to Each Other Accidentally",{"type":41,"tag":46,"props":715,"children":716},{},[717],{"type":54,"value":718},"If two agents are running in the same git repo without\nworkspace isolation, one agent's changes (file writes,\nbranch switches, dependency installs) will affect the\nother. This causes bizarre failures that are hard to\ndiagnose. Always isolate.",{"type":41,"tag":309,"props":720,"children":722},{"id":721},"infinite-loops",[723],{"type":54,"value":724},"Infinite Loops",{"type":41,"tag":46,"props":726,"children":727},{},[728],{"type":54,"value":729},"An agent can get stuck — retrying a failing command,\nasking itself a question, or endlessly editing a file.\nIf you notice an agent producing repetitive output\nwithout progress, intervene:",{"type":41,"tag":267,"props":731,"children":734},{"className":732,"code":733,"language":54},[270],"send: Stop. The current approach isn't working. \\\nTry a different strategy.\\n\n",[735],{"type":41,"tag":87,"props":736,"children":737},{"__ignoreMap":275},[738],{"type":54,"value":733},{"type":41,"tag":46,"props":740,"children":741},{},[742],{"type":54,"value":743},"If it persists, Ctrl+C and give it a fresh start with\nclearer instructions.",{"type":41,"tag":309,"props":745,"children":747},{"id":746},"dont-forget-cleanup",[748],{"type":54,"value":749},"Don't Forget Cleanup",{"type":41,"tag":46,"props":751,"children":752},{},[753],{"type":54,"value":754},"Agent sessions with worktrees, temp files, and running\nprocesses leave debris. When the orchestration is done:",{"type":41,"tag":212,"props":756,"children":757},{},[758,763,774,779],{"type":41,"tag":78,"props":759,"children":760},{},[761],{"type":54,"value":762},"Exit or kill all agent sessions",{"type":41,"tag":78,"props":764,"children":765},{},[766,768],{"type":54,"value":767},"Remove worktrees: ",{"type":41,"tag":87,"props":769,"children":771},{"className":770},[],[772],{"type":54,"value":773},"git worktree remove \u002Ftmp\u002Fagent-auth",{"type":41,"tag":78,"props":775,"children":776},{},[777],{"type":54,"value":778},"Clean up temp files",{"type":41,"tag":78,"props":780,"children":781},{},[782],{"type":54,"value":783},"Verify the main repo is in a clean state",{"type":41,"tag":309,"props":785,"children":787},{"id":786},"know-when-not-to-orchestrate",[788],{"type":54,"value":789},"Know When Not to Orchestrate",{"type":41,"tag":46,"props":791,"children":792},{},[793],{"type":54,"value":794},"If the task requires deep understanding of a complex\nsystem, one focused agent with good context will\noutperform three agents with shallow context.\nOrchestration works best when tasks are genuinely\nindependent and well-specified. If tasks are tightly\ncoupled, work them sequentially in a single session.",{"items":796,"total":874},[797,804,818,829,841,851,863],{"slug":4,"name":4,"fn":5,"description":6,"org":798,"tags":799,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[800,801,802,803],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"slug":805,"name":805,"fn":806,"description":807,"org":808,"tags":809,"stars":25,"repoUrl":26,"updatedAt":817},"cluster-orchestration","orchestrate sessions across federated clusters","Use when you need to manage sessions across multiple wsh servers in a federated cluster. Examples: \"distribute builds across several machines\", \"create sessions on a specific backend\", \"monitor health across a cluster of servers\", \"coordinate work across server boundaries\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[810,813,814],{"name":811,"slug":812,"type":15},"Architecture","architecture",{"name":13,"slug":14,"type":15},{"name":815,"slug":816,"type":15},"Engineering","engineering","2026-07-12T08:29:38.810244",{"slug":819,"name":819,"fn":820,"description":821,"org":822,"tags":823,"stars":25,"repoUrl":26,"updatedAt":828},"core","authenticate and bootstrap wsh terminal operations","REQUIRED before any wsh terminal operation when you do NOT have wsh_* MCP tools. Contains the complete HTTP API reference with working curl examples, bootstrap sequence, and authentication guide. wsh has no CLI subcommands for programmatic use — do NOT run 'wsh \u003Cverb>' commands or guess endpoints. Load this skill first.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[824,827],{"name":825,"slug":826,"type":15},"Authentication","authentication",{"name":17,"slug":18,"type":15},"2026-07-12T08:29:32.614733",{"slug":830,"name":830,"fn":831,"description":832,"org":833,"tags":834,"stars":25,"repoUrl":26,"updatedAt":840},"core-mcp","bootstrap MCP terminal sessions","REQUIRED before any wsh terminal operation. Contains the complete MCP tool reference and bootstrap sequence for wsh_create_session, wsh_send_input, wsh_get_screen, wsh_send_and_read, wsh_send_keys, and all wsh_* tools. Do NOT guess wsh CLI commands or HTTP endpoints — use MCP tools or load this skill first.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[835,836,837],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":838,"slug":839,"type":15},"MCP","mcp","2026-07-12T08:29:45.869993",{"slug":842,"name":842,"fn":843,"description":844,"org":845,"tags":846,"stars":25,"repoUrl":26,"updatedAt":850},"drive-process","interact with CLI programs via wsh","Use when you need to drive a CLI program through command-and-response interaction via wsh. Examples: \"run a build command and check the output\", \"interact with an installer that asks questions\", \"execute a sequence of shell commands and handle errors\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[847,848,849],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":815,"slug":816,"type":15},"2026-07-12T08:29:51.485222",{"slug":852,"name":852,"fn":853,"description":854,"org":855,"tags":856,"stars":25,"repoUrl":26,"updatedAt":862},"generative-ui","build interactive terminal user interfaces","Use when you need to build dynamic, interactive terminal experiences on the fly. Examples: \"create a live dashboard in the terminal\", \"build an interactive file browser\", \"generate a custom TUI for this workflow\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[857,858,859],{"name":17,"slug":18,"type":15},{"name":815,"slug":816,"type":15},{"name":860,"slug":861,"type":15},"Frontend","frontend","2026-07-12T08:29:41.286933",{"slug":864,"name":864,"fn":865,"description":866,"org":867,"tags":868,"stars":25,"repoUrl":26,"updatedAt":873},"infrastructure-ops","manage infrastructure across multiple servers","Use when you need to manage infrastructure across multiple servers interactively via wsh — deploying applications, configuring services, managing packages, performing rolling updates, and handling the prompts and judgment calls that declarative tools cannot. Examples: \"deploy this application across 10 servers with health checks between each\", \"upgrade packages across the fleet and handle diverse prompts\", \"inspect and modify configuration across servers\", \"roll back a failed deployment\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[869,870],{"name":17,"slug":18,"type":15},{"name":871,"slug":872,"type":15},"Infrastructure","infrastructure","2026-07-12T08:29:57.659886",12,{"items":876,"total":1031},[877,893,907,921,933,945,957,968,984,998,1008,1020],{"slug":878,"name":878,"fn":879,"description":880,"org":881,"tags":882,"stars":890,"repoUrl":891,"updatedAt":892},"deepclaw-voice","configure phone calls with Deepgram Voice","Set up phone calling to OpenClaw using Deepgram Voice Agent API",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[883,886,887],{"name":884,"slug":885,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},{"name":888,"slug":889,"type":15},"Voice","voice",78,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdeepclaw","2026-07-12T08:29:25.371332",{"slug":894,"name":894,"fn":895,"description":896,"org":897,"tags":898,"stars":904,"repoUrl":905,"updatedAt":906},"1password","manage secrets with 1Password CLI","Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading\u002Finjecting\u002Frunning secrets via op.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[899,900,901],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":902,"slug":903,"type":15},"Security","security",23,"https:\u002F\u002Fgithub.com\u002Fdeepgram\u002Fdglabs-deepclaw","2026-07-12T08:28:49.991939",{"slug":908,"name":908,"fn":909,"description":910,"org":911,"tags":912,"stars":904,"repoUrl":905,"updatedAt":920},"apple-notes","manage Apple Notes on macOS","Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks OpenClaw to add a note, list notes, search notes, or manage note folders.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[913,914,917],{"name":17,"slug":18,"type":15},{"name":915,"slug":916,"type":15},"Knowledge Management","knowledge-management",{"name":918,"slug":919,"type":15},"macOS","macos","2026-07-12T08:29:01.538106",{"slug":922,"name":922,"fn":923,"description":924,"org":925,"tags":926,"stars":904,"repoUrl":905,"updatedAt":932},"apple-reminders","manage Apple Reminders via CLI","Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON\u002Fplain output.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[927,928,929],{"name":17,"slug":18,"type":15},{"name":918,"slug":919,"type":15},{"name":930,"slug":931,"type":15},"Task Management","task-management","2026-07-12T08:29:14.035414",{"slug":934,"name":934,"fn":935,"description":936,"org":937,"tags":938,"stars":904,"repoUrl":905,"updatedAt":944},"bear-notes","manage Bear notes via CLI","Create, search, and manage Bear notes via grizzly CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[939,940,941],{"name":17,"slug":18,"type":15},{"name":915,"slug":916,"type":15},{"name":942,"slug":943,"type":15},"Notes","notes","2026-07-12T08:28:51.246011",{"slug":946,"name":946,"fn":947,"description":948,"org":949,"tags":950,"stars":904,"repoUrl":905,"updatedAt":956},"blogwatcher","monitor blogs and RSS feeds","Monitor blogs and RSS\u002FAtom feeds for updates using the blogwatcher CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[951,952,953],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":954,"slug":955,"type":15},"Monitoring","monitoring","2026-07-12T08:29:02.762321",{"slug":958,"name":958,"fn":959,"description":960,"org":961,"tags":962,"stars":904,"repoUrl":905,"updatedAt":967},"blucli","control BluOS audio playback","BluOS CLI (blu) for discovery, playback, grouping, and volume.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[963,966],{"name":964,"slug":965,"type":15},"Audio","audio",{"name":17,"slug":18,"type":15},"2026-07-12T08:28:21.009637",{"slug":969,"name":969,"fn":970,"description":971,"org":972,"tags":973,"stars":904,"repoUrl":905,"updatedAt":983},"bluebubbles","send and manage iMessages","Use when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel=\"bluebubbles\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[974,977,980],{"name":975,"slug":976,"type":15},"Communications","communications",{"name":978,"slug":979,"type":15},"iMessage","imessage",{"name":981,"slug":982,"type":15},"Messaging","messaging","2026-07-12T08:28:57.517914",{"slug":985,"name":985,"fn":986,"description":987,"org":988,"tags":989,"stars":904,"repoUrl":905,"updatedAt":997},"camsnap","capture frames and clips from cameras","Capture frames or clips from RTSP\u002FONVIF cameras.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[990,991,994],{"name":13,"slug":14,"type":15},{"name":992,"slug":993,"type":15},"Camera","camera",{"name":995,"slug":996,"type":15},"Media","media","2026-07-12T08:28:28.096134",{"slug":999,"name":999,"fn":1000,"description":1001,"org":1002,"tags":1003,"stars":904,"repoUrl":905,"updatedAt":1007},"clawhub","manage agent skills with ClawHub","Use the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com. Use when you need to fetch new skills on the fly, sync installed skills to latest or a specific version, or publish new\u002Fupdated skill folders with the npm-installed clawhub CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1004,1005,1006],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},"2026-07-12T08:28:30.589001",{"slug":1009,"name":1009,"fn":1010,"description":1011,"org":1012,"tags":1013,"stars":904,"repoUrl":905,"updatedAt":1019},"coding-agent","run coding agents for programmatic control","Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1014,1015,1016],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":1017,"slug":1018,"type":15},"Coding","coding","2026-07-12T08:29:08.6658",{"slug":1021,"name":1021,"fn":1022,"description":1023,"org":1024,"tags":1025,"stars":904,"repoUrl":905,"updatedAt":1030},"eightctl","control Eight Sleep pod settings","Control Eight Sleep pods (status, temperature, alarms, schedules).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1026,1027],{"name":13,"slug":14,"type":15},{"name":1028,"slug":1029,"type":15},"Hardware","hardware","2026-07-12T08:28:39.322181",73]