# Campaign Health

> 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".

- Skill: `encod3d-sec/campaign-health` (Agent Skill)
- Install (CLI): `npx skillmds@latest add encod3d-sec/campaign-health`
- Raw SKILL.md: https://api.skillmd.com/api/skills/encod3d-sec/campaign-health/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: Encod3d-Sec (https://skillmd.com/u/encod3d-sec)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/encod3d-sec/campaign-health

---


# 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.

