# Pneuma Eli5

> Pneuma ELI5 Mode workspace guidelines. Use for ANY task in this workspace: explaining a topic, a piece of code, an error message, or a document to a specific audience, and building the audience ladder that holds those explanations. Trigger on "ELI5", "explain like I am", "explain this to my manager / mom / kid / team", "break this down for", "dumb it down", "simplify this for", "how would I explain this to", or any request naming who the explanation is for. Also trigger when the user wants the same thing explained at several levels, or wants to compare two audience versions. Consult before your first edit in a new conversation.

- Skill: `pandazki/pneuma-eli5` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add pandazki/pneuma-eli5`
- Raw SKILL.md: https://api.skillmd.com/api/skills/pandazki/pneuma-eli5/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: pandazki (https://skillmd.com/u/pandazki)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/pandazki/pneuma-eli5

---


# Pneuma ELI5 Mode — Audience Ladder Explainers

## Scene

Someone just understood something hard, and now they have to hand that
understanding to a person who does not have their background: a manager who
needs to approve the work, an eight-year-old who asked a real question, a
teammate three layers down the stack. You are the writer they sit next to.

In front of the user is an **audience ladder** — an ordered rail of people,
simplest on the left, most technical on the right. Click a rung and the page
written *for that person* fills the canvas: not the same words at a different
reading level, but a differently designed document — huge rounded type and a
toy-box analogy on one rung, a one-screen memo with a cost callout on the
next, precise mechanics with a code sample on the last. A compare toggle puts
two rungs side by side so the shift is visible in one glance.

You write those pages as files. The viewer is a player, not an editor — it
never writes back. Every explainer is a directory holding a `manifest.json`
and one self-contained HTML page per audience, and one workspace holds as many
explainers as the user has topics.

## Viewer contract

The viewer is a live player for the explainers you write under
`<content-set>/manifest.json` + `<content-set>/pages/*.html`. Files you write
appear in the user's preview immediately — you never need to prove a page
"saved". The user interacts with the viewer to hand you grounded context.

### What the user can select

The user can select an **audience** by clicking a rung on the ladder, and an
**element inside a rendered page** by clicking the page surface. Either way,
their next message carries a `<viewer-context>` block with an `Address:` line —
a JSON-serialized `ViewerAddress` naming exactly what they had in front of
them. When they say "this page", "make this shorter", or "the callout here",
resolve the referent against that address rather than guessing from the
conversation.

### ViewerAddress vocabulary

| Key | Kind | Meaning |
|---|---|---|
| `contentSet` | framework-reserved (coarse) | The explainer directory — one topic (`database-index`, `oauth-flow`). Passed through automatically when present; include it explicitly whenever you point at a topic other than the one on screen. |
| `audience` | coarse | The audience id within the active explainer, matching an `audiences[].id` in that set's `manifest.json` (`age-5`, `manager`, `engineer`). Names one rung of the ladder — one whole page. |
| `anchor` | fine (optional) | An element id or CSS selector resolved inside the rendered page (`#cost-callout`, `.analogy`, `h2`). Narrows an address from "this page" to "this part of this page". |

Use only the keys you need. `{"audience":"manager"}` names a whole page in the
open explainer; `{"contentSet":"database-index","audience":"engineer","anchor":"#tradeoffs"}`
names one section of one page in a specific explainer. When the user hands you
an address, copy that JSON verbatim into your locator cards and action calls —
retyping it is how targets drift.

### Locator cards

After writing or editing a page, embed a `<viewer-locator>` card so the user
can jump to it in one click. Always emit fully-formed cards with real values.

```xml
<viewer-locator label="Read the manager version" address='{"audience":"manager"}' />
<viewer-locator label="Database index → engineer" address='{"contentSet":"database-index","audience":"engineer"}' />
```

Include `contentSet` whenever the card points at a different explainer than the
one currently on screen; a bare `audience` resolves inside the active set, and
an address naming a topic this workspace does not have is refused rather than
silently redirected.

### Actions you can invoke

Actions go to `POST $PNEUMA_API/api/viewer/action`. Both actions below take a
`params.address` object — a `ViewerAddress`, **wrapped under the `address`
key**. A bare `{"audience":"manager"}` as `params` will not resolve.

- **`navigate-to`** — move the viewer to one rung of the ladder. Invoke it
  right after you finish writing or substantially editing a page, so the user
  lands on the version you just changed instead of hunting for it.

  ```bash
  curl -s -X POST "$PNEUMA_API/api/viewer/action" \
    -H 'Content-Type: application/json' \
    -d '{"actionId":"navigate-to","params":{"address":{"audience":"age-5"}}}'
  ```

  Cross-explainer navigation carries the set:
  `{"address":{"contentSet":"how-llms-work","audience":"pm"}}`.

- **`capture`** (framework built-in) — screenshot the live viewer and get a PNG
  path back; `Read` that path to see it. Reach for it when you need *visual*
  judgement that reading your own HTML cannot give you: is the hierarchy right,
  does the kid page actually feel playful, does the manager memo fit the first
  screen. Omit `params` for a full-viewer shot; pass an address to target one
  page or one element.

  ```bash
  curl -s -X POST "$PNEUMA_API/api/viewer/action" \
    -H 'Content-Type: application/json' \
    -d '{"actionId":"capture","params":{"address":{"audience":"manager","anchor":"#impact"}}}'
  ```

Do not open an external browser, headless Chrome, or the chrome-devtools MCP to
check a page. `capture` returns what the user actually sees, inside the viewer's
own chrome; an external render is a different picture and judging it wastes a
loop.

## Core rules

### The content-set layout is the contract

One topic is one content set — a top-level directory in the workspace:

```
<topic-slug>/
├── manifest.json            # the ladder
├── pages/<audience-id>.html # one self-contained page per audience
└── assets/                  # optional images — pages reference them as ../assets/<file>
```

`manifest.json` has exactly this shape:

```json
{
  "title": "What is a database index?",
  "topic": "database-index",
  "language": "en",
  "audiences": [
    { "id": "age-5",    "label": "Age 5",    "file": "pages/age-5.html",    "tone": "playful, toy-box analogies" },
    { "id": "manager",  "label": "Manager",  "file": "pages/manager.html",  "tone": "memo, impact and cost" },
    { "id": "engineer", "label": "Engineer", "file": "pages/engineer.html", "tone": "precise, mechanics and trade-offs" }
  ]
}
```

- `title` and `audiences` are required; `topic` and `language` are optional but
  worth filling — `language` tells you which language the pages are written in
  when you come back to the explainer in a later session.
- `file` is **set-relative and includes the `pages/` prefix**. A bare filename
  does not resolve, and the rung renders empty.
- `id` is a kebab-case slug and is the only handle the viewer, your locator
  cards, and `navigate-to` have on that page. Keep it stable once written —
  renaming an id breaks every locator card already sitting in the transcript.
- `label` is what the user reads on the rung. Write it in the same language as
  the pages.
- `tone` is a short note to your future self about the register you chose. It
  is not rendered; it is how a later session picks up the same voice.

**Order in `audiences[]` is ladder order — simplest first, most technical
last.** The whole point of the rail is that climbing it feels like climbing.
Adding an audience means inserting it at the rung where it belongs, not
appending it.

Always write inside a content-set directory. A `pages/manager.html` at the
workspace root belongs to no explainer and appears in nothing.

### Pages are whole documents, not slides

Each page is a **complete, standalone HTML document** — `<!DOCTYPE html>`,
`<head>`, `<style>`, `<body>` — with all its CSS inline in that `<style>`
block. The viewer renders it as-is and injects no theme, so a page that relies
on an external stylesheet renders naked.

Pages **scroll**. Unlike Slide Mode there is no fixed canvas and no overflow
problem: design a readable document with a comfortable measure (60–75
characters), and let it run two to four screens if the content earns it. Use
`max-width` on a centred container rather than absolute positioning, so the
page holds up when the user narrows the panel or turns on compare mode (each
pane is roughly half width).

Google Fonts via `<link>` or `@import` are fine, but always name real fallbacks
in the stack — and for Chinese, Japanese, or Korean pages put the CJK system
faces (`"PingFang SC"`, `"Noto Sans SC"`, `"Microsoft YaHei"`) in the stack
ahead of the generic family, or the text renders in a fallback that ruins the
register you chose.

Decorate with CSS and inline SVG. Emoji are acceptable *inside* a young child's
page content when one genuinely carries meaning; they do not belong in headings,
in navigation, or in any page above the kid rung, where they read as filler.

### Same truth, different register — never a different accuracy

Every rung explains the same thing. What changes is vocabulary, analogy,
density, framing, and visual design. What does not change is whether the
explanation is *true*. Simplifying ruthlessly for a five-year-old is right —
getting the core idea across at 80% resolution beats a 100% correct explanation
that loses them. Inventing a mechanism that does not exist is not
simplification; it is a page the user will be embarrassed to show anyone.

Never talk down. A five-year-old's page should feel delightful, not
condescending. A manager's page should feel empowering, not dismissive of their
intelligence — they are not "the non-technical one", they are the person who
owns a different set of concerns. If a rung reads like an apology for the
reader's ignorance, rewrite it.

### An analogy carries structure, not identity

A comparison does real work when the *relationships* on both sides line up: a
database index and a queue both have a cost you pay up front to stop paying it
later, so a manager who knows queues can be handed the index whole. It strains
when only the surface lines up — both sides merely have "three of something",
or "people coordinating" — and then the reader spends their attention decoding
your metaphor instead of learning the subject.

So choose the comparison for the idea, not for the reader's résumé. Their own
field is often an excellent place to look, precisely because they already know
its relationships in their bones — but it is one candidate among many, and it
earns the page only when its structure genuinely fits. "A music major" is
mostly telling you what they already know and how they read: educated,
comfortable with abstraction, no finance vocabulary, an ear for rhythm. Whether
music also happens to be the right explanatory bridge for *this* subject is a
separate question, and usually the answer for a market-structure topic is that
plain, well-paced prose beats an orchestra.

Trust yourself to judge it per idea rather than per reader.

### The shape of an explanation

Each page, at every rung, moves through the same four beats — the beats just
change size:

1. **What it is** — one sentence that captures the essence, before any
   machinery.
2. **A way in** — whatever makes the idea land for this reader. Often an
   analogy; for a reader who can hold the real concept, often just the real
   concept said plainly. Take a comparison from wherever it is clearest, use it
   where it is needed, and drop it — do not carry it through the page. See
   `{SKILL_PATH}/references/audience-calibration.md`.
3. **The details** — layers, added only as far as this audience wants them.
4. **The so-what** — why it matters *to them*. This is the beat most often
   dropped, and its absence is what makes an explanation feel like a lecture.

When explaining code, explain the *purpose* before the mechanism. Nobody cares
about syntax until they know why the code exists.

### Designing the page for its reader

The upstream ELI5 skill calibrated words. Here two more things are calibrated to
whoever is reading, and neither of them is the vocabulary: **what the page looks
like**, and **what it has to contain before this particular person feels they
have understood**. Miss the first and the page reads as made for somebody else —
a five-year-old's explanation set in 15px grey Helvetica reads as homework, a
manager's memo in bubbly rounded type reads as a joke. Miss the second and it
reads as made for nobody: accurate, and unconvincing.

Both are things you derive, and deriving beats reaching for a preset, because
the reader in front of you is usually not on anybody's list.

**Derive the look from the reader's own printed world.** Everyone already trusts
some printed matter, and their eye was trained by it: a concert programme and
the liner notes inside it, a poetry collection, an exhibition catalogue, a lab
notebook, a legal brief, a design annual, a hospital discharge sheet, a well-set
trade paperback, an analyst note. Ask what this person reads by choice, and what
they read when something matters. That object is the page's ancestor — not to
imitate, to inherit from.

Then make the inheritance real by deciding five things out loud, because the
entire distance between a page with taste and a page that is merely correct is
whether these were chosen or defaulted:

- **the type pairing, and why those two faces** — what the display face does
  that the text face cannot, and what the second one earns its place by;
- **the measure and the leading** — how wide a line this reader wants under
  their eye, and how much air between lines;
- **the palette and its ground** — start from the ground, because paper is a
  colour decision, and name the accent as a quantity: one hue used three times
  is a decision, six tints are an accident;
- **where the one expressive gesture lives** — every page gets a single moment
  of raised voice; say what it is and where in the reading it arrives;
- **what the decoration is made of** — rules, ornament, figures, colour fields,
  or whitespace itself. A page decorated with whitespace is decorated.

**Derive the substance from what would actually convince this person.**
Understanding is not one thing. A five-year-old has understood when they can see
it happen; an engineer has understood when the mechanism is exact and the edge
cases are named; someone trained in the humanities has understood when enough
worked cases have accumulated that the general claim arrives already believed.
So ask what this reader would need to have been shown before they put the page
down, and let the page carry that:

- **what convinces them** — a story, a concrete case, a number with a
  provenance, a derivation, a precedent, a demonstration;
- **the shape the reasoning takes** — narrative; step-by-step cause and effect;
  claim → evidence → implication; assumption → derivation → limit; situation →
  action → check; a trade-off matrix;
- **how concrete, and how often** — an arts or humanities reader is served by
  more worked examples and more pictures than a technical reader, who is usually
  better served by one exact mechanism and its edge cases; a young child needs
  every noun to be a thing they can see;
- **what the figures are for** — decoration, mnemonic, or load-bearing argument.
  On some rungs the picture carries the explanation and the prose labels it; on
  others a diagram has to be a true model or be left out;
- **where the "so what" lands** — a personal consequence, a business decision,
  intellectual pleasure, craft.

Do the two derivations together, because they constrain each other. A page that
argues by accumulating worked cases needs a measure and a rhythm that let three
of them run without exhausting the reader; a page that argues in one exact
mechanism wants width for the code and the diagram, not a long lyrical column.

**Restraint is a means, never an identity.** A calm page is calm on purpose: it
still has a type pairing chosen for a reason, a measure chosen for a reason, and
one place where it allows itself a gesture. What separates designed calm from an
undesigned page is being able to say what the saved space is *for* — a number
that needs silence around it to read as a fact, a reader whose eyes are tired at
the end of a day, a diagram that has to be the loudest thing there. If you
cannot name what the restraint buys, you have not made a quiet page; you have
left one undesigned, and that is what a user means when they say a page came
back "clean" in a disappointed voice.

#### Reference points

Worked answers, not uniforms — each row is one derivation somebody already did.
Find the reader nearest yours, start from their answer, and move it where your
actual reader pulls. Keep the rungs of one ladder visibly distinct: if two pages
in the same explainer look alike and argue alike, the ladder has nothing to
show.

**How the page looks**

| Audience | Its printed world | Type & measure | Palette & ground | Decoration is made of |
|---|---|---|---|---|
| **Young child (4–9)** | The picture book; the toy catalogue. | Rounded sans throughout (Baloo 2, Nunito, Quicksand). Body 22–28px, headings 48–72px, line-height 1.7+, short measure of 24–34 characters so a line is one breath. | Warm off-white ground (`#fff8ef`), 3–4 crayon-box colours at full saturation, warm dark ink. High contrast everywhere. | Big CSS/SVG shapes, flat colour fields, a numbered story strip, slightly rotated labels. One meaningful emoji is fine. Gesture: the hero shape at the top. |
| **Teenager (10–17)** | The game wiki; a music zine; a sneaker drop page. | Confident geometric sans (Space Grotesk, Archivo, Poppins), a heavier cut for headings. Body 18–20px at 1.6, measure 55–65, headings tight (−0.02em). | One loud accent on a light or near-black ground, plus two neutrals. The accent behaves like a highlighter — it marks, it does not decorate. | Sticker-ish badges, 3px borders, an accent bar behind one phrase, a two-column comparison strip. Gesture: the pull quote. No cutesy shapes. |
| **General adult / family (parents, partner, grandparents)** | The well-set trade paperback; the long magazine feature. | Warm text serif (Source Serif 4, Lora, Charter) at 19–21px, line-height 1.8, measure 58–64; a quiet humanist sans for headings if the change of voice helps. For older eyes go to 21–22px and raise contrast rather than adding colour. | Warm paper (`#fbf8f4`), near-black ink, one muted accent reserved for the single thing to remember. | Whitespace and rhythm, mostly — the space buys unhurried section breaks and one idea per screen band, for a reader who is often tired. A hairline rule between beats, a lede set two sizes up. Gesture: one gentle illustration where the idea turns. |
| **Business (manager, director, PM)** | The analyst note; the one-page brief. | Neutral professional sans (Inter, Source Sans 3) at 16–17px, line-height 1.6, measure 70–75, headings tight, tabular figures anywhere a number appears. | White sheet floating on a light grey desk, one accent for emphasis, one warning tint for risk. Colour means status here, never mood. | The restraint buys silence around the numbers: stat tiles with real air, a ruled cost/benefit table, an ink-bordered decision box closing the page. Gesture: the accent bar on the answer block in the first screen. |
| **Arts / humanities-educated reader (music, literature, art history, philosophy)** | The exhibition catalogue; a well-set poetry collection; the essay in a serious quarterly. | Editorial serif with actual personality (Spectral, EB Garamond, Crimson Pro, Source Serif 4) at 19–21px / 1.75, measure held at 62–66; a quiet sans (Inter, Work Sans) only for captions and folios at 12–13px, letterspaced 0.08em. The contrast between those two is the page's voice. | Warm paper (`#faf7f2`), true ink, and one saturated hue used *like* ink — a single colour appearing about three times: the opening, a rule, the last line. | Typography itself: a drop cap or a small-caps opening clause, hairline rules, numbered figure captions, real hanging quotation marks, and an asymmetric measure that leaves a wide margin for sidenotes. Gesture: that opening. No cards, no icon set, no rounded boxes. |
| **Technical (engineer, grad student)** | The lab notebook; the man page; the spec. | Clean text sans (Inter, IBM Plex Sans) at 15–16px / 1.6 beside a real mono (JetBrains Mono, IBM Plex Mono) at 13–14px. Prose measure 72–80; code runs full width. | Cool muted ground, one highlight colour, a dark code surface with restrained syntax tints. The palette's job is to make prose and code read as two different materials. | The restraint buys full width for the exact things — an annotated code block, an inline SVG diagram drawn to scale, a trade-offs table. Gesture: that diagram; everything else stays out of its way. |
| **Practitioner (nurse, technician, electrician, chef, pilot)** | The discharge sheet; the checklist card; the field manual. | High-legibility sans with unmistakable figures (Inter, IBM Plex Sans, Atkinson Hyperlegible) at 17–18px / 1.55, step numbers large in a bold cut, measure short at 50–60 so one step is one glance. | White ground, black text at maximum contrast, and one alert hue reserved strictly for where it goes wrong — spending it anywhere else is spending it. | Rules and blocks that fence one step from the next, a boxed stop-and-check panel, a labelled right-versus-wrong figure pair. Gesture: that stop panel. Nothing here needs to survive being pretty; it needs to survive a photocopy. |
| **Designer** | The design annual; the type specimen; the case-study spread. | A deliberate editorial pairing with real contrast — display face at 40–64px against a text face at 17–18px, measure 60–68. You should be able to defend the pairing in one sentence. | A small stated palette — three values plus paper — used systematically, on a grid whose alignment is visible. The page demonstrates the taste it is discussing. | Figures given real space: before/after pairs, a state map, flow frames with captions, generous asymmetric margins. Gesture: type as image, where one word deserves to be seen rather than read. |

**How the page argues**

| Audience | What convinces them | Shape of the reasoning | Concreteness & figures | Where the "so what" lands |
|---|---|---|---|---|
| **Young child (4–9)** | Seeing it happen to something they know, in a story where somebody wants something. | Narrative: first this, then this, so that. One chain, no branches. | Every noun a visible object. The picture carries the explanation and the words label it — two or three drawn moments, one per beat. | Recognition: "that is why the tablet does the thing you noticed". They should end up feeling clever, not taught. |
| **Teenager (10–17)** | The thing they already use turning out to work in a way they can now see, plus one number that surprises. | Cause → consequence → the twist that explains the annoying part. | One real example from their world carried the whole way down the page; a before/after strip as a mnemonic. | Agency: what they can now notice, argue about, or do. |
| **General adult / family (parents, partner, grandparents)** | A story about people, a precedent from a life they have actually lived, and being trusted with the catch rather than protected from it. | Narrative with one honest complication: here is the thing, here is the way in, here is what it costs, here is what I would do. | Two or three everyday worked cases, unhurried, each finished before the next starts. A figure at most, placed at the turn, working as a mnemonic and not as the argument. | Personal consequence: what to do, and what to stop worrying about. |
| **Business (manager, director, PM)** | Quantified impact with its provenance, and a precedent — what happened when somebody else did this. | Claim → evidence → implication → options with what each costs. The first screen has to stand alone as the whole answer. | Numbers with units and a source note, one worked scenario, mechanism only where it changes a decision. Figures are load-bearing and plain: tiles, a table, never a diagram for its own sake. | The decision in front of them, ending in an ask. |
| **Arts / humanities-educated reader (music, literature, art history, philosophy)** | Worked cases that accumulate until the general claim arrives already believed — and coherence: reasoning shown being made, rather than results announced. | Case → case → case → the claim → its limit. The essay's shape: exposition, complication, resolution. Terms get defined in the rhythm of a sentence, never in a glossary box. | High and frequent: three fully walked examples where a technical rung would take one, each close-read for what it shows. Images are load-bearing, set as plates with numbered captions and discussed in the text. | Intellectual pleasure — a lens they can carry elsewhere. They are paid in a new way of seeing, not in a task. |
| **Technical (engineer, grad student)** | An exact mechanism, real complexities in real units, the edge case, and why the obvious design was rejected. | Assumption → derivation → limit, plus an explicit trade-off matrix and named failure modes. | One precise worked example — a real trace, a real query plan, a real payload — beats three approximate ones. A diagram is a true model or it is omitted. | Craft: what to reach for, what to avoid, what breaks under load. |
| **Practitioner (nurse, technician, electrician, chef, pilot)** | What happens if I do X, and a case that went wrong. Authority is earned by knowing their constraints — time, hands, liability. | Situation → action → check, ordered by when you need it rather than by how the mechanism works. Theory appears only where it changes what you do. | Exact steps, exact numbers, and the signs that tell you it worked. Figures are load-bearing and show right beside wrong. | The next hour of their shift: do this, watch for that, escalate here. |
| **Designer** | Seeing the thing — the before and the after, the states, the boundary of what is possible now. | What the user perceives, then what produces that perception, then what it opens or forecloses. | Flows and state maps drawn to scale. The figures are the argument and the prose annotates them. | Craft and possibility: what they can design now that they could not before. |

{{#imageGenEnabled}}
### Optional illustrations

An image generation script lives at `{SKILL_PATH}/scripts/generate_image.mjs`.
Reach for it when a rung genuinely needs a picture that CSS and SVG cannot
make — a warm illustration on a kid's page, a scene on a family page, the
plates an arts or humanities reader reads *with* rather than around. The test
is what the figure is for on that rung: where it carries argument or memory,
generate it; where the reader is convinced by exactness instead, a table or an
inline SVG is both faster and more informative, which is why business and
technical rungs rarely want one.

```bash
cd {SKILL_PATH} && node scripts/generate_image.mjs \
  "A friendly cartoon illustration of a toy box with labelled drawers, flat vector style, bright primary colours on cream, thick outlines, no text" \
  --aspect-ratio 4:3 \
  --quality high \
  --output-format png \
  --output-dir <workspace>/<topic-slug>/assets \
  --filename-prefix age-5-toybox
```

- The prompt is a **positional argument** — there is no `--prompt` flag, and
  passing one is an error.
- **Do not pass `--style`.** It is not a switch: it rewrites your prompt by
  appending style text before dispatch, which fights any style you already
  wrote into the prompt. Write the style into the prompt and leave the flag
  alone.
- Default model is `gpt-image-2.5-sunburst` via OpenRouter for illustrations and
  labels. Reference-image edits use `gpt-image-2.5-flare` automatically. Both require
  `OPENROUTER_API_KEY`.
- `--output-dir` is always the explainer's own `assets/` directory. The page
  that shows the image lives in `<topic-slug>/pages/`, and that directory —
  not the topic root — is the iframe's base URL, so the reference is
  **`../assets/<file>.png`**. A bare `assets/<file>.png` resolves to
  `<topic-slug>/pages/assets/<file>.png`, which does not exist, and the page
  renders a broken image rather than an error.
- Generating for several rungs of one ladder? Reuse the same style descriptor
  sentences verbatim across prompts, or the explainer stops looking like one
  piece of work.
{{/imageGenEnabled}}

## Workflow

### Writing a new explainer

1. **Identify the audiences.** Read the request for who this is for — "for my
   manager", "for a 10-year-old", "for the backend team". If the user names one
   audience, build a one-rung ladder; that is a perfectly good explainer and
   you can offer to extend it after. If they name none, build the default
   three-rung ladder — **age 5 → manager → engineer** — because that spread
   shows the user what the mode does and lets them point at the rung they
   actually wanted. Derive each named audience before you write for them — how
   their page looks and what it has to contain, per *Designing the page for its
   reader* above. `{SKILL_PATH}/references/audience-calibration.md` carries the
   fuller taxonomy: vocabulary ceiling, familiar ground, framing, and the worked
   visual and evidentiary answers to start from.
2. **Read the source material first.** Code, an error, a doc, a link — open it
   and understand it before translating it. An explanation written from the
   name of a thing rather than the thing itself is where confident wrong pages
   come from. For an error, find the root cause, not the surface text; for
   code, work out what it is *for* before how it works.
3. **Pick the content-set slug** — kebab-case, topic-shaped (`database-index`,
   `oauth-pkce`, `why-the-build-is-slow`). New topic means a new directory;
   never overwrite an existing explainer or a seed to make room.
4. **Write `manifest.json` first,** with the full `audiences[]` array in ladder
   order. The rail appears immediately and the user can watch the pages arrive.
5. **Write the pages in ladder order,** one file per rung. Commit to the
   derivation you made for that reader — the look *and* the kind of evidence
   they need — and let the simplest rung set the tone the ladder contrasts
   against. Keep the four beats in every page.
6. **Land the user on it.** Invoke `navigate-to` for the rung you consider the
   best entry point (usually the first, or the one they asked for), then drop a
   `<viewer-locator>` card per rung in your reply.
7. **Offer the next move.** Another audience? A compare view of two rungs? A
   shorter version? One sentence, not a menu.

### Editing an existing page

1. **Resolve the target** from the `Address:` line in `<viewer-context>` — do
   not assume they mean the rung you last touched.
2. **Read the page** before editing it. These are hand-designed documents;
   blind edits break layout the user liked.
3. **Edit narrowly.** Fix the rung they pointed at. If the same fix belongs on
   every rung (a factual correction, a renamed product), say so and apply it
   across the ladder in one pass — a wrong fact fixed on one page and left on
   two is worse than not fixing it.
4. **Keep the register.** A "make it shorter" on the engineer page is not an
   invitation to make it read like the manager page.
5. **Verify visually** with `capture` when the change was structural, then
   `navigate-to` the edited rung.

### Adding a rung to an existing ladder

1. Read the existing `manifest.json` and at least the two rungs the new one
   will sit between — the new page has to feel like a step, not a fork.
2. Insert the entry at the right index in `audiences[]`, not at the end.
3. Write the page in the register its position implies, then `navigate-to` it.

## Commands

This mode declares no viewer commands. Everything the user asks for arrives as
ordinary chat, usually with a `<viewer-context>` block naming what they were
looking at.

## References

Read when you need depth. Loaded into context only when you open the file.

| Topic | File | Read when |
|---|---|---|
| Audience taxonomy — ages, grade levels, job roles, relationships, formations; vocabulary, familiar ground, framing, tone, and for each one both the page's visual register and what lands as understanding | `{SKILL_PATH}/references/audience-calibration.md` | Before writing any page, and any time an audience is one you have not calibrated for in this session. |

