An atlas of one repository
How the repository fits together
One template and one checker serve three skills, and a hook, a repository check and CI keep every page valid.
- Every page starts as a copy of one template.
- One checker decides whether a page passes.
- A hook, check-repo and CI each run that checker.
Line references point at commit b33f303 of 2026-10-15. Check the current source before you act on anything here.
The parts and who calls whom
Pick a parthtml-explainer skill. Tells the agent to copy the template, write the answer first and run the checker. html-explainer/SKILL.md:16 html-explainer/SKILL.md:40
explainer-gather skill. Builds on the same template and adds answer fields and one collect bar. explainer-gather/SKILL.md:39 explainer-gather/SKILL.md:40
explainer-atlas skill. Starts from the template, adds atlas.css and atlas.js, then runs the anchor check. explainer-atlas/SKILL.md:33 explainer-atlas/SKILL.md:29
Root skill shim. Dormant. It was parked on 13 October 2026 because a root SKILL.md made installers treat the whole repository as one skill. root-skill-shim.md:2
template.html. The one shell. Its style starts at line 16, its reader script at line 1542, and its version mark sits at line 6. template.html:16 template.html:1542 template.html:6
upgrade.mjs. Replaces an old page's style and script with the template's, keeps a backup, and re-runs the checker. upgrade.mjs:97 upgrade.mjs:131
check.mjs. Reads a page and prints FAIL and warn lines. Exit 0 means no FAIL. check.mjs:67 check.mjs:594
The render flag. Target. The roadmap adopts a browser check for December, and the checker takes no such flag yet. ROADMAP.md:19 check.mjs:9
The hook. Notes the pages Claude saves and runs the checker on them when the turn ends. hooks.json:11 explainer-check:139
CI and check-repo. check-repo runs the checker on every shipped page and five repository checks. CI runs it on each push. check-repo.mjs:34 ci.yml:21
The site build. After check passes on main, it copies the shipped files into _site and deploys them. ci.yml:38 ci.yml:49
- Where does the weight sit?Two files hold almost everything.
- What happens to one page?From the request to the day it is upgraded.
- What runs when you save a page?The hook, and CI after a push.
- Who catches what?Five failures, one owner each.
- How does it ship?Four steps, and what is not live.
Chapter 1 of 5, about 1 minute
Where does the weight sit?
Before this: three skills feed one template, and one checker sits under every guard.
The map shows the shape. Line counts show the weight. The template is the shell every page copies, and the checker holds every rule a page must pass.
Take from this: the template and the checker hold the weight. The hook and CI add no page rules, only a time to run the checker.
Show where each number and claim comes from
- The template's style opens at template.html:16 and its script at template.html:1542.
- The checker prints its report and sets its exit code at check.mjs:586.
- The hook names the checker it runs at explainer-check:16.
- The workflow runs check-repo at ci.yml:21.
Remember: two files carry the weight, and everything else decides when to run them.
Chapter 2 of 5, about 2 minutes
What happens to one page?
Before this: the template and the checker hold the weight.
Follow one explainer page from the request to the day it is kept current. Each card names the files that do the work.
- AskedYou ask for an explainer.
The skill lists the phrases that load it.
- CopiedThe template becomes the page.
One file, with a version mark.
- Checkedcheck.mjs reads the page.
A FAIL is fixed. A warning is advice.
- SavedThe hook sees the write.
It checks the page when the turn ends.
- UpgradedThe template moves on.
The upgrader swaps the blocks and keeps a backup.
- ShippedA kept example goes live.
CI checks it, then the site copies it.
Take from this: a page meets the template once, the checker many times, and the upgrader when the design changes.
Remember: a page is copied from the template once, then checked and upgraded for as long as it lives.
Chapter 3 of 5, about 2 minutes
What runs when you save a page?
Before this: a page is checked many times, and the hook and CI do the repeating.
Two chains run the checker for you. The hook runs while Claude Code works. CI runs when you push.
The hook, inside one Claude Code turn
- Claude saves the page with Write or Edit. hooks.json:13
- The hook notes it if it looks like an explainer. explainer-check:54
- When the turn ends, the stop step asks the checker about each noted page. explainer-check:139
- check.mjs returns its FAIL lines. explainer-check:118
- A FAIL exits 2, so Claude fixes it. Three blocks at most. explainer-check:169 explainer-check:14
CI, after a push
- You push to main or open a pull request. ci.yml:3
- The check job runs check-repo on Node 18. ci.yml:19 ci.yml:21
- check-repo checks each shipped page, then five more things. check-repo.mjs:34
- On main only, and after check passes, the site job copies the shipped files into _site. ci.yml:24 ci.yml:38
- The Pages action deploys that folder. ci.yml:49
Take from this: both chains end at the same checker. They differ in when they run and who sees the result.
Remember: the hook runs the checker at the end of a turn, and CI runs it on every push.
Chapter 4 of 5, about 1 minute
Who catches what?
Before this: the hook and CI both end at the same checker.
No single check catches everything. Each failure below has one part that owns it.
| Failure | check. | Hook | upgrade. | check- | anchors. |
|---|---|---|---|---|---|
| A page breaks a rule | Yes | Yes | Partly | Partly | No |
| Gallery out of sync | No | No | No | Yes | No |
| A skill path is stale | No | No | No | Yes | No |
| A page is out of date | No | No | Yes | No | No |
| An atlas anchor is off | Partly | No | No | No | Yes |
Take from this: the checker owns page rules and check-repo owns repository rules. Only anchors.mjs reads an atlas's line numbers.
Show where each owner does its work
Yes. check.mjs prints FAIL lines and sets the exit code at check.mjs:586. The hook blocks the turn with exit 2 at explainer-check:169. upgrade.mjs swaps the blocks at upgrade.mjs:106. check-repo compares the gallery at check-repo.mjs:42 and checks skill paths at check-repo.mjs:55. anchors.mjs counts anchors out of range at anchors.mjs:62.
Partly. upgrade.mjs re-checks only the page it upgraded, at upgrade.mjs:137. check-repo checks only the shipped pages, at check-repo.mjs:24. check.mjs checks that an anchor has both attributes, not that the line exists, at check.mjs:336.
Remember: each failure has one owner, so a pass from one check proves nothing about another.
Chapter 5 of 5, about 2 minutes
How does it ship, and what is not live?
Before this: each failure has one owner, and CI is the last guard before the site.
A release is a short, fixed path. Users get it through the marketplace, and the site redeploys from main on its own.
- Bump the version. plugin.json and the template's mark move together. plugin.json:4 check-repo.mjs:76
- Run check-repo. Then the strict plugin validation. CONTRIBUTING.md:72
- Merge, tag and release. To main, a vX.Y.Z tag, a GitHub release. CONTRIBUTING.md:73
- Let users update. The plugin lists three skills, and the marketplace delivers it. plugin.json:13 CONTRIBUTING.md:74
Take from this: a release is four steps. The site is not one of them, because it redeploys when main changes. ci.yml:25
Dormant: the root skill shim. Parked on 13 October 2026. It returns only if someone asks to clone the repository as one skill. root-skill-shim.md:9
Target: a render flag. The roadmap adopts a browser check for December. The checker takes no such flag yet. ROADMAP.md:19
Show the glossary and how this page was checked
- Skill
- A folder with a SKILL.md that an agent reads when a request matches.
- Template
- The one HTML file every page starts from.
- Checker
- The script that decides whether a page passes.
- Hook
- A script Claude Code runs on an event, such as the end of a turn.
- Anchor
- A file and line that backs a claim on this page.
- Snapshot
- This page is true at one commit and says so.
Every anchor was checked against commit b33f303 with the anchor script.
node skills/explainer-atlas/scripts/anchors.mjs skills/explainer-atlas/examples/atlas/index.html --repo . --rev b33f303
Remember: a release is four steps, and anything parked or planned is marked as such.
Recap
- Two files carry the weight, and everything else decides when to run them.
- A page is copied from the template once, then checked and upgraded for as long as it lives.
- The hook runs the checker at the end of a turn, and CI runs it on every push.
- Each failure has one owner, so a pass from one check proves nothing about another.
- A release is four steps, and anything parked or planned is marked as such.