| name | campaign-health |
| description | Health check for the bb/pt/ctf workflow driver subsystem - verifies everything is in place so every machine runs the same. Checks vault-content consistency (scripts present, JSON valid, routing wired, all 69 tool pages carry phase:, the tool index resolves, the hook edits are in place) AND per-machine wiring (the three workflow skills symlinked, hooks registered, imports work), then runs a live init->board->next smoke test. Use when setting up the workflow on a new machine, after a vault sync, when the driver misbehaves, or on "bb-health", "campaign health", "is the workflow set up", "check hooks and scripts", "why is the board not working". |
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
approach exists in playbook.json and coverage-classes.json, the two hook edits (recon-capture
emits spec['tools'], tool-telemetry logs binaries) are present, all 69 wiki/tools/ pages carry
phase:, and campaign.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 (via check-hooks.py), and _engagement imports.
- C. live smoke test -
init -> board -> next against a throwaway copy of the fixture, asserting
the board writes rows and next withholds the exploit at G1.
Fixing what it reports
- WARN (machine wiring) - usually one setup script the doctor names:
bash setup/install-skills.sh (skills) or bash 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-run python3 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.