Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add mrieck/demoday-claude-plugin --skill demo-scriptgit clone --depth 1 https://github.com/mrieck/demoday-claude-pluginWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/mrieck/demoday-claude-plugin/demo-script)<a href="https://agentmods.dev/skills/mrieck/demoday-claude-plugin/demo-script"><img src="https://agentmods.dev/badge/skills/mrieck/demoday-claude-plugin/demo-script/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/mrieck/demoday-claude-plugin/demo-script"><img src="https://agentmods.dev/badge/skills/mrieck/demoday-claude-plugin/demo-script.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00047 | $0.03997 |
| Opus 5.5 | $0.00019 | $0.01599 |
| Sonnet 5.5 | $0.00009 | $0.00799 |
| Haiku 4.5 | $0.00005 | $0.00400 |
Grade A, and why
demo-script scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 253 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Writing the script
Narration that works
You are writing for a voice, not a page.
- Short sentences. One idea each. The TTS will honour a comma; it will not rescue a subordinate clause.
- Say what the viewer is watching, half a beat before they see it. "You start by creating a project" lands as the cursor moves toward the button.
- Benefit, then mechanism. "Ship in one click" beats "click the deploy button".
- No feature lists. Three things well beats nine things fast.
- Write the hook last. It is easier once you know what the demo actually shows.
- Spell out anything you want pronounced. "S3" not "S₃"; "dot dev" if it must be said aloud.
Roughly 2.5 words per second. A 60-second video is ~150 words total. That is much less than it sounds — cut accordingly.
Shape of a 60-second demo
| Beat | Time | Job |
|---|---|---|
| Hook | 0–8s | The problem, felt. Not the product name. |
| Core action | 8–24s | The single best thing it does |
| Context beat | 24–30s | B-roll, breathing room, credibility |
| Payoff | 30–50s | The result, and why it matters |
| Close | 50–60s | One clear next step |
Presenter lines vs voiceover lines
Both use the same voice, but they read differently. A presenter line is addressed to camera ("Let me show you what changed"). A voiceover line describes what is on screen ("Projects appear the moment they're created"). Do not write voiceover for a presenter shot; it sounds like someone reading a manual at you.
The manifest
demo/<slug>/demo.json is the single source of truth — each video keeps its own
project folder under demo/ (e.g. demo/project-overview/), and every script
reads and writes the manifest inside it.
Anything that exists only in your context is lost on the next run.
{
"version": 1,
"slug": "acme-dashboard",
"product": { "name": "Acme", "tagline": "...", "audience": "...", "valueProps": ["..."] },
"brand": { "colors": { "primary": "#5B8DEF", "bg": "#0B0D12", "text": "#FFFFFF" },
"logo": "assets/logo.png", "font": "Inter" },
"format": { "width": 1920, "height": 1080, "fps": 30 },
// Default: a fal.ai stock voice. `provider` may be omitted (means "fal").
"voice": { "provider": "fal", "model": "fal-ai/elevenlabs/tts/eleven-v3",
"voice": "Rachel", "stability": 0.4 },
// OR a designed character voice (needs ELEVENLABS_API_KEY; written for you by
// gen/voice-design.mjs — do not invent a voiceId by hand):
// "voice": { "provider": "elevenlabs", "model": "eleven_v3",
// "voiceId": "abc123...", "voiceName": "Captain",
// "designPrompt": "weathered lobster-boat captain...", "stability": 0.4 },
"presenter": { "mode": "hybrid", "description": "a woman in her 30s, smart casual, warm and direct",
"characterImage": "assets/presenter.png", "engine": "fal-ai/infinitalk" },
// In mode "always" (the tutorial style) every plain demo scene gets a
// lip-synced corner bubble; "pip" configures its look. All fields optional:
// shape "circle" (default) | "square", position any corner (default
// bottom-left), sizePct 10-40 (% of frame width, default 22).
// "presenter": { "mode": "always", "pip": { "shape": "circle", "position": "bottom-left", "sizePct": 22 }, ... },
// presenter.continuousPip: true (seeded by --style tutorial) makes
// gen/presenter.mjs --all produce ONE continuous bubble take instead of
// per-scene clips; it writes presenter.pipTake — segments laid on the
// absolute timeline ([{ video, audio, fromSec, durationSec, overlapSec,
// scenes }], one chunk per scene, named after its first scene) that the
// renderer plays straight through underneath the cuts, cross-dissolving
// each seam over the previous chunk's overlapSec silent tail. Re-voicing a
// scene regenerates only its chunk.
// "zoomToClick": false at the top level turns the click push-in off for every
// demo scene (tutorial default); a scene's own zoomToClick wins.
// Dynamic style (--style dynamic): the same continuous take, RE-FRAMED along
// the beats' `layout` (see beats below). presenter.takeAspect "16:9" shoots
// the take wide (assets/presenter-16x9.png) so face beats fill the frame;
// presenter.frame.morphMs (default 300) is how long a move between layouts
// takes — 0 for hard cuts; pace "lively" (a move every 4-6s) | "calm" (one
// layout per step); faceFit "auto" letterboxes a square/9:16 take for
// full-frame layouts | "cover" crops | "contain"; panelZoom 1-1.6 (default 1,
// the side panel is a plain cover-fit). No pip block; transitions must be empty.
// "presenter": { "mode": "always", "continuousPip": true, "takeAspect": "16:9",
// "frame": { "morphMs": 300, "pace": "lively", "faceFit": "auto" }, ... },
"music": { "enabled": false, "bed": "assets/bed.mp3", "duckDb": -14 },
// Optional sound-effect pack (needs ELEVENLABS_API_KEY): named cues fired on
// events — insert, stamp, face, bullet, coverExit, transition, card,
// sceneStart. Any beat/transition/scene/bullet overrides with
// "sfx": "pop" | false | { "cue", "gain", "offsetSec" }. See demo-assembly § Audio.
// "sfx": { "enabled": true, "gain": 0.7, "duckDb": -6,
// "cues": { "whoosh": { "prompt": "short fast air whoosh, dry", "durationSec": 0.6, "file": null } },
// "auto": { "insert": "whoosh", "stamp": "pop", "face": "hit", "transition": "whoosh" } },
// style: "clean" (pill near the bottom edge), "shorts" (big centered
// karaoke for vertical cuts — see the demo-shorts skill), "boxed" (1-3 word
// phrase cards, listicle), or "buildup" (dynamic style: bottom phrase box
// whose words appear as spoken, one auto-picked word in an accent box —
// "autoEmphasis": false turns the pick off; captionEmphasis overrides it)
"captions": { "enabled": true, "style": "clean" },
// Optional persistent channel-handle watermark (text and/or a small PNG).
// position: top-left (default) | top-center | top-right | bottom-left | bottom-right
// — the insets already avoid the zones platform UI covers on vertical video.
// Opt a scene out with "watermark": false on the scene (e.g. the CTA card).
// "watermark": { "text": "@handle", "position": "top-left", "opacity": 0.55 },
// Vertical (and the 16:9 dynamic style, kind "overlay" only — frame 0 is the
// poster of a README embed): the hook card that IS frame 0 — the thumbnail every platform
// shows — held ~0.5s then wiped away over the first scene. See demo-shorts §2b.
// layout: stack | band | corner | stripe exit: wipe-up | wipe-down | dissolve | slide-left
// (a landscape overlay defaults to the lower third and wipe-down, clear of the face)
// "cover": { "hook": "You use AI for all your coding.", "kicker": "AI tech stack",
// "layout": "band", "accent": "#8B5CF6", "portrait": "assets/cover-mark.png" },
// — or a frozen frame of the video itself instead of a card (no hook text):
// "cover": { "kind": "frame", "scene": "s-r2", "atSec": 2.6, "holdSec": 0.45, "captions": false },
"timeline": [ /* scenes */ ],
"transitions": [ { "after": "hook", "type": "fade", "ms": 400 } ]
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago Changed · +5 lines 64ff4a031548
- 1mo ago Changed · +34 lines 1dd11cb954ce
- 2mo ago Changed · +24 lines efc1fb5dfea8
- 2mo ago First seen · 190 lines · 47 tokens per session scan A 0a209c8da312
demo-script is a skill published in the GitHub repository mrieck/demoday-claude-plugin (17 stars, last pushed 10d ago), licensed MIT. It adds 47 tokens to every session and 3,997 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
demo-script compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| demo-scriptmrieck/demoday-claude-plugin | Skill | 17 | 10d ago | MIT | A | 47 | Claude Code |
| chief-revenue-officercbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 0 | Claude Code |
| chief-strategy-officercbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 93 | Claude Code |
| support-operationscbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 77 | Claude Code |
| ai-ml-governancecbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 83 | Claude Code |
| paid-advertisingcbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 78 | Claude Code |
| seo-strategycbrock84/headcount | Skill | 2.6k | 19d ago | MIT | A | 74 | Claude Code |