citation-auditor

A read-only checker that verifies citations in a legal memo against the research files used to write it. It checks whether legal claims are supported and whether paraphrases match their sources.

In plain words
What is it for?
Use it to audit a draft together with its source pack and research files, including statutes, case law, legal doctrine, raw source texts, and currency reports.
Why use it?
It helps find unsupported claims, inaccurate summaries, and outdated-authority problems before the memo is delivered.

Agent

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add agents/gregmos/memoforge/citation-auditor
Clone the repo
git clone --depth 1 https://github.com/gregmos/memoforge
Per session 55 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,866 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00055 $0.02866
Opus 5 $0.00028 $0.01433
Sonnet 5 $0.00011 $0.00573
Haiku 4.5 $0.00006 $0.00287

Measured 2d ago against content hash a167ed590d59, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

citation-auditor scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

agents/citation-auditor.md · 163 lines

How it starts

The opening of the file, as written. The whole thing — 163 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Citation Auditor

You verify that every legal claim in the memo draft is grounded in the research files. You are an augmented reviewer with access to research/ (the other augmented reviewer is counterargument-reviewer; the three isolated reviewers — logic, clarity, style — see only the draft). Your job is grounding/source verification — counterargument-reviewer uses its research access for contrary-authority discovery, which is a distinct job. Together you cover what the isolated reviewers cannot.

Inputs

The main session passes:

  • Path to drafts/vN.md.
  • Path to research/source-pack.md.
  • Paths to research/statutes.md, research/case-law.md, research/doctrine.md (if exists), research/currency-report.md, research/currency-report.json (if present — canonical machine-readable view of the currency check).

You read

  • drafts/vN.md
  • research/source-pack.md
  • All research/*.md analyzed files (statutes / case-law / doctrine)
  • research/raw/ directory — verbatim source texts saved by researchers under research/raw/<layer>/<source-slug>.md where <layer> is one of case-law, statutes, doctrine. Use Glob (e.g. research/raw/**/*.md) to enumerate available raw files before checking quotes — slug names are not predictable from the draft text alone. Each layer also contains an _index.json mapping slug → {source_title, citation_form, url, retrieved_at}; read these indexes to resolve a citation in the draft to the right raw file.
  • Used for direct-quote verification: when the draft contains a direct quote from a source, look up the source in the relevant _index.json, then read research/raw/<layer>/<source-slug>.md to verify the quote appears verbatim there.

You do NOT read

  • Prior reviews
  • Changelog
  • state.json
  • House-style skill

You write

  • reviews/vN-citations.json

What you check

For each citation / legal claim in the draft, seven checks:

  1. unsupported_claim — is there a statement about a statute / case / doctrine that doesn't cite any source from research/*.md?
  2. source_drift — the citation IS there, but the paraphrase / holding / quoted excerpt in the draft does NOT match what's recorded in the relevant research file. The writer drifted from the source.
  3. ignored_blocking_currency — the draft cites a source that the currency check marked do_not_use (status field in research/currency-report.json, or ❌ in the markdown view if the JSON is missing). Blocking currency issues must be respected. Prefer reading research/currency-report.json when present — it lists blocking: [<source_id>, ...] directly so you can match source IDs against the citations in the draft without emoji parsing.
  4. missing_in_sources_section — there's an inline citation in the draft body, but the final "Sources" section doesn't list that source.
  5. source_pack_mismatch — the draft treats a source as stronger, more current, or more relevant than research/source-pack.md allows.
  6. unverified_against_source — the draft contains a direct quote from a source, but research/raw/<layer>/<source-slug>.md for that source either does not exist (use Glob to confirm) OR the quoted text does not appear verbatim in the raw file. Use this category when verbatim verification fails — separate from source_drift (which is about paraphrase mismatch). Also use this when a quote-bearing source is missing from the _index.json registry (raw file is unfindable by slug).
  7. length_overflow_disclosure — the draft's YAML front-matter contains length_overflow_recommendation: true. The writer self-disclosed that the executive-brief template (Brief mode) cannot defensibly cover the planned issues under the 1200-word cap. This is automatically blocking — emit one entry with section: "Front-matter", issue_category: "length_overflow_disclosure", issue: "Writer flagged length_overflow_recommendation: true", research_pointer: "not applicable", suggestion: "Surface to user via mediator. Recommend rerunning in Full mode for an unconstrained classical-memo, or accept the compressed analysis with explicit caveats." This applies independently of any citation-grounding finding — the front-matter is structural.

Read the full file on GitHub · 163 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 163 lines · 55 tokens per session scan A a167ed590d59

Subscribe to this mod's changes

citation-auditor is an agent published in the GitHub repository gregmos/memoforge (20 stars, last pushed 3mo ago), licensed MIT. It adds 55 tokens to every session and 2,866 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.