papercheck
Arnés de auditoría para artículos matemáticos en LaTeX: escáner determinista, hallazgos validados por esquema con verificación de citas, y una puerta por etapas que los agentes no pueden saltar. CLI + servidor MCP.
Documentación
papercheck extrae la estructura de un artículo, registra hallazgos en libros de contabilidad validados por esquema que se verifican contra el texto fuente exacto, y ejecuta una compuerta final que informa si el artículo está listo. Funciona como herramienta de línea de comandos o como servidor MCP que un agente (Claude Code, Codex, Cursor o similar) maneja mientras tú aportas el juicio matemático.
El punto es la disciplina. En lugar de pedirle a un modelo que "revise el artículo", papercheck segmenta el manuscrito, inventaría las afirmaciones, ejecuta auditorías hostiles específicas, verifica cada hallazgo contra la fuente, adjudica, corrige solo lo aceptado y aplica compuertas. Las compuertas se aplican en el código: un agente no puede corregir antes de la adjudicación, y un hallazgo cuya cita no aparece en la fuente nunca entra en el libro de contabilidad.
El pipeline por etapas — segmentar, presupuestar, revisión especializada, sintetizar, adjudicar — sigue el enfoque descrito en la Herramienta de Asistente de Artículos (PAT) de Google Research [1], adaptado a un arnés pequeño, abierto y agnóstico al modelo que no ejecuta modelos propios.
Qué es
Un núcleo Python determinista con dos interfaces — una CLI y un servidor MCP. papercheck nunca llama a un modelo; el razonamiento vive en el agente o en tus manos en la CLI. Lo que proporciona el núcleo:
- Extracción de estructura LaTeX-AST (teoremas, etiquetas, referencias, citas, ecuaciones, marcadores de borrador) en
structure.json. - Libros de contabilidad de problemas validados por esquema, cada hallazgo vinculado a un archivo y una línea.
- Verificación de citas al ingreso: si el texto citado de un hallazgo no está en la fuente, se rechaza como
REJECTED_SOURCE_TARGET_INVALIDantes de llegar al libro de contabilidad propuesto. - Una máquina de estados con compuertas por etapa (
INIT → SCANNED → … → ADJUDICATED → … → GATED) que rechaza operaciones fuera de orden. - Una CLI, un servidor MCP (29 herramientas) y una interfaz web local.
Por qué
Un único mensaje de "revisa mi artículo" tiende a fallar de tres maneras. papercheck maneja cada una en código, no en indicaciones:
| Modo de fallo | Lo que suele pasar | Cómo lo maneja papercheck |
|---|---|---|
| Hallazgos alucinados | el modelo inventa un problema que no está en el texto | submit_issue compara el texto citado con la fuente; sin coincidencia, el hallazgo se rechaza antes de entrar en el libro de contabilidad |
| Corrección antes de la prueba | el modelo reescribe antes de que nadie sepa qué es real | las correcciones se rechazan a menos que el estado esté en ADJUDICATED y el problema esté en ACCEPTED |
| Compuerta omitida | "me parece bien" sin rastro de auditoría | la compuerta final se calcula a partir de señales mecánicas y bloqueadores aceptados, y devuelve uno de un conjunto fijo de veredictos |
Inicio rápido
pipx install papercheck # or: pip install papercheck
papercheck scan path/to/paper # extract structure.json
papercheck segments path/to/paper # propose audit segments and budgets
papercheck gate path/to/paper --mechanical-only
papercheck report path/to/paper # self-contained HTML report
papercheck serve path/to/paper # local web UI
Ejecútalo en el ejemplo incluido (imprime ==== READY ====):
papercheck gate examples/toy_clean_paper --mechanical-only
Manejarlo desde un agente (MCP)
papercheck incluye un servidor FastMCP que expone 29 herramientas más el paquete de indicaciones de auditoría. Regístralo una vez:
claude mcp add papercheck -- papercheck-mcp
Luego pide al agente que audite un artículo. Recorre el flujo de trabajo a través de las herramientas MCP — init_audit, run_scan, propose_segments, submit_issue, adjudicate_issue, run_gate — bajo las mismas compuertas aplicadas en código que la CLI.
Generación de un paquete de dominio específico del artículo
papercheck no llama a un modelo, por lo que adaptar la auditoría al campo de un artículo es una división en dos pasos: el agente lee el artículo y redacta el paquete, papercheck lo valida y lo almacena.
papercheck packs scaffold --paper-root ./paper # deterministic draft from the scan
papercheck packs create draft.json --paper-root ./paper # validated -> Paper_Audit/domain_pack.json
Lo mismo está disponible a través de las herramientas MCP scaffold_domain_pack y create_domain_pack. Se incluyen paquetes genéricos para análisis estocástico, EDP, análisis numérico, optimización, teoría de aprendizaje automático y un respaldo general.
Cómo funciona
flowchart LR
A[INIT] --> B[SCANNED] --> C[SEGMENTED] --> D[INVENTORIED] --> E[AUDITING]
E --> F[SYNTHESIZED] --> G[ADJUDICATED] --> H[PATCH_PLANNED]
H --> I[PATCHING] --> J[REGRESSED] --> K[GATED]
E -. submit_issue .-> V{quote and label verified?}
V -- no --> X[REJECTED_SOURCE_TARGET_INVALID]
V -- yes --> L[PROPOSED ledger]
style X fill:#7f1d1d,stroke:#ef4444,color:#fff
style K fill:#14532d,stroke:#22c55e,color:#fff
Un núcleo determinista, dos interfaces, sin llamadas a LLM dentro del arnés. papercheck se mantiene estrictamente como servidor MCP y CLI — sin adaptadores de proveedores, sin auto-orquestación — por lo que funciona con cualquier modelo y no hace llamadas de red propias.
Comandos
| Comando | Qué hace |
|---|---|
papercheck init | crea el espacio de trabajo Paper_Audit/ y el archivo de estado |
papercheck scan | extracción de estructura LaTeX-AST en structure.json |
papercheck segments | propuesta heurística de segmentación y presupuesto |
papercheck gate [--mechanical-only] | calcula el veredicto final (salida 0 = LISTO) |
papercheck verify-quote | verifica una cita contra un archivo fuente |
papercheck report | informe de auditoría HTML autocontenido |
papercheck serve | interfaz web local (filtra problemas, haz clic para ir a la fuente) |
papercheck compare old/ new/ | diff estructural de dos versiones del artículo |
papercheck profile list|show | pipelines de auditoría de asesoría (quick, arxiv, full, …) |
papercheck packs … | lista, crea plantillas o crea paquetes de dominio |
papercheck prompts list|show | el paquete de indicaciones de auditoría incluido |
papercheck mcp | ejecuta el servidor MCP (stdio) |
Para un repositorio de artículos, docs/ci.md describe una acción de GitHub mecánica y sin LLM que ejecuta scan y gate --mechanical-only en cada solicitud de extracción y no envía nada a ningún proveedor de modelos.
Limitaciones
Consulta docs/limitations.md para la versión completa.
- papercheck no es un demostrador de teoremas ni un reemplazo de la revisión por pares.
- Detectar un error semántico depende completamente del modelo que lo maneja. papercheck mantiene el proceso disciplinado y trazable, pero los hallazgos de IA deben verificarse de forma independiente.
- papercheck no hace llamadas de red. El agente con el que lo manejas puede transmitir tu manuscrito a su proveedor de modelos, así que revisa los términos de datos relevantes antes de auditar trabajo no publicado (
docs/privacy.md).
Acerca de
Creado por Christian Garry.
Contribuciones
Las contribuciones son bienvenidas — consulta CONTRIBUTING.md. La arquitectura está fija para la línea 0.x: estrictamente MCP y CLI, JSON como fuente de verdad, compuertas aplicadas en código. Los cambios en las indicaciones están protegidos por los fixtures de evaluación descritos en docs/agent_eval.md.
Referencias
- Rajesh Jayaram, Drew Tyler, David Woodruff, Corinna Cortes, Yossi Matias, Vahab Mirrokni y Vincent Cohen-Addad. Towards Automating Scientific Review with Google's Paper Assistant Tool. arXiv:2606.28277, 2026. https://arxiv.org/abs/2606.28277
El BibTeX de lo anterior está en docs/references.bib.
Licencia
MIT — consulta LICENSE. Si papercheck es útil en tu trabajo, cítalo mediante CITATION.cff.