Install any skill in seconds. Free to start, no credit card required.
Get Started Free →End-to-end academic paper writing workflow. Takes a research repository and produces a publication-ready LaTeX manuscript for top ML/AI conferences (NeurIPS, ICML, ICLR, ACL, AAAI, COLM). Covers repo understanding, structure planning, section drafting, citation management, anti-AI polishing, and conference formatting. Triggers on "write paper", "draft paper", "scholar writing", "paper writing workflow".
.claude/skills/catlog22-scholar-writing/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 200% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 244% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 258% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 147% | 0% |
<required_reading> @~/.maestro/workflows/run-mode.md </required_reading>
End-to-end workflow for writing publication-ready ML/AI papers from research repositories. Integrates paper writing craft, citation verification, and anti-AI polishing into a structured 6-phase pipeline.
Follow ~/.maestro/workflows/run-mode.md. If an orchestrator injected run_id / run_dir in the birth packet, use them and do NOT call maestro run create. Otherwise self-start before Phase 1:
bashmaestro run create scholar-writing --session <YYYYMMDD-scholar-writing-{topic}> --intent "<short phrase>"
Session slug is ASCII-only, ≤64 chars. The paper itself lives in the user's outputDir (a working area in the user's repo, like source code — not the Run truth source). Write the workflow synthesis and the delivery manifest (paths to paper.tex / paper.pdf / references.bib, verification status, remaining action items) to {run_dir}/report.md, and the machine-readable delivery-paths list to {run_dir}/outputs/delivery.json — the contract registers it as the primary artifact latest-paper-delivery, and the runtime only scans {run_dir}/outputs/, so a manifest written anywhere else is invisible. Close per the Final Checklist.
json{ "paper_tex": "", "paper_pdf": "", "references_bib": "", "sections": [], "verified": false, "open_items": [] }
.workflow/codebase/ARCHITECTURE.md exists, read for project contextmaestro load --type spec --category coding — load coding conventionsmaestro search "academic writing research paper" --json — top 5 entries as prior contextUser: "Write a paper from this repo"
|
v
┌──────────────────────────────────────────────────────────────────────┐
│ SKILL.md (Orchestrator) │
│ Collect preferences → Dispatch phases → Track progress │
└──────────┬───────────────────────────────────────────────────────────┘
|
┌───────┼───────┬───────────┬──────────┬──────────┬────────────┐
v v v v v v v
┌──────┐┌──────┐┌──────────┐┌──────────┐┌──────────┐┌──────────────┐
│ P1 ││ P2 ││ P3 ││ P4 ││ P5 ││ P6 │
│ Repo ││Struct││ Section ││ Citation ││ Anti-AI ││ Conference │
│ Under││Plan ││ Drafting ││ Manage ││ Polish ││ Formatting │
└──┬───┘└──┬───┘└────┬─────┘└────┬─────┘└────┬─────┘└──────┬───────┘
│ │ │ │ │ │
v v v v v v
repo outline full draft verified polished paper.tex
context + plan .bib file prose (camera-ready)[CITATION NEEDED].Before dispatching to any phase, collect these preferences:
Questions to ask the user:
1. Research Repository
"Where is the research repo? (path or URL)"
→ repoPath
2. Target Conference
Options: NeurIPS | ICML | ICLR | ACL | AAAI | COLM | Other
→ targetConference
3. Paper Type
Options: Full Paper | Short Paper | Workshop Paper
→ paperType
4. Output Directory
"Where should the paper be written? (default: ./paper/)"
→ outputDir
5. Existing Materials
"Any existing drafts, notes, or outlines to build on? (path or 'none')"
→ existingMaterials
6. Writing Language
Options: English | Chinese | Bilingual
→ writingLanguageStore responses as paperPreferences context for all phases.
When workflowPreferences.autoYes === true:
./paper/> COMPACT DIRECTIVE: Context compression MUST check TodoWrite phase status. > The phase currently marked in_progress is the active execution phase -- preserve its FULL content. > Only compress phases marked completed or pending.
Paper Writing Workflow:
- [ ] Phase 1: Repo Understanding — explore repo, identify contribution
- [ ] Phase 2: Structure Planning — plan outline, define narrative
- [ ] Phase 3: Section Drafting — write all sections
- [ ] Phase 4: Citation Management — find, verify, format citations
- [ ] Phase 5: Anti-AI Polish — remove AI patterns, humanize prose
- [ ] Phase 6: Conference Formatting — apply template, compilePhase 1: Repo Understanding
└─ Ref: phases/01-repo-understanding.md
├─ Input: repoPath, existingMaterials
└─ Output: repoContext (contribution, results, existing citations)
Phase 2: Structure Planning
└─ Ref: phases/02-structure-planning.md
├─ Input: repoContext, targetConference, paperType
└─ Output: paperOutline (section plan, narrative arc, page budget)
Phase 3: Section Drafting
└─ Ref: phases/03-section-drafting.md
├─ Input: repoContext, paperOutline, writingLanguage
└─ Output: draftSections (all sections as LaTeX content)
Phase 4: Citation Management
└─ Ref: phases/04-citation-management.md
├─ Input: draftSections, repoContext.existingCitations
└─ Output: verifiedBib (references.bib), updatedDraft (citations resolved)
Phase 5: Anti-AI Polish
└─ Ref: phases/05-anti-ai-polish.md
├─ Input: updatedDraft
└─ Output: polishedDraft (humanized prose, AI patterns removed)
Phase 6: Conference Formatting
└─ Ref: phases/06-conference-formatting.md
├─ Input: polishedDraft, verifiedBib, targetConference
└─ Output: paper.tex (complete manuscript ready for compilation)Phase Reference Documents (read on-demand when phase executes):
| Phase | Document | Purpose | Compact | |-------|----------|---------|---------| | 1 | phases/01-repo-understanding.md | Explore repo, identify contribution | TodoWrite driven | | 2 | phases/02-structure-planning.md | Plan outline, define narrative | TodoWrite driven | | 3 | phases/03-section-drafting.md | Write all paper sections | TodoWrite driven + sentinel | | 4 | phases/04-citation-management.md | Find, verify, format citations | TodoWrite driven + sentinel | | 5 | phases/05-anti-ai-polish.md | Remove AI patterns, humanize | TodoWrite driven + sentinel | | 6 | phases/06-conference-formatting.md | Apply template, compile | TodoWrite driven |
Compact Rules:
in_progress → preserve full content, do not compresscompleted → may compress to summaryRead() to recover before continuing[CITATION NEEDED].User input is parsed into paperPreferences:
REPO: [path to research repository]
CONFERENCE: [NeurIPS | ICML | ICLR | ACL | AAAI | COLM]
TYPE: [Full | Short | Workshop]
OUTPUT: [output directory path]
MATERIALS: [path to existing drafts or 'none']
LANGUAGE: [English | Chinese | Bilingual]If user provides free text like "write a paper about my transformer project", extract:
Phase 1 ──repoContext──→ Phase 2
Phase 2 ──paperOutline──→ Phase 3
Phase 1 ──repoContext──→ Phase 3
Phase 3 ──draftSections──→ Phase 4
Phase 4 ──updatedDraft + verifiedBib──→ Phase 5
Phase 5 ──polishedDraft──→ Phase 6
Phase 4 ──verifiedBib──→ Phase 6
Data persistence: The paper artifacts live in outputDir/ — a working area in the
user's repo (analogous to source code), NOT the Run truth source. The Run records
synthesis + a delivery manifest (see Run Lifecycle above).
outputDir/.writing/ (paper workspace, user-owned)
├── repo-context.md (Phase 1 output)
├── paper-outline.md (Phase 2 output)
├── drafts/ (Phase 3 output)
│ ├── abstract.tex
│ ├── introduction.tex
│ ├── methods.tex
│ ├── experiments.tex
│ ├── related-work.tex
│ ├── conclusion.tex
│ └── appendix.tex
├── references.bib (Phase 4 output)
├── polished/ (Phase 5 output)
│ └── (same structure as drafts/)
└── paper.tex (Phase 6 output)
{run_dir}/report.md (workflow synthesis + delivery manifest)
{run_dir}/outputs/ (delivery-paths list pointing into outputDir/)When Phase N begins:
→ Mark Phase N as in_progress in TodoWrite
→ Add sub-tasks for Phase N steps
→ Execute sub-tasks sequentiallyWhen Phase N completes:
→ Mark all Phase N sub-tasks as completed
→ Collapse to summary: "Phase N complete: [key output]"
→ Mark Phase N+1 as in_progressBetween phases, update a running paper-notes document:
markdown# Paper Writing Notes (accumulated) ## Contribution (Phase 1) [One-sentence contribution statement] ## Outline (Phase 2) [Section structure with page budgets] ## Draft Status (Phase 3) [Section completion status] ## Citation Status (Phase 4) [Verified count / placeholder count] ## Polish Status (Phase 5) [Anti-AI score per section]
Written to: outputDir/.writing/paper-notes.md
| Error | Action | |-------|--------| | Repo path invalid | Ask user for correct path | | Cannot identify contribution | Present top 3 candidates, ask user to choose | | Citation not found | Mark [CITATION NEEDED], continue, report at end | | LaTeX compilation fails | Fix common errors (missing packages, encoding), retry once | | Anti-AI score below 35 | Re-polish section, flag for manual review | | Page limit exceeded | Suggest specific cuts (move proofs to appendix, condense related work) |
{run_dir}/outputs/delivery.json written (primary artifact — run check cannot register the delivery without it)[CITATION NEEDED])| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,823 | 8,209 | +70% | 1 | 1 | 0% | 215 | 3,741 | +1640% | 0 | 0 | — |
case-02 | fail→fail | 6,176 | 7,030 | +14% | 1 | 1 | 0% | 283 | 3,716 | +1213% | 0 | 0 | — |
case-03 | fail→fail | 36,317 | 6,672 | -82% | 1 | 1 | 0% | 6,211 | 3,574 | -42% | 0 | 0 | — |
case-04 | pass→fail | 27,674 | 8,054 | -71% | 1 | 1 | 0% | 5,785 | 3,745 | -35% | 0 | 0 | — |
case-05 | pass→fail | 11,863 | 36,464 | +207% | 1 | 1 | 0% | 2,923 | 3,704 | +27% | 0 | 0 | — |
case-06 | pass→fail | 14,713 | 7,357 | -50% | 1 | 1 | 0% | 2,364 | 3,488 | +48% | 0 | 0 | — |
case-07 | fail→fail | 10,035 | 7,570 | -25% | 1 | 1 | 0% | 1,671 | 4,323 | +159% | 0 | 0 | — |
case-08 | fail→pass | 9,231 | 6,675 | -28% | 1 | 1 | 0% | 1,405 | 4,208 | +200% | 0 | 0 | — |
case-09 | fail→pass | 11,632 | 3,478 | -70% | 1 | 1 | 0% | 1,695 | 3,811 | +125% | 0 | 0 | — |
case-10 | pass→pass | 13,234 | 16,809 | +27% | 1 | 1 | 0% | 1,946 | 5,201 | +167% | 0 | 0 | — |
case-11 | pass→pass | 9,287 | 3,316 | -64% | 1 | 1 | 0% | 1,533 | 3,723 | +143% | 0 | 0 | — |
case-12 | fail→pass | 6,757 | 2,987 | -56% | 1 | 1 | 0% | 1,076 | 3,698 | +244% | 0 | 0 | — |
case-13 | fail→pass | 20,917 | 2,902 | -86% | 1 | 1 | 0% | 1,048 | 3,747 | +258% | 0 | 0 | — |
case-14 | fail→pass | 9,596 | 2,920 | -70% | 1 | 1 | 0% | 1,514 | 3,741 | +147% | 0 | 0 | — |
case-15 | pass→pass | 22,969 | 8,899 | -61% | 1 | 1 | 0% | 1,772 | 4,577 | +158% | 0 | 0 | — |
case-16 | pass→pass | 9,693 | 3,601 | -63% | 1 | 1 | 0% | 1,614 | 3,795 | +135% | 0 | 0 | — |
case-17 | fail→pass | 6,813 | 1,975 | -71% | 1 | 1 | 0% | 930 | 3,508 | +277% | 0 | 0 | — |
case-18 | pass→fail | 14,526 | 6,380 | -56% | 1 | 1 | 0% | 1,394 | 4,326 | +210% | 0 | 0 | — |
case-19 | fail→pass | 12,113 | 3,469 | -71% | 1 | 1 | 0% | 1,878 | 3,858 | +105% | 0 | 0 | — |
case-20 | fail→pass | 10,711 | 3,000 | -72% | 1 | 1 | 0% | 1,644 | 3,754 | +128% | 0 | 0 | — |
case-21 | pass→pass | 13,505 | 8,079 | -40% | 1 | 1 | 0% | 1,968 | 4,533 | +130% | 0 | 0 | — |
case-22 | fail→pass | 8,978 | 4,013 | -55% | 1 | 1 | 0% | 1,508 | 4,012 | +166% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 15 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.