paper-write
Skill16 starsChanged 6 months agoMITView on GitHub
Draft LaTeX paper section by section from an outline. Use when user says \"写论文\", \"write paper\", \"draft LaTeX\", \"开始写\", or wants to generate LaTeX content from a paper plan.
- Installs packages
12 other projects use a version of this, 6 of them edited.
Adopted by
Most recently taken up by
- cabbage2000-lab/paper-tutor-skillstheir own version, first seen Nov 8, 2026
- Yulivu/debuffer-skillsedited, first seen Oct 13, 2026
- wangyi0403/dl-research-workflowtheir own version, first seen Oct 13, 2026
- PUNCKe/manuscript-context-integritytheir own version, first seen Sep 19, 2026
- talhaMah56/claude_skillsedited, first seen Sep 12, 2026
- wanshuiyin/Auto-claude-code-research-in-sleepedited, first seen Jul 15, 2026
Used with
Projects with it also use auto-paper-improvement-loop, deepxiv and 5 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Yusong-EnceladusSkillauto-paper-improvement-loop
Autonomously improve a generated paper via GPT-5.4 xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
Also in 5 projects that use this
raja21068Skilldeepxiv
Search and progressively read open-access academic papers through DeepXiv. Use when the user wants layered paper access, section-level reading, trending papers, or DeepXiv-backed literature retrieval.
Also in 4 projects that use this
Yusong-EnceladusSkilldse-loop
Autonomous design space exploration loop for computer architecture and EDA. Runs a program, analyzes results, tunes parameters, and iterates until objective is met or timeout. Use when user says \"DSE\", \"design space exploration\", \"sweep parameters\", \"optimize\", \"find best config\", or wants iterative parameter tuning.
Also in 4 projects that use this
raja21068Skillexperiment-bridge
Workflow 1.5: Bridge between idea discovery and auto review. Reads EXPERIMENT_PLAN.md, implements experiment code, deploys to GPU, collects initial results. Use when user says \"实现实验\", \"implement experiments\", \"bridge\", \"从计划到跑实验\", \"deploy the plan\", or has an experiment plan ready to execute.
Also in 4 projects that use this
- +3 more from raja21068
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 6
- wanshuiyin/Auto-claude-code-research-in-sleep★ 19k62% same
- Chanw-research/claude-code-paper-writing★ 4288% same
- Yulivu/debuffer-skills★ 947% same
- Yusong-Enceladus/claude-skills★ 858% same
- raja21068/AutoResearch★ 288% same
- talhaMah56/claude_skills★ 071% same
Wrote their own version · 6
- xstongxue/best-skills★ 2.9ksame name
- cabbage2000-lab/paper-tutor-skills★ 48same name
- b1mango/Agent-Skills★ 4same name
- wangyi0403/dl-research-workflow★ 4same name
- PUNCKe/manuscript-context-integrity★ 2same name
- LaoK2017/Agent-Skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository56 other files it gives its agents.
- argument-stress-testSkill
- citation-auditSkill
- comm-lit-review-claude-singleSkill
- comparative-lawSkill
- exa-searchSkill
- feishu-notifySkill
- figure-descriptionSkill
- figure-specSkill
- formula-derivationSkill
- grant-proposalSkill
- legal-writingSkill
- llm-wikiSkill
- mermaid-diagramSkill
- novelty-checkSkill
- overleaf-syncSkill
- paper-claim-auditSkill
- paper-compileSkill
- paper-figureSkill
- paper-illustrationSkill
- paper-planSkill
- paper-posterSkill
- paper-slidesSkill
- paper-writingSkill
- prism-pipelineSkill
- proof-checkerSkill
- proof-writerSkill
- rebuttalSkill
- research-litSkill
- research-pipelineSkill
- research-refine-pipelineSkill
- research-refineSkill
- research-reviewSkill
- research-wikiSkill
- semantic-scholarSkill
- comm-lit-reviewSkill
- feishu-notifySkill
- formula-derivationSkill
- grant-proposalSkill
- mermaid-diagramSkill
- novelty-checkSkill
- paper-compileSkill
- paper-figureSkill
- paper-illustrationSkill
- paper-planSkill
- paper-posterSkill
- paper-slidesSkill
- paper-writeSkill
- paper-writingSkill
- proof-writerSkill
- rebuttalSkill
- research-litSkill
- research-pipelineSkill
- research-refine-pipelineSkill
- research-refineSkill
- research-reviewSkill
- statute-case-mapperSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
65 rules. 7 are common, 28 are distinctive, and 30 are very specific to this project.
7
Common
Most of the 9 edited versions we read keep these.
28
Distinctive
This author's own choices. Worth a look.
30
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 28
If no PAPER_PLAN.md exists, ask the user to run /paper-plan first or provide a brief outline.
- Very specific: line 32
Keep the existing insleep workflow, file layout, and defaults.
- Very specific: line 34
Read ../shared-references/writing-principles.md before drafting the Abstract, Introduction, Related Work, or when prose feels generic.
- Very specific: line 35
Read ../shared-references/venue-checklists.md during the final write-up and submission-readiness pass.
- Very specific: line 36
Read ../shared-references/citation-discipline.md only when the built-in DBLP/CrossRef workflow is insufficient.
- Very specific: line 55
Section templates: Use discipline-appropriate section names from PAPER_PLAN.md (which was already discipline-adapted by /paper-plan)
- Very specific: line 61
Venue template: When TARGET_VENUE matches a discipline-specific venue, use the appropriate LaTeX class and formatting.
- Very specific: line 63
If PRISM_PROFILE.md does not exist, fall back to the default ML-oriented behavior (fully backward compatible).
- Very specific: line 126
Section files are FLEXIBLE: If the paper plan has 6-8 sections, create corresponding files (e.g., 4_theory.tex, 5_experiments.tex, …
- Very specific: line 132
If paper/ already exists, back up to paper-backup-{timestamp}/ before overwriting.
- Very specific: line 134
CRITICAL: Clean stale files: When changing section structure (e.g., 5 sections → 7 sections), delete section files that are no longer …
- Common: line 140
All standard packages (amsmath, hyperref, cleveref, booktabs, etc.)
- Very specific: line 144
Create section files matching PAPER_PLAN structure
- Common: line 153
Create shared math macros based on the paper's notation:
- Very specific: line 174
Before drafting the front matter, re-read the one-sentence contribution from PAPER_PLAN.md.
- Very specific: line 179
Use the 5-part flow from ../shared-references/writing-principles.md: what, why hard, how, evidence, strongest result
- Common: line 180
Must be self-contained (understandable without reading the paper)
- Distinctive: line 181
Start with the paper's specific contribution, not generic field-level background
- Common: line 184
No citations, no undefined acronyms
- Common: line 203
Do NOT just list papers — synthesize and compare
- Very specific: line 208
Use \begin{definition}, \begin{theorem} environments for formal statements
- Common: line 215
Start with experimental setup (datasets, baselines, metrics, implementation details)
- Common: line 218
Every claim from the introduction must have supporting evidence here
- Distinctive: line 237
Run this pass after drafting all sections and before building the bibliography.
- Very specific: line 239
Trigger heuristic: treat the paper as theory-heavy if PAPER_PLAN.md labels it as theory/analysis, or if the drafted sections contain 5 or …
- Very specific: line 241
Proof source search: search the workspace for any standalone full-proof source file whose name or contents indicate a canonical proof …
- Distinctive: line 247
If the user accepts:
- Very specific: line 248
import the full theorem/lemma statement plus proof block into the appendix source (A_appendix.tex or the appendix file named by the plan)
- Distinctive: line 249
use the main-body theorem statement as the canonical public statement.
- Distinctive: line 250
do not leave placeholders such as "see supplementary proof document" or "proof omitted for brevity"
- Distinctive: line 252
keep the main body proof sketches short, but never let the appendix be a sketch-only placeholder when a full proof source exists
- Distinctive: line 254
If no standalone full-proof source exists:
- Distinctive: line 255
use proof sketches only when they are actually written as proof sketches, not placeholders
- Distinctive: line 256
do not fabricate an external proof document reference
- Distinctive: line 260
Do not diff proof bodies; only audit statements, hypotheses, case splits, quantifiers, domains, notation, variable names, and terminology …
- Very specific: line 261
Treat stationary vs terminal, changed assumption names, or missing case splits as mismatches unless explicitly documented
- Distinctive: line 262
If the appendix needs different wording, add an explicit notation bridge instead of silently renaming concepts
- Very specific: line 274
Check existing .bib files in the project/narrative docs
- Very specific: line 275
If not found and DBLP_BIBTEX = true, use the verified fetch chain below
- Very specific: line 276
If not found and DBLP_BIBTEX = false, search arXiv/Scholar for correct BibTeX
- Very specific: line 278
Write references.bib containing ONLY cited entries (no bloat)
- Very specific: line 300
If both DBLP and CrossRef return nothing, mark the entry with % [VERIFY] comment.
- Very specific: line 304
If the DBLP/CrossRef flow is not enough, load ../shared-references/citation-discipline.md for stricter fallback rules before adding …
- Very specific: line 401
If DEAD ENTRIES is printed, remove those keys from references.bib before continuing.
- Very specific: line 402
If VERIFY or MISMATCH is printed, do not invent metadata:
- Distinctive: line 403
prefer DBLP when it returns a clear hit
- Distinctive: line 404
if DBLP misses and a DOI is available, fall back to CrossRef
- Very specific: line 405
if both disagree or still cannot verify, keep the entry only with a % [VERIFY] marker
- Distinctive: line 413
Every BibTeX entry must have: author, title, year, venue/journal
- Distinctive: line 414
Prefer published venue versions over arXiv preprints (if published)
- Very specific: line 415
Use consistent key format: {firstauthor}{year}{keyword} (e.g., ho2020denoising)
- Distinctive: line 417
Remove duplicate entries (same paper with different keys)
- Distinctive: line 421
After drafting all sections, run five sequential audit passes.
- Distinctive: line 440
Remove AI-isms: delve, pivotal, landscape, tapestry, underscore, noteworthy, intriguingly.
- Distinctive: line 456
Ensure subject and verb are close together (no long parenthetical insertions between them)
- Distinctive: line 457
Put familiar context first, new information later
- Distinctive: line 458
Place the most important point near the end of the sentence
- Distinctive: line 460
Don't start consecutive sentences with "This" or "We"
- Distinctive: line 461
Check paragraph transitions — each paragraph's first sentence should connect to the previous
- Distinctive: line 468
Verify exact same terms appear in Results, Discussion, Tables, Figure captions
- Distinctive: line 475
Do percentages in Results match raw numbers in Tables?
- Distinctive: line 477
Do Figure graphics match Table values?
- Distinctive: line 510
After drafting all sections:
- Very specific: line 540
Large file handling: If the Write tool fails due to file size, immediately retry using Bash (cat << 'EOF' > file) to write in chunks.
- Distinctive: line 560
Keep using the reverse-outline test and anti-inflation polish from the main workflow above.
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Paper Write: Section-by-Section LaTeX Generation
Draft a LaTeX paper based on: $ARGUMENTS
Constants
- REVIEWER_MODEL =
gpt-5.4— Model used via Codex MCP for section review. Must be an OpenAI model. - TARGET_VENUE =
ICLR— Default venue. Supported:ICLR,NeurIPS,ICML,CVPR(also ICCV/ECCV),ACL(also EMNLP/NAACL),AAAI,ACM(ACM MM, SIGIR, KDD, CHI, etc.),IEEE_JOURNAL(IEEE Transactions / Letters, e.g., T-PAMI, JSAC, TWC, TCOM, TSP, TIP),IEEE_CONF(IEEE conferences, e.g., ICC, GLOBECOM, INFOCOM, ICASSP). Determines style file and formatting. - ANONYMOUS = true — If true, use anonymous author block. Set
falsefor camera-ready. Note: most IEEE venues do NOT use anonymous submission — setfalsefor IEEE. - MAX_PAGES = 9 — Main body page limit. For ML conferences: counts from first page to end of Conclusion section, references and appendix NOT counted. For IEEE venues: references ARE counted toward the page limit. Typical limits: IEEE journal = no strict limit (but 12-14 pages typical for Transactions, 4-5 for Letters), IEEE conference = 5-8 pages including references.
- DBLP_BIBTEX = true — Fetch real BibTeX from DBLP/CrossRef instead of LLM-generated entries. Eliminates hallucinated citations. Zero install required. Set
falseto use legacy behavior (LLM search +[VERIFY]markers).
Inputs
- PAPER_PLAN.md — outline with claims-evidence matrix, section plan, figure plan (from
/paper-plan) - NARRATIVE_REPORT.md — the research narrative (primary source of content)
- Generated figures — PDF/PNG files in
figures/(from/paper-figure) - LaTeX includes —
figures/latex_includes.tex(from/paper-figure) - Bibliography — existing
.bibfile, or will create one
If no PAPER_PLAN.md exists, ask the user to run /paper-plan first or provide a brief outline.
Orchestra-Guided Writing Overlay
Keep the existing insleep workflow, file layout, and defaults. Use the shared references below only when they improve writing quality:
- Read
../shared-references/writing-principles.mdbefore drafting the Abstract, Introduction, Related Work, or when prose feels generic. - Read
../shared-references/venue-checklists.mdduring the final write-up and submission-readiness pass. - Read
../shared-references/citation-discipline.mdonly when the built-in DBLP/CrossRef workflow is insufficient.
These references are support material, not extra workflow phases.
Discipline-Aware Mode
At startup, check for PRISM_PROFILE.md in the project root. If found, load it and adapt behavior:
- Writing conventions: Apply discipline-specific writing rules from the profile. Examples:
- Law: Use precise legal terminology, cite statutes with full provision numbers, distinguish lege lata from lege ferenda
- Economics: Preview main findings in introduction, present regression tables as primary evidence
- Humanities: Footnotes carry substantive arguments, close reading as evidence
- Medicine: Follow CONSORT/STROBE reporting guidelines
- Citation style: Override the default natbib/cite setup with the discipline's citation package:
- Law (Chinese): Footnote-based, GB/T 7714
- Law (US): Bluebook
- Social Sciences / Education / Management: APA (
apaciteorbiblatex-apa) - Medicine: Vancouver (numbered,
\cite{}) - Humanities: Chicago Notes-Bibliography
- Section templates: Use discipline-appropriate section names from
PAPER_PLAN.md(which was already discipline-adapted by/paper-plan) - Evidence presentation: Adapt how evidence is shown:
- ML: Figures + tables with metrics
- Law: Block quotes of statutory text, case excerpts in footnotes
- Economics: Regression tables with stars, standard errors in parentheses
- Medicine: Forest plots, flow diagrams, GRADE tables
- Venue template: When
TARGET_VENUEmatches a discipline-specific venue, use the appropriate LaTeX class and formatting. For venues not in the default list, use a generic article class with discipline-appropriate formatting.
If PRISM_PROFILE.md does not exist, fall back to the default ML-oriented behavior (fully backward compatible).
Templates
Venue-Specific Setup
The skill includes conference templates in templates/. Select based on TARGET_VENUE:
ICLR:
\documentclass{article}
\usepackage{iclr2026_conference,times}
% \iclrfinalcopy % Uncomment for camera-readyNeurIPS:
\documentclass{article}
\usepackage[preprint]{neurips_2025}
% \usepackage[final]{neurips_2025} % Camera-readyICML:
\documentclass[accepted]{icml2025}
% Use [accepted] for camera-readyIEEE Journal (Transactions, Letters):
\documentclass[journal]{IEEEtran}
\usepackage{cite} % IEEE uses \cite{}, NOT natbib
% Author block uses \author{Name~\IEEEmembership{Member,~IEEE}}IEEE Conference (ICC, GLOBECOM, INFOCOM, ICASSP, etc.):
\documentclass[conference]{IEEEtran}
\usepackage{cite} % IEEE uses \cite{}, NOT natbib
% Author block uses \IEEEauthorblockN / \IEEEauthorblockAProject Structure
Generate this file structure:
paper/
├── main.tex # master file (includes sections)
├── iclr2026_conference.sty # or neurips_2025.sty / icml2025.sty / IEEEtran.cls + IEEEtran.bst
├── math_commands.tex # shared math macros
├── references.bib # bibliography (filtered — only cited entries)
├── sections/
│ ├── 0_abstract.tex
│ ├── 1_introduction.tex
│ ├── 2_related_work.tex
│ ├── 3_method.tex # or preliminaries, setup, etc.
│ ├── 4_experiments.tex
│ ├── 5_conclusion.tex
│ └── A_appendix.tex # proof details, extra experiments
└── figures/ # symlink or copy from project figures/Section files are FLEXIBLE: If the paper plan has 6-8 sections, create corresponding files (e.g., 4_theory.tex, 5_experiments.tex, 6_analysis.tex, 7_conclusion.tex).
Workflow
Step 0: Backup and Clean
If paper/ already exists, back up to paper-backup-{timestamp}/ before overwriting. Never silently destroy existing work.
CRITICAL: Clean stale files. When changing section structure (e.g., 5 sections → 7 sections), delete section files that are no longer referenced by main.tex. Stale files (e.g., old 5_conclusion.tex left behind when conclusion moved to 7_conclusion.tex) cause confusion and waste space.
Step 1: Initialize Project
- Create
paper/directory - Copy venue template from
templates/— the template already includes:- All standard packages (amsmath, hyperref, cleveref, booktabs, etc.)
- Theorem environments with
\crefname{assumption}fix - Anonymous author block
- Generate
math_commands.texwith paper-specific notation - Create section files matching PAPER_PLAN structure
Author block (anonymous mode):
\author{Anonymous Authors}Step 2: Generate math_commands.tex
Create shared math macros based on the paper's notation:
% math_commands.tex — shared notation
\newcommand{\R}{\mathbb{R}}
\newcommand{\E}{\mathbb{E}}
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
% Add paper-specific notation hereStep 3: Write Each Section
Process sections in order. For each section:
- Read the plan — what claims, evidence, citations belong here
- Read NARRATIVE_REPORT.md — extract relevant content, findings, and quantitative results
- Draft content — write complete LaTeX (not placeholders)
- Insert figures/tables — use snippets from
figures/latex_includes.tex - Add citations — for ML conferences (ICLR/NeurIPS/ICML/CVPR/ACL/AAAI): use
\citep{}/\citet{}(natbib). For IEEE venues: use\cite{}(numeric style viacitepackage). Never mix natbib and cite commands.
Before drafting the front matter, re-read the one-sentence contribution from PAPER_PLAN.md. The Abstract and Introduction should make that takeaway obvious before the reader reaches the full method.
Section-Specific Guidelines
§0 Abstract:
- Use the 5-part flow from
../shared-references/writing-principles.md: what, why hard, how, evidence, strongest result - Must be self-contained (understandable without reading the paper)
- Start with the paper's specific contribution, not generic field-level background
- Include one concrete quantitative result
- 150-250 words (check venue limit)
- No citations, no undefined acronyms
- No
\begin{abstract}— that's in main.tex
§1 Introduction:
- Open with a compelling hook (1-2 sentences, problem motivation)
- State the gap clearly ("However, ...")
- Give a brief approach overview before the reader gets lost in details
- List 2-4 specific, falsifiable contributions as a numbered or bulleted list
- Preview the strongest result early instead of saving it for the experiments section
- End with a brief roadmap ("The rest of this paper is organized as...")
- Include the main result figure if space allows
- Target: 1-1.5 pages
- Methods should begin by page 2-3 at the latest
§2 Related Work:
- MINIMUM 1 full page (3-4 substantive paragraphs). Short related work sections are a common reviewer complaint.
- Organize by category using
\paragraph{Category Name.} - Organize methodologically, by assumption class, or by research question; do not write paper-by-paper mini-summaries
- Each category: 1 paragraph summarizing the line of work + 1-2 sentences positioning this paper
- Do NOT just list papers — synthesize and compare
- End each paragraph with how this paper relates/differs
§3 Method / Preliminaries / Setup:
- Define notation early (reference math_commands.tex)
- Use
\begin{definition},\begin{theorem}environments for formal statements - For theory papers: include proof sketches of key results in main body, full proofs in appendix
- For theory papers: include a comparison table of prior bounds vs. this paper
- Include algorithm pseudocode if applicable (
algorithm2eoralgorithmic) - Target: 1.5-2 pages
§4 Experiments:
- Start with experimental setup (datasets, baselines, metrics, implementation details)
- Main results table/figure first
- Then ablations and analysis
- Every claim from the introduction must have supporting evidence here
- For each major experiment, make explicit what claim it supports and what the reader should notice
- Target: 2.5-3 pages
§5 Conclusion:
- Summarize contributions (NOT copy-paste from intro — rephrase)
- Limitations (be honest — reviewers appreciate this)
- Future work (1-2 concrete directions)
- Ethics statement and reproducibility statement (if venue requires)
- Target: 0.5 pages
Appendix:
- Proof details (full proofs of main-body theorems)
- Additional experiments, ablations
- Implementation details, hyperparameter tables
- Additional visualizations
Step 3.5: Theory Paper Consistency Pass (theory papers only)
Run this pass after drafting all sections and before building the bibliography.
Trigger heuristic: treat the paper as theory-heavy if PAPER_PLAN.md labels it as theory/analysis, or if the drafted sections contain 5 or more formal result environments (\begin{theorem}, \begin{lemma}, \begin{proposition}, \begin{corollary}).
Proof source search: search the workspace for any standalone full-proof source file whose name or contents indicate a canonical proof version (proof, appendix, full, complete, supplement, supplementary). If such a file exists, prompt the user exactly:
Inline full proofs from {file}? [Y/n]
Default to Y.
If the user accepts:
- import the full theorem/lemma statement plus proof block into the appendix source (
A_appendix.texor the appendix file named by the plan) - use the main-body theorem statement as the canonical public statement; the appendix copy must match it unless the main-body statement is being revised in the same pass
- do not leave placeholders such as "see supplementary proof document" or "proof omitted for brevity"
- preserve theorem labels, equation labels, and proof structure exactly
- keep the main body proof sketches short, but never let the appendix be a sketch-only placeholder when a full proof source exists
If no standalone full-proof source exists:
- use proof sketches only when they are actually written as proof sketches, not placeholders
- do not fabricate an external proof document reference
Restatement audit:
- Compare every theorem/lemma/proposition statement that is restated in the appendix against the main-body version
- Do not diff proof bodies; only audit statements, hypotheses, case splits, quantifiers, domains, notation, variable names, and terminology for defined objects
- Treat
stationaryvsterminal, changed assumption names, or missing case splits as mismatches unless explicitly documented - If the appendix needs different wording, add an explicit notation bridge instead of silently renaming concepts
- Resolve all mismatches before Step 4
Empirical motivation: in our April 2026 NeurIPS run, the default behavior generated "see supplementary proof document" placeholders in the appendix. We had to manually pull 1264 lines of full proofs from a standalone proof_dllm_full.tex file. Without this pass, theory papers ship with sketch-only appendices that fail at theory venues.
Step 4: Build Bibliography
CRITICAL: Only include entries that are actually cited in the paper.
- Scan all citation references in the drafted sections (
\citep{}/\citet{}for ML conferences,\cite{}for IEEE venues) - Build a citation key list
- For each citation key:
- Check existing
.bibfiles in the project/narrative docs - If not found and DBLP_BIBTEX = true, use the verified fetch chain below
- If not found and DBLP_BIBTEX = false, search arXiv/Scholar for correct BibTeX
- NEVER fabricate BibTeX entries — mark unknown ones with
[VERIFY]comment
- Check existing
- Write
references.bibcontaining ONLY cited entries (no bloat)
Verified BibTeX Fetch (when DBLP_BIBTEX = true)
Three-step fallback chain — zero install, zero auth, all real BibTeX:
Step A: DBLP (best quality — full venue, pages, editors)
# 1. Search by title + first author
curl -s "https://dblp.org/search/publ/api?q=TITLE+AUTHOR&format=json&h=3"
# 2. Extract DBLP key from result (e.g., conf/nips/VaswaniSPUJGKP17)
# 3. Fetch real BibTeX
curl -s "https://dblp.org/rec/{key}.bib"Step B: CrossRef DOI (fallback — works for arXiv preprints)
# If paper has a DOI or arXiv ID (arXiv DOI = 10.48550/arXiv.{id})
curl -sLH "Accept: application/x-bibtex" "https://doi.org/{doi}"Step C: Mark [VERIFY] (last resort)
If both DBLP and CrossRef return nothing, mark the entry with % [VERIFY] comment. Do NOT fabricate.
Why this matters: LLM-generated BibTeX frequently hallucinates venue names, page numbers, or even co-authors. DBLP and CrossRef return publisher-verified metadata. Upstream skills (/research-lit, /novelty-check) may mention papers from LLM memory — this fetch chain is the gate that prevents hallucinated citations from entering the final .bib.
If the DBLP/CrossRef flow is not enough, load ../shared-references/citation-discipline.md for stricter fallback rules before adding placeholders.
Automated bib cleaning — use this Python pattern to extract only cited entries:
import re
# 1. Grep all \citep{...}, \citet{...}, and \cite{...} from all .tex files
# 2. Extract unique keys (handle multi-cite like \citep{a,b,c} or \cite{a,b,c})
# 3. Parse the full .bib file, keep only entries whose key is in the cited set
# 4. Write the filtered bibThis prevents bib bloat (e.g., 948 lines → 215 lines in testing).
Enforced Bib Hygiene Validation — run immediately after the filtered references.bib is written.
python3 - <<'PY'
import io, json, re, sys, urllib.parse, urllib.request
from pathlib import Path
try:
import bibtexparser
except ImportError:
sys.exit("Missing dependency: pip install bibtexparser")
ROOT = Path("paper")
tex_paths = [ROOT / "main.tex", *sorted((ROOT / "sections").glob("*.tex"))]
tex = "\n".join(p.read_text(errors="ignore") for p in tex_paths if p.exists())
cited = set()
for m in re.finditer(r'\\cite[a-zA-Z]*\{([^}]*)\}', tex):
cited.update(k.strip() for k in m.group(1).split(',') if k.strip())
with (ROOT / "references.bib").open() as fh:
bib = bibtexparser.load(fh)
entries = {e["ID"]: e for e in bib.entries}
dead = sorted(set(entries) - cited)
if dead:
print("DEAD ENTRIES:")
for key in dead:
print(" ", key)
def norm(s):
return re.sub(r'[^a-z0-9]+', ' ', (s or '').lower()).strip()
def dblp_hits(title):
q = urllib.parse.quote(title)
url = f"https://dblp.org/search/publ/api?q={q}&format=json&h=3"
with urllib.request.urlopen(url, timeout=20) as r:
data = json.load(r)
return [h.get("info", {}) for h in data.get("result", {}).get("hits", {}).get("hit", [])]
def crossref_entry(doi):
req = urllib.request.Request(f"https://doi.org/{doi}", headers={"Accept": "application/x-bibtex"})
with urllib.request.urlopen(req, timeout=20) as r:
parsed = bibtexparser.loads(r.read().decode("utf-8", "ignore"))
return parsed.entries[0] if parsed.entries else {}
for key in sorted(cited & set(entries)):
e = entries[key]
title = e.get("title", "").strip("{}")
hits = dblp_hits(title) if title else []
hit = hits[0] if hits else None
source = "DBLP"
if hit is None and e.get("doi"):
try:
hit = crossref_entry(e["doi"])
source = "CrossRef"
except Exception:
hit = None
if hit is None:
print(f"VERIFY {key}: no DBLP/CrossRef hit")
continue
issues = []
year_a = str(e.get("year", "")).strip()
year_b = str(hit.get("year", "")).strip()
if year_a and year_b and year_a != year_b:
issues.append(f"year {year_a} != {year_b}")
venue_a = e.get("journal") or e.get("booktitle") or ""
venue_b = hit.get("journal") or hit.get("booktitle") or hit.get("venue") or ""
if norm(venue_a) and norm(venue_b) and norm(venue_a) != norm(venue_b):
issues.append(f"venue {venue_a} != {venue_b}")
authors_a = [norm(a) for a in re.split(r'\s+and\s+', e.get("author", "")) if a.strip()]
authors_b = [norm(a) for a in re.split(r'\s+and\s+', hit.get("author", "")) if a.strip()]
if authors_a and authors_b and authors_a[:2] != authors_b[:2]:
issues.append("author list differs")
if issues:
print(f"MISMATCH {key} ({source}): " + "; ".join(issues))
PYIf DEAD ENTRIES is printed, remove those keys from references.bib before continuing.
If VERIFY or MISMATCH is printed, do not invent metadata:
- prefer DBLP when it returns a clear hit
- if DBLP misses and a DOI is available, fall back to CrossRef
- if both disagree or still cannot verify, keep the entry only with a
% [VERIFY]marker - uncited entries must be deleted, not left behind as dead bibliography bloat
Citation reachability rule: an entry is dead if its key does not appear in any \cite...{} command in paper/main.tex or any paper/sections/*.tex file.
Empirical motivation: in our April 2026 NeurIPS run, 3 dead bib entries (bresler2015, sedd2024, wainwright2008) sat in references.bib for 5+ improvement rounds, and a codd2025 entry had year = {2026} (key/year mismatch). Neither was flagged by the existing automated cleaning.
Citation verification rules (from claude-scholar + Imbad0202):
- Every BibTeX entry must have: author, title, year, venue/journal
- Prefer published venue versions over arXiv preprints (if published)
- Use consistent key format:
{firstauthor}{year}{keyword}(e.g.,ho2020denoising) - Double-check year and venue for every entry
- Remove duplicate entries (same paper with different keys)
Step 5: Scientific Writing Quality Pass (5 audit passes)
After drafting all sections, run five sequential audit passes. Based on Sainani's "Writing in the Sciences" methodology: every word must earn its place.
Pass 1: Clutter Extraction — Strip sentences to cleanest components.
| Cluttered phrase | Replace with |
| Due to the fact that | Because |
| In order to | To |
| A number of | Several |
| It is worth noting that | (delete — just state the point) |
| It is important to note that | (delete) |
| At the present time | Now |
| On the basis of | Based on |
| In light of the fact that | Because |
| Have an effect on | Affect |
| Give rise to | Cause |
Also remove redundancies: "completely eliminate" → "eliminate", "future plans" → "plans", "unexpected surprise" → "surprise".
Remove AI-isms: delve, pivotal, landscape, tapestry, underscore, noteworthy, intriguingly.
Pass 2: Active Voice and Verb Vitality — Identify who did what.
- Spot passive: "to-be" verb + past participle ("was observed", "were analyzed")
- Convert: find the actor, reconstruct as Subject–Verb–Object
- Resurrect smothered verbs (nominalizations):
- "We made an investigation" → "We investigated"
- "Failure of the system occurs" → "The system fails"
- "Provides a description of" → "Describes"
Passive voice IS acceptable for: established facts, methods where agent is irrelevant, or when required by venue style.
Pass 3: Sentence Architecture — Structure and flow.
- Flag sentences > 40 words for splitting
- Ensure subject and verb are close together (no long parenthetical insertions between them)
- Put familiar context first, new information later
- Place the most important point near the end of the sentence
- Let each paragraph do one job
- Don't start consecutive sentences with "This" or "We"
- Check paragraph transitions — each paragraph's first sentence should connect to the previous
Pass 4: Keyword Consistency — The Banana Rule.
Do not call a "banana" an "elongated yellow fruit" to avoid repetition. If the Methods say "obese group," the Results must not switch to "heavier group." Synonym variation for technical terms forces the reader to wonder whether a new category has been introduced.
- Extract all key terms from Method section (group names, variable names, technique names, abbreviations)
- Verify exact same terms appear in Results, Discussion, Tables, Figure captions
- Flag every synonym substitution for a defined term
- Acronym austerity: flag non-standard acronyms created only for convenience; verify every acronym is defined at first use
Pass 5: Numerical and Citation Integrity
- Does sample size (N) in Abstract match Table 1?
- Do percentages in Results match raw numbers in Tables?
- Are significant figures consistent and appropriate?
- Do Figure graphics match Table values?
- Flag statistics cited only through secondary sources (reviews, textbooks) — recommend verifying primary source
Step 6: Cross-Review with REVIEWER_MODEL
Send the complete draft to GPT-5.4 xhigh:
mcp__codex__codex:
model: gpt-5.4
config: {"model_reasoning_effort": "xhigh"}
prompt: |
Review this [VENUE] paper draft (main body, excluding appendix).
Focus on:
1. Does each claim from the intro have supporting evidence?
2. Is the writing clear, concise, and free of AI-isms?
3. Any logical gaps or unclear explanations?
4. Does it fit within [MAX_PAGES] pages (to end of Conclusion)?
5. Is related work sufficiently comprehensive (≥1 page)?
6. For theory papers: are proof sketches adequate?
7. Are figures/tables clearly described and properly referenced?
8. Would a skim reader understand the contribution from the title, abstract, introduction, and Figure 1?
For each issue, specify: severity (CRITICAL/MAJOR/MINOR), location, and fix.
[paste full draft text]Apply CRITICAL and MAJOR fixes. Document MINOR issues for the user.
Step 7: Reverse Outline Test (from Research-Paper-Writing-Skills)
After drafting all sections:
- Extract topic sentences — pull the first sentence of every paragraph
- Read them in sequence — they should form a coherent narrative on their own
- Check claim coverage — every claim from the Claims-Evidence Matrix must appear
- Check evidence mapping — every experiment/figure must support a stated claim
- Fix gaps — if a topic sentence doesn't advance the story, rewrite the paragraph
Step 8: Final Checks
Before declaring done:
- All
\ref{}and\label{}match (no undefined references) - All citation commands (
\citep{}/\citet{}for ML conferences,\cite{}for IEEE) have corresponding BibTeX entries - No author information in anonymous mode
- Figure/table numbering is correct
- Page count within MAX_PAGES (main body to Conclusion end)
- No TODO/FIXME/XXX markers left in the text
- No
[VERIFY]markers left unchecked - Abstract is self-contained (understandable without reading the paper)
- Title is specific and informative (not generic)
- Related work is ≥1 full page
- references.bib contains ONLY cited entries (no bloat)
- No stale section files — every .tex in
sections/is\inputed bymain.tex - Section files match main.tex — file numbering and
\inputpaths are consistent - Venue-specific required sections/checklists satisfied (read
../shared-references/venue-checklists.mdif needed) - A skim reader can recover the main claim from the title, abstract, introduction, and Figure 1/captions
Key Rules
- Large file handling: If the Write tool fails due to file size, immediately retry using Bash (
cat << 'EOF' > file) to write in chunks. Do NOT ask the user for permission — just do it silently. - Do NOT generate author names, emails, or affiliations — use anonymous block or placeholder
- Write complete sections, not outlines — the output should be compilable LaTeX
- One file per section — modular structure for easy editing
- Every claim must cite evidence — cross-reference the Claims-Evidence Matrix
- Compile-ready — the output should compile with
latexmkwithout errors (modulo missing figures) - No over-claiming — use hedging language ("suggests", "indicates") for weak evidence
- Venue style matters — ML conferences (ICLR/NeurIPS/ICML) use
natbib(\citep/\citet); IEEE venues usecitepackage (\cite{}, numeric). Never mix. - Page limit rules differ by venue — ML conferences: main body to Conclusion, references/appendix NOT counted. IEEE: references ARE counted toward the page limit.
- Clean bib — references.bib must only contain entries that are actually
\cited - Section count is flexible — match PAPER_PLAN structure, don't force into 5 sections
- Backup before overwrite — never destroy existing
paper/directory without backing up - Front-load the contribution — do not hide the payoff until the experiments or appendix
Writing Quality Reference
../shared-references/writing-principles.md— story framing, abstract/introduction patterns, sentence-level clarity, reviewer reading order../shared-references/venue-checklists.md— ICLR/NeurIPS/ICML/IEEE submission requirements to check before declaring done../shared-references/citation-discipline.md— stricter fallback for ambiguous citations
Keep using the reverse-outline test and anti-inflation polish from the main workflow above; the shared references are there to improve quality without adding a new phase.
Acknowledgements
Writing methodology adapted from Research-Paper-Writing-Skills (CCF award-winning methodology). Citation verification from claude-scholar and Imbad0202/academic-research-skills. This hybrid pack's writing-guidance overlay is adapted from Orchestra Research's paper-writing materials.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

