I made an "evolving scene" presentation creation skill
and-scene is an Agent Skill that builds animated, morphing slide presentations directly in your project. It scaffolds a Vite/React app and uses a single canvas where elements evolve across steps.
Uh oh!
There was an error while loading. Please reload this page.
Notifications You must be signed in to change notification settings
Fork 0
Star 0
BranchesTags
Open more actions menu
Folders and files
NameName
Last commit message
Last commit date
Latest commit
History
56 Commits
56 Commits
.claude-plugin
.claude-plugin
.validator
.validator
docs/assets
docs/assets
openspec
openspec
public
public
scripts
scripts
skills/presentation
skills/presentation
src
src
.gitignore
.gitignore
LICENSE
LICENSE
README.md
README.md
eslint.config.js
eslint.config.js
index.html
index.html
package-lock.json
package-lock.json
package.json
package.json
tsconfig.app.json
tsconfig.app.json
tsconfig.json
tsconfig.json
tsconfig.node.json
tsconfig.node.json
vite.config.ts
vite.config.ts
vitest.config.ts
vitest.config.ts
Repository files navigation
and-scene is an Agent Skill that builds animated, morphing slide presentations directly into your project: you describe the presentation, the agent scaffolds a Vite/React app if needed, generates the steps, and verifies they render.
An evolving-scene presentation is not a stack of unrelated slides. It is one shared diagrammatic canvas where a stable set of entities morph across named steps: boxes appear, move, connect, collapse, and re-label as the presentation arc develops. The continuity between steps is the story.
This repo contains the plugin, the reusable scene kit source, and a worked reference presentation you can run locally. Plugin users do not need to clone this repo.
Demo
These are video previews. Click a preview to open the MP4.
How to make a presentation
Download the demo video
Evolution of the bicycle
This bicycle demo was made by Claude Code with Opus 4.8.
Download the bicycle demo video
Both demo videos were inspired by the original presentation. To run the bundled reference presentation locally, see Development.
Requirements
Claude Code or Codex with plugin support.
Node ^20.19.0 or >=22.12.0, plus npm, in the project where the presentation will live.
A Chromium browser for npm run verify and npm run inspect. After installing dependencies, run npx playwright install chromium if your environment does not already provide one.
Getting started
You use and-scene by installing its plugin and running its skill inside your project. The scene kit is copied into your project as source you own; see How the kit reaches your project.
- Install the plugin
For Codex:
codex plugin marketplace add Codagent-AI/and-scene codex plugin add and-scene@and-scene
For Claude Code:
claude plugin marketplace add Codagent-AI/and-scene claude plugin install and-scene
- Create a presentation
Invoke the skill in your project:
/and-scene:presentation
…or just ask in natural language (e.g. "create a presentation about …"). The skill interviews you one question at a time, scaffolds any missing infrastructure (stating the target and asking before it writes), generates the presentation, and self-verifies that it builds and renders.
- Work on the result
Scaffolding gives your project a Vite + React app with the usual scripts:
npm run dev # http://localhost:5173
The dev server opens a landing page at / listing every presentation; each lives at its own route (/).
How the kit reaches your project
There is no npm install and-scene. The reusable scene kit (presentation-kit/, ~650 lines) is vendored — the skill copies it into your project as source you own and can edit, like shadcn/ui. You're meant to own its styling in your presentation or app.
Where the skill scaffolds
When your project is missing the presentation infrastructure, the skill resolves where to put a self-contained app, then states the target and asks you to confirm before writing:
Your project Scaffold location
Empty directory, or an existing standalone JS app (root package.json) Repository root (.)
Monorepo (workspaces, pnpm-workspace.yaml, or packages/ / apps/) Self-contained app under presentations/
Non-empty repo that is not a JS app (no root package.json — e.g. Python/Go/Rust) Self-contained app under presentation/
Already has the infrastructure Uses it in place; scaffolds only what's missing
Styling
The kit is BYO styles. It ships motion behavior, fixed-canvas layout plumbing, and stable DOM hooks such as data-node, data-node-part, data-accent, data-variant, and data-presentation-*; it does not ship a palette, font, card treatment, button style, or Tailwind dependency. Style each presentation with plain CSS, CSS modules, Tailwind, or whatever the host project chooses.
Controls
Each presentation lives at its own route (/). In a presentation:
→ / Space / PageDown — next step
← / PageUp — previous step
P — toggle present (title-only) ↔ browse (captions + table of contents). The step title shows at the top in both modes; browse adds the per-step caption and navigation along the bottom.
Updating
Updating has two layers: refresh the installed skill/plugin, then resync the vendored kit copy in each project that should receive kit fixes.
For Codex, refresh the marketplace snapshot:
codex plugin marketplace upgrade
For Claude Code:
claude plugin marketplace update and-scene claude plugin update and-scene@and-scene
Refreshing the plugin does not change a project's existing src/presentation-kit/ copy. The easiest way to pull kit fixes into a project is to ask the skill to "resync the scene kit".
If you prefer the raw command, run the sync script from the consuming project root. Replace with the directory that contains this skill's SKILL.md; in this repository that directory is skills/presentation/.
node /sync-kit.mjs # show what changed (exit 1 if drift) node /sync-kit.mjs --apply # rewrite the vendored copy to match
The script diffs the skill's bundled snapshot against your copy and rewrites it on --apply. Local edits show up as drift, like shadcn diff; target-only files are never deleted, so local-only additions survive. Review with git diff, re-apply any theming the update overwrote, then rebuild.
Scripts
Scaffolding adds these to your project:
Script What it does
npm run dev Vite dev server
npm run build Type-check (tsc -b) and production build
npm run preview Serve the production build
npm run verify Build + render-check every registered presentation
npm run inspect -- Capture screenshots for visual composition review
npm run test Vitest unit tests
npm run lint ESLint
verify builds the app, then launches a headless browser against a production preview and steps through every registered presentation, failing on any build error, console error, or uncaught page error. (It needs a Chromium browser — run npx playwright install chromium once.)
inspect builds the app, launches a production preview, and writes step screenshots to artifacts/presentation-inspection// so layouts can be checked for overflow, unintended overlap, and chrome collisions.
Tech
React 19 · TypeScript · Vite · motion for layoutId morph animations · lucide-react for glyphs. Styling is presentation-owned; Tailwind can be added by a host project, but it is not required by the kit.
Development
Run the reference app
npm install npm run dev # http://localhost:5173
The landing page at / lists every registered presentation. The bundled reference presentation — which itself explains how the skill builds a presentation — lives at:
http://localhost:5173/how-to-make-a-presentation
Run npm run verify to build and render-check every presentation, and npm run test for the unit tests.
Repository layout
src/ The reference app presentation-kit/ CANONICAL scene kit: Presentation, Stage, chrome, node primitives (Box, Arrow, Frame, …), navigation presentations/ index.ts Registry — one entry per presentation (slug → loader) / A self-contained presentation (entities/steps/Talk) Root.tsx, router.ts Zero-dependency pathname router + landing page scripts/verify.mjs Build + render verification (Playwright)
skills/presentation/ The agent skill SKILL.md The skill contract + procedure scaffold.ts Anchor detection + scaffold-target resolution templates/ bootstrap/ A full app shell, incl. a SNAPSHOT COPY of the kit, stamped into a fresh/empty project presentation/ A single-presentation template single-step/ A single-step template
Two copies of the kit, on purpose
src/presentation-kit/ is the canonical kit the reference app runs. skills/presentation/templates/bootstrap/src/presentation-kit/ is a snapshot the skill copies into your project. They are kept byte-identical (excluding tests) — when the canonical kit changes, the snapshot must change identically. skills/presentation/kitSnapshot.test.ts enforces this in npm run test; resync with node skills/presentation/sync-kit.mjs --apply.
About
An Agent Skill that builds animated, morphing slide presentations
Resources
Readme
License
MIT license
Uh oh!
There was an error while loading. Please reload this page.
Activity
Custom properties
Stars
0 stars
Watchers
0 watching
Forks
0 forks
Report repository
Releases
No releases published
Packages 0
Uh oh!
There was an error while loading. Please reload this page.
Contributors
Uh oh!
There was an error while loading. Please reload this page.
Languages
TypeScript 61.9%
JavaScript 29.6%
CSS 8.1%
HTML 0.4%