explanatory-animation
Explain an algorithm, protocol, data structure, state machine, or architecture as a checked animation or still figure with `vlmkit-anim` — one JSON scene (a…
Skill by hasegama
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/hasegama-explanatory-animation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: spreadsheets, design, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/explanatory-animation
What's inside
- Skill name
explanatory-animation- Description
- Explain an algorithm, protocol, data structure, state machine, or architecture as a checked animation or still figure with `vlmkit-anim` — one JSON scene (a `kind` plus intent, never coordinates) compiled to SVG + Web Animations, a GIF, or a cropped figure, and checked against what it claims (semantic checks, `layout` geometry, a fact sheet with `--expect`, `why` for the layout's own reasons). Also draws a module map from a directory's import graph, a repository's architecture, the change map of a branch, the diff of two maps, and imports mermaid the repo already has. Use when asked to animate, illustrate, diagram, draw a dependency / module / architecture map, explain how something works step by step, or embed such a figure in docs. Not a VRT gate — `vlmkit-anim` is its own binary (`@mizchi/vlmkit-anim`).
- License
- MIT
- Instructions
- 155 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# explanatory-animation
One file says **what is being explained**; the tool draws it, and then
checks that the picture says what the file claims. The writer's job is the
scene and the captions. The tool's job is layout, motion, and telling the
writer where the picture lies.
```json
{ "format": "vlmkit-anim/scene@1", "kind": "sort", "algorithm": "bubble", "values": [5, 3, 8, 1] }
```
Two layers: a **Scene** (`kind` + intent — `"algorithm": "bubble"`,
`"trace": ["connect", "SYN+ACK"]`, `"deps": [["web", "api"]]`, never x / y)
compiles to a **Timeline** (nodes, keyframe tracks, captioned steps). Write
the scene; read the timeline only through the verbs below.
When the task is to *answer a question* with a figure — "how does this
work", "how is this structured", "what does this PR change" — `explain-with-anim`
decides what to draw, from what, and how the prose follows it; this skill is
how the scene itself is written and checked.
**The one page to read before writing is `docs/anim-ir.md`** — shipped in the package
(`node_modules/@mizchi/vlmkit-anim/docs/anim-ir.md`; in this repository
`packages/vlmkit-anim/docs/anim-ir.md`)
— every kind, its ops, the annotation ops every kind shares, and one JSON
example per kind that `check` passes. `vlmkit-anim schema --kind <k>` prints
one kind's section. Do not learn the format from the compiler source.
## Invocation
`vlmkit-anim` is a **standalone binary**, not a `vlmkit` subcommand.
```bash
# mizchi/explainer, where the package lives
node --experimental-strip-types packages/vlmkit-anim/src/cli.ts check scene.json # from source, no build
# any other repository
npx -p @mizchi/vlmkit-anim vlmkit-anim check scene.json # or add @mizchi/vlmkit-anim as a dev dependency
```
Nothing below needs a browser or an API key except: `.png` output, `sheet`,
`video`, `eval` (Playwright), and `review --model` (a vision model through
`@mizchi/vlmkit-ai`). Writing and checking a scene is browser-free.
## Route by task
| Task shape | Do this |
|---|---|
| "Animate / show step by step how X works" (a sort, search, BST, heap, DP table, graph walk, state machine, message exchange, flowchart, gantt) | Pick the `kind` whose section in the guide names X; write the scene; run the loop below. Nineteen kinds: sort, array, stack, queue, list, tree, state-machine, heap, distributed, matrix, graph, chart, flowchart, gantt, sequence, diagram, modules, vector, compose. |
| "Explain a concept" that no kind names | Choose the kind whose *things* the concept has (nodes exchanging messages → `distributed`; a table filling in → `matrix`); say the rest with annotation ops (`value`, `callout`, `snapshot`, `group`, `text`, `relate`) that name the kind's things. Two pictures at once → `kind: compose`. Coordinates are the last resort, and count against the scene. |
| "Draw a module / dependency / architecture map" | `kind: modules` with `modules`, `deps` (`["a", "b"]` reads "a depends on b"), `groups`, optional `parent` on a group; `still` renders it. When the code exists, first `vlmkit-anim facts <dir> --depth 1 --out f.expect.json`, then `check --expect` the map against it. |
| "Draw this repository" | `vlmkit-anim repo --out docs/diagrams --name <name>` — the workspace layer by layer, a GIF, a contact sheet, a Markdown page and its own fact sheet. |
| "What does this branch change?" | `vlmkit-anim pr --base origin/main --out .vlmkit-anim/pr` — one beat per commit; `<name>.md` is paste-ready. |
| "Show what changed between two maps" | `vlmkit-anim diff before.json after.json --out change.svg [--expect diff.json]` — added in accent, removed dashed grey, a legend; `--expect` checks the change against a diff sheet. |
| "We already have a mermaid diagram" | `vlmkit-anim import mermaid page.md --out scene.json` (flowchart / graph, sequenceDiagram, stateDiagram-v2). Read its `dropped / changed:` and `notes:` lines; add what the import cannot know (a title, captions, a walk or trace). |
| "Put it in the docs" | `html --out page.html` (runtime inline), `video --out demo.gif` for a README, or the remark plugin `@mizchi/vlmkit-anim/remark` so a ```` ```vlm-anim ```` fence in Markdown becomes the animation and ```` ```vlm-anim still ```` the figure. |
| "As D2 text" / "show it in the terminal" / an existing `.d2` | Not this tool: `d2-diagram` writes the `.d2`, lays it out with TALA and renders it as box drawing in the terminal. Hand it the `facts` sheet so the D2 is drawn from the code, and say that nothing checks it. |
## The loop
```
1. write scene.json one kind; ids ASCII, language in `label`
2. vlmkit-anim check scene.json [--expect facts.json] validate → compile → semantic checks → stats; exit 1 on ✗
3. vlmkit-anim explain scene.json the narration as a numbered list — is this the story?
4. vlmkit-anim layout scene.json texts on texts, under boxes, past the edge, lines through
labels, containers crossing — per step; exit 1 when any
5. vlmkit-anim why scene.json [--about id] (modules / diagram) what set each canvas axis, rows vs bands
and their share, what put each box on its layer, which box
a bent edge went round — read this BEFORE relabelling
6. vlmkit-anim still scene.json --out fig.svg the figure | html --out page.html | video --out demo.gif
7. vlmkit-anim review scene.json --out dir optional: a contact sheet + brief for a vision reader;
--answers scores its JSON against the geometry / the facts
```
Each ✗ line names a path, what is wrong, and a `→` hint with the fix. Fix
the first ✗, re-run; ⚠ lines are advice you act on only when they touch
what the picture is for. Budget five rounds; if the fifth is not green,
stop and report the lines, not a guess.
## Done condition
- `check` exits 0 with no ✗ (and, when a fact sheet exists, `--expect` too).
- `layout` reports no issue on any step.
- `explain` reads as the explanation you meant — every beat has a caption
that says *why*, not only what moved.
- For a still: both canvas sides under 2000px (the canvas ⚠ in `check`),
and you looked at the SVG once.
## Reading the kickbacks
- **The canvas warning names its cause.** "labels stop being legible — A
(206px, in G1) and B (53px, in G2) need 142px between their centres … and
the layout put them 10% of the width apart", then "N containers sit side by
side across the picture (a 40%, b 10%, …), each as wide as its fullest
layer's boxes". The lever is the named pair or the banding — flatten or
re-nest the containers, break the named label — not the longest label you
can see. `why` has every layer, band and detour; two writers who read it
before their first edit brought an 8882px graph under 2000px.
- **A crossing names the edge by its ends** (`edge-24: diff → capture`) and
the box it runs through. Move one end to another layer (reorder the list,
regroup) or shorten *that* label.
- **"no sequence" on a `diagram`** means the picture, not the motion, is the
point: switch to `kind: modules`. The switch changes layering (a diagram
layers one past what points into a box; a module map layers from its
leaves), so re-run `check` and read the new canvas line.
- **`--expect` lines** are the facts the picture got wrong: a dependency
drawn that the sheet does not list, one listed and not drawn, the wrong
edge highlighted. A green `check` on a wrong picture is the failure this
exists for — the sheet wins over the picture.
- **`import mermaid` `dropped / changed:`** names what the IR has no place
for (styles, classDefs, clicks, `direction` inside a subgraph, composite
states). Colour with `tone`; everything else you put back as captions.
## Rules the checks enforce (do not fight them)
- No coordinates in a scene that has a kind for its things. `kind: vector`
and hand-written positions are the fallback and are counted as such.
- Every annotation names an anchor the kind owns (an index, a cell, a node,
an edge), and asks for a `side`; the compiler grows the canvas on thatFrom hasegama/pstack-agents, MIT.
More from hasegama/pstack-agents
- 0.570score
explainer
hasegama
特定の読み手に向けて、概念・PR・設計を「冗長にならない水準」の速習資料として説明し、図と主張を道具で検証する。読み手のペルソナ(既に知っていること・知らないこと・読み方)を質問と公開情報から作り、その差分だけを書く。図は vlmkit-anim…
SkillAFreshness: AClaude Code +9 - 0.566score
explainer-book
hasegama
1 本の速習資料では収まらない、章立ての学習資料(topic-book/01-quickstart.md, 02-….md …)を、読み手のペルソナに合わせて設計・執筆・検証する。章ごとの学習目標と理解度チェックの対応、概念を導入より前に使わない順序、章の読了時間の予算、「未完成なら落ち、答えなら通る」演習、book…
SkillAFreshness: AClaude Code +9 - 0.565score
d2-diagram
hasegama
Draw a software architecture, system, data-model or call-flow diagram as D2 text laid out by TALA (D2's whiteboard-style engine, open source since D2 0.9)…
SkillAFreshness: AClaude Code +9 - 0.565score
explain-with-anim
hasegama
Answer "how does this work / how is this structured / what does this change" with a drawn figure and a narration that follows it — a module map from the…
SkillAFreshness: AClaude Code +9 - 0.560score
d2-slides
hasegama
Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a ```d2 fence per figure, compiled to a self-contained…
SkillAFreshness: AClaude Code +9 - 0.544score
diagnosing-bugs
hasegama
Diagnosis loop for hard bugs and performance regressions.
SkillAFreshness: AClaude Code +9 - 0.539score
domain-modeling
hasegama
Build and sharpen a project's domain model.
SkillAFreshness: AClaude Code +9 - 0.533score
ask-matt
hasegama
Ask which skill or flow fits your situation.
SkillAFreshness: AClaude Code +9 - 0.528score
blast-radius
hasegama
変更が差分の外に及ぼす影響を調べ、成立条件を実コードの実行で確認する。影響範囲や小さな差分の安全性をレビューするときに使う。
SkillAFreshness: AClaude Code +9 - 0.528score
architect
hasegama
型・関数シグネチャ・モジュール構成を設計し、独立した複数案を比較してから実装する。/architect や、構造の判断を伴う実装に使う。
SkillAFreshness: AClaude Code +9 - 0.528score
create-verification-skill
hasegama
アプリを利用者と同じ経路で検証するプロジェクト用スキルと機能マップを作る。/create-verification-skill や、検証手順をスキルにしたい依頼に使う。
SkillAFreshness: AClaude Code +9 - 0.525score
arena
hasegama
同じ課題に独立した複数候補を作り、評価して基準案に優れた部分を統合する。/arena や、設計・実装案の比較に使う。
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 5, 2026 (24 days ago)
- Last release
- Oct 5, 2026 (24 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/hasegama/pstack-agents
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from hasegama
- 0.570score
explainer
hasegama
特定の読み手に向けて、概念・PR・設計を「冗長にならない水準」の速習資料として説明し、図と主張を道具で検証する。読み手のペルソナ(既に知っていること・知らないこと・読み方)を質問と公開情報から作り、その差分だけを書く。図は vlmkit-anim…
SkillAFreshness: AClaude Code +9 - 0.566score
explainer-book
hasegama
1 本の速習資料では収まらない、章立ての学習資料(topic-book/01-quickstart.md, 02-….md …)を、読み手のペルソナに合わせて設計・執筆・検証する。章ごとの学習目標と理解度チェックの対応、概念を導入より前に使わない順序、章の読了時間の予算、「未完成なら落ち、答えなら通る」演習、book…
SkillAFreshness: AClaude Code +9 - 0.565score
d2-diagram
hasegama
Draw a software architecture, system, data-model or call-flow diagram as D2 text laid out by TALA (D2's whiteboard-style engine, open source since D2 0.9)…
SkillAFreshness: AClaude Code +9 - 0.565score
explain-with-anim
hasegama
Answer "how does this work / how is this structured / what does this change" with a drawn figure and a narration that follows it — a module map from the…
SkillAFreshness: AClaude Code +9 - 0.560score
d2-slides
hasegama
Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a ```d2 fence per figure, compiled to a self-contained…
SkillAFreshness: AClaude Code +9 - 0.544score
diagnosing-bugs
hasegama
Diagnosis loop for hard bugs and performance regressions.
SkillAFreshness: AClaude Code +9
Cite this page
explanatory-animation skill. Agent Mart. https://agentmart.dev/skills/hasegama-explanatory-animation (last updated 2026-10-24)