campaign-health
The vault syncs across machines; ~/.claude (hook registration, skill symlinks, deps) does not.
So "it works here" does not mean "it works there". This skill confirms both halves before you rely on
bb-workflow / pt-workflow / ctf-workflow on this machine.
Run it
python3 scripts/campaign-doctor.py # summary (only WARN/FAIL shown)
python3 scripts/campaign-doctor.py --verbose # every check
Exit 0 = all green. Exit 1 = at least one FAIL; the driver will not run correctly here until fixed.
What it checks
- A. vault content - the driver's scripts exist, every campaign JSON is valid, each type's
approachexists inplaybook.jsonandcoverage-classes.json, the two hook edits (recon-capture emitsspec['tools'], tool-telemetry logs binaries) are present, all 69wiki/tools/pages carryphase:, andcampaign.tool_index()resolves an invocation for every tool. - B. machine wiring - the three workflow skills are authored and symlinked into
~/.claude/skills, hooks are registered (viacheck-hooks.py), and_engagementimports. - C. live smoke test -
init -> board -> nextagainst a throwaway copy of the fixture, asserting the board writes rows andnextwithholds the exploit at G1.
Fixing what it reports
- WARN (machine wiring) - usually one setup script the doctor names:
bash setup/install-skills.sh(skills) orbash setup/install-hooks.sh(hooks). - FAIL (vault content) - a stale sync or a partial edit. Re-pull the vault; if a tool page lost
its
phase:, re-runpython3 scripts/tool-phase-backfill.py --write.
Run this first on any new machine, and after every vault sync, so all machines run the same driver.