Install
openclaw skills install recursive-swarmBounded recursive orchestration for complex tasks that are too large for one agent turn but cleanly decompose into a few independent subproblems. Use for mul...
openclaw skills install recursive-swarmUse this skill to turn one large task into a small, bounded task tree with explicit node state, artifacts, merge points, and audit events.
Use recursive-swarm only when all of these are true:
Do not recurse for simple reads, one-shot edits, destructive workflows, or open-ended exploration with no clear output contract.
events.jsonlcoding leaves inside a git repo when sibling edits benefit from isolationAssign each node one primary type:
research — extraction, investigation, analysiscoding — implementation, refactor, test workops — shell, system, or environment workflowsbrowser — web/UI automationsynthesis — combine child outputs into one merged resultreview — challenge weak claims, reconcile conflicts, prune bad findingsRoute nodes like this:
research, synthesis, review → subagentscoding → ACP sessions by default; use worktrees only when usefulops, browser → direct tools or a narrowly scoped subagent if neededFor routine child runs, prefer silent child completion + parent-owned final delivery.
That means:
ANNOUNCE_SKIPOnly allow a child announce message to reach the user when:
Do not let every child produce routine completion chatter in the user channel.
Treat a node as atomic when one agent run can finish it without meaningful internal planning.
Examples of atomic nodes:
Treat a node as composite when it clearly breaks into independent workstreams.
Examples of composite nodes:
If a child split feels artificial or the merge plan is vague, stop decomposing.
Create a run folder with scripts/init_run.py.
Recommended output layout:
runs/<run-id>/
tree.json
events.jsonl
summary.md
nodes/
1/
spec.json
notes.md
result.md
Use scripts/upsert_node.py to record the root task and defaults.
Record at minimum:
For each composite node:
Never recurse just to make the tree look smart.
Before executing a node:
runningnodes/<id>/spec.jsonnodes/<id>/notes.mdevents.jsonlAfter executing a node:
nodes/<id>/result.mdcompleted, failed, or waiting_for_approvalevents.jsonlUse these scripts:
scripts/upsert_node.pyscripts/mark_node.pyscripts/list_ready_nodes.pyscripts/list_events.pyscripts/merge_results.pyscripts/render_tree.pyUse scripts/list_ready_nodes.py to identify executable leaves.
Execution guidance:
ANNOUNCE_SKIP during the announce step unless they are blocked or explicitly responsible for final deliveryWhen all child nodes under a parent are complete:
result.md, session history, or other saved artifactsscripts/merge_results.py to bundle child file results when applicableresult.mdIf a child was run in quiet mode with ANNOUNCE_SKIP, treat that as normal. Silence is not failure; it just means the parent owns user-facing delivery.
Use type-aware merge behavior:
Do not silently average conflicting child outputs. Bubble disagreements up.
For important runs, add one final review node that:
Pause and ask before executing any node that would:
Mark these nodes waiting_for_approval instead of forcing them through.
Do not use git worktrees by default.
Use a worktree only when all of these are true:
codingOtherwise keep the node in normal artifact-folder mode.
Stop decomposing when any of these is true:
Read these only if needed:
references/tree-schema.json — canonical run and node schemareferences/example-run.md — example run layout and sample treereferences/quiet-mode.md — quiet child execution pattern using ANNOUNCE_SKIP