Scan a repo in 60 seconds¶
The detection engine is the zero-setup entry point: no contract, no agent, no API key, no network. Point it at code and it reports findings.
If you want the governance side instead — bounding what an agent may change and proving it — start at Quickstart.
Install¶
# BUSL-1.1 (Apache-2.0 on 2030-08-31); not on PyPI — install from source
pip install "signetry-core @ git+https://github.com/Signetry/core@v0.8.0"
Scan¶
signetry scan . # a local checkout
signetry scan https://github.com/owner/repo.git # or a git URL (disposable clone)
That is the whole setup. The deterministic layer is offline and dependency-free: Python AST taint plus cross-file/interprocedural taint, rules and line-based taint for Go, Java, PHP, Ruby and C#, and rules for Kotlin — covering SQL/command/code injection, unsafe deserialization, path traversal, XSS, weak crypto, insecure randomness, SSRF, SSTI, JWT-none, NoSQL, XXE, hardcoded secrets, disabled TLS and debug mode.
Scanning a git URL shallow-clones to a temp directory and cleans up after itself;
use --depth if a rule needs more history.
Upload to GitHub code scanning¶
signetry scan . --sarif -o results.sarif
--sarif emits SARIF 2.1.0, which github/codeql-action/upload-sarif accepts
directly:
- run: signetry scan . --sarif -o results.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Gate CI¶
signetry scan . --fail-on high
Exits non-zero when any finding meets or exceeds that severity, so it fails the
job. Accepts critical, high, medium, low, info.
Starting at --fail-on critical on an existing codebase and tightening from there
avoids a wall of pre-existing findings blocking the first build.
Optional extra layers¶
signetry scan . --semgrep # merge Semgrep results if it is installed
signetry scan . --treesitter # tree-sitter AST layer, if the extras are installed
Both are additive and non-fatal: if the tool is absent the scan still runs and records the layer as unavailable rather than silently claiming it ran.
Then govern the fix¶
signetry scan . --fix --fix-agent codex-cli
--fix turns each finding into a bounded remediation mission, runs it through the
admission pipeline, and seals a signed receipt — so the output is not just "here's a
bug" but the bug, the fix, the evidence it passed checks, and the authority that fix
earned. It never merges; only branch-PR-ready changes become branch-only PRs.
--max-fixes caps how many findings get a fix attempt (highest severity first,
default 10).
Wiring this as a scheduled action that opens receipt-attached fix PRs is covered in AUTOFIX_SETUP.md.
How it is measured¶
Detection is scored on a public, 60-case, 7-language corpus with provenance for every case and SAFE decoys that measure false positives, not just recall — Signetry/eval.