Check that every fact in an AI-assisted script is backed by a verbatim source quote, and that the prose retells rather than copies.
- ✓Open-source license (AGPL-3.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
git clone https://github.com/cite-gate/cite-gateResumen de Tools
# cite-gate
A small checker for scripts written with AI help. It makes every factual item in a script carry
a quote that appears **word for word** in a source file, and it flags prose that copies the
source instead of retelling it.
It doesn't decide whether a claim is true. It decides whether you can point at the sentence
your claim came from, and whether that sentence actually exists.
```
$ python -m cite_gate check examples/gettysburg/claims.json
5 items · 91 words · 2 failures · 1 warnings
FAIL [number-not-in-quote] number(s) ['1776', '87'] not in the quotes
FAIL [quote-not-in-source] quote not found in 'gettysburg': 'this nation shall endure forever and ever'
warn [copied-not-retold] 26 consecutive words shared with the quotes; retell, don't copy
```
The example fails on purpose: its last three items are mistakes that a language model makes
all the time (a number it worked out itself, a quote it half remembered, a paragraph lifted
from the source).
## Why
Language models write fluent prose with confident details. The details that go wrong are
the small ones: a year that's off by one, a name added "for context", a quote paraphrased into
something the source never said. Reading the whole script against the sources by hand doesn't
scale. This tool turns that reading into a gate you can run on every change.
## What it checks
| Check | Result |
|---|---|
| Each quote exists in its source file (curly quotes, dashes and spacing normalised) | failure |
| Each quote is at least 20 characters | failure |
| Every number in the prose appears in that item's quotes (`1,000` = `1000`) | failure |
| Source ids are plain names (no paths) | failure |
| "hundred / thousand / million" in the prose but not in the quotes | warning |
| A capitalised word mid-sentence that isn't in the quotes (possible unsourced name) | warning |
| 11 or more consecutive words shared with the quotes (copying, not retelling) | warning |
| Optional era rule: the prose names an era but the quotes don't tie the item to it; month names or "X era" phrases not in the quotes; special letters in the prose | warning / failure |
Exit code is 1 when there are failures. `--strict` also fails on warnings.
## Input format
A claims file (JSON) and a folder of plain-text sources, one file per source id.
```json
{
"config": {"allow": ["Lincoln"], "copy_run": 11},
"sections": [
{"title": "The occasion",
"items": [
{"id": "opening",
"text": "He began by looking back four score and seven years ...",
"claims": [{"src": "gettysburg",
"quote": "Four score and seven years ago our fathers brought forth on this continent, a new nation"}]}
]}
]
}
```
`sources/gettysburg.txt` holds the source text. Keep your own copy of each source (with its
URL and revision noted at the top), so a later run checks against the same text.
### Config
| Key | Default | Meaning |
|---|---|---|
| `allow` | `[]` | names accepted without a quote (the subject of the script, for example) |
| `copy_run` | `11` | shared-word run that counts as copying |
| `min_quote_chars` | `20` | shortest accepted quote |
| `fold_accents` | `false` | compare `Tokaido` in prose with `Tōkaidō` in the source |
| `era` | `null` | `{"name": "Victorian", "tie": "\\b18[3-9]\\d\\b", "months": true, "letters": ""}` |
## Use
Command line (Python 3.10+, no dependencies):
```
pip install . # from a checkout; adds the `cite-gate` command
cite-gate check path/to/claims.json [--sources DIR] [--json] [--strict]
# or without installing
python -m cite_gate check path/to/claims.json
```
GitHub Actions:
```yaml
- uses: actions/checkout@v4
- uses: cite-gate/cite-gate@v0
with:
claims: script/claims.json
strict: "false"
```
### Use from your agent (MCP)
cite-gate ships a small [Model Context Protocol](https://modelcontextprotocol.io) server, so an
agent can check its own draft before it shows it to you. It runs locally over stdio, has no
dependencies, makes no network calls and collects no telemetry.
```json
{
"mcpServers": {
"cite-gate": { "command": "python", "args": ["-m", "cite_gate.mcp_server"],
"cwd": "/path/to/cite-gate" }
}
}
```
Tools:
| Tool | Input | Output |
|---|---|---|
| `check_citations` | `claims` (the format above) and `sources` (`{id: full text}`) | failures, warnings, `passed` |
| `check_numbers` | `text` and `quotes` | numbers in the text that no quote contains |
There's also a hosted endpoint at `https://mcp.mlpc.co.kr/mcp` (MCP Streamable HTTP, same two
tools, up to 3,000 characters of prose per call). It doesn't store your text; what it does log is
listed in [`worker/README.md`](worker/README.md). For zero logging, use the local server above.
Would a hosted version or a review service be useful to you? Tell us in
[Discussions](https://github.com/cite-gate/cite-gate/discussions).
## Limits
* The heuristics are tuned for English prose.
* A quote that exists is not a claim that is correct. Sources can be wrong, and an item can
cite a real sentence that says something else. The gate makes the review smaller; it
doesn't replace it.
* Proper-noun and quantity checks are warnings because they have false positives. Fix them or
add the name to `allow`; don't learn to ignore them.
## Example text
`examples/gettysburg/sources/gettysburg.txt` is the Gettysburg Address (1863), in the public
domain, transcribed here from the Bliss copy. Small wording differences between Lincoln's
manuscript copies exist; the checker compares against this file only.
## License
AGPL-3.0-or-later. Copyright (C) 2026 MLPC Inc. (see `LICENSE`).
Lo que la gente pregunta sobre cite-gate
¿Qué es cite-gate/cite-gate?
+
cite-gate/cite-gate es tools para el ecosistema de Claude AI. Check that every fact in an AI-assisted script is backed by a verbatim source quote, and that the prose retells rather than copies. Tiene 0 estrellas en GitHub y su última actualización registrada es del 2026-10-09.
¿Cómo se instala cite-gate?
+
Puedes instalar cite-gate clonando el repositorio (https://github.com/cite-gate/cite-gate) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar cite-gate/cite-gate?
+
Nuestro agente de seguridad ha analizado cite-gate/cite-gate y le ha asignado un Trust Score de 87/100 (tier: Trusted). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene cite-gate/cite-gate?
+
cite-gate/cite-gate es mantenido por cite-gate. La última actividad registrada en GitHub es del 2026-10-09, con 0 issues abiertos.
¿Hay alternativas a cite-gate?
+
Sí. En ClaudeWave puedes explorar tools similares en /categories/tools, ordenados por popularidad o actividad reciente.
Despliega cite-gate en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/cite-gate-cite-gate)<a href="https://claudewave.com/repo/cite-gate-cite-gate"><img src="https://claudewave.com/api/badge/cite-gate-cite-gate" alt="Featured on ClaudeWave: cite-gate/cite-gate" width="320" height="64" /></a>Más Tools
A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.
An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.
🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]
Use Claude Code, Codex, VSCode, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)