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...
Installs into .claude/skills of the current project.
Are you the author of Campaign Health?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/encod3d-sec-campaign-health)
---
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.