ワンクリックで
puppetmaster
Operate Puppetmaster multi-agent orchestrator via MCP verbs (edit, swarm, implement, route, monitor).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Operate Puppetmaster multi-agent orchestrator via MCP verbs (edit, swarm, implement, route, monitor).
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | puppetmaster |
| description | Operate Puppetmaster multi-agent orchestrator via MCP verbs (edit, swarm, implement, route, monitor). |
| version | 1.2.0 |
| author | professorpalmer |
| license | MIT |
| platforms | ["linux","macos","windows"] |
| metadata | {"hermes":{"tags":["orchestrator","multi-agent","swarm","mcp","routing","codegraph"],"category":"autonomous-ai-agents","related_skills":["codex","claude-code","opencode"]}} |
Multi-agent orchestrator that runs adapter workers (Cursor SDK / Claude Code /
Codex / Hermes) as durable, SQLite-backed subprocesses with leases, structured
JSON artifacts, per-task model routing, and isolated git worktrees. Published on
PyPI as puppetmaster-ai; the CLI mirrors every MCP verb.
Prefer Puppetmaster verbs over a solo grep/read loop or the built-in delegation for: single focused edits that benefit from CodeGraph or cheap-model routing, broad investigation, multi-file audits, and cross-cutting changes.
mcp_puppetmaster_puppetmaster_*. Use
tool_search to find a verb, tool_describe to load its schema, tool_call
to invoke. This is the primary path.python -m puppetmaster ...) when MCP isn't connected. The
MCP server shells out to its own resolved interpreter, so MCP can work even
when python -m puppetmaster fails in the current venv.| Task shape | Verb | Why |
|---|---|---|
| One focused edit ("fix this fn", "add a flag", "wire up retries") | edit | Cheapest sufficient model + CodeGraph + in-place edit + synchronous diff. The snappy path between editing inline and a full implement job. |
| One coupled multi-file feature | start_implement | Isolated clean worktree, one coherent PATCH artifact. |
| Broad read-only analysis (audit, review, "find all X") | start_swarm / start_cursor_swarm | Parallel roles over read-only analysis. |
| Live-site browser QA (drive a real browser, capture real network payloads) | start_browser_swarm | N parallel Hermes browser workers with React-input/network-truth/strong-model guardrails. Hermes-only; ACTING AGENT (side effects). |
| "Where is X / what calls Y" | codegraph_search | Structural lookup before reading files. |
| "What model / how much?" | route_task | Pure decision, no spend. |
label (3–6 words) to any start_* / edit
verb so the dashboard and jobs list stay scannable instead of showing bare
job_<hash> ids. Omitted labels fall back to a title derived from the goal.edit verb (lightweight single in-place edit)puppetmaster_edit "<instruction>" — the daily-driver verb for one focused
change:
routing_policy=cheap); pin with
model to override routing.allow_dirty) — no isolated worktree.job_id to poll.require_diff gate fails a
no-op edit closed, so a "done" edit that changed nothing can't pass.Use start_implement instead when the change is coupled/multi-file and wants an
isolated worktree.
For any "where is X / what calls Y / what implements Z" question, query
CodeGraph first, then read only the files it points to. Verbs: codegraph_search,
codegraph_context, codegraph_affected, codegraph_files, codegraph_status,
codegraph_init.
cwd=<workspace> explicitly. The codegraph tools default cwd to
$HOME, not the repo — without it, codegraph_status reports "Not initialized"
even for a healthy index..codegraph/ doesn't exist, run codegraph_init once first.codegraph_search.
(Plain text matches — log strings, config values — may still use ripgrep.)auto_route: true enables per-task model routing (default true when no model
is pinned).routing_policy: balanced (cheapest sufficient — default), cheap,
quality, escalating. Optional caps: max_cost_usd, min_capability.~/.puppetmaster/models.json (puppetmaster models init
seeds it). route_task dry-runs a decision and shows rejected alternatives.~/.puppetmaster/platform.json, a denylist) restricts which
adapters the router may pick. Lock rejections mid-migration are expected, not
failures.Workers can be told to write tighter. Off by default. Shapes form, not reasoning, so it never lowers answer quality — the win is readability and latency, with a small cost bonus on output-heavy roles (output tokens are a minority of an agentic bill).
PUPPETMASTER_OUTPUT_STYLE=terse (or lithic).payload.output_style = "terse" | "lithic" | "off". An
explicit payload value wins over the env; "off" opts one spec out.terse — drop ceremony, filler, hedging, restatement; one claim per line;
state uncertainty as fact (unconfirmed: X). Safe; recommended tier.lithic — terse plus telegraphic glue-dropping (articles/copulas). Marginal
extra savings, mild quality risk; best for machine-consumed artifacts, not a
human-facing summary.payload.output_style_text, or globally with PUPPETMASTER_OUTPUT_STYLE_TEXT
/ PUPPETMASTER_OUTPUT_STYLE_FILE. Custom text wins over the tiers; the spec
is stamped output_style: "custom".Full reference: docs/OUTPUT_STYLE.md.
start_* verbs)start_* returns immediately with job_id. Then:
status (pass cwd) → check task_counts, stale_task_ids, and the
outcome block.show (pass cwd) → read the stitched synthesis once complete. Prefer show
over feed/live_artifacts for results (the feed buries findings in routing
JSON).await_job blocks only ~45s per call and returns timed_out=true — expect to
call it several times for a multi-minute swarm; that's normal, not a stall.Always pass cwd to status/show/logs — without it they resolve to $HOME state
and return "job not found" for a live job.
Don't report success off "job complete" alone. Assert on status.outcome:
outcome.trustworthy == true
outcome.quality == "ok"
stale_task_ids == []
outcome.patch_artifact_emitted == true # for edit / implement runs
tool_search for the verbs.route_task → confirm a model_id + rejected list.edit "<instruction>" --cwd <repo> → confirm the diff lands and
patch_artifact_emitted./tmp), start_swarm with
cwd=<fixture>, then status (trust gate green) + show (stitched summary).codegraph
shim can short-circuit code paths CI exercises. Defer to the actual CI run.pip upgrade until restarted —
it imports the package once at startup. If MCP and CLI disagree after an
upgrade, restart the MCP server (toggle it in Hermes MCP settings / restart
Hermes). The CLI forks fresh and shows the new behavior.outcome.trustworthy and stale_task_ids.launcher_pid is not the worker — monitor via job_id + status/logs/feed.hermes worker persists a
source=tool session; Puppetmaster prunes the ended ones after every run (via
hermes sessions prune, race-safe — only ended sessions). Set
PUPPETMASTER_HERMES_PRUNE_SESSIONS=0 to keep them for debugging, or clean up
manually with hermes sessions prune --source tool --older-than 0 --yes.