Skip to main content

Pre-submission manuscript checker powered by Claude agents

Project description

sub-checker

PyPI version Python versions CI License: MIT

繁體中文 | English

Pre-submission manuscript checker powered by Claude agents with a Plan-Execute-Verify harness. Each check is performed by a specialized AI agent, then validated by deterministic checks and a reviewer agent to eliminate false positives.

What it checks

Agent What it does
typo_grammar Spelling, grammar, awkward phrasing (skips reference list)
figure_table Figure/table references exist, numbering is sequential, files present
citation_exist In-text citations match the reference list (deterministic pre-scan + agent)
citation_format Reference list follows target journal's citation style (APA, Vancouver, AMA, etc.)
journal_guidelines Word count, required sections, abstract format, required statements (COI, ethics, data availability)
logic Contradictions, unsupported claims, methods-results mismatches
citation_claim Multi-source verification (PubMed + Semantic Scholar + Crossref), then verifies claims against abstracts

Install

pip install sub-checker

Setup

You need an Anthropic API key:

export ANTHROPIC_API_KEY=sk-ant-...

Or create a .env file in your working directory:

ANTHROPIC_API_KEY=sk-ant-...

Usage

CLI

# Full check with target journal
sub-check paper.docx -j "The Lancet"

# Chinese report output
sub-check paper.docx -j "Nature Medicine" --lang zh-TW

# Only run specific checkers (cheaper & faster)
sub-check paper.docx --only figure,citation

# Skip expensive checkers
sub-check paper.docx --skip claim,logic

# Output as styled HTML report (includes COT viewer + confidence scores)
sub-check paper.docx -o html --output-file report.html

# Output as JSON (for programmatic use)
sub-check paper.docx -o json --output-file report.json

# Dry run (just parse, no agents)
sub-check paper.docx --dry-run

Web GUI

The GUI needs the source repo (the React frontend is not shipped on PyPI), plus the optional web backend dependencies:

git clone https://github.com/odafeng/sub-checker.git
cd sub-checker
pip install -e ".[web]"          # backend: FastAPI + uvicorn

# Start backend
uvicorn sub_checker.api:app --reload

# Start frontend (in another terminal)
cd frontend && npm install && npm run dev

Open http://localhost:5173 — upload a .docx, pick a journal, run, and view the report with confidence badges and filtered false positives.

CLI options

sub-check [OPTIONS] MANUSCRIPT_PATH

Arguments:
  MANUSCRIPT_PATH    Path to .docx file or directory containing one (optional with --init)

Options:
  -j, --journal      Target journal name (e.g. "The Lancet")
  -c, --config       Path to a config file (default: ./.sub-checker.yaml if present)
  -o, --output       terminal | json | markdown | html (default: terminal)
  --output-file      Write report to file
  --lang             Report language: en (default) or zh-TW
  --only             Comma-separated: typo,logic,figure,citation,format,guidelines,claim
  --skip             Comma-separated checkers to skip
  -v, --verbose      Show agent tool calls in real-time
  --dry-run          Only parse .docx, don't run agents
  --init             Generate default .sub-checker.yaml

Pipeline (Plan-Execute-Verify)

Checkers   │  7 agents run concurrently (global concurrency cap, default 3 at a time)
Validate   │  Deterministic post-validation (date math, citation cross-check)
Review     │  Reviewer agent scores every surviving finding → confidence
Dedup      │  Same issue from multiple checkers collapsed to the highest-confidence one
  • Pre-execution: deterministic citation pre-scan + multi-source reference verification
  • Post-validation: false positives filtered, remaining findings get confidence scores (0-100%), cross-checker duplicates merged
  • See harness-architecture.md for full technical details

HTML report features

  • Dark-themed styled report with severity badges
  • Confidence scores — each finding shows reviewer-assigned confidence (%)
  • False positive filtering — deterministic + reviewer agent removes incorrect findings
  • Chain of Thought viewer — expand to see every API call, tool use, and reasoning step
  • Model display — shows which Claude model generated the report
  • i18n support (English / Traditional Chinese)

Cost estimate

By default judgment-heavy checkers (logic, citation_claim, journal_guidelines) and the reviewer run on Claude Opus 4.8, while mechanical checkers (typo, figure, citation_exist, citation_format) run on the cheaper Claude Sonnet 4.6. Per-checker effort is tuned to keep token use low. Measured on a real ~5,000-word, 25-reference manuscript:

Scope Agents Time Cost
Quick check --only figure,citation ~3 min ~$1
Standard --skip claim ~6 min ~$2–3
Full check all 7 agents + harness ~10–12 min ~$3–5

Cost scales with manuscript length and reference count (citation_claim verifies each reference against PubMed/Semantic Scholar/Crossref). Override any model in .sub-checker.yaml (e.g. set everything to claude-sonnet-4-6 for cheaper runs).

Logging

All logs are stored in ~/.sub-checker/:

  • logs/sub-checker.log — application log (auto-rotated, 10MB x 5)
  • logs/sub-checker.error.log — errors only
  • cot/ — agent chain-of-thought JSON logs (every tool call, every response)

Set cot_dir: "disabled" in .sub-checker.yaml to turn off COT file logging (entries still appear in HTML reports).

Architecture

  • Plan-Execute-Verify harness: concurrent checkers → deterministic validation → reviewer → dedup (ADR-0010)
  • 7 agents + reviewer agent, each with system prompt + curated tools + agentic loop (ADR-0002)
  • Parser provides raw data; agents judge document structure (ADR-0009)
  • Multi-source citation verification: PubMed + Semantic Scholar + Crossref (ADR-0005)
  • FastAPI + React + TypeScript GUI (ADR-0006)
  • Benchmark comparison | Harness architecture

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sub_checker-0.1.1.tar.gz (78.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sub_checker-0.1.1-py3-none-any.whl (86.4 kB view details)

Uploaded Python 3

File details

Details for the file sub_checker-0.1.1.tar.gz.

File metadata

  • Download URL: sub_checker-0.1.1.tar.gz
  • Upload date:
  • Size: 78.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sub_checker-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b40d6e559a4251dc0186444787a5b2f5add1c74f6e864def6ff5b23c03b0d236
MD5 b329d6017c977b6c1310f3de6ec9084d
BLAKE2b-256 50eb89fb028a318f1cc0c225d155a9443fdf262a1f0a6c576b82a9b42238a9c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sub_checker-0.1.1.tar.gz:

Publisher: publish.yml on odafeng/sub-checker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sub_checker-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: sub_checker-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 86.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sub_checker-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9a5be2b043024cee6c4c523bc95edf45c1a39740d8fa3dd567c93e818803bf33
MD5 a963200cbd54210e0af88d3271eb9bdc
BLAKE2b-256 1a0642e1f955f9cc240c091f648a375de4eed508df253ad30ae87c69747b946c

See more details on using hashes here.

Provenance

The following attestation bundles were made for sub_checker-0.1.1-py3-none-any.whl:

Publisher: publish.yml on odafeng/sub-checker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page