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/procoders/superpowers-v/v-epicgit clone --depth 1 https://github.com/procoders/superpowers-vWhat 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.00095 | $0.22343 |
| Opus 5 | $0.00048 | $0.11171 |
| Sonnet 5 | $0.00019 | $0.04469 |
| Haiku 4.5 | $0.00010 | $0.02234 |
Grade A, and why
v-epic 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 — 423 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are running /v:epic — the epic driver of Compound V. A v1.0 run executes ONE plan (one feature). An epic chains several: an ordered set of features, each run through the full v1.0 pipeline, in dependency order, accumulating onto one branch. "Build a whole app." It is the same discipline one level up — resumable, topological, no daemon.
The epic spec is {{args}} (a path to an epic brief, or a described feature set).
The epic model, run-dir layout, the final integration review, and the honesty boundary are defined in skills/compound-v/epic-mode.md — read it; it is the authority. The deterministic state spine is scripts/compound-v-epic-state.py (one level up from state-machine.md). Each per-feature run is a normal v1.0 run materialized per execution-manifest.md.
Steps
-
Resolve the epic spec. From
{{args}}: if it is a path to an epic brief, read it; if it is a described feature set, work from the description. If{{args}}is empty, ask the user for the epic brief (or list existing epics underdocs/superpowers/execution/epics/to resume one). Pick an<epic-id>(convention:YYYY-MM-DD-<slug>) and an epic title, and capture the epic's acceptance criteria (used by the final integration review). Agree an autonomy budget with the user —MAX_FEATURESper/v:epicinvocation. Seed the default from.claude/compound-v.jsonepic.max_featuresif set (written by/v:initStep 3c), else 1: build one feature, then checkpoint; raise it only when the user wants more autonomy per run. An epic is N full v1.0 runs, so this is the human checkpoint cadence — a driver policy, not a script-enforced token meter: by default the loop builds one feature, reports--stats, and stops for you to review and re-run.Marathon gate (opt-in, v2.10). If
.claude/compound-v.jsonepic.autonomy.stance == "marathon"(written by/v:initStep 3c) or the user explicitly asks for the autonomous/marathon loop for this invocation, this epic runs the Autonomous marathon loop below instead of steps 4–7 —MAX_FEATURESdoes not apply there (marathon is bounded by global breaker caps, not a per-invocation feature count). Otherwise (the default, unconfigured case) continue with the checkpoint loop in steps 4–7 exactly as documented — nothing below changes for you. -
Decompose + spec every feature UP FRONT — the one interactive phase. Decompose the product into independent-ish features, each a vertical slice (
auth,api,ui), not a layer; capture cross-feature dependencies independs_on(apidepends_onauth). Then, for each feature, runsuperpowers:brainstormingto produce a real per-feature spec file (with feature-level Acceptance Criteria), saved todocs/superpowers/execution/epics/<epic-id>/specs/<feature-id>.md. Trigger 0 applies to each of these brainstorms: before each per-feature brainstorm, run the pre-brainstorm recon gate sequence fromphase-0-recon.md(plumbing-skip → KB-hit → config); later features in the same epic increasingly skip via the KB-hit gate as earlier recon/audit docs accumulate — designed behavior, not a bypass. This is the only human-interactive phase: every spec is written and approved here, before the autonomous loop — so the loop never pauses to brainstorm. That batching is what makes the epic genuinely autonomous and keeps a real spec per feature (the central tension, resolved). Writefeatures.json= a JSON array of{id, title, depends_on, spec_path}, eachspec_pathpointing at its spec file. -
Review the decomposition, then init (specs enforced).
- Gate the feature DAG before building (one level up from partition-review):
python3 scripts/compound-v-epic-state.py --lint --features docs/superpowers/execution/epics/<epic-id>/features.jsonflags structural smells (an ISLAND feature with no deps and no dependents = a likely missed dependency; an over-coupled feature depending on most others = a layer, not a slice) plus any hard validation error. Then critique it yourself: are these real vertical slices, aredepends_oncorrect and complete? A missing edge means a feature builds before its prerequisite. Fixfeatures.jsonuntil lint is clean and the split is sound — a weak decomposition is the #1 way an epic fails downstream. - Resume-aware init. The epic lives at
docs/superpowers/execution/epics/<epic-id>/epic-state.json. If it already exists → CONTINUE (read it; first runpython3 scripts/compound-v-epic-state.py --check-specs --state <epic-state.json>to confirm every non-donefeature still has an existing, containedspec_path— this guards an old or hand-made state from entering the loop spec-less — then go to the loop). Else initialize:python3 scripts/compound-v-epic-state.py --init --require-specs \ --features docs/superpowers/execution/epics/<epic-id>/features.json \ --epic-id <epic-id> --title "<title>" \ --out docs/superpowers/execution/epics/<epic-id>/epic-state.json--require-specsrefuses to start unless every feature has an existingspec_path— the deterministic enforcement that no feature enters the autonomous loop without an approved spec. It also validates ids/refs/cycles/dups. A non-zero exit ⇒ fix and re-init; never hand-edit the state. - Marathon init (only for a NEW epic, gated by step 1). If the marathon gate applies and
epic-state.jsondoes not exist yet, add--stance marathonplus the agreed breaker caps to the--initcommand above:--stance marathon --max-attempts-per-feature <N> --max-no-progress-cycles <N> --max-wall-clock-hours <H> --start-sha <sha>(leave--max-total-attemptsunset to take the script's feature-count-derived default,max(6, 3×features), unless the user wants a specific number). Capture<sha>withgit rev-parse HEADat this init moment and pass it — it is stored asautonomy.start_shaand is the baseline the halt-page's accumulated-diff command (§7) and the final integration review (§8) diff against. Marathon has no in-place upgrade. An existing checkpointepic-state.json(noautonomyblock) cannot be flipped to marathon after the fact —build_state/--initonly ever writes the marathon fields at creation time. If the epic already exists as a checkpoint state and the user now wants marathon, the options are: (a) keep finishing it in checkpoint mode (steps 4–7), or (b) start a fresh--epic-idwith--stance marathon, reusing the samefeatures.json/spec files under a new epic id. Never hand-edit an existingepic-state.jsonto inject anautonomyblock.- Watch opt-in (v2.11, additive to this same
--initcall). If.claude/compound-v.jsonepic.autonomy.watch == true(written by/v:initStep 3c), add--watch [--max-resume-count <N>]to the SAME--initcommand above — this is what activates auto-resurrection: config intent alone never arms anything, only theautonomy.watchthis call PERSISTS intoepic-state.jsondoes (every watch-gated command below —--liveness,--claim-resume,--renew-lease,--record-watcher-armed/-disarmed,--list-watchers— reads and requires the persisted value, exactly likeautonomy.stanceitself). The persistedautonomy.watchis the sole authority once the epic exists — the config keyepic.autonomy.watchonly ever gates THIS one--init --watchcall for a NEW epic; a config-only "yes" on an epic whose--initomitted--watchnever retroactively arms it (no in-place upgrade, same rule as marathon itself), and a later config flip does not retroactively turn watch on or off for an already-initialized epic. Leave--max-resume-countunset to take the script's default (20) unless the user wants a specific cap. The exact arming/disarming sequence is Autonomous marathon loop §0c below.
- Watch opt-in (v2.11, additive to this same
- Commit the epic-level files right after init:
features.jsonand the freshly-createdepic-state.jsonare new, uncommitted files. Two separate commands, checking each exit code — never chain with&&:git add docs/superpowers/execution/epics/<epic-id>/features.json docs/superpowers/execution/epics/<epic-id>/epic-state.json, thengit commit -m "chore(v-epic): init epic <epic-id>". (Per-feature spec files are committed bysuperpowers:brainstormingitself when each spec is approved, in step 2 — no separate action needed for those.)
- Gate the feature DAG before building (one level up from partition-review):
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 · 423 lines · 95 tokens per session scan A c6217de36d97
v-epic is a command published in the GitHub repository procoders/superpowers-v (35 stars, last pushed 3d ago), licensed MIT. It adds 95 tokens to every session and 22,343 once invoked, about $0.0005 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
deepen
Spare-budget design pass. Make one shallow module deep — smaller interface, behavior held, tests green before & after.
review
Adversarial senior review of the spec before build. Refute, don't rubber-stamp. Ends in a go/no-go gate.
spec
Create, amend, or backprop bug into SPEC.md. Sole mutator of spec.
grill
Sharpen a fuzzy idea into §G/§C before spec. Calibrated interrogation, one question at a time.
init
Initialize the current repository for herdrpowers by declaring repo-specific configuration in its instruction files.
session-end
Guided end-of-session ritual. Writes structured handoff (session-handoff.md), appends progress.md entry, and offers over-budget state archival + TOC refresh + git commit.