Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/joanseg/specmanager/specmanager-buildgit clone --depth 1 https://github.com/joanseg/specmanagerWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00025 | $0.03990 |
| Opus 5 | $0.00013 | $0.01995 |
| Sonnet 5 | $0.00005 | $0.00798 |
| Haiku 4.5 | $0.00003 | $0.00399 |
Grade A, and why
specmanager-build scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 92 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Build one phase of the plan for $ARGUMENTS.
$ARGUMENTS is <feature> <phaseName | "next"> [--force] [--bulk].
nextresolves to the first phase whose tasks aren't all done (get_next_phase).- Otherwise
<phaseName>must match a## Phase <name>heading fromplan.mdexactly. --forceallows building out of order. Off by default.--bulkdispatches the whole phase in one builder Task (max tier of its tasks) instead of the default per-task loop. Off by default — it re-accepts a single 529's blast radius across the phase, so it's an explicit opt-in for tiny, tightly-coupled phases only.
Steps
-
Parse the arguments. Split into
<feature>,<phaseName>, optional--force, optional--bulk. If<phaseName>is missing, ask the user (offerlist_phases({ featureId })). Default dispatch is per-task (step 7);--bulkswitches to one whole-phase builder Task. -
Resolve the feature.
list_features→ match byid/slug. Stop if not found. -
Check the Plan is approved.
check_gate({ featureId, stage: "plan" })must beok: trueAND an approvedplandoc must exist (list_documents({ featureId, stage: "plan" })). If not, report and stop — the builder needs a stable plan. -
Resolve the target phase.
next→get_next_phase({ featureId });nullmeans "All phases done — nothing to build", stop. Otherwise find<phaseName>inlist_phases({ featureId }); if absent, list available phases and stop. 4c. Mark the build active (arms the Stop-gate).set_active_build({ featureId, phase: <resolvedPhaseName> })— use the concrete resolved phase name, never"next". This writes the.cache/active-build.jsonmarker that pins the Stop-gate to this exact phase; without it the gate is a no-op. Pair this withclear_active_build()on every terminal path (steps 8 and 9 below). -
Order check (unless
--force). If any phase with a lowerorderthan the target hasstatus !== "done", refuse: "Phase X has open tasks — build it first, or pass--force." -
Idempotency. If the target phase is already
done, report and stop — suggest/specmanager-walkthrough <feature> <phaseName>instead. 6b. Confirm the session tier→model table (R2). Once per build session,AskUserQuestionto confirm or remap which Claude Code model alias each complexity tier dispatches at. Pre-fill the defaults fromcore/tiers.ts: cheap →haiku(complexity 1), standard →sonnet(complexity 2), strong →opus(complexity 3, and anything >3 / unscored). Offer the defaults as the recommended option plus an "allopus" / custom alternative. Hold the chosen table in session state for the rest of this build. Always use aliases, never dated model ids. If the user declines, keep the defaults. -
Invoke the builder (per-task tier dispatch is the enforced default;
--bulkis the opt-in). Work the phase's tasks independsOnorder.Default — per task (N=1, no flag). For each task: read its
complexity(list_tasks), map complexity → tier → alias via the session table (default 1→cheap/haiku, 2→standard/sonnet, 3→strong/opus, >3 or null → strong), and dispatchTask({ subagent_type: "builder", model: <alias>, prompt: ... })with: feature id/title/slug, the resolved phase name (notnext), the single task id + title, the Plan doc id, and the phase's exit-test line lifted fromplan.md. If the resolved alias is unknown/unavailable, omitmodel:so the builder runs at the session default (inherit) — never error or block (AC4). The builder marks that taskin_progress→donewith artifacts; on its return move to the next task. Per-task is the default because it isolates a 529 to a single card and spends the cheapest adequate model on each.Opt-in —
--bulk. When--bulkwas passed (step 1), dispatch all the phase's tasks in one builder Task at the max tier of its tasks (resolve each task's alias, pick the strongest). This trades per-task isolation/tier savings for one builder context — use only on tiny, tightly-coupled phases. Then fall through to step 8's re-resolve exactly as the per-task path does.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 92 lines · 25 tokens per session scan A 5afc6e0fe663
specmanager-build is a command published in the GitHub repository joanseg/specmanager (19 stars, last pushed 18d ago), licensed MIT. It adds 25 tokens to every session and 3,990 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
add-plugin
Integrate a spec-driven/skill framework as a bundled agtx plugin. Pass a GitHub repo URL to auto-generate the plugin.toml, or run without arguments to write one from scratch.
example-only
This command documents how to dispatch. Example only.
develop-configure
The develop orchestrator body: phases, dispatch discipline, quality gates, ceremony lock, ledger, and handoff. Loaded by the develop skill once the operator has chosen a ceremony path.
add-skill
Add a new Skill to the current plugin with proper structure.
my-cmd
Use the agent tool with.
bad-cmd
Use the agent tool with.