Per user
- Default policy →
~/.gitvow/policy.json(created only if absent, so your edits survive reinstalls) - Git hook →
~/.gitvow/git-hooks/prepare-commit-msg, registered as the globalcore.hooksPath - Hook entries merged into
~/.claude/settings.json, using the absolute path of thegitvowexecutable, so hooks work even when Claude Code’s shell has no virtualenv or pipx directory on its PATH - A
pre-pushhook in the same directory that pushesrefs/notes/gitvow/*to the remote you push to - Global git config
notes.displayRefandnotes.rewriteRefset torefs/notes/gitvow/*, sogit log --show-notesshows session notes and they follow amend, rebase and squash
.git/hooks/prepare-commit-msg, not to a previous global path.
Per repo
- Policy and git hook →
<repo>/.gitvow/ - Hook entries merged into
<repo>/.claude/settings.json, using the bare commandgitvowbecause the file is shared by people with different install paths; every teammate needsgitvowon the PATH their shell gives Claude Code core.hooksPathset to.gitvow/git-hooksfor that repository- Repository git config
notes.displayRefandnotes.rewriteRefset torefs/notes/gitvow/* - A
pre-pushhook that pushes session notes with every push
.gitvow/ and .claude/settings.json to share. Each teammate runs once: git config core.hooksPath .gitvow/git-hooks. Use this once a team has agreed a policy: it is reviewed in pull requests, and gate paths are specific to the repository.
Precedence
Policy lookup:<repo>/.gitvow/policy.json, then ~/.gitvow/policy.json, then the package default. Hooks in both user and repository settings run; gitvow’s entries are idempotent, so installing twice never duplicates them and never disturbs hooks you added yourself.
Upgrading
pip install --upgrade gitvow replaces the package but not the git hook file written by install, nor the hook commands in settings. After upgrading, re-run the same install command you used (gitvow install --user or gitvow install <repo>). It is idempotent and refreshes both. Repositories that committed .gitvow/ refresh it in a pull request like any other change. The changelog says when a release changes the hook.
Uninstall
--purge-notes deletes every local refs/notes/gitvow/* ref.
If hooks silently do nothing
Claude Code treats a hook command it cannot run as a non-blocking error and continues, which would switch the gate off without a visible failure. Check with:gitvow and your install lives in a virtualenv, either install with pipx install gitvow or pip install --user gitvow so it is on the PATH, or reinstall per user so the absolute path is recorded. Claude Code’s /hooks view also shows hook errors.
Pause without uninstalling
git config --global --unset core.hooksPath stops trailers. The gate keeps running until the hooks are removed. To relax the gate temporarily, edit the policy lists rather than removing the file: a missing policy fails closed.