Linking core.hooksPath to the tracked, sandbox-writable .githooks/ let a
sandboxed command rewrite a hook that git commit/push then run unsandboxed.
Copies in .git/hooks can't be changed from the sandbox. This also keeps
existing .git/hooks scripts working and lets npm install succeed outside a
git checkout. pre-merge-commit now names itself in errors; hook tests clean
up, ignore GIT_* env and cover the installer; docs state what each layer
does and doesn't stop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pre-push rejects any push that would update refs/heads/main, however the
command is spelled; pre-commit and pre-merge-commit refuse commits while
main is checked out. npm install enables them via core.hooksPath. The
README documents the three layers of protection for main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Project settings can't re-open a path denied by another settings source,
so this lives in user settings instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run git ls-remote unsandboxed so SSH works, and ask before each use like
the other network git commands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Enable the Bash sandbox with writes limited to the project, block reads
of credential and personal folders, and protect the settings files from
edits. git commit/push/fetch/pull run unsandboxed so GPG and SSH work;
network git commands always ask first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>