install.sh (a thin wrapper over install.py) wires Proctor into a Claude Code config. It's
idempotent (safe to re-run), backs up settings.json before editing, and is fully
reversible.
git clone https://github.com/webdevtodayjason/proctor
cd proctor
./install.sh # install / repair wiring
python3 test_gates.py # confirm healthy
python3 test_turns.py # turn-level integration check- Symlinks
~/.claude/hooks/goal-contract→ this clone. Editing the clone is editing the live system — that's the iterate loop. - Wires the hook entries in
settings.json:witness.py(PostToolUse),disposition-gate.pygoal-gate.py(Stop),arm-contract.py(UserPromptSubmit).
- Symlinks the contract-authoring skills and the
/disarmcommand. - Seeds
judge.config.jsonfrom the example if absent.
| Command | Effect |
|---|---|
./install.sh |
Install or repair (idempotent) |
./install.sh --status |
Report what's wired; change nothing |
./install.sh --uninstall |
Remove the wiring (keeps witness logs + backups) |
./install.sh --dry-run |
Print what would happen |
./install.sh --config-dir DIR |
Target a non-default profile (e.g. ~/.claude-work); also honors $CLAUDE_CONFIG_DIR |
settings.json is copied to settings.json.bak-proctor-<timestamp> before any edit.
edit the clone → python3 test_gates.py → git commit → git push
→ git pull (elsewhere) → ./install.sh # idempotent; wires only what's missing
Judge — a local LLM (e.g. LM Studio) that signs prose acceptance. Copy
judge.config.example.json → judge.config.json and set the endpoint/model. Stays
advisory until you calibrate and flip it. See using-it.md.
judge.config.json is gitignored (it holds your endpoint).
Voice pages — if ~/.config/claude-hooks/voice-attention.py exists, yields and handoffs
speak aloud. Absent → the gates just log; nothing breaks.
Proof-integrity guard — defense-in-depth that makes the graded model unable to write its
own evidence. It rides on the separate damage-control
hooks. The installer detects whether the patterns are present and, if not, points you at
guards/damage-control-patterns.yaml to merge by hand (it never structurally rewrites a
foreign tool's config). Threat model: done-pressure shortcuts, not malice — a speed bump with
an audit trail.
- Claude Code
python3(standard library only — no pip installs)- Optional: a local LLM endpoint for the judge;
gitfor the reality-checks that inspect diffs
./install.sh --uninstall removes the hook entries and symlinks and leaves your witness logs,
proofs, and settings backups in place. Re-running ./install.sh restores everything. Nothing
about Proctor writes outside ~/.claude/ and the clone.