name: test-local description: Test prove_it from source against an example project or temp directory. Use when you want to verify hook behavior end-to-end without a Homebrew release.
Test prove_it locally
Run prove_it from the repo source (not the Homebrew install) to test hook behavior.
Steps
Identify the test target. If the user didn't specify, use
example/basic/.Set up the PATH shim so
prove_itresolves to the repo'scli.js:export PATH="$(git rev-parse --show-toplevel)/test/bin:$PATH" which prove_it # should show test/bin/prove_itRun the requested test. Common scenarios:
Test a specific hook event:
cd example/basic echo '{"hook_event_name":"Stop","session_id":"test","cwd":"."}' | prove_it hook claude:StopTest SessionStart:
echo '{"hook_event_name":"SessionStart","source":"startup","session_id":"test","cwd":"."}' | prove_it hook claude:SessionStartTest PreToolUse (edit protection):
echo '{"hook_event_name":"PreToolUse","tool_name":"Edit","tool_input":{"file_path":"src/greet.js"},"session_id":"test","cwd":"."}' | prove_it hook claude:PreToolUseTest PreToolUse (commit gate):
echo '{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_input":{"command":"git commit -m test"},"session_id":"test","cwd":"."}' | prove_it hook claude:PreToolUseTest init in a temp directory:
tmpdir=$(mktemp -d) cd "$tmpdir" && git init prove_it init --no-default-checks cat .claude/prove_it/config.json prove_it deinit rm -rf "$tmpdir"Test doctor:
cd example/basic prove_it doctorReport the output and whether the behavior matches expectations.
Notes
- The shim at
test/bin/prove_itjust doesexec node ../../cli.js "$@" - All
$(prove_it prefix)/libexec/*commands in configs will also resolve through the shim - This tracks with the current git ref—check out any commit to test that version