Skip to content

Troubleshooting

Run /ca:doctor in Claude Code or $ca-doctor in Codex when codeArbiter is not behaving as expected. The command is a read-only health check over interpreter, payload, cache, activation, and live-fire enforcement. Claude also checks statusline wiring. Codex instead requires its hook set to be trusted through /hooks; start a fresh thread after approving a changed set.

Open the project where the problem appears and run the host-native command:

/ca:doctor
$ca-doctor

Doctor prints a result for each check and exits 0 if all pass, non-zero otherwise. Fix failures in the order reported: later failures are often downstream of the first.

Doctor confirms that the interpreter selected by the active adapter resolves. Claude Code carries its documented python3/python fallback shape. Codex uses OS-specific hook handlers and reports a loud failure if the selected interpreter is absent. Pi keeps its TypeScript wrappers active and blocks mutating calls with an interpreter breadcrumb until the Python bridge is healthy. In every case, a failed interpreter row means governance is not healthy.

To fix: add Python 3 to PATH. Verify outside Claude Code with python3 --version or python --version. At least one must succeed.

Doctor checks that the plugin payload is internally consistent and all expected files are present.

To fix: if integrity fails, reinstall or update the plugin.

Cached payload data and settings paths can lag behind a plugin update. Doctor detects outdated entries and reports which ones are stale.

To fix: run /ca:doctor after every plugin update and follow the remediation it prints.

Doctor reads .codearbiter/CONTEXT.md and checks three things:

  1. The file exists at the repo root.
  2. The leading YAML frontmatter opens with --- on line 1 and closes with a second ---.
  3. The closed block contains arbiter: enabled.

A repo without the file is dormant: the gates do not fire and no orchestrator persona is injected. An unclosed frontmatter block surfaces as a malformed-state error rather than silently treating the repo as disabled.

To fix: confirm the first three lines of .codearbiter/CONTEXT.md read:

---
arbiter: enabled
---

If the file is absent, run /ca:init to scaffold it.

Activation classification flow: a missing CONTEXT.md or missing leading frontmatter is dormant; an unclosed block is malformed and surfaces an error; a closed block containing arbiter enabled activates the persona and gates.
Use the same three-state classification when reading doctor output.

Doctor runs a hook invocation to confirm a hook binary actually executes end-to-end, not just that an interpreter binary is on PATH. A passing interpreter check alongside a failing probe points to a registration or permissions problem with the hook files themselves.

To fix: reinstall the plugin to repair hook registration.

Claude Code only. Codex has no statusline surface; do not treat that absence as a failed check.

Doctor checks that the statusLine.command entry in ~/.claude/settings.json points to the current version of statusline.py. The stored path is absolute and version-pinned, so a plugin update can leave it pointing at the previous version. The SessionStart hook repairs this automatically each session, but doctor will report a stale wire before the first post-update session runs.

To fix: run /ca:statusline to re-wire explicitly, or open a new Claude Code session to trigger the automatic repair.

ca-pi currently ships as a Feature Forge preview. Real use and feedback are welcome; reports from live repositories help it graduate.

On Pi, run /ca-doctor first. It is the diagnostic entry point, checking the active package path, canonical Pi CLI and package origin, command ownership, supported-version fingerprints, Python/core/bridge health, child fingerprint, final mutator wrappers, and the H-03 wrapper self-test.

Pi has several distinct silent-inactivity states that look alike but have different fixes:

SymptomLikely causeFix
Nothing enforces, no orchestrator persona.codearbiter/CONTEXT.md missing or arbiter: enabled not setRun /ca-init, per Repo Activation above
Repo is enabled but still dormantPi project trust not grantedGrant Pi project trust for the repo, then start a fresh session
Trust was just granted but still dormantTrust was granted in the current session, not a fresh oneStart a new session after granting trust: the parent registers repository-aware dispatch only on a fresh session that reports the trust decision
Mutating calls fail, or an interpreter breadcrumb appearsPython 3 not on PATHAdd Python 3 to PATH; ca-pi blocks mutating calls rather than failing silently when the interpreter is missing
/ca-<name> doesn’t do anythingWrong invocation syntaxPi uses /ca-<name> generated aliases with /skill:ca-<name> as the host-native fallback. This differs from Codex’s $ca-<name> convention
Doctor reports an unsupported versionPi CLI is not 0.80.5 or 0.80.10Upgrade to Pi 0.80.5 or Pi 0.80.10, the only supported versions in this release line; see Compatibility
SymptomLikely causeSuggested check
Claude gates don’t fire in any reponeither registered interpreter resolvesClaude doctor’s interpreter section; verify python3 --version or python --version in a shell
Codex hook handler fails before evaluating a gateits OS-specific Python command does not resolveCodex doctor’s interpreter section and the exact handler error
Pi mutation is blocked with an interpreter breadcrumbPython bridge is unavailable/ca-doctor, then add Python 3 to PATH and start a fresh session
Gates don’t fire in one specific repoarbiter: enabled missing or frontmatter unclosedDoctor’s repo activation section; inspect .codearbiter/CONTEXT.md
Orchestrator persona not loadingRepo not opted in; SessionStart finds no activation flagDoctor’s repo activation section; run /ca:init if the file is absent
Stale behavior after a plugin updateCached payload or statusline path is outdatedDoctor’s stale-cache and statusline sections
Statusline shows wrong stage or stale dataStatusline wired to previous statusline.py pathDoctor’s statusline section; run /ca:statusline to re-wire
Malformed-state error on session startFrontmatter opens with --- but never closesInspect .codearbiter/CONTEXT.md line 2 for the closing ---
Merged PR but task still open on boardMerged-but-not-flipped taskDoctor runs a read-only reconciliation sweep and reports any such tasks