verify and its flags
paranoid verify [path] is the main command. It runs
every check, scores the result, and prints a report. The content
below is taken from paranoid verify --help on this
branch.
Check order
verify runs these checks on the base-to-head diff, in this order:
- Test integrity. Go via the real Go parser; Python and JS/TS via line heuristics. Flags deleted tests, weakened assertions, new skips, tautologies, renames that hide a test from the runner, new mocking, new retries, new sleeps, and stretched timeouts. Test and CI configuration files get their own check.
- Dependency consistency. New imports cross-checked against manifests (go.mod, package.json, requirements.txt, pyproject.toml, Cargo.toml).
- Dependency registries. New packages looked up in npm, PyPI, crates.io, and the Go module proxy. Skipped with
--offline. - Error handling. Every changed non-test source file (Go, Python, JS/TS), for swallowed or discarded errors.
- Clean-room test run. The suite reruns in a container with no network. See Sandbox & coverage.
- Claims. Only when
--claimsor--sessionis given, or commit messages are used as a fallback. See Sessions & claims. - API surface. Only when claims were given: public symbols removed while the claims say a fix or feature landed.
- Safety controls. Every changed file in the diff, not just source: TLS verification disabled, auth removed, a tracked path hidden by .gitignore, hook config changed, CI permissions widened.
- Baseline suppression. Findings matching an unexpired entry in
.paranoid-baseline.jsonmove to a suppressed section and out of the score. See Baseline & suppressions.
The Proofs block
When the formal-verification check ran (the diff touched a proof,
build, or lock file, or --formal-check was used),
the report gains a Proofs block. When it did not
run, the block is absent and the report is unchanged. It is a
summary only. It does not change the score. It has four lines:
- Proof files changed. The changed
.leanand.vfiles, sorted. - Holes and escapes. Counts at head, in those changed files only.
- Locked specs. Total, ok, drifted, and missing at head, the same logic as
paranoid formal status. - Re-check. "not run" with the reason, or "ran" with whether the build was ok, how many theorems were audited, how many use a disallowed axiom, and how many got no kernel answer. See the clean-room re-check.
proofs:
proof files changed: Demo.lean
holes: 1, axioms or escapes: 1 (at head, in changed proof files)
locked specs: 1 total, 0 ok, 1 drifted, 0 missing
re-check: not run (not requested)
Text, markdown, and JSON show it. In JSON it is the optional
proofs object (schema version 9), and in SARIF it is
in runs[0].properties. See
the report schema.
Unless --no-policy is set, a .paranoid.toml
at the repo root applies to three of the steps above: a
[[disable]] entry suppresses a rule the same way step
9 does, a [sandbox] image pin is used by step 5
unless --sandbox-image is given, and
fail-under/strict act as this repository's
defaults. The matching flag takes precedence. See
Team policy file.
Flags
| Flag | Default | Meaning |
|---|---|---|
| --base string | merge-base with the default branch, else HEAD~1 | State before the agent worked |
| --head string | working tree | State after the agent worked |
| --format string | text | Report format: text, md, json, or sarif |
| --output string | stdout | Write the report to a file instead |
| --fail-under int | 50, or .paranoid.toml's fail-under when set | Exit non-zero if the score is below this |
| --strict | off, or .paranoid.toml's strict when set | Treat a warn verdict as failure |
| --offline | off | Skip all registry lookups (DEP001 to DEP004 reported as skipped) |
| --sandbox string | auto | Container runtime for the clean-room run: auto, docker, podman, or none |
| --sandbox-image string | suite default | Override the container image (must include coverage tooling for SBX005: go, pytest-cov if the project already depends on it, or jest/vitest) |
| --sandbox-timeout duration | 10m | Kill the clean-room run after this long |
| --compare-base | off | Also run the suite at base and compare executed test counts (SBX003) and coverage (SBX005) |
| --formal-check | off | Also rebuild the Lean or Rocq proof project in a container and ask the kernel which axioms each audited theorem uses (FV009 to FV012). Uses the --sandbox runtime. See Formal verification |
| --formal-image string | per project | Override the container image for --formal-check |
| --formal-timeout duration | 30m | Kill the --formal-check run after this long |
| --claims string | none | Free-text file with the agent's summary |
| --session string | none | Agent session file (Claude Code, Codex CLI, Gemini CLI, Aider, or Cursor); format is auto-detected |
| --baseline string | .paranoid-baseline.json at the repo root, when present | Baseline file to load instead of the auto-detected one |
| --no-baseline | off | Ignore any baseline file, including the auto-detected one |
| --no-policy | off | Ignore .paranoid.toml, even when present at the repo root |
| --sign[=local|keyless] | off | Sign the report: bare or =local for the local ed25519 key, =keyless for cosign; requires --format json and --output |
| --trailer | off | Print "Audited-by: paranoid score=NN verdict=V" as the last line on stdout |
| --badge string | none | Write a shields.io endpoint JSON badge to this file |
--claude-session <file> is a hidden alias for
--session.
--base and --head accept anything
git rev-parse resolves: a SHA, a branch, a tag,
HEAD~3, origin/main.
Text output uses color only on a real
terminal and respects NO_COLOR. JSON
output follows a versioned schema and is
byte-identical across reruns of the same input. See
Report & schema.
Related commands
paranoid baseline [path] accepts the same
--base, --head, --offline,
--sandbox, --sandbox-image,
--sandbox-timeout, and --compare-base
flags as verify. It always writes a full snapshot to
.paranoid-baseline.json at the repo root. See
Baseline & suppressions.
paranoid fix-prompt [path] accepts the same
pipeline flags as verify, plus its own
--report, --format, and
--output. See
fix-prompt.
paranoid attest keygen and paranoid attest
verify generate a signing key and check a signature made
by --sign. See Signing &
attest.
paranoid rules and paranoid version
take no flags beyond --help. paranoid
completion prints a shell autocompletion script (bash,
zsh, fish, or PowerShell); see its own --help for
the shell-specific usage, generated by Cobra.