Mmcp.market

paper-write skill

by wanshuiyin·wanshuiyin/Auto-claude-code-research-in-sleep·17k stars·MIT

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.

A100/100content scan

Is the paper-write skill safe?

Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-09-28.

No findings.

Install the paper-write skill

A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.

git clone --depth 1 https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep.git /tmp/Auto-claude-code-research-in-sleep
mkdir -p ~/.claude/skills
cp -r /tmp/Auto-claude-code-research-in-sleep/skills/paper-write ~/.claude/skills/paper-write
available in every project

In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub

The instructions your agent would load

SKILL.md as published, without the frontmatter. Read it on GitHub

Paper Write: Section-by-Section LaTeX Generation

Draft a LaTeX paper based on: $ARGUMENTS

Constants

  • REVIEWERMODEL = gpt-6-astra** — Model used via Codex MCP for section review. Must be an OpenAI model.
  • TARGETVENUE = ICLR — Default venue. Supported: ICLR, NeurIPS, ICML, CVPR (also ICCV/ECCV), ACL (also EMNLP/NAACL), AAAI, ACM (ACM MM, SIGIR, KDD, CHI, etc.), IEEEJOURNAL (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 false for camera-ready. Note: most IEEE venues do NOT use anonymous submission — set false for IEEE.
  • MAXPAGES = 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.
  • DBLPBIBTEX = true** — Fetch real BibTeX from DBLP/CrossRef instead of LLM-generated entries. Eliminates hallucinated citations. Zero install required. Set false to use legacy behavior (LLM search + [VERIFY] markers).

Inputs

  1. PAPERPLAN.md** — outline with claims-evidence matrix, section plan, figure plan (from /paper-plan)
  2. NARRATIVEREPORT.md** — the research narrative (primary source of content)
  3. Generated figures — PDF/PNG files in figures/ (from /paper-figure)
  4. LaTeX includes — figures/latex_includes.tex (from /paper-figure)
  5. Bibliography — existing .bib file, 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.md before drafting the Abstract, Introduction, Related Work, or when prose feels generic.
  • Read ../shared-references/venue-checklists.md during the final write-up and submission-readiness pass.
  • Read ../shared-references/citation-discipline.md only when the built-in DBLP/CrossRef workflow is insufficient.

These references are support material, not extra workflow phases.

Optional: Style reference (— style-ref: , opt-in)

Lets the user steer structural style (section ordering, theorem density, sentence cadence, figure density, bibliography style) toward a reference paper. Default OFF — when the user does not pass — style-ref, do nothing differently from before.

Only when — style-ref: appears in $ARGUMENTS, run the helper FIRST, before drafting:

# Resolve $STYLE_HELPER via the canonical strict-safe chain (see
# shared-references/integration-contract.md §2). Policy A — gate:
# unresolved helper means --style-ref cannot be satisfied, so abort.
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
    ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
fi
if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
    ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
fi
STYLE_HELPER=".aris/tools/extract_paper_style.py"
[ -f "$STYLE_HELPER" ] || STYLE_HELPER="tools/extract_paper_style.py"
[ -f "$STYLE_HELPER" ] || { [ -n "${ARIS_REPO:-}" ] && STYLE_HELPER="$ARIS_REPO/tools/extract_paper_style.py"; }
[ -f "$STYLE_HELPER" ] || {
  echo "ERROR: extract_paper_style.py not resolved at .aris/tools/, tools/, \$ARIS_REPO/tools/, or via ~/.aris/repo." >&2
  echo "       Fix: rerun bash tools/install_aris.sh or smart_update.sh (refreshes ~/.aris/repo), export ARIS_REPO, or copy the helper to tools/." >&2
  echo "       --style-ref cannot be satisfied; aborting." >&2
  exit 1
}
STYLE_STATUS=0
CAC

Sources accepted: local TeX dir / file, local PDF, arXiv id (2501.12345 or arxiv:2501.12345), http(s) URL. Overleaf URLs and project IDs are rejected — clone via /overleaf-sync setup first and pass the local clone path.

Strict rules (full contract in tools/extractpaperstyle.py docstring):

  • Use styleprofile.md as structural** guidance only. Match section count, section ordering tendency, theorem-environment density, caption-length distribution, sentence cadence, math display ratio, citation style.
  • Never copy prose, claims, examples, or terminology from anything reachable through the cache. The profile is intentionally aggregate; if you need substance, use the user's own outline.
  • Never pass — style-ref (or the cache contents) to reviewer / auditor sub-agents. Cross-model review independence (../shared-references/reviewer-independence.md) requires reviewers see only the artifact and the user's prompt, not the author's stylistic context.

<!-- DATANEEDED --> markers (when GAPREPORT.md exists)

If /paper-plan ran with — style-ref: it will have emitted GAPREPORT.md alongside PAPERPLAN.md. This file lists structural slots (ablation tables, scaling experiments, failure-case analyses, …) the exemplar implies but the user has no evidence to fill.

When GAP_REPORT.md is present and a section slot is classified as status: missing:

  1. Do not fabricate numerical results, figure references, or qualitative claims to fill that slot.
  2. Emit an HTML-comment placeholder at the exact location the missing content would go:
<!-- DATA_NEEDED: GAP_S5_ABLATION — ablation table comparing X across the 3 axes implied by exemplar -->
  1. Slot ID and one-line description come straight from GAPREPORT.md. Never invent Slot IDs.** Never reword the description to be more confident than the report.
  2. The marker is intentionally an HTML comment so it is invisible in the rendered PDF but searchable via grep -r "DATANEEDED" sec/** for human triage / /experiment-bridge follow-up.
  3. For status: partial, write what the user has and emit <!-- DATA_NEEDED: — --> at the gap point in the same paragraph (do not split the section).

Carve-out from "no placeholder" rule. The default /paper-write discipline (no placeholders such as "see supplementary" or "TBD") still applies for everything except GAP_REPORT-listed missing slots. The marker is the principled way to surface genuine evidence deficits without compromising claim integrity.

Original idea: @zhangpelf in #217.

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-ready

NeurIPS:

\documentclass{article}
\usepackage[preprint]{neurips_2025}
% \usepackage[final]{neurips_2025}  % Camera-ready

ICML:

\documentclass[accepted]{icml2025}
% Use [accepted] for camera-ready

IEEE 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 / \IEEEauthorblockA

Project 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., 4theory.tex, 5experiments.tex, 6analysis.tex, 7conclusion.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 5conclusion.tex left behind when conclusion moved to 7conclusion.tex) cause confusion and waste space.

Step 1: Initialize Project

  1. Create paper/ directory
  2. 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
  1. Generate math_commands.tex with paper-specific notation
  2. 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 here

Step 3: Write Each Section

Process sections in order. For each section:

  1. Read the plan — what claims, evidence, citations belong here
  2. Read NARRATIVEREPORT.md** — extract relevant content, findings, and quantitative results
  3. Draft content — write complete LaTeX (no fabricated placeholders). Exception: if GAPREPORT.md exists and the section has slots with status: missing, emit <!-- DATANEEDED: — --> at those points instead of inventing data — see the DATA_NEEDED markers subsection above.
  4. Insert figures/tables — use snippets from figures/latex_includes.tex
  5. Add citations — for ML conferences (ICLR/NeurIPS/ICML/CVPR/ACL/AAAI): use \citep{} / \citet{} (natbib). For IEEE venues: use \cite{} (numeric style via cite package). 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.

More skills from wanshuiyin/Auto-claude-code-research-in-sleep

  • Aablation-plannerUse when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.
  • Aablation-plannerUse when main results pass result-to-claim (`claim_supported = yes` or `partial`) and ablation studies are needed for paper submission. A secondary Codex agent designs ablations from a reviewer's perspective; the local executor reviews feasibility and implements.
  • AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
  • AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
  • Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says "analyze results", "compare", or needs to interpret experimental data.
  • Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says \"analyze results\", \"compare\", or needs to interpret experimental data.
  • AarxivSearch, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
  • AarxivSearch, download, and summarize academic papers from arXiv. Use when user says \"search arxiv\", \"download paper\", \"fetch arxiv\", \"arxiv search\", \"get paper pdf\", or wants to find and save papers from arXiv to the local paper library.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via Claude review through claude-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via Gemini review through gemini-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.

All agent skills → · MCP servers