How to run it
Name the prompt under test, then read the verdict.
Open Claude Code in your repo and type:
/hyperpower:eval
With nothing after it, the first thing it does is list every prompt file in your repo, numbered and grouped by folder, with each one's baseline state:
plugins/hyperpower/agents/
11 mapper.md no baseline
16 reviewer.md no baseline
17 skeptic.md baseline 4.21 on 2026-10-06
plugins/hyperpower/skills/
26 eval no baseline
Select by number (3), range (1-4), name (skeptic), group (agents), or all.
Pick however you like. 17, 16-17, skeptic, agents, a path, or
all to walk every file one at a time. Name it up front to skip the list:
/hyperpower:eval skeptic
If exactly one prompt file is modified in your working tree, it uses that one and says so rather than asking. A selection that matches nothing is an error naming what it could not find, never a quietly smaller run.
What it is actually comparing
The suite does not scan your prompts and decide what to test. You name one file, and it runs that file's old text against its new text.
git show HEAD:plugins/hyperpower/skills/review/SKILL.md > /tmp/base.md
cp plugins/hyperpower/skills/review/SKILL.md /tmp/cand.md
../scripts/run_evals.py run \
--baseline-cmd 'claude -p --tools '' --strict-mcp-config --no-session-persistence --append-system-prompt "$(cat /tmp/base.md)"' \
--candidate-cmd 'claude -p --tools '' --strict-mcp-config --no-session-persistence --append-system-prompt "$(cat /tmp/cand.md)"'
Read it as an exam:
| Piece | Is |
|---|---|
cases.jsonl |
the questions. Fifteen, the same for both sides. |
--baseline-cmd |
the prompt as it was before your edit |
--candidate-cmd |
the prompt as it is now |
rubric.md |
the marking scheme |
| SHIP or HOLD | whether the new text beat the old text |
One file per run, the one you changed. A repo with a hundred prompts still runs one comparison, because the question is whether this edit helped, not which of your prompts is best.
Both commands are plain shell. They receive a case on stdin and print a response on stdout, so anything that reads one and writes the other can be scored.
The first time
A clean install has no baseline, so there is nothing to beat. Record one:
/hyperpower:eval --baseline
Until you do, scoring exits 3 and says no baseline recorded. That is never
treated as a pass.
Each prompt file keeps its own baseline, under
.hyperpower/evals/baselines/. A score for the mapper says nothing about the
reviewer, so the two never share a file and are never compared against each
other. The baseline.json inside the plugin is a shipped template with every
score null. The script owns all of them; never edit one by hand.
Record a baseline after a change has shipped, never to clear a HOLD. Re-baselining a failing run deletes the evidence that it failed. And adding a case invalidates whatever you recorded, because scoring refuses to compare across a changed cases file, so re-record after you add one.
What it costs
Fifteen cases, three trials, two prompts being compared. Ninety model responses, roughly thirty minutes, and real money. It always prints the estimate before spending anything, and the dry run writes nothing at all:
cd plugins/hyperpower/evals
../scripts/run_evals.py run --dry-run --baseline-cmd cat --candidate-cmd cat
Passing cat echoes each prompt back instead of calling a model, which checks
the wiring for free.
When to run it
Before any change to a prompt, a skill, or an agent file ships. That is the release gate for the harness itself. Editing code, gates or docs does not need one; editing the words an agent reads does.