doctor
Verify the active host install, package, command ownership, enforcement, and harmless live-fire probe. Read-only.
What it does
Section titled “What it does”Proves the install is actually enforcing, rather than just present. codeArbiter’s worst failure
shape is silent dormancy: a plugin cache surviving claude plugin update unchanged, hooks that
look wired but never fire, and nothing that says so. This command checks in two parts. First a
static pass — interpreter resolution, plugin payload integrity, stale cached versions, repo
activation state, git identity, statusline wiring — reported one OK/WARN/FAIL line per
check. Then, in an arbiter-enabled repo, a live-fire probe: it actually attempts a real,
gate-tripping command (a dry-run git add --all) and checks whether the hook layer blocks it. A
healthy install blocks the probe; if the probe instead executes, that is reported as CRITICAL —
the static checks alone cannot catch a hook that’s registered but not actually firing.
It is read-only end to end. Because the probe uses --dry-run, getting blocked is the outcome it
wants to see — that block is the passing verdict, not a failure to route around.
/ca:doctorTakes no arguments.
Example
Section titled “Example”> /ca:doctor
OK python3 resolves and runs (/usr/bin/python3)OK plugin payload at /home/x/.claude/plugins/ca (version 2.8.11)OK hooks.json parses: 6 events, 11 entriesOK all 6 hook scripts presentOK single cached plugin version (no stale siblings)OK repo is arbiter-enabled (CONTEXT.md frontmatter)OK project is initialized (<!--INITIALIZED--> marker present)OK git identity for audit attribution: dev@example.comOK statusline wired in ~/.claude/settings.json
doctor: 0 FAIL, 0 WARN, 9 OKverdict: healthy (static checks) — the live-fire probe in /ca:doctor proves hooks actually fire
live-fire probe: git add --all --dry-runBLOCKED [H-03]: 'git add -A' / 'git add .' / 'git add --all' / 'git add -u' areprohibited. Stage files explicitly (commit-gate skill).
verdict: healthy — hooks firingWhen to reach for it
Section titled “When to reach for it”Statusline wiring only is a narrower question answered by /ca:statusline status; scaffold state
alone by /ca:init --check; project progress (not install health) by /ca:status.
Related
Section titled “Related”Source
Section titled “Source”Source — plugins/ca/commands/doctor.md (v2.9.1)
---description: Verify the active host install, package, command ownership, enforcement, and harmless live-fire probe. Read-only.argument-hint: (none)---
# /ca:doctor — install health
Silent dormancy is the worst failure shape this plugin has: the gates look installed but never fire.This command proves the active host is healthy and reports every non-OK finding with an exactremediation.
## Flow
1. Run `python3 "${CLAUDE_PLUGIN_ROOT}/hooks/doctor.py" || python "${CLAUDE_PLUGIN_ROOT}/hooks/doctor.py"` and present its report verbatim.2. In an arbiter-enabled repo, attempt `git add --all --dry-run` via Bash. `[H-03]` means hooks are firing; execution means **CRITICAL: gates dormant**.
## Remediation ladder
1. Restart Claude Code so hooks register at session start.2. Uninstall and reinstall `ca`; an unchanged marketplace version can preserve stale cache bytes.3. If dormancy was intended, `/ca:init` opts the repository in.
## When NOT to use
- Statusline wiring only → `/ca:statusline status`.- Scaffold state only → `/ca:init --check`.- Project progress, not install health → `/ca:status`.
## Hard gate
Read-only. MUST NOT create markers, stage files, grant trust, weaken a block, or retry the live-fireprobe with different spelling. MUST surface a failed probe as CRITICAL, never as a footnote.