intent-verify is a deterministic, zero-LLM command-line tool that checks whether a repo's source still lexically covers the acceptance items written in a markdown spec, INTENT.md, or handoff doc — and returns verified, partial, or missing.
Use it when your repo has an INTENT.md, SPEC.md, or handoff doc but nobody knows whether the code still matches it. It is a fast guardrail for catching spec drift before review, release, or handoff.
intent-verify is intentionally simple and fully deterministic — no model, no network:
- Parse acceptance items from the spec (inline
Accepts:/Requirements:/Scope:lines and bullet/numbered lists under matching headings). - Tokenize each item, dropping common stop words.
- For each item, compute the fraction of its tokens that appear as substrings somewhere in the repo's source files (the spec file itself is excluded from the evidence).
- Score each item against two thresholds and roll up to a single verdict.
Coverage is a lexical token-overlap signal, not a semantic judgment.
pip install intent-verifyFor local development:
pip install -e ".[dev]"Given a spec like:
# Intent
## Accepts
- uploads PDF invoices
- retries provider timeoutrun:
intent-verify check --spec INTENT.md --repo .You get a per-item breakdown and a single verdict:
intent-verify: INTENT.md vs . (12 files)
[OK 100%] uploads PDF invoices
[PART 50%] retries provider timeout
[LOW 20%] writes audit log for rejected invoices
intent-verify: MISSING — 1/3 items below 30% (avg 57%)
(The file count, percentages, and items above are illustrative — your numbers depend on your spec and repo.)
The exit code mirrors the verdict, so it drops straight into CI or a pre-commit hook:
| Verdict | Meaning | Exit code |
|---|---|---|
verified |
every parsed item cleared the verified threshold | 0 |
partial |
at least one item is only partly covered | 1 |
missing |
at least one item fell below the per-item minimum | 2 |
intent-verify check --spec INTENT.md --repo .
intent-verify check --spec SPEC.md --repo . --json
intent-verify check --spec docs/handoff.md --repo src --min-verified 0.75 --min-item 0.35Flags:
--spec— path to the markdown spec, intent, or handoff file (required).--repo— path to the repo or source tree to scan (required).--section— target a specific markdown heading, for exampleRequirements.--json— emit machine-readable JSON instead of text.--min-verified— coverage an item must clear to count as verified (default0.7).--min-item— minimum per-item coverage before an item is treated as missing (default0.3).
By default it extracts items from:
- inline lines such as
Accepts: upload PDF invoices, retry on timeout - markdown sections such as
## Acceptswith bullet or numbered items (Accepts,Requirements,Scopeheadings, or a custom one via--section)
intent-verify check --spec INTENT.md --repo . --jsonThe JSON object includes spec_path, repo_path, files_scanned, average_coverage, verdict, the thresholds used, and an items[] array with each item's parsed text, tokens, coverage, and verdict.
- Lexical, not semantic. It matches tokens as substrings; it does not understand meaning, control flow, or behavior.
- It can over-credit. A token appearing anywhere in any scanned file counts, even if it is in a comment, a string, or an unrelated context.
- It can under-credit. A correct implementation written with different vocabulary than the spec will score low.
- It is not proof of correctness and does not replace tests or code review. It answers "does the implementation visibly cover the stated scope?" — not "is the software correct?"
- It needs a human-readable spec. With no
INTENT.md/SPEC.md/requirements/handoff file there is nothing to check against. - Source-file scope only. It scans a fixed set of source extensions (Python, JS/TS, Go, Rust, shell, config, markdown, etc.) and skips common build/vendor directories.
ruff check .
python3 -m pytest -q
python3 -m py_compile src/intent_verify/*.pysrc/intent_verify/
tests/
examples/
Part of the Hermes Labs reliability stack. Complementary siblings, not duplicates: rule-audit analyzes logical contradictions in system prompts, and lintlang lints agent-config structure — intent-verify instead checks spec-vs-code drift.
Hermes Labs is an independent AI-reliability lab building open-source tools that catch silent failure modes in production AI. More at hermes-labs.ai.
