Install
openclaw skills install @dennisrongo/goal-runnerAutonomous multi-task orchestration loop over a roadmap file (ROADMAP.md, TODO.md, or any checkbox task list) — pairs with the built-in /goal Stop hook to work tasks ONE at a time until the file is done. The main agent orchestrates only; every task is delegated to sub-agents for coding, code review, and regression testing, with observed-green gates before the checkbox is ticked. No commits or pushes unless the goal text explicitly authorizes them — when it does, one commit per verified task, never red. Blocked tasks are annotated and skipped, never faked. Use this skill whenever the user says "work on the roadmap tasks til completion", "work the roadmap until completion", "work on tasks until completion using sub agents", "launch sub agents to work the tasks", "/goal-runner", or sets a /goal naming a roadmap/task file — even if they don't name the skill. Not for a single defined task (use autopilot or task-executor) and not for interval-scheduled reruns (use loop).
openclaw skills install @dennisrongo/goal-runnerThe multi-task loop behind a /goal run: take a task file, work it top to bottom — one task at a time, each task delegated to sub-agents, each closed only on observed evidence — until nothing unchecked remains. Captures the orchestration contract the user previously retyped into every /goal prompt.
/goal condition that names a roadmap or task fileDo not auto-trigger for a single defined task (autopilot / task-executor) or for interval-scheduled reruns (loop).
autopilot). The goal text naming it — "commit each task", "commit and push to " — IS the authorization; silence is a no.
Drive the loop the way a rigorous senior engineer runs a team — the judgment below IS the skill; sub-agents are just hands. (The think-like-fable skill, if installed, is this section at full length.)
Read the task beneath the words. Before spawning anything, restate: "this task needs ___ so that ___". If the second blank won't fill from the roadmap and nearby docs, pick the cheapest-to-reverse reading and log it as an assumption — or mark BLOCKED if every reading is expensive to undo.
Spend agents where the risk lives. Effort scales with blast radius, not task length — a wording fix gets one coder and one reviewer; a task touching auth, money, migrations, or 3+ layers gets the full fan-out:
| Role | Count | Parallel? | Model (routing chain) | Deploy when |
|---|---|---|---|---|
| Scout (read-only) | 0–3 | with each other | scout | task touches >2 files or an unfamiliar layer — one scout per question, not per whim |
| Coder | exactly 1 | never | coder; coder_high_risk when the task trips the blast-radius test above | every task — sole writer to the tree |
| Reviewer | 1, or 2–3 lenses | lenses with each other | reviewer | split into lenses (correctness / design / tests) when the diff is large or touches auth/data/money |
| Fixer | 0–1 | no | fixer; second cycle → top of coder_high_risk | review produced blockers — gets the coder brief plus the findings, nothing else |
The Model column resolves per Model routing when a model inventory exists; without one, spawn with no model override.
Front-load the riskiest unknown. Ask: what discovery would invalidate the whole approach? That is scout question #1 — answered before the coder starts, not after it fails.
Sub-agent reports are testimony, not truth. Quoted command output or a file:line citation upgrades a claim to evidence; anything else stays a hypothesis. Two agents disagreeing is signal — resolve it by re-deriving yourself (open the file, run the command), never by picking the more confident voice.
Guard your own context. The coordinator's window holds orchestration state — queue position, evidence ledger, assumptions. Details live and die inside sub-agents; that is why the main agent never codes.
Compose every sub-agent prompt from the briefs in references/agent-briefs.md — each lists what the prompt MUST contain and the report format the coordinator holds the agent to.
~/.claude/model-inventory.json (written by the model-inventory skill, when installed) maps roles to model fallback chains — strongest as escalation, cheapest that suffices as default. Resolve it once in Phase 0, then pass each spawn's model explicitly. Routing is optional plumbing: it never blocks or pauses the run — every failure below degrades to "no override" (sub-agents inherit the session model) with a one-line note, and the coordinator never edits the inventory file.
probed is true, and generated_at is under 7 days old. When it fails the gate and the model-inventory skill is installed, run that skill once at Phase 0 (scan + its probe discipline, sub-cent) and route from the fresh file, logging the discovery in the kickoff message; skill absent or discovery fails → treat as absent and note "run /model-inventory to re-enable routing".scripts/scan.sh is installed, run it (zero tokens, seconds): a cached CLI whose binary or auth signal has since vanished is dropped from routing for this run; a new CLI it finds is noted for a later rescan. After kickoff, no live model probes — a mid-run model failure is handled by the chain fallback below, never by re-probing.unavailable / blocked-by-auth / quota-exhausted. Pass only bare aliases (haiku/sonnet/opus/fable) to the Agent tool's model param — skip anything else in a chain (a dated id or hand-edit is treated as absent). State the resolution in the kickoff message.coder_high_risk only when the task trips the existing blast-radius test — same judgment, no new decision point. A second fix cycle escalates the fixer to the top of coder_high_risk before the task may be declared blocked: the cheap retry is a stronger model, not a third identical attempt.bash_workers entries (opencode, qwen, …) are not spawn targets — this loop spawns via the Agent tool only.ROADMAP.md / roadmap.md / TODO.md. Multiple candidates or none → ask once before starting (this is the only permitted question; the loop itself runs unattended).- [ ]) are the queue, in file order. If the file has prose tasks but no checkboxes, rewrite it into checkbox form first and show the user the parsed list in the kickoff message.git log --oneline -5 to learn the project's commit-message convention — follow it (work-item format if the project uses one, otherwise a descriptive subject naming the roadmap task).file:line-cited findings only, no edits, "looked for and did not find" reported as findings. Feed the results verbatim into the coder brief.autopilot's execution discipline if installed (incremental verification, ASSUMPTIONS log, command-failure protocol: read the error, change one named thing, retry once, two failures = report back). The coder never commits and never touches the roadmap file — those are the coordinator's.code-review skill (else review sub-agents per the reviewer brief) on this task's diff. With commit authority, the diff since the last commit is exactly this task; without it, scope by the coder sub-agent's reported file list and note any overlap with earlier tasks' files. Blockers → send back to a fix sub-agent and re-review (max two cycles; survivors mark the task blocked). Suggestions are logged in the report, never applied — that's scope creep in an unattended run.- [ ] <task> — BLOCKED: <one-line reason> — leave the box unchecked, and continue to the next task.handoff skill: record queue position, baseline state, branch, and per-task status so the next session resumes the loop instead of restarting it.User: /goal "work on the roadmap tasks til completion. one task at a time. use sub agents for coding, code review and testing. commit each task to the current branch and push."
Claude: parses 6 unchecked tasks from ROADMAP.md, baselines the suite (quoted: 42 passed), then loops: coder sub-agent → code-review (1 blocker → fixed → clean) → suite re-run quoted → checkbox ticked → commit → push (authorized in the goal text). Task 4 needs a credential that's missing → marked BLOCKED: no STRIPE_TEST_KEY in env, loop continues with 5 and 6. Final report: 5 committed+pushed with hashes and evidence, 1 blocked with the decision needed.
User: "work the roadmap until completion, sub agents do the work"
Claude: same loop, but no commits and no pushes — the goal text never mentioned git. All six tasks end verified in the working tree, and the final report ends with a ready-to-paste commit block (and nothing pushed) as the human's move.
autopilot (per-task execution discipline), code-review (the review gate), write-tests (when a task is itself "add tests"), model-inventory (per-role model routing), handoff (context survival). All optional — the loop degrades to focused sub-agent prompts when they're absent./goal command supplies persistence (a Stop hook that blocks ending until the condition holds); this skill supplies the discipline. It works without the hook too — the loop just becomes stoppable.