Automated summary
Guides the creation or rework of a hand-authored xmris documentation page (tutorial, explainer or contributor guide) written as a MyST notebook, by enforcing the right genre, template and CI-checked structural rules.
Strengths
- A genre routing table that maps location, intended reader, shape and execution path (nbmake vs myst build --execute), so you don't guess among four templates.
- Collects the cross-cutting rules actually enforced by check_docs.py: frozen frontmatter, a single leading H1, explicit MyST targets above every header, no .ipynb links.
- Explains the reason behind each rule (mystmd duplicating the title, anchors renumbered by document position, unfrozen DOI links), making the constraints stick without rote memorisation.
- Explicitly fences off two off-limits areas — docs/diary/ handed to the dev-diary skill, and the generated docs/api_reference/ wiped on every regeneration — with the correct alternative of fixing the docstring in src/.
Limitations
- Tightly bound to the xmris repository: its paths, the check_docs.py command, the "Docs style" CI job and the Python 3 (xmris) label have no equivalent elsewhere.
- Assumes the toolchain is already installed (uv, jupytext, nbmake, mystmd) and defers part of the editorial style to CLAUDE.md, which is not reproduced here.
- The supplied text cuts off mid-rule about freezing doi.org links into docs/myst.doi.bib, so that step is incomplete.
Reach for it whenever you add, restructure or fix a hand-written page in the xmris documentation.
Don't use it to write a dev diary entry, to edit the generated API reference, or for documentation outside the xmris repository.
Security analysis
SafeThe skill is a pure documentation-authoring guide for a specific repository. It references project-internal tooling (check_docs.py, uv run, pytest, myst build) that executes the repo's own notebooks and build, but contains no destructive commands, no network exfiltration, no obfuscated payloads, and no attempts to override agent safety. Nothing in the text tries to redirect the auditor. Residual risk is limited to ordinary local build/test execution, which is legitimate for a docs workflow.
No concerns found
How this analysis is madeExamples
Add a tutorial notebook under docs/notebooks/io/ that walks through loading a NIfTI volume and asserting its shape, following templates/tutorial.md.This explanation page renders its title twice — the setup cell sits above the H1 with the MyST target. Restructure the top of the page so it complies with check_docs.py.Merge the three overlapping explanation pages on masking into one explainer, giving it kebab-case MyST targets above every header and no .ipynb links.name: docs-page description: Create or edit any hand-authored page in the xmris docs — tutorial notebooks (docs/notebooks/), concept explainers (docs/explanation/), or contributor guides (docs/contributing/). Use when adding or restructuring a doc page, writing notebook tests for a function, documenting a new .xmr method, thinning or consolidating existing pages, or fixing a page that renders wrong.
Write an xmris docs page
All three hand-authored genres are MyST notebooks — jupytext frontmatter plus a kernelspec — so
any of them can reach for live code-cells, real output and plots. What separates them is
shape, reader, and where the cells are executed.
1. Route by genre — read one template, not all four
| | Tutorial | Explainer | Guide |
|---|---|---|---|
| Lives in | docs/notebooks/<area>/ | docs/explanation/ | docs/contributing/ |
| Reader wants | to do the task | to know why it is like this | to contribute |
| Shape | demonstrate → assert, step by step | motivated narrative, claim → live proof | numbered steps + commands |
| uv run test (nbmake + coverage) | ✅ | ✅ | ❌ |
| myst build --execute (deploy.yml, on PRs) | ✅ | ✅ | ✅ |
| Template | templates/tutorial.md | templates/explainer.md | templates/guide.md |
templates/patterns.md is the shared MyST pattern library — read it alongside whichever genre
template applies. It holds the devices mined from the pages that work, each pointing at its live
example so you copy rather than reinvent.
Two paths never route here:
docs/diary/belongs to thedev-diaryskill. Hand off; do not write an entry from here. (check_docs.pystill checks entries — the structural rules in §2 bind every page in the tree.)docs/api_reference/is generated and gitignored.docs_api()clears the directory before regenerating, so a hand edit there is destroyed with no git history to recover it. Fix the docstring insrc/instead.
House style — motivated narrative, one home per concept, every article stands alone, the MyST
palette carries the argument — lives in CLAUDE.md § "Documentation style" and is not
restated here. One carve-out: the motivated narrative rule binds explainers and tutorials, not
guides. A numbered list of commands is the correct shape for setup.md; novelizing an install
guide makes it worse.
2. Rules that survive genre
Every one of these is enforced by check_docs.py, which the Docs style CI job runs over the
whole tree on every PR. The build is silent about all of them; the gate is not. The tree is at
zero errors — do not be the change that reopens the backlog.
- Frontmatter is exact, and
display_name: Python 3 (xmris)is the frozen project label. If your local Jupyter rewrites it (to.venv,Python 3 (ipykernel), …), fix it back before committing. Execution is unaffected either way;name: python3resolves to the uv venv. - Nothing before
(target)=+# H1. mystmd lifts the first heading into the page title but only removes it from the body when it leads the page. Put anything first — even a hiddenremove-cell— and the title renders twice. The setup cell always comes after the H1. Exactly one H1 per file; never restate the title as another header. - Explicit MyST target above every header (Commandment 8), kebab-case, prefixed with the page
topic. Auto-generated slugs are numbered by document position —
id-1-,id-2-— so inserting one section silently renumbers every anchor below it and breaks deep links. - Never link
.ipynb.myst.ymlexcludesnotebooks/**/*.ipynb, so the link resolves tonulland dies — with no build warning. Use[text](#explicit-target)or a relative.mdpath. - A new
doi.orglink must be frozen intodocs/myst.doi.bib(cd docs && uv run myst build --doi-bib, then commit it). mystmd resolves DOI links against the network at build time, so an unfrozen one makes the build fail whenever a runner's lookup is rate-limited — on somebody else's pull request. Link text is irrelevant;[paper](https://doi.org/…)is resolved just like[](…). - TOC entry in
docs/myst.ymlis mandatory (excepttestonly_). The sidebar shows the TOC title — keep it consistent with the H1. A page missing from the TOC never renders. - Reader-facing cells use plain strings (
"time","frequency") — the low entrance barrier is deliberate.ATTRS/DIMS/COORDSappear only in hidden test cells or in passages explicitly addressed to contributors. - Commit only the
.md.docs/**/*.ipynbis gitignored; edits made in an.ipynbtwin are invisible to both tests and docs until synced back (uv run jupytext --sync <file>).
Tone across all three: conversational, sharp, concise, no filler — but never assuming expertise.
Background an expert would skip goes in a :::{dropdown}, off the main line.
3. Editing an existing page
Most doc work is editing, and the house rules make thinning expected work, not scope creep.
- Run the checker on the page before you start. It should already be at zero errors; if it is not, you inherited a broken page and CI will blame your PR for it — fix it and say so.
- Every header already carries a target, so the live risk is renaming one: targets are
page-global in MyST, and a rename breaks every deep link to it. Grep first —
git grep -nF "#old-slug" -- docs— and prefer adding a new section over re-keying an old one. - Consolidating across pages is the one home per concept rule doing its job. Say what you moved in the PR body, and keep the orienting recap on the page you thinned.
4. Verify before finishing
uv run python .claude/skills/docs-page/check_docs.py docs/<path>/<page>.md
Errors are render-breaking and exit 1 — the same exit code the Docs style CI job gates on, so
this run is the gate, locally. Warnings are drift and exit 0. Then, for a tutorial or an
explainer — test-gen walks docs/notebooks/ and docs/explanation/, so both are in the
pytest suite:
uv run test-gen
uv run pytest "tests/autogen_notebooks/<category>/<name>.ipynb" -n0 --no-cov
# explainers land flat under explanation/:
uv run pytest "tests/autogen_notebooks/explanation/<name>.ipynb" -n0 --no-cov
(--nbmake is already in pytest addopts.) A page only joins that suite once it carries a jupytext
kernelspec — that is the exact condition _is_executable_page tests, so a frontmatter-less
page is skipped rather than failing with no kernel to start.
Guide cells are executed by the docs build only — cd docs && uv run myst build --html --execute locally, the same command deploy.yml runs on every PR. A guide that pulls in an
external file (the per-skill Contribute pages quote each SKILL.md this way — a literalinclude
with :filename: as the label and :class: skill-quote) is re-read on every build, so the quoted
content is always current; a missing or renamed path surfaces as a ⛔️ error and hard-fails
myst build --strict. (uv run docs and myst start serve a live preview
and never exit; they are for reading the site, not for checking it.)
Two pathspec traps, both of which produced wrong answers while auditing this repo:
git grep … -- 'docs/**/*.md'silently skipsdocs/index.md— no intermediate directory. Use-- docs.grep -r docs/walks ~9,800 gitignored_build/files carrying stale copies of everything.
Checklist
<!-- excerpt:start -->- [ ] Genre identified; the matching template and
patterns.mdread - [ ] Frontmatter exact,
display_name: Python 3 (xmris) - [ ]
(target)=+ single H1 is the very first content; a target above every header - [ ] Reader-facing cells use plain dim strings; config singletons only in hidden cells
- [ ] Synthetic MRS data comes from
simulate_fid; tutorials open with the functions-used table - [ ] TOC entry in
docs/myst.yml(unlesstestonly_); no.ipynblinks - [ ] New
doi.orglink frozen intodocs/myst.doi.bib(myst build --doi-bib) and committed - [ ]
check_docs.pypasses on the page (0 errors) - [ ] Tutorial only: single-notebook nbmake run is green
- [ ] Only the
.mdstaged
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/write-an-xmris-docs-page-ms2s7bcz/download' --output '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md.part' && mv '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md.part' '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && test -s '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/docs-page' && cp -R '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz' '.claude/skills/docs-page'Cursor
test -f '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && test -s '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/docs-page' && cp -R '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz' '.cursor/skills/docs-page'Codex
test -f '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && test -s '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/docs-page' && cp -R '.skill-downloads/write-an-xmris-docs-page-ms2s7bcz' '.agents/skills/docs-page'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/write-an-xmris-docs-page-ms2s7bcz'openskills read 'write-an-xmris-docs-page-ms2s7bcz'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/write-an-xmris-docs-page-ms2s7bcz/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Supabase Docs Authoring
Documentation
Write, edit, and review Supabase documentation content including guides, tutorials, reference docs, and partials. Follow style guides and MDX/TOML validation rules.
Create Architecture Decision Record
Documentation
Create a new Architecture Decision Record with sequential numbering, register it in the AgentDB graph, and link related ADRs.
Plan update with deep research
Documentation
Updates a plan document by launching parallel subagents to analyze a topic across all compiler passes, then consolidates findings into the plan doc.