toolkit/packages/skills/explain-to-me/SKILL.md
Produce a self-contained, richly styled HTML explainer for any topic the user asks about. Picks the right template from a bundled set of 22 visual patterns (feature explainer, concept explainer, module map, PR review, ADR, options paper / trade-off analysis, system diagram, flow- chart, status report, slide deck, prototype, editor, etc.), fills it with real content, augments with inline diagrams via sister skills (/fireworks-tech-graph for architecture / flow / sequence diagrams, /graphify for knowledge graphs), applies a Claude-brand polish layer, and publishes to here.now at a topic-slug URL so the link is shareable immediately. Local-only output is available with --local. Use when Stevie says "/explain-to-me", "explain-to-me X", "make me an explainer for X", "give me an HTML explainer", "render this as a webpage", "ADR for X", "options paper for X", or asks for a rich visual writeup. The skill picks the template, names the choice up-front, and reaches for diagrams whenever the content shape needs them.
npx skillsauth add stevengonsalvez/agents-in-a-box explain-to-meInstall 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.
Takes a topic (a feature, a concept, a decision, a plan, an incident, …)
and produces a single self-contained HTML file styled in Claude's brand,
using whichever bundled template best fits the topic's shape. By default
it then publishes the file via /here-now and returns the shareable URL.
All 22 templates use Claude's palette (#FAF9F5 ivory, #141413 slate,
#D97757 clay, #E3DACC oat, #788C5D olive). The skill applies
assets/claude-theme.css on top for typography +
brand badge.
/explain-to-me <topic> — primary/explain-to-me <topic> --local — skip the here.now publish, just write the file/explain-to-me (no args) — ask the user what to explainIf $ARGUMENTS is non-empty, use it as the topic. Otherwise ask one
question via AskUserQuestion: "What should I explain? One line."
Then classify the topic against this table — this drives template choice. Pick exactly one template; do not merge.
Templates are tagged ★ when they are visual-first (diagrams, charts, SVG flows). When two templates fit, prefer the ★ one unless the topic is intrinsically prose-heavy.
| Topic shape | Template | Visual |
|---|---|---|
| Architecture / design decision with options + rationale | 21-adr.html | ★ |
| Options paper / trade-off analysis (no decision yet) | 22-options-paper.html | ★ |
| Implementation plan with milestones + diagrams | 16-implementation-plan.html | ★ |
| Pipeline / process flowchart | 13-flowchart-diagram.html | ★ |
| Mental model of an unfamiliar repo/module | 04-code-understanding.html | ★ |
| Inline SVG figure sheet | 10-svg-illustrations.html | ★ |
| Abstract concept / algorithm with interactive demo | 15-research-concept-explainer.html | ★ |
| Concrete feature in a codebase ("how X works in repo Y") | 14-research-feature-explainer.html | |
| PR review (reviewer perspective) | 03-code-review-pr.html | |
| PR writeup (author perspective) | 17-pr-writeup.html | |
| N approaches compared (code) | 01-exploration-code-approaches.html | |
| N visual directions compared | 02-exploration-visual-designs.html | ★ |
| Weekly / sprint status | 11-status-report.html | ★ |
| Incident post-mortem | 12-incident-report.html | ★ |
| Component variant matrix | 06-component-variants.html | ★ |
| Design system reference | 05-design-system.html | ★ |
| Animation / micro-interaction demo | 07-prototype-animation.html | ★ |
| Multi-screen clickable prototype | 08-prototype-interaction.html | |
| Slide deck (arrow-key, one file) | 09-slide-deck.html | |
| Ticket triage / kanban | 18-editor-triage-board.html | |
| Feature flag editor | 19-editor-feature-flags.html | |
| Prompt template tuner | 20-editor-prompt-tuner.html | |
Full per-template detail lives in references/template-catalog.md.
Read it only when the topic doesn't cleanly match, or you need to know
which interactive elements a template ships with.
Before generating anything, tell Stevie which template you picked and why, in one line:
Picking
21-adr.html— you described a decision with options and rationale; this template gives you status badge, options cards with pros/cons + score bars, decision callout, and resulting architecture diagram.
This is a transparency step. If the choice is wrong, Stevie can redirect before you spend tokens generating content.
Treat the template as the shape of the answer. For each named region in the template (TL;DR, steps, options, scores, FAQ, glossary, timeline, consequences, etc.), produce real content for the user's topic. Pull from:
Do not invent file paths or commit hashes. If a region of the template expects a concrete artifact you don't have, drop the region rather than fake it.
Many templates have a big diagram slot. If the topic is technical and the diagram would carry real weight, generate one inline via a sister skill rather than hand-drawing SVG:
| Diagram need | Reach for | Output |
|---|---|---|
| Architecture · data flow · sequence · agent/memory · concept map | /fireworks-tech-graph | SVG + PNG (drop SVG inline) |
| Knowledge graph from code/docs/papers — clustered, communities | /graphify | HTML / JSON / SVG |
For small bespoke SVG (decorative icons, hero glyphs, simple illustrations) — author the inline SVG directly. You're capable of it and it keeps the file self-contained.
Workflow:
viewBox and outer <svg> wrapper sizing so the layout
doesn't shift.Use this only when the diagram is load-bearing. Don't replace the small mini-architecture SVGs in ADR option cards — those are intentionally sketch-like to read at a glance.
./explainers/<slug>.html (create
./explainers/ if missing). <slug> is hyphen-case of the topic
and identifies the local file only. The here.now URL is
server-assigned (see §5) — they do not match.<title>, the .eyebrow text, and the h1.nav .files block.scripts/inject_theme.py <output.html> from the skill directory.
The script inserts assets/claude-theme.css as a second <style>
block (marked data-claude-theme="injected") right after the
template's existing </style>, and is idempotent on re-runs. The
overlay only touches typography, focus states, and adds the brand
badge — layout untouched.<script> block verbatim unless changing the
demo's data shape.Unless the user passed --local, publish the file via the /here-now
skill (~/.claude/skills/here-now/scripts/publish.sh).
Critical: you do not get to choose the URL on a first publish.
The publish.sh --slug <slug> flag means "update an existing publish
at this slug", not "create a new publish with this URL". If you
pass --slug on a first publish, the server returns Not found
because there's nothing at that slug to update yet. Server-assigned
three-word slugs (e.g. woody-mortar-9dmd) are the only path for new
publishes via this CLI.
Procedure:
publish.sh with the file path and no --slug flag:
bash ~/.claude/skills/here-now/scripts/publish.sh \
./explainers/<slug>.html \
--title "<page title>" \
--description "<one-line summary>" \
--client claude-code
publish.sh --slug <new-slug> --claim-token <token> to
rename. Most users don't care; don't volunteer this dance unless
asked./here-now is unavailable in the current environment, fall
back to local-only mode and surface the path. Tell Stevie what
happened — don't pretend you published.Report to Stevie in this exact shape:
Explainer ready.
- Template:
21-adr.html— why this one- Local:
./explainers/<slug>.html- Live:
https://<server-slug>.here.now(or "skipped, --local")- Diagrams: from /fireworks-tech-graph (omit line if none)
If the returned URL is a three-word auto-slug (e.g.
woody-mortar-9dmd.here.now) and the topic would benefit from a
memorable URL, mention that a re-publish with --slug + claim token
can rename it — but don't do it automatically.
<style> +
inline <script>. If the user wants React, that's a different
skill (frontend-engineer)./here-now fails, say
so explicitly. Don't return only a local path when Stevie expected
a URL.--slug on a first publish. That flag means update an
existing publish at this slug, not choose a URL. The server
returns Not found and the agent often misreads it as a real
failure. → Omit --slug on first publish; let the server assign a
three-word slug. Only use --slug together with --claim-token
for a deliberate rename./fireworks-tech-graph could produce a cleaner one. → Delegate../explainers/../explainers/<slug>.html relative to the user's cwd
(where <slug> is the local file slug). Published to a
server-assigned URL https://<three-word-slug>.here.now/ — not
derived from the local filename.--local: skip the publish; just leave the file at the path above../explainers/ is awkward (e.g. the cwd is read-only), put the
file in $CLAUDE_JOB_DIR (or /tmp) and tell the user the
absolute path.documentation
Report reflect drain spend over a time window — tokens split by cached (cache_read), uncached writes (cache_creation), and io (input+output), with a $ estimate, grouped by day / outcome / model / transcript. Reads the drainer's cost log and surfaces outlier runs and cache-reuse health (the 41.5M-token failure mode = low cache reuse + high cache writes). Use to answer "what is reflection costing me" for the last day / week.
development
Show fleet status — every claude session running on the host, merged across ainb + claude-peers broker + background jobs. Use when you need to enumerate sessions before composing an action, see which sessions have a peer registered (broker-routable) vs tmux-only, check the `summary` of each session, or pipe the list into jq for filtering. Default output: text table. Pass --format json for LLM consumption.
testing
Ordered multi-step prompts to fleet targets, ack-gated between steps via JSONL assistant-turn-end detection. Use for cycles like disconnect→reconnect→verify, or any flow where step N+1 requires step N to have completed first. The skill BLOCKS until each target's transcript shows the next assistant turn finishing OR per-step timeout fires (default 300s).
development
Center control panel — enumerate every claude session that is blocked waiting on something: a user answer (AskUserQuestion fired), an API error retry, an idle assistant turn-end with no follow-up, or an explicit WAITING: marker. Returns rich JSON with signal kind + context per session. Use this when you've stepped away from the fleet and want one place to see everything that wants your attention and answer it.