Cite it or it's opinion. Evidence enforcement for AI agent workflows — every claim, every source, zero uncited inference.
AI agents hallucinate. They state facts that don't exist, cite numbers they invented, and claim "not found" without actually searching. The output looks confident. The citations look real. But when you check — the file doesn't exist, the number has no source, and the "unfound" thing is sitting right there.
You can't distinguish a real claim from a hallucinated one unless every claim cites its source.
Agent-Cite enforces that standard. Not as a suggestion — as a requirement.
| Behavior | Result |
|---|---|
| "I'll try to cite sources" | Best effort — cites some, silently skips others |
| No systematic scan | Misses violations without knowing it missed them |
| Can't verify its own citations | Citations may point to files that don't exist |
| No structured report | Just prose with maybe some references |
| No pass/fail verdict | No gate — just a suggestion |
| Next session, forgets the standard | Back to zero |
| Behavior | Result |
|---|---|
| Systematic scan of every statement | Categorized as factual claim, number, or absence claim |
| Named violations for every miss | UNCITED_INFERENCE, UNVERIFIED_NUMBER, UNSUPPORTED_ABSENCE |
| Source verification | Checks cited file paths actually exist on disk |
| Structured report | Summary table, violation list, line numbers, suggested fixes |
| COMPLIANT / NON_COMPLIANT | Binary verdict — not a suggestion |
/cite-fix reads the actual codebase |
Proposes real file:line citations, not guesses |
| Configurable protocol | evidence-protocol.yaml persists rules across sessions |
| Project-wide scoring | /cite-report gives evidence coverage like test coverage |
| Domain | Without Tool | With Tool |
|---|---|---|
| Testing | "Please write tests" | Jest/Pytest — runs them, reports coverage, blocks on failure |
| Linting | "Please format nicely" | ESLint/Prettier — enforces rules, auto-fixes, CI gate |
| Security | "Please write secure code" | Snyk/Semgrep — scans, names vulnerabilities, blocks merge |
| Evidence | "Please cite sources" | Agent-Cite — scans, names violations, blocks on uncited inference |
Without Agent-Cite, citation is a request. With it, citation is a requirement.
| Command | When | What It Does |
|---|---|---|
/cite-audit |
After AI generates output | Scan for uncited claims, return COMPLIANT or NON_COMPLIANT |
/cite-fix |
After violations found | Search codebase for real sources, propose accurate citations |
/cite-report |
Periodic health check | Project-wide evidence coverage score and worst offenders |
/cite-audit @docs/report.md --strictOutput:
## Evidence Audit Report
### Verdict: NON_COMPLIANT
| Category | Total | Cited | Violations |
|----------|-------|-------|------------|
| Factual claims | 23 | 15 | 8 |
| Numbers/stats | 7 | 2 | 5 |
| Absence claims | 3 | 0 | 3 |
Fix with: /cite-fix @docs/report.md
/cite-fix @docs/report.mdOutput:
| # | Line | Violation | Proposed Fix | Confidence |
|---|------|-----------|-------------|------------|
| 1 | L42 | UNCITED_INFERENCE | [source: src/config.py:15] | HIGH |
| 2 | L67 | UNVERIFIED_NUMBER | [derived: tests/bench.py:23] | MEDIUM |
| 3 | L89 | FALSE_ABSENCE | tests/test_module.py EXISTS (12 tests) | CRITICAL |
| Type | Severity | What It Catches |
|---|---|---|
UNCITED_INFERENCE |
error | "The system uses Redis" — WHERE does it say that? |
UNVERIFIED_NUMBER |
warning | "500 req/sec" — WHERE is that number from? |
UNSUPPORTED_ABSENCE |
warning | "No tests exist" — DID you actually look? |
BROKEN_CITATION |
error | [source: data/old.json] — that file doesn't exist |
FALSE_ABSENCE |
critical | "No tests exist" — but tests/test_module.py has 12 tests |
UNVERIFIABLE |
human decision | No source found anywhere — the claim may be fabricated |
- AI-generated reports and analyses
- AI-generated documentation and READMEs
- AI-generated recommendations and summaries
- Data classification outputs
- PR descriptions with factual claims
- Any AI output that says "X is true"
- Pure code (functions, classes, modules)
- Formatting or refactoring changes
- Boilerplate and scaffolding
- Creative writing
The rule: If the output asserts facts, cite it. If it just does something, don't.
# Clone
git clone https://github.com/saisumantatgit/Agent-Cite.git
# Install into your project (auto-detects your CLI)
cd your-project/
bash /path/to/Agent-Cite/install.shOr for Claude Code, install as a plugin:
cp -r Agent-Cite/ ~/.claude/plugins/agent-cite/| CLI Tool | What Gets Installed |
|---|---|
| Claude Code | .claude/commands/*.md + agents + skills + hook |
| Codex | Appends to AGENTS.md |
| Cursor | .cursor/rules/cite.md |
| Aider | Appends to .aider.conf.yml |
| Generic | Raw prompt files |
Plus: evidence-protocol.yaml (configurable rules) and reference docs.
Create evidence-protocol.yaml in your project root (a template is installed automatically):
severities:
UNCITED_INFERENCE: error # Always fails
UNVERIFIED_NUMBER: warning # Fails only with --strict
UNSUPPORTED_ABSENCE: warning
BROKEN_CITATION: error
include:
- "docs/**/*.md"
- "data/**/*.json"
exclude:
- "CHANGELOG.md"
- "node_modules/**"
thresholds:
healthy: 90 # ≥90% = HEALTHY
needs_work: 60 # 60-89% = NEEDS_WORK
critical: 0 # <60% = CRITICAL| Platform | Config | Notes |
|---|---|---|
| Claude Code | .claude-plugin/plugin.json |
Full support (agents + commands + skills) |
| Codex | AGENTS.md |
Prompt-based |
| Cursor | .cursor/rules/cite.md |
Rules-based |
| Aider | .aider.conf.yml |
Config-based |
| Generic | prompts/*.md |
Paste into any LLM |
| Tool | What It Does | Tagline |
|---|---|---|
| Agent-PROVE | Makes agents think before they act | "Prove it or it fails." |
| Agent-Trace | Makes agents see before they edit | "See the ripple effect before it happens." |
| Agent-Scribe | Makes agents remember what they learned | "Nothing is lost." |
| Agent-Cite | Makes agents prove what they claim | "Cite it or it's opinion." |
| Agent-Drift | Intent drift detection and prevention | "Stay on target." |
| Agent-Litmus | Test quality validation | "Tests that actually test." |
PROVE validates your thinking. Trace maps your blast radius. Scribe records your decisions. Cite enforces your evidence. Together: think rigorously, edit safely, remember everything, prove every claim.
Note: Agent-PROVE includes basic evidence auditing (/audit command). Agent-Cite is the standalone deep dive — citation fix, project-wide reporting, configurable protocol. If you already use PROVE, Agent-Cite adds the remediation and reporting PROVE doesn't have.
Built from the evidence protocol methodology that powered the Agent-PROVE project — where zero uncited inference was enforced across 1,086 regulatory data points. The protocol caught fabricated numbers, false absence claims, and citations to files that no longer existed. Agent-Cite generalizes that discipline for any codebase.
The standard is simple: if an AI says it, the AI must show where it learned it.
See CONTRIBUTING.md for:
- Adding citation patterns
- Adding CLI adapters
- Extending violation types
- Modifying the report