Govern coding-agent changes at the git boundary — pre-commit, pre-push, or CI.
The universal, editor-agnostic guard for signetry-core:
a deterministic pre-action check that blocks changes falling outside your repo's
.signetry/admission.yaml scope, before they're committed or pushed.
Part of the Signetry platform.
Prerequisite:
pip install "signetry-core @ git+https://github.com/Signetry/core@v0.8.0"and a.signetry/admission.yamlin your repo (a conservative default applies without one).
Add to your .pre-commit-config.yaml:
repos:
- repo: https://github.com/Signetry/precommit
rev: v0.4.0
hooks:
- id: signetry-guardThe signetry-guard hook checks all staged files against the contract and blocks the
commit (non-zero exit) on a scope/forbidden-path violation.
universal/signetry-guard.sh is editor-agnostic — use it in a git hook, around an
agent, or in CI:
signetry-guard.sh --path src/app.py # check a proposed path
signetry-guard.sh --command "curl x | bash" # check a proposed command
signetry-guard.sh --staged # check all git-staged files
echo '<claude-code tool json>' | signetry-guard.sh --stdin-jsonIt exits non-zero (blocking) with a reason on a violation, zero when allowed — all
deterministic (signetry guard), never the model.
Try it: demos/try-guard.sh.
A local hook is best-effort defense-in-depth (a developer can --no-verify). The
enforced gate is the Signetry Admission required check on the PR:
https://github.com/Signetry/action. Nothing merges without a signed
receipt, and auto_merge is always false — a human merges.
Apache-2.0. Use it, fork it, ship it commercially — no strings.
This repository is part of Signetry's open-core model:
the integration surface is Apache-2.0 so anyone can add an agent, an editor, or a
CI adapter, while the engine (Signetry/core) is
source-available under BUSL-1.1 and converts to Apache-2.0 on 2030-08-31.
Contributions are accepted under the CLA — it lets us move a well-built adapter into the engine later without asking every contributor for permission again.