canvas
Author Nimbalyst Project Canvas boards (.canvas files) — an infinite canvas whose cards are live editors for real workspace files…
Author animated technical explainer diagrams as .anim.json files for Nimbalyst's Animation editor. Use when the user wants to animate a diagram, show how a system/protocol/algorithm behaves over time, build a motion explainer, or turn a static architecture diagram into something
Claude Code
$ npx -y skills add nimbalyst/nimbalyst --skill animation --agent claude-code
Codex
$ npx skills add nimbalyst/nimbalyst --skill animation -a codex -y
Cursor
$ npx skills add nimbalyst/nimbalyst --skill animation -a cursor -y
Gemini CLI
$ npx skills add nimbalyst/nimbalyst --skill animation -a gemini-cli -y
GitHub Copilot
$ npx skills add nimbalyst/nimbalyst --skill animation -a github-copilot -y
OpenCode
$ npx skills add nimbalyst/nimbalyst --skill animation -a opencode -y
Windsurf
$ npx skills add nimbalyst/nimbalyst --skill animation -a windsurf -y
name: animation description: Author animated technical explainer diagrams as .anim.json files for Nimbalyst's Animation editor. Use when the user wants to animate a diagram, show how a system/protocol/algorithm behaves over time, build a motion explainer, or turn a static architecture diagram into something that plays.
`.anim.json` files open in Nimbalyst's Animation editor: a named scene plus an ordered list of steps that assign states to the scene's parts. You write plain JSON. Any agent can author or edit one with `Write` and `Edit` -- there is no binary format and no tool call required.
**Do not use it** when a static diagram says the same thing. If nothing changes between the first frame and the last, you want Excalidraw or a Mermaid block, not an animation.
Three rules drive every decision in this format:
1. **The document says what is true when, never how to tween.** There are no keyframes, easing curves, or property tracks. You assign a *state* to a part, and CSS transitions interpolate. Adding motion means naming a state, not scripting a timeline. 2. **States are cumulative.** A step asserts only what changes; every part it does not mention keeps whatever the previous step left it in. Write deltas. **To turn something off you must explicitly set it back** -- it will not decay on its own. 3. **Ids are names, not handles.** `store`, `title-card`, `queueTask01`. You will reference them constantly in `set` blocks; make them readable.
Times are **integer milliseconds**. Never frame indices, never floats.
{
"version": 1,
"stage": { "width": 1200, "height": 640, "fps": 25 },
"parts": { "<id>": { "type": "node" | "edge" | "label" | "shape", ... } },
"steps": [ { "id": "...", "duration": 800, "caption": "...", "set": { ... } } ]
}| Field | Notes | | --- | --- | | `width`, `height` | Clamped to 16..8192. The stage scales to fit the pane, so these set the aspect ratio and the coordinate system, not the pixel size. | | `fps` | Only affects frame snapping and the readout. Use 25 unless you have a reason. Whole-millisecond frame rates: 10, 20, 25, 50. | | `background` | Optional override. Omit it and the stage uses the theme surface, which is what you want -- the scene then follows the user's light/dark theme. |
1200x640 is a good default. Landscape, room for a header row and a bottom rail.
Part ids are the keys. All four types share `label`, `tone`, and `state` (their *baseline*, before any step runs).
**`node`** -- the workhorse. A titled card with an optional subtitle and key/value rows.
{ "type": "node", "label": "Object store", "x": 740, "y": 118, "w": 240, "h": 176,
"subtitle": "SHA -> BYTES",
"rows": [ { "key": "f7a9", "value": "commit 182 B" }, { "key": "e816" } ] }**`edge`** -- a line between two parts, optionally carrying packets.
{ "type": "edge", "from": "client", "to": "store", "text": "GET <sha>", "packets": 4 }**`label`** -- free-standing text.
{ "type": "label", "x": 56, "y": 48, "text": "COMMIT DAG", "align": "start", "caps": true }**`shape`** -- a plain rect or circle, with optional centered text.
{ "type": "shape", "shape": "rect", "x": 89, "y": 438, "w": 40, "h": 18, "tone": "accent" }Shapes are how you show **quantity**, because text never changes (see Hard constraints). A grid of small shapes that go `hidden` one group at a time is a queue draining, a battery discharging, a work list being claimed.
**`html`** -- freeform markup, for the things the primitives above cannot express: real typography, a type scale, flow layout, a UI that has to look like a real product rather than like a diagram of it.
The markup comes from one of two places:
{ "type": "html", "x": 55, "y": 108, "w": 1090, "h": 534,
"htmlFile": "./partials/app-window.html",
"vars": { "title": "acme-api", "branch": "main" } }`vars` fills `{{name}}` placeholders in whichever source won.
Nimbalyst - The open-source visual workspace for Claude Code, Codex, and OpenCode. Run multiple coding agents in parallel, edit their work visually in markdown, mockups, and diagrams, and track tasks. Free, MIT-licensed desktop app for macOS, Windows, Linux, with mobile companion for iOS and Android.
Author Nimbalyst Project Canvas boards (.canvas files) — an infinite canvas whose cards are live editors for real workspace files…
Create visual data models for database schemas using Nimbalyst's DataModelLM editor. Use when the user wants to design a data…
Create git commits using Nimbalyst's interactive commit proposal widget. ONLY use when the user explicitly clicks "Commit with…
Create diagrams and visual drawings using Excalidraw (.excalidraw files). Use when the user wants flowcharts, architecture…
Build, install, and hot-reload Nimbalyst extensions using MCP tools. Use when developing, testing, or iterating on Nimbalyst…
Help the user file a bug report or feature request for Nimbalyst. Activates when the user opens the in-app feedback flow or runs…
Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress…
Set up the owner profile so a personal agent knows who it works for (first-run setup, \"get to know me\"), or distill colleague,…