skills/neel-nandaify-paper/SKILL.md
Use when starting a new ML/AI paper, polishing a draft, or running a pre-submission audit and you want item-by-item rigor against established writing best practices. Sets up a per-paper Markdown checklist (based on Neel Nanda's "Highly Opinionated Advice on How to Write ML Papers") that every tick must trace back to specific prose in the .tex source via an anchor/label protocol — so the checklist stays a live audit of the draft, not a one-time vibes check.
npx skillsauth add AMindToThink/claude-code-settings neel-nandaify-paperInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Apply Neel Nanda's ML paper checklist to a paper draft, item by item, with each tick tied to specific prose in the .tex source. The output is a Markdown checklist living next to the paper that stays current as the draft evolves and serves as a pre-submission audit.
Source: https://www.alignmentforum.org/posts/eJGptPbbFPZGLpjsp/highly-opinionated-advice-on-how-to-write-ml-papers
Core rule. A checked box means a reviewer / co-author has actually verified the item against the current draft. Not "we did this once." Not "we plan to." If you cannot honestly write a one-sentence annotation justifying the tick, the item is not done.
Do not use for one-off editing passes (use direct edits) or non-research writing (blog posts, internal docs).
Copy CHECKLIST_TEMPLATE.md (next to this SKILL.md) into the paper directory as paper_writing_checklist.md:
cp ~/.claude/skills/neel-nandaify-paper/CHECKLIST_TEMPLATE.md <paper-dir>/paper_writing_checklist.md
Then add a project-specific §13 Project-specific cross-cutting checks at the bottom — see the dedicated section below for examples. The Nanda checklist (§1–§12) is project-agnostic; §13 is where you encode this project's conventions (bib pipeline, macro pipeline, etc.).
Before ticking any sentence-level item, reflow prose so each sentence sits on its own line. The anchor protocol assumes anchors resolve to a single line; reflow means a rg -nF '<anchor>' returns one hit, the line you mean.
The latex-semantic-linebreaks skill does this without changing the rendered PDF. Do not retry latexindent or tex-fmt — both fail on math-heavy LaTeX.
For each unticked item, do exactly one of:
Never batch ticks without verification. The whole value of the checklist is that the boxes mean something specific.
Each tick gets an italic parenthetical describing what specifically satisfies the item, including caveats or known holes. The annotation is the proof — a future reader (you, a co-author, a reviewer's defender) reads only the annotation, not the surrounding paper, to understand why the item is ticked.
Good annotations name specific evidence: section labels, figure numbers, decision dates, scripts, or commits. Bad annotations are vague ("looks good", "we did this", "covered in §3").
Item ticks decay. After any non-trivial prose change:
rg -nF '<anchor>' paper/<paper>.tex. If the anchor no longer appears, either update the anchor (sentence reworded but claim intact) or untick (claim removed/rewritten).It is normal for a checklist on an active draft to gain and lose ticks as prose churns. That is the point.
Each ticked item points to the prose it refers to using one of two forms:
Anchor — a short backticked substring of the target sentence, verbatim from the .tex source. Locate with VS Code Find-in-File or rg -nF '<anchor>' paper/<paper>.tex. Anchors survive line-number churn and any pure-formatting reflow — they break only if the sentence itself is rewritten.
Label — a backticked LaTeX label like `sec:scalar` or `eq:D-ainf` for section, figure, and equation-level items. Locate with rg '\\label\{sec:scalar\}' paper/.
Convention. Sentence-level items use anchors. Section / figure / equation / table-level items use labels. When ticking, append the anchor or label to the bullet after an em-dash:
- [x] Bullet text. — `anchor phrase`
- [x] Bullet text. — `sec:some-label`
A bullet may carry multiple anchors if it spans several sentences:
- [x] Bullet text. — `first anchor`; `second anchor`
Picking a good anchor. Choose a substring that is (a) distinctive enough that rg -nF returns one hit, (b) part of the claim the item is verifying, not boilerplate that could appear in many sentences, and (c) stable — likely to survive minor copy-edits. 4–8 words usually works. Avoid anchoring on numbers that may change with re-runs.
§13 holds checks specific to this project's tooling and conventions. Each project's §13 is different — do not import another project's §13 verbatim. Add what applies. Examples that have been useful:
\cite{} resolves to an entry in refs.bib generated from a script (no hand-typed \bibitems, no fabricated metadata). Pair with the bibliography-from-ids skill.\newcommand in a generated macros file (no hand-typed numbers in prose). Pair with the import-content skill.verify-citation-claims skill.pytest (or equivalent) passes, including any tests that guard the macro / bib pipelines.scripts/ and the script is checked in.If a §13 item exists in multiple projects, consider promoting it to a skill or to the user-level CLAUDE.md rather than duplicating the rule.
A checked box means: a reviewer / co-author has actually verified the item against the current draft, has written an annotation that names specific evidence, and has appended an anchor or label that locates that evidence in the .tex source.
If any of those three is missing, the box is not checked yet.
The checklist is more useful when it is honest and partly unticked than when it is dishonestly fully ticked.
CHECKLIST_TEMPLATE.md — the canonical 12-section template; copy this into new paper directories.latex-semantic-linebreaks (for step 2), bibliography-from-ids (for §13 bib pipeline), import-content (for §13 macro pipeline), verify-citation-claims (for §13 cite-claim audit).development
Use when the user asks to check, audit, or improve a website or web project for accessibility (a11y), WCAG compliance, screen reader support, keyboard navigation, color contrast, or alt text. Triggers a plan-mode investigation against the TeachAccess design and code checklists, then implements approved fixes.
development
--- name: make-anonymous-branch description: Use when preparing a research repo for double-blind submission via anonymous.4open.science (ICML/NeurIPS/ICLR/workshop). Builds a single `anon-submission` branch with code+data+paper, scrubs identity leaks (author names, home paths, emails, wandb metadata, PDF author fields), patches LaTeX for pdf.js compatibility, and leaves `main` untouched. Triggers: "make an anonymous branch", "anonymize my repo for X submission", "set up anonymous.4open.science",
development
Translate math (formulas, estimators, algorithms) into code so the implementation faithfully matches what the source actually specifies. Use when writing code from a formula, reviewing an LLM-generated implementation of a formula, debugging a numerical mismatch with a paper, designing a new metric/estimator, or refactoring an existing math-heavy computation. Especially load-bearing whenever aggregation operators (sums, means, expectations, products, geometric means) appear over indices that can be reordered, or whenever the same English label can refer to multiple non-equivalent estimators (e.g. ratio-of-means vs mean-of-ratios, micro-average vs macro-average, sample-weighted vs unweighted). Prevents the failure mode where a code path silently implements the wrong estimator under the same name as the intended one.
development
Use when the user asks to review, find, summarize, or check Claude Code chat transcripts from a past date or time range ("review my chats from May 1st", "what was I working on yesterday", "any unfinished sessions this week"). Reads transcripts under `~/.claude/projects/`, handles local-time vs UTC correctly so late-evening sessions don't get dropped, and flags chats whose last assistant turn looks like an unanswered question.