Puppetmaster Agent Orchestration
professorpalmer/Puppetmaster
Operates and supervises Puppetmaster, a multi-agent orchestrator, through its MCP tools or CLI, picking the right verb for edits, reviews, audits and long-running jobs.
Resolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification.
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jpicklyk/task-orchestrator run-wave --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .claude/skills/run-wave && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .claude/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-waveType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jpicklyk/task-orchestrator run-wave --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .agents/skills/run-wave && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .agents/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jpicklyk/task-orchestrator run-wave --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .cursor/skills/run-wave && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .cursor/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jpicklyk/task-orchestrator.git --path claude-plugins/task-orchestrator/skills/run-wave--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jpicklyk/task-orchestrator run-wave --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .gemini/skills/run-wave && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .gemini/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jpicklyk/task-orchestrator run-waveInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .github/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .github/skills/run-wave && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .github/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jpicklyk/task-orchestrator --skill run-wave -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jpicklyk/task-orchestrator run-wave --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/claude-plugins/task-orchestrator/skills/run-wave .opencode/skills/run-wave && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "run-wave" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/claude-plugins/task-orchestrator/skills/run-wave into .opencode/skills/run-wave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-wave", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
run-waveResolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification.
Run Wave is the entry point for working through a batch of MCP work items at once. A Node helper script resolves the frontier of ready or resumable items, classifies the dependencies between them and derives per-item stages from each item's resolved schema. The skill itself does no planning arithmetic: it calls the helper, shows you the plan, launches it and drives verification and advancement afterward.
Execution has two methods that run the same plan and the same prompts. Method A uses the Workflow tool. Method B, described in references/method-b.md, dispatches subagents directly when Workflow is unavailable or the server does not yet expose enough capability data. Post-run handling and snapshots are covered in references/post-run.md and references/snapshot.md. If the helper fails, the skill reports its raw output instead of improvising a plan.
It expects work items whose specification and task-scope notes already exist, and it does not decide whether to plan or implement. It is not meant for a single small fix or for unattended queue draining, which other skills in the same plugin handle.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b688ea0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Run Wave loads about 4.7k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 204 tokens; SKILL.md has 2,389 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jpicklyk/task-orchestrator at commit b688ea0, republished under its MIT licence (© jpicklyk). 2,389 words, ~4,733 tokens.
.claude/skills/run-wave/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.This skill resolves a frontier of ready (and resumable) MCP work items into a run plan —
a deterministic set of per-item seat stages derived from each item's resolved schema — and
executes that plan either through the Workflow tool (Method A) or through direct Agent
dispatch (Method B, the fallback when Workflow is unavailable or the server doesn't yet
serve enough capability data for Method A). Both methods execute the same run plan and the
same seat prompts — Method B reuses the Method A core byte-for-byte (see
references/method-b.md).
The skill itself does no planning arithmetic. All frontier resolution, edge classification, and
stage derivation happens in a pure Node helper (scripts/run-planner.mjs /
run-planner-lib.mjs). This skill's job is: call the helper with the right inputs, show the
human the plan, launch it, and drive post-run verification and advancement. Side effects (MCP
calls, git worktree add, Workflow/Agent dispatch, advance_item) stay in this prose, never
in the helper.
Do not attempt to replicate the helper's algorithm in your head. If a helper call fails or its output looks wrong, report the raw stderr/stdout rather than improvising a plan by reading MCP responses directly — the whole point of the helper split is that frontier/edge/stage logic is fixture-tested, not reasoned about fresh each run.
Every helper call in this skill (and in the two references) is of the form:
node "<helper>" <cmd> --in <scratchpad>/run-wave/<runId>/<file>Resolve <helper> once, at the start of Step 0, and reuse the same resolved path for every
later call in this run (record it as state.helper):
${CLAUDE_PLUGIN_ROOT}/scripts/run-planner.mjs. ${CLAUDE_PLUGIN_ROOT} substitutes
inside plugin skill bodies (the same mechanism the code-modernization plugin's commands
rely on) — confirm the literal string ${CLAUDE_PLUGIN_ROOT} did not survive into the
command you are about to run, and that probe (see F0 below) exits 0.probe exits non-zero, fall back to the dev-checkout path
<git toplevel>/claude-plugins/task-orchestrator/scripts/run-planner.mjs, when that path
exists. Set state.helperFallback: true and add helper-fallback to meta.degradations —
under this fallback, probe's phase0Hooks reflects the checkout, not the installed plugin
cache, so Step 0 F4 will read entryMode: pre-entered even when the installed cache actually
has Phase 0 hooks. Report this degradation rather than silently trusting the pre-entered path.claude-plugins/CLAUDE.md → "Plugin Discovery and Cache Refresh") — do not attempt a manual
plan.Run every check below before touching MCP state. Each row's fallback is a rule for THIS run —
re-probe every invocation (capabilities can change between sessions). F3 and F7 need a rootId
before Step 1 runs, so resolve it first by Step 1's rule (session context, then the Config: file,
then .taskorchestrator/config.yaml).
| # | Check | How | Fallback |
|---|---|---|---|
| F0 | Helper resolvable | node "<helper>" probe exits 0 | dev-checkout path (see Helper resolution above); else stop with the cache-refresh pointer |
| F1 | Workflow tool callable | Workflow already in your tool list, or ToolSearch("select:Workflow") resolves it | Method B (pass --method B to plan in Step 3 so the plan document's meta.method is "B") |
| F2 | Server features cover seats, dispatchBySeat, rules | the first query_items(operation="schema") response's features field, not probe — probe reports plugin/hook capability (version, hooks, allow rules), never the server's schema features | missing features/seats → Method B with implicit per-phase owners (no interim seat map — the planner derives planner/implementer ownership itself when a schema is seat-less); missing rules → stop, both methods (the server cannot serve the protocol rules, and promptRules in the shared prompt core marks the protocol key fatal for Method B too; upgrade the server) |
| F3 | Protocol rules served | rulesServed from query_rules(operation="list") — the snapshot's own rulesServed field — includes protocol.entry-seat, protocol.in-phase-seat, protocol.read-only-agent; not probe, which carries no rulesServed field at all | stop, both methods, with: "protocol rules not served for this root". The reason: promptRules (workflows/implement-wave.js) marks the protocol key fatal, and Method B renders its seat prompts from that same core, so Method B cannot proceed either. Repair, then re-probe F3. (a) REST URL configured: start a new session; config-sync pushes the plugin's bundled-rules/ at SessionStart to any initialized root that does not provide them. (b) No REST URL: run the /task-orchestrator:init rule seeding, or for each missing key call manage_plan_documents(operation="stash", rootId, slug="rule/<key>", body=<${CLAUDE_PLUGIN_ROOT}/bundled-rules/<key>.md verbatim>), then confirm query_rules(get)'s rulesVersion is a hash listed for that key in bundled-rules/manifest.json; on a mismatch re-stash once, then report |
| F4 | Phase 0 hooks present | probe.phase0Hooks | entryMode: 'pre-entered' (pass --entry pre-entered to plan in Step 3, rather than only noting it in prose) — the front door advances each item queue→work itself before launch, instead of the entry seat calling advance_item(start) |
| F5 | Size guideline | probe.workflowSizeGuideline compared against the plan's meta.estAgents (medium: warn above ~10 agents; large: warn above ~50) | advisory line only — never blocks the run |
| F6 | Allow rules present | probe.allow ({workflow, mcp, bashGit, bashNode}) | warn: "this run will pause at the first un-allowed seat tool call in manual/accept-edits mode"; list the specific missing allow entries; never edit .claude/settings.json yourself |
| F7 | Open run already exists | Check the target's (parent or single item's) session-tracking note for a run-wave: <runId> state=<phase> slug=run/<runId> pointer line, or manage_plan_documents(operation="list", rootId) filtered to slugs matching run/*/state, updatedAt within the last 7 days, phase != "closed" | an open run found → go straight to the Resume matrix below instead of Steps 1–3 |
Report every fallback you took (F0/F1/F2/F3/F6) in the run's eventual session-tracking Friction
section — a silent fallback is a degradation the user should be able to see later.
Each argument-hint flag maps to a plan CLI flag one-for-one, except the two rows that never
reach plan at all:
| Argument | plan flag | Notes |
|---|---|---|
ancestorId | itemIds | — | Scopes Step 2's snapshot calls; never passed to plan itself |
--method A|B | --method A|B | Forces the method instead of the server-capability default |
--mode shared|per-item | --mode shared|per-item | |
--worktree <path> --branch <name> | --worktree <path> --branch <name> | shared mode only; both or neither, else plan exits 3. Reuses an already-created feature worktree/branch (e.g. /implement Step 2's) instead of assembleArgs deriving a fresh one |
--resume <runId> | — | Routes straight to the Resume matrix below instead of Steps 1–3 |
--claim | — | Consumed in Step 1 (claim_item before entering work) instead of advance_item(start) |
Step 0 F4's fallback also maps to a plan flag, not just a prose note: when probe.phase0Hooks
is false, pass --entry pre-entered to plan in Step 3. Likewise, when F1 (or F2/F3) selects Method B,
pass --method B to plan so meta.method is "B" — the Method B prompt addendum and the blind
test-author default key on it.
| Step | Action |
|---|---|
| 1 Scope | Resolve the target: ancestorId (a parent feature/container UUID) or explicit item ids from $ARGUMENTS. Resolve rootId in this order: (1) session context, the Active project: line or the Personal root: line the SessionStart hook injects; (2) else project.rootId from the file on that context's Config: line; (3) else .taskorchestrator/config.yaml → project.rootId. A personal root is anchor-only: it is the rootId for query_rules and manage_plan_documents, never the snapshot's ancestorId (scope by the target). If no rootId resolves, stop and point at /task-orchestrator:init (or --user). If --claim was passed, this run uses the claim-mode alternative instead of advance_item(start): claim each item (claim_item) and enter work with the claimant's actor and a ttlSeconds covering the expected run duration; no in-run edges are computed for claimed items (claims settle their own ordering) |
| 2 Snapshot | Make the snapshot calls (get_next_item ready + role:"work" resume candidates, plus every non-terminal item in the target scope that get_blocked_items reports as blocked only by other candidates (add these to candidates with source:"ready"; get_next_item does not return them, and without this the planner defers them as not projected; under --entry pre-entered those in-run edges defer the item cross-run), get_blocked_items, query_items(operation:"overview"), query_items(operation:"schema") per candidate, query_rules(operation:"list"), get_context per distinct parent, query_notes for work-role candidates, git rev-parse --show-toplevel + git fetch origin + git rev-parse origin/main + git worktree list --porcelain). Assemble run-wave/snapshot-v1 (field reference: references/snapshot.md; projected fields only — no note bodies, no guidance text) and write it to <scratchpad>/run-wave/snapshot.json — no runId exists yet, so this path carries no <runId>/ segment |
| 3 Plan | node "<helper>" plan --in <scratchpad>/run-wave/snapshot.json --scratchpad <scratchpad> (add --method B whenever F1/F2/F3 selected Method B, so meta.method is "B") — --scratchpad is mandatory here, not optional: the project profile's verify/searchScope entries may carry a literal <scratchpad> placeholder that only this flag substitutes, and plan refuses (exit 3) rather than silently shipping the un-substituted literal. Once plan returns a runId, copy the snapshot and the returned plan document to <scratchpad>/run-wave/<runId>/snapshot.json and <scratchpad>/run-wave/<runId>/plan.json — every step from here on reads from that <runId>/ pair, never from the pre-runId snapshot path. Then node "<helper>" explain --in <scratchpad>/run-wave/<runId>/plan.json. Checkpoint 1: show the explain table to the user. In collaborative mode, wait for explicit approval before continuing. In autonomous mode, proceed unless meta.excluded or meta.degradations is non-empty — either one requires a human look first. When entered from post-plan-workflow's hand-off, plan approval counts as Checkpoint 1: proceed as in autonomous mode, and where a human look is required show the table and end the turn. A project dispatch contract is not part of the run plan: seat prompts are generated and never reference it. It serves the orchestrator (fallback hand-dispatches, the post-run commit map) and the reviewers; anything a seat must know goes in the item's specification/task-scope note, which seats read. If the run is empty (no items admitted), stop and report every deferral/exclusion with its reason — do not silently no-op |
| 4 Worktrees | git worktree add for each entry in meta.worktreesToCreate. On resume, reuse an existing branch/worktree rather than recreating it (mirrors /implement Step 2, WORKTREE.md) |
| 5 Persist | manage_plan_documents(operation="stash", rootId, slug="run/<runId>", bodyFromFile=<scratchpad>/run-wave/<runId>/plan.json) when the server can resolve that path (relative to AGENT_CONFIG_DIR); when it can't (e.g. AGENT_CONFIG_DIR is a container mount the scratchpad isn't under), fall back to body=<the plan-doc-v1 object> inline and note the fallback. Write run/<runId>/state the same way (bodyFromFile first, inline fallback second) with phase: "planned"; append the pointer line run-wave: <runId> state=planned slug=run/<runId> to the parent's (else the single item's) session-tracking note, actor orchestrator:<session> |
| 6a Launch A | Workflow({name: "task-orchestrator:implement-wave", args: <the plan's args object, passed as a real object — never a JSON-encoded string>}). Record the returned taskId and the Workflow runtime's own run identifiers — state.wfRunId and state.wfScriptPath — from that call's result; these are distinct from the TO runId (r-…) and are what a later resume needs to reattach to this exact Workflow run. Set phase: "launched". End the turn here — the result arrives later as an async task notification; say so explicitly to the user |
| 6b Launch B | Run the Method B loop — see references/method-b.md |
| 7 Post-run | Runs only when triggered by the Method A notification, or by Method B's own loop reaching next → {complete: true}. See references/post-run.md |
| 8 Review | Method B generic review (F-9 in the design) unless the project's run-profile.json sets review: "handoff", in which case control passes to the project's own review step (this repo: /implement Step 5) |
| 9 Loop | Re-run from Step 2. Items surfaced in the last advance_item response's unblockedItems join the next frontier automatically |
Steps 1–5 are the planning half of a run; Steps 6–9 are the execution half. A run can span many orchestrator turns — see turn-boundary discipline below.
This skill's loop is a protocol across turns, not a single-shot script:
state.phase before every turn ends. Whatever step you are mid-way through, the
state document on disk (run/<runId>/state) must reflect where you actually are, not where
you expect to be next. A turn that ends without persisting state is a turn that resume (F7)
cannot recover.turns once per orchestrator turn in which you act for this run — this feeds
the orchestrator-turns field of the provenance line (references/post-run.md).runId/planDocSlug matches no open state is reported, never acted on.
If a notification or Method B envelope references a run this session has no record of (already
closed, or from a different session), surface it to the user as informational and stop —
do not retroactively advance items based on it.When Step 0 F7 finds an open run, dispatch on state.phase:
state.phase | Resume action |
|---|---|
planned | Re-validate with node "<helper>" validate --in <scratchpad>/run-wave/<runId>/plan.json, then relaunch (Method A: re-issue Workflow; Method B: start the next loop) |
launched (Method A) | Notification not yet seen — check /workflows or the task's status first. If the session was itself restarted and the run is gone but state.wfRunId/state.wfScriptPath were recorded (Step 6a), stop the stale task (TaskStop) and relaunch with Workflow({scriptPath: state.wfScriptPath, resumeFromRunId: state.wfRunId}); if those keys are missing (an older run, or the launch step never got to record them), re-plan from Step 2 instead (seats are rerun-safe — re-dispatching an already-entered seat is not destructive) |
launched (Method B) | Resume next from the saved state document; any in-flight stage with no recorded stage-result is re-dispatched (rerun-safe) |
notified / post-run | Continue references/post-run.md at the first step not yet recorded in state |
review | Continue at Step 8 above |
Warning on re-plans: an unblockAt: work in-run edge holds for the first launch only. Once the blocker has entered work, a re-plan reads the edge as satisfied and admits the dependents with no wait. Finish the blocker in its own run before re-planning its dependents.
A closed state means the run is finished — Step 0 F7 should not surface it as an open run
(the phase != "closed" filter on manage_plan_documents(list) already excludes it; a stale
pointer line in session-tracking pointing at a closed run is stale prose, not a live run).
references/snapshot.md — the run-wave/snapshot-v1 field reference Step 2 fills.references/method-b.md — the direct-Agent-dispatch execution loop used when Workflow is
unavailable or Step 0 selects Method B, including scheduling, envelope handling, the
declarations scan, and the degradations Method B declares relative to Method A.references/post-run.md — the post-run protocol shared by both methods: result verification,
the actor audit, note-filling, the batched advance_item call, review hand-off, and the human
checkpoints that close out a run./status-progression — for a single item's own advance/gate state outside a run plan./ralph — for headless, unattended queue draining instead of an interactive run plan./implement — the project-specific workflow this skill is invoked from for Parallel-tier and
multi-item Delegated-tier waves.© jpicklyk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in claude-plugins/task-orchestrator/skills/run-wave of jpicklyk/task-orchestrator.
Open the folder on GitHubat commit b688ea0
Run Wave next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Run Wave this skilljpicklyk/task-orchestrator | 207 | — | ~4.7k | Automated safety check: Pass | MIT | |
| Puppetmaster Agent Orchestrationprofessorpalmer/Puppetmaster | 467 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Vibe Kanbanaiskillstore/marketplace | 430 | — | ~4.4k | Automated safety check: Notes | None | |
| Agent Deckasheshgoplani/agent-deck | 1k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Agent Deck Sessionsartwist-polyakov/polyakov-claude-skills | 206 | — | ~965 | Automated safety check: Pass | MIT | |
| Ruflo Multi-Agent Orchestrationruvnet/ruflo | 74k | 1 repos | ~975 | Automated safety check: Pass | MIT |
professorpalmer/Puppetmaster
Operates and supervises Puppetmaster, a multi-agent orchestrator, through its MCP tools or CLI, picking the right verb for edits, reviews, audits and long-running jobs.
aiskillstore/marketplace
Manage AI coding agents on a visual Kanban board. An agent skill from aiskillstore/marketplace.
asheshgoplani/agent-deck
agent-deck, the terminal session manager for AI coding agents.
artwist-polyakov/polyakov-claude-skills
Launches, monitors and collects results from child AI agent sessions with the agent-deck terminal session manager.
ruvnet/ruflo
Sets up and drives Ruflo, an npm-installed orchestration layer for multi-agent swarms, persistent memory, routing, hooks and its MCP tool catalog.
Th0rgal/sandboxed.sh
Delegates multi-step coding or research tasks to isolated sandboxed.sh container missions through its MCP tools, each with a chosen workspace, agent profile and prompt.
jpicklyk/task-orchestrator
Walks through how to launch and reach the MCP Task Orchestrator server container: transport, REST API, port publishing, config mounts and config-sync.
jpicklyk/task-orchestrator
Migrates an existing unscoped Task Orchestrator database to the project-scoping convention in place, creating one project anchor root and re-parenting work trees under it after a mandatory dry run.
jpicklyk/task-orchestrator
Completes or cancels a whole feature subtree, a named list of items, or a batch of stale work items at once, previewing the impact and warning before force-completing anything active.
jpicklyk/task-orchestrator
Creates an MCP work item from conversation context, anchoring it under the right container, inferring type and priority and pre-filling the required notes.
jpicklyk/task-orchestrator
Views, creates, deletes and diagnoses BLOCKS, IS_BLOCKED_BY and RELATES_TO links between MCP work items, including why an item cannot start.
jpicklyk/task-orchestrator
Guides the full lifecycle of a feature-implementation tagged MCP item (the feature container) — from queue through review.
Works with
Categories
Resolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification. Run Wave is the entry point for working through a batch of MCP work items at once. A Node helper script resolves the frontier of ready or resumable items, classifies the dependencies between them and derives per-item stages from each item's resolved schema.
Run Wave fits situations like: running several ready MCP work items in one coordinated wave; resuming an interrupted run by its run id; reacting to a task notification that a wave is ready to implement; previewing the generated run plan before launching any subagents.
Run `npx skills add jpicklyk/task-orchestrator --skill run-wave -a claude-code`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/run-wave in jpicklyk/task-orchestrator) into .claude/skills/run-wave in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jpicklyk/task-orchestrator --skill run-wave -a codex`. Or copy the skill folder (claude-plugins/task-orchestrator/skills/run-wave in jpicklyk/task-orchestrator) into .agents/skills/run-wave in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jpicklyk/task-orchestrator --skill run-wave -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/run-wave, .gemini/skills/run-wave, .github/skills/run-wave and .opencode/skills/run-wave in your project.
Going by SKILL.md and its folder, Run Wave needs the command-line tools its instructions call (git and node). Our summary lists: The task-orchestrator MCP server with work items and schemas; Node, to run the planner helper script; The Workflow tool, or Agent dispatch as a fallback.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Run Wave is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Run Wave: Puppetmaster Agent Orchestration (professorpalmer/Puppetmaster, 467 stars), Vibe Kanban (aiskillstore/marketplace, 430 stars), Agent Deck (asheshgoplani/agent-deck, 1k stars) and Agent Deck Sessions (artwist-polyakov/polyakov-claude-skills, 206 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jpicklyk (a GitHub user) maintains it in jpicklyk/task-orchestrator, which has 207 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 6, 2026.
Source: jpicklyk/task-orchestrator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.