Build Product Demo
Turn verified product behavior into a compact proof story. Treat the final media
as an executable claim about the product, not as a decorated feature list.
Choose the mode
- Plan: inspect the product and produce the brief, evidence inventory,
feature coverage, director treatment, script, and beat plan.
- Produce: complete the plan, create deterministic setup and capture
tooling, record, edit, and verify the final media.
- Diagnose: inspect an existing demo, identify the first broken layer, and
revise the smallest responsible artifact. Check truth, story, visible state
change, attention, narration/action alignment, capture, then encoding.
If the user asks to “make” or “finish” the demo, default to Produce. Do not stop
at a script while safe, in-scope production work remains.
Establish the boundary
Resolve the exact product repository, revision, runtime, audience, channel,
target duration, aspect ratio, language, available assets, and publishing
scope. Inspect before guessing.
Read repository instructions and existing demos, screenshots, tests,
fixtures, launch scripts, and marketing claims. Search before adding a new
recorder or seed path.
Separate immutable product facts, creative choices, and missing production
facts. Do not turn an unknown into a visual claim.
Select one reference benchmark: the user's strongest previous demo, a
product-native launch video, or a clearly named quality bar. Record what to
preserve and what to avoid. Do not rely on generic taste words.
Choose one audience doubt and one proof proposition. Complete:
The audience doubts whether [product claim]. The demo proves [outcome] by showing [observable change].
Define the opening and landing state. Reject a concept whose product or
audience state is materially unchanged at the end.
Read directing.md before selecting features or
writing beats. Read production.md before recording,
generating narration, or using deterministic fixtures.
Build the evidence inventory
Classify every candidate claim:
| Level |
Evidence |
Demo use |
| E1 |
Fresh live execution with retained output |
May be shown as working |
| E2 |
Current code plus focused passing test or fixture replay |
May support a bounded claim; disclose fixture use |
| E3 |
Current documentation or marketing copy only |
Treat as a lead; verify before showing as working |
| E4 |
Plan, issue, mockup, or unfinished path |
Exclude or label explicitly as planned |
Create feature-coverage.md and rank each capability as:
- core proof: complete cause → action → result;
- differentiator: memorable evidence supporting the proposition;
- supporting evidence: fast proof that reduces doubt;
- exception entry: show a truthful state or recovery entry without
deliberately damaging the product;
- excluded: unfinished, redundant, unverifiable, visually unreadable, or
outside the audience decision.
Do not modify product behavior merely to make the demo pass unless the user
also asked for that product change.
Direct the proof story
Write a compact treatment with:
Audience doubt:
Proof proposition:
Opening state:
Turning proof:
Landing state:
Point of view:
Information strategy:
Visual progression:
Sound strategy:
Truth boundary:
Production simplification rule:
Lead with the strongest result when it is legible without setup, then return to
a credible starting state. Organize chapters by user outcome or proof question,
not by toolbar location. Require each chapter to leave visible accumulated
state or decisive new knowledge.
Write the native interaction spine before any title, mockup, or compositing:
real starting state → user input → native product response → consequential result
For software demos, show the actual CLI, application, host integration, API
consumer, or generated artifact named in the proposition. Evidence generated
backstage and retyped into a presentation layer does not count as native use.
Target at least 60% native product surface, place the first meaningful product
action within five seconds, and keep explanatory/title surfaces below 20%
unless the medium makes those ratios inapplicable and the plan records why.
Write one beat for each meaningful tactic, product action, reveal, consequence,
or attention shift. A click is not a beat unless it changes the proof. Pair
narration about value or consequence with an observable action; do not read the
interface aloud.
Treat beats as actions and revelations, never equal time boxes. Record multiple
observable events inside a longer beat. Default to no more than three seconds
between visible or audible events for a promotional demo; a motivated hold is
the only exception.
Save the plan as beat-plan.json using
artifact-contract.md, then run:
python3 <skill-dir>/scripts/validate_demo_plan.py <demo-dir>/beat-plan.json
Fix plan failures before recording. Do not hide gaps in post-production.
Prepare and capture
- Build a disposable, repeatable starting state. Preserve user data and
existing recordings.
- Prefer repository-native APIs, scripts, fixtures, and automation over manual
UI control. Use a browser or desktop controller only when the product proof
genuinely depends on that surface and no lower-level route can execute it.
- Use deterministic data only to stabilize inputs or external dependencies.
Keep the real product path active and record the boundary in the plan.
- Run a fast, silent rehearsal. Confirm selectors, commands, product results,
duration, native-surface ratio, event density, and exit states before paying
for narration or a full recording.
- Audition narration with the actual language and script. Measuring duration
is not an audition. If the agent cannot hear the sample, require a human
selection or use a non-voice treatment instead of claiming the accent is
approved. Voice labels and locale names are not evidence of accent,
naturalness, or timing.
- Record clean picture, UI/action sound, narration, and music as separable
elements when practical. Retain raw evidence and logs.
- If a production path fails, report the failure and repair that path. Do not
silently substitute screenshots, fake progress, or a different capability.
Edit and diagnose pacing
For every cut, finish:
Cut from [state/action] to [new state/action] because the audience now needs to [learn/feel/locate/compare/anticipate].
Shorter is not automatically faster. Remove unexplained waiting, duplicated
information, cursor travel with no consequence, and narration that finishes
before the corresponding action begins. Preserve enough time to orient, see the
action, register the result, and anticipate the next beat.
When diagnosing “slow” or “stuck” pacing, locate the first mismatch:
- no new product or audience state;
- action begins too late after narration;
- action finishes but the result is not framed;
- capture contains real processing with no readable status;
- edit holds a redundant image;
- audio or encoding creates apparent freezes.
Repair the mismatch instead of globally speeding up the video.
Verify and package
Run the plan validator again after the edit reflects any timing changes. Probe
the final video with:
python3 <skill-dir>/scripts/probe_demo_media.py <final-video> \
--expect-width <width> --expect-height <height> --expect-fps <fps> \
--expect-duration <duration_seconds> --expect-container <container> \
--expect-video-codec <video_codec> --expect-audio-codec <audio_codec> \
--duration-tolerance <duration_tolerance_seconds> \
--require-audio
Set delivery.duration_tolerance_seconds to 0.25 normally. A larger encoding
variance requires delivery.duration_tolerance_reason; pass the same declared
tolerance to the probe. The pacing analyzer derives it from the plan.
Also inspect the full video or a contact sheet for frozen frames, clipped UI,
unreadable type, secret leakage, missing chapters, broken focus, abrupt audio,
and claims whose evidence is not visible. A playable file with valid codecs is
necessary but not sufficient.
Run the pacing analyzer for promotional video:
python3 <skill-dir>/scripts/analyze_demo_pacing.py <final-video> \
--plan <demo-dir>/beat-plan.json \
--json-out <demo-dir>/pacing-verification.json
Treat its default silence and low-motion limits as a fail-closed rehearsal
gate. The analyzer exempts a silence or low-motion segment only when the entire
detected interval falls inside a motivated hold declared by the plan; do not
raise a file-wide threshold to accommodate one hold. It rejects alternate audio
or video streams because those tracks are not pacing-verified; deliver exactly
one of each.
Review continuous playback or dense consecutive frames as well as a contact
sheet; one frame per scene can make a static slide deck look varied.
Deliver the files defined in artifact-contract.md
and state which claims used live execution, deterministic fixtures, or
compositing.
Autonomy boundary
- Perform read-only inspection, local planning, disposable seeding, local
capture, editing, and validation directly when requested.
- Ask before using credentials not already approved for the task, incurring
paid API usage, changing production data, deploying, publishing externally,
deleting or overwriting existing media, or changing product code outside the
requested scope.
- Remote commit, push, PR, or publication requires explicit approval unless the
current request already grants that exact action.
- Never record private memories, tokens, account data, notifications, unrelated
windows, or user-identifying paths when a sanitized fixture can prove the
same capability.
Done when
- The exact product revision and truth boundary are recorded.
- A reference benchmark is recorded with concrete qualities to preserve.
- One audience doubt is answered by a visible opening-to-landing change.
- Core claims have E1 or bounded E2 evidence; exclusions are explicit.
- The native interaction spine is visible, the native-surface target is met,
and meaningful product action begins within five seconds.
- The beat plan passes
validate_demo_plan.py with no unexplained gap, overlap,
idle interval, or missing state change.
- A fresh rehearsal proves the complete path before the final capture.
- The final media passes
probe_demo_media.py and a visual/audio review.
- The final media passes
analyze_demo_pacing.py; silence and low-motion spans
stay inside the declared attention contract.
- The delivery package includes the final artifact, plan, script, evidence,
and verification result appropriate to the selected mode.
Gotchas
- A feature inventory is source material, not a script.
- A mock that bypasses the product path cannot prove that path.
- Using a product backstage while replacing its visible surface with cards,
fake terminals, or retyped output is not a product demo.
- A deterministic provider is acceptable only when the surrounding real state,
command, task, persistence, and result paths still execute and the boundary
is disclosed.
- Evidence from one product surface does not prove another. A record that is
searchable, stored, or visible in diagnostics may still be ineligible for
automatic injection, export, playback, or another claimed path. Exercise the
exact surface named in the proposition.
- A title card, cursor highlight, zoom, or music cue cannot repair an undefined
product result.
- Equal-duration beats and repeated dark-gradient cards are presentation
templates, not rhythm. Derive duration from action and consequence.
- “No dead time” does not mean compressing every pause. A motivated hold lets
the audience read a consequential result; an unmotivated hold is a defect.
- Do not choose a voice from its advertised nationality or name. Audition the
exact text and reject accent, cadence, or pronunciation mismatch.
- Do not claim completion from a plan, a raw recording, or successful encoding
alone.
Feedback loop
Representative prompts live in evals/evals.json. When a
real run exposes a repeated false-success signal, pacing gap, truth-boundary
mistake, or missing verification, patch the smallest responsible instruction,
reference, validator, or eval before treating the workflow as mature.
1---2name: build-product-demo3description: Plan, produce, or diagnose evidence-backed product demo videos and screen-recorded promotional walkthroughs. Use when the user asks to make a product demo, launch video, feature showcase, app walkthrough, demo reel, or polished recording; wants every important capability shown without a slow feature tour; asks to remove dead time or fix narration-to-action pacing; or needs a repeatable script, capture plan, and verified final media. Do not use for fictional commercials with no real product proof, general-purpose video editing, or documentation-only tutorials that do not need a promotional narrative.4---5
6# Build Product Demo
7
8Turn verified product behavior into a compact proof story. Treat the final media
9as an executable claim about the product, not as a decorated feature list.
10
11## Choose the mode
12
13- **Plan**: inspect the product and produce the brief, evidence inventory,
14 feature coverage, director treatment, script, and beat plan.
15- **Produce**: complete the plan, create deterministic setup and capture
16 tooling, record, edit, and verify the final media.
17- **Diagnose**: inspect an existing demo, identify the first broken layer, and
18 revise the smallest responsible artifact. Check truth, story, visible state
19 change, attention, narration/action alignment, capture, then encoding.
20
21If the user asks to “make” or “finish” the demo, default to Produce. Do not stop
22at a script while safe, in-scope production work remains.
23
24## Establish the boundary
25
261. Resolve the exact product repository, revision, runtime, audience, channel,
27 target duration, aspect ratio, language, available assets, and publishing
28 scope. Inspect before guessing.
292. Read repository instructions and existing demos, screenshots, tests,
30 fixtures, launch scripts, and marketing claims. Search before adding a new
31 recorder or seed path.
323. Separate immutable product facts, creative choices, and missing production
33 facts. Do not turn an unknown into a visual claim.
344. Select one reference benchmark: the user's strongest previous demo, a
35 product-native launch video, or a clearly named quality bar. Record what to
36 preserve and what to avoid. Do not rely on generic taste words.
375. Choose one audience doubt and one proof proposition. Complete:
38
39 `The audience doubts whether [product claim]. The demo proves [outcome] by showing [observable change].`
40
416. Define the opening and landing state. Reject a concept whose product or
42 audience state is materially unchanged at the end.
43
44Read [directing.md](references/directing.md) before selecting features or
45writing beats. Read [production.md](references/production.md) before recording,
46generating narration, or using deterministic fixtures.
47
48## Build the evidence inventory
49
50Classify every candidate claim:
51
52| Level | Evidence | Demo use |
53|---|---|---|
54| E1 | Fresh live execution with retained output | May be shown as working |
55| E2 | Current code plus focused passing test or fixture replay | May support a bounded claim; disclose fixture use |
56| E3 | Current documentation or marketing copy only | Treat as a lead; verify before showing as working |
57| E4 | Plan, issue, mockup, or unfinished path | Exclude or label explicitly as planned |
58
59Create `feature-coverage.md` and rank each capability as:
60
61- **core proof**: complete cause → action → result;
62- **differentiator**: memorable evidence supporting the proposition;
63- **supporting evidence**: fast proof that reduces doubt;
64- **exception entry**: show a truthful state or recovery entry without
65 deliberately damaging the product;
66- **excluded**: unfinished, redundant, unverifiable, visually unreadable, or
67 outside the audience decision.
68
69Do not modify product behavior merely to make the demo pass unless the user
70also asked for that product change.
71
72## Direct the proof story
73
74Write a compact treatment with:
75
76```text
77Audience doubt:
78Proof proposition:
79Opening state:
80Turning proof:
81Landing state:
82Point of view:
83Information strategy:
84Visual progression:
85Sound strategy:
86Truth boundary:
87Production simplification rule:
88```
89
90Lead with the strongest result when it is legible without setup, then return to
91a credible starting state. Organize chapters by user outcome or proof question,
92not by toolbar location. Require each chapter to leave visible accumulated
93state or decisive new knowledge.
94
95Write the native interaction spine before any title, mockup, or compositing:
96
97`real starting state → user input → native product response → consequential result`
98
99For software demos, show the actual CLI, application, host integration, API
100consumer, or generated artifact named in the proposition. Evidence generated
101backstage and retyped into a presentation layer does not count as native use.
102Target at least 60% native product surface, place the first meaningful product
103action within five seconds, and keep explanatory/title surfaces below 20%
104unless the medium makes those ratios inapplicable and the plan records why.
105
106Write one beat for each meaningful tactic, product action, reveal, consequence,
107or attention shift. A click is not a beat unless it changes the proof. Pair
108narration about value or consequence with an observable action; do not read the
109interface aloud.
110
111Treat beats as actions and revelations, never equal time boxes. Record multiple
112observable events inside a longer beat. Default to no more than three seconds
113between visible or audible events for a promotional demo; a motivated hold is
114the only exception.
115
116Save the plan as `beat-plan.json` using
117[artifact-contract.md](references/artifact-contract.md), then run:
118
119```bash
120python3 <skill-dir>/scripts/validate_demo_plan.py <demo-dir>/beat-plan.json
121```
122
123Fix plan failures before recording. Do not hide gaps in post-production.
124
125## Prepare and capture
126
1271. Build a disposable, repeatable starting state. Preserve user data and
128 existing recordings.
1292. Prefer repository-native APIs, scripts, fixtures, and automation over manual
130 UI control. Use a browser or desktop controller only when the product proof
131 genuinely depends on that surface and no lower-level route can execute it.
1323. Use deterministic data only to stabilize inputs or external dependencies.
133 Keep the real product path active and record the boundary in the plan.
1344. Run a fast, silent rehearsal. Confirm selectors, commands, product results,
135 duration, native-surface ratio, event density, and exit states before paying
136 for narration or a full recording.
1375. Audition narration with the actual language and script. Measuring duration
138 is not an audition. If the agent cannot hear the sample, require a human
139 selection or use a non-voice treatment instead of claiming the accent is
140 approved. Voice labels and locale names are not evidence of accent,
141 naturalness, or timing.
1426. Record clean picture, UI/action sound, narration, and music as separable
143 elements when practical. Retain raw evidence and logs.
1447. If a production path fails, report the failure and repair that path. Do not
145 silently substitute screenshots, fake progress, or a different capability.
146
147## Edit and diagnose pacing
148
149For every cut, finish:
150
151`Cut from [state/action] to [new state/action] because the audience now needs to [learn/feel/locate/compare/anticipate].`
152
153Shorter is not automatically faster. Remove unexplained waiting, duplicated
154information, cursor travel with no consequence, and narration that finishes
155before the corresponding action begins. Preserve enough time to orient, see the
156action, register the result, and anticipate the next beat.
157
158When diagnosing “slow” or “stuck” pacing, locate the first mismatch:
159
1601. no new product or audience state;
1612. action begins too late after narration;
1623. action finishes but the result is not framed;
1634. capture contains real processing with no readable status;
1645. edit holds a redundant image;
1656. audio or encoding creates apparent freezes.
166
167Repair the mismatch instead of globally speeding up the video.
168
169## Verify and package
170
171Run the plan validator again after the edit reflects any timing changes. Probe
172the final video with:
173
174```bash
175python3 <skill-dir>/scripts/probe_demo_media.py <final-video> \
176 --expect-width <width> --expect-height <height> --expect-fps <fps> \
177 --expect-duration <duration_seconds> --expect-container <container> \
178 --expect-video-codec <video_codec> --expect-audio-codec <audio_codec> \
179 --duration-tolerance <duration_tolerance_seconds> \
180 --require-audio
181```
182
183Set `delivery.duration_tolerance_seconds` to `0.25` normally. A larger encoding
184variance requires `delivery.duration_tolerance_reason`; pass the same declared
185tolerance to the probe. The pacing analyzer derives it from the plan.
186
187Also inspect the full video or a contact sheet for frozen frames, clipped UI,
188unreadable type, secret leakage, missing chapters, broken focus, abrupt audio,
189and claims whose evidence is not visible. A playable file with valid codecs is
190necessary but not sufficient.
191
192Run the pacing analyzer for promotional video:
193
194```bash
195python3 <skill-dir>/scripts/analyze_demo_pacing.py <final-video> \
196 --plan <demo-dir>/beat-plan.json \
197 --json-out <demo-dir>/pacing-verification.json
198```
199
200Treat its default silence and low-motion limits as a fail-closed rehearsal
201gate. The analyzer exempts a silence or low-motion segment only when the entire
202detected interval falls inside a motivated hold declared by the plan; do not
203raise a file-wide threshold to accommodate one hold. It rejects alternate audio
204or video streams because those tracks are not pacing-verified; deliver exactly
205one of each.
206Review continuous playback or dense consecutive frames as well as a contact
207sheet; one frame per scene can make a static slide deck look varied.
208
209Deliver the files defined in [artifact-contract.md](references/artifact-contract.md)
210and state which claims used live execution, deterministic fixtures, or
211compositing.
212
213## Autonomy boundary
214
215- Perform read-only inspection, local planning, disposable seeding, local
216 capture, editing, and validation directly when requested.
217- Ask before using credentials not already approved for the task, incurring
218 paid API usage, changing production data, deploying, publishing externally,
219 deleting or overwriting existing media, or changing product code outside the
220 requested scope.
221- Remote commit, push, PR, or publication requires explicit approval unless the
222 current request already grants that exact action.
223- Never record private memories, tokens, account data, notifications, unrelated
224 windows, or user-identifying paths when a sanitized fixture can prove the
225 same capability.
226
227## Done when
228
229- The exact product revision and truth boundary are recorded.
230- A reference benchmark is recorded with concrete qualities to preserve.
231- One audience doubt is answered by a visible opening-to-landing change.
232- Core claims have E1 or bounded E2 evidence; exclusions are explicit.
233- The native interaction spine is visible, the native-surface target is met,
234 and meaningful product action begins within five seconds.
235- The beat plan passes `validate_demo_plan.py` with no unexplained gap, overlap,
236 idle interval, or missing state change.
237- A fresh rehearsal proves the complete path before the final capture.
238- The final media passes `probe_demo_media.py` and a visual/audio review.
239- The final media passes `analyze_demo_pacing.py`; silence and low-motion spans
240 stay inside the declared attention contract.
241- The delivery package includes the final artifact, plan, script, evidence,
242 and verification result appropriate to the selected mode.
243
244## Gotchas
245
246- A feature inventory is source material, not a script.
247- A mock that bypasses the product path cannot prove that path.
248- Using a product backstage while replacing its visible surface with cards,
249 fake terminals, or retyped output is not a product demo.
250- A deterministic provider is acceptable only when the surrounding real state,
251 command, task, persistence, and result paths still execute and the boundary
252 is disclosed.
253- Evidence from one product surface does not prove another. A record that is
254 searchable, stored, or visible in diagnostics may still be ineligible for
255 automatic injection, export, playback, or another claimed path. Exercise the
256 exact surface named in the proposition.
257- A title card, cursor highlight, zoom, or music cue cannot repair an undefined
258 product result.
259- Equal-duration beats and repeated dark-gradient cards are presentation
260 templates, not rhythm. Derive duration from action and consequence.
261- “No dead time” does not mean compressing every pause. A motivated hold lets
262 the audience read a consequential result; an unmotivated hold is a defect.
263- Do not choose a voice from its advertised nationality or name. Audition the
264 exact text and reject accent, cadence, or pronunciation mismatch.
265- Do not claim completion from a plan, a raw recording, or successful encoding
266 alone.
267
268## Feedback loop
269
270Representative prompts live in [evals/evals.json](evals/evals.json). When a
271real run exposes a repeated false-success signal, pacing gap, truth-boundary
272mistake, or missing verification, patch the smallest responsible instruction,
273reference, validator, or eval before treating the workflow as mature.