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.03200 |
| Opus 5 | $0.00023 | $0.01600 |
| Sonnet 5 | $0.00009 | $0.00640 |
| Haiku 4.5 | $0.00005 | $0.00320 |
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 5d 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 — 214 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, fromSec, durationSec }]) that the renderer
// plays straight through underneath the cuts.
// "zoomToClick": false at the top level turns the click push-in off for every
// demo scene (tutorial default); a scene's own zoomToClick wins.
"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) or "shorts" (big centered
// karaoke for vertical cuts — see the demo-shorts skill)
"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 only: 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 | dissolve | slide-left
// "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.
- 5d ago Changed · +24 lines efc1fb5dfea8
- 9d 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 (2 stars, last pushed 5d ago), licensed MIT. It adds 47 tokens to every session and 3,200 once invoked, about $0.0002 per session on Opus 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.
Other skills, from other repositories
youtube-producer
Plans, packages, and scripts long-form video for retention and channel growth — idea selection, titles and thumbnails, script structure, and diagnosing why a video or channel underperforms. Use this for video ideas, packaging, scripting, a retention teardown, or channel strategy — including when someone describes a…
video-content
Plans and scripts short-form and long-form video, and designs the packaging — titles, thumbnails, and openings — that determines whether it gets watched. Use this to script a video, plan a series, fix retention or click-through problems, design thumbnail and title concepts, or turn written content into video. For a…
visual-content
Designs and directs the visual assets that carry content — carousels, infographics, quote graphics, diagrams, and social imagery — including the generation prompts where they are AI-produced. Use this to turn a written piece into a visual format, design a carousel or infographic, create social graphics, or fix visuals…
compose-creative
Core creative engine — turns a calendar post into finished images or video using 4 modes (anchor-compose, enhance-extend, style-referenced, pure-creative) with brand assets, AI generation, and human approval before credits are spent. Triggers on "/compose-creative", "generate the creative", "make the image for P07"…
c2pa-sign
Embed C2PA provenance manifests in AI-generated assets — the machine-readable AI disclosure EU AI Act Article 50 expects (enforceable since 2 Aug 2026), plus the human-approval record for the Article 50(4) exemption. Triggers on "/c2pa-sign", "sign this asset", "provenance", "content credentials", "AI disclosure"…
full-pipeline
Run the complete production pipeline end to end — parse the calendar, match assets, compose creative, adapt copy, build previews, run reviews, finalize delivery — with checkpoints between phases. Triggers on "/full-pipeline", "run the whole month", "produce the month", "end to end", "do everything", "full production…