skills/demo/SKILL.md
Capture evidence for what changed: blurb, paste, screenshot, GIF, video, launch note, or repo-local demo skill. Pick by change shape, audience, and budget. Use when: "make a demo", "record walkthrough", "PR evidence", "upload screenshots", "show what changed", "release notes blurb", "scaffold demo", "generate demo skill". Trigger: /demo.
npx skillsauth add phrazzld/spellbook demoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Every app has a demo path. The question is never "is there something
to show?" — it's "what shape does showing take in this codebase, for
this change, for this audience?" A refactor's demo is a PR-description
bullet pointing at the diff stats; a new endpoint's demo is a curl
paired with its JSON response; a CLI flag's demo is a terminal paste;
a UI change's demo is a screenshot or GIF; a tentpole launch's demo is
a narrated video. Same skill, different output.
The failure mode this skill exists to prevent is the silent skip —
shipping a change with no visible record of what moved, because the
repo doesn't have a video pipeline or GitHub upload path. The canonical
artifact surface is .evidence/<branch>/<date>/; if a repo cannot use it,
the demo path must name its durable alternative.
Every demo outcome, including "no artifact needed," answers:
See harnesses/shared/AGENTS.md (Completion Evidence) for the shared evidence
core; this phase keeps artifact-specific local fields.
## Completion Gate
- Exact end-user behavior shown: behavior or internal operator behavior the artifact demonstrates.
- Evidence that proves it: screenshot, GIF, video, paste, launch note, or artifact path.
- Exact command/path/route exercised: command, URL, route, file path, or tool call used to capture it.
- Repo-fit check: repo convention or audience surface the artifact matches.
- Residual risk: unshown path, unsupported state, or none with reason.
For internal changes, the demo may be a PR/release-note sentence, but it still names the developer/operator behavior that changed.
When .harness-kit/work/ledger.jsonl is available, /demo calls
scripts/work-ledger.py append with phase_started before capture and
phase_completed after the artifact or explicit "no artifact needed" evidence
ref exists. Use blocker_added when capture fails and set next_action to the
smallest recovery step.
You are the executive orchestrator.
Delegation floor applies: probe the roster first; dispatch two or more
providers for substantive work; direct solo only for mechanical, emergency,
user-forbidden, or fewer-than-two-providers cases. See
harnesses/shared/AGENTS.md (Roster).
Local lane guidance: Use one lane for capture planning and another for cold quality review against the scoped audience, changed behavior, and artifact constraints.
Before capturing anything, answer three questions in order:
What changed? Classify the diff:
| Change shape | Demo path |
|---|---|
| Browser / UI | Screenshot of the new state; GIF if interactive; before/after pair for visual deltas |
| API / HTTP endpoint / serverless handler | curl request + response body pasted in PR or release notes; before/after pair for breaking changes |
| CLI / command-line tool | Terminal recording (asciinema, vhs) or copy/paste of --help output plus a representative invocation |
| Library / SDK / package | Code snippet showing the new API in use; type-check output or REPL session if relevant |
| MCP server / agent tool / LLM skill | Sample tool-call invocation and its result; conversation transcript excerpt; registration block for new tools |
| Internal refactor / infra / dependency bump / build config | Release-notes blurb or PR-description bullet. "No artifact needed" is the recorded outcome, not a skip |
Who is the audience? PR reviewer wants the minimum proof the change works. Team Slack wants a short, punchy visual. External customers want polish and context. The audience determines fidelity and framing, not whether a demo exists.
What's the time budget? Seconds (paste a log line), minutes (screenshot, curl paste, terminal recording), hours (edited GIF, before/after pair), days (narrated video, launch piece). Match fidelity to budget; under-investing is fine when the change is routine, over-investing is waste.
If shape, audience, and budget agree on "blurb is enough" — write the blurb. If they point at "screenshot + one-liner" — capture and paste. If they point at "polished video" — scaffold (or run the scaffolded skill) and invoke the full workflow.
| Situation | Action |
|---|---|
| First argument is scaffold, or user said "scaffold demo" / "generate demo skill" | Read references/scaffold.md and follow it |
| A project-local .claude/skills/demo/SKILL.md exists and the change needs polish | Defer to the project-local skill |
| Change shape is internal / refactor / infra / dep bump | Use the no-artifact path below — write the blurb, don't open a capture tool |
| Change shape is routine (single screenshot, curl paste, terminal paste, code snippet) | Use the quick-capture path |
| Change shape warrants polish (GIF with before/after, edited walkthrough, narrated video) | Use the polished path |
The demo is a sentence, not a file. This is a first-class outcome, not a skip.
Refactor: extract rate-limiting from handler into middleware. No behavior change; 4 handlers now share the same limiter.For the dominant case — one change, one surface, one screenshot or paste. Fast, in-context, no subagents.
asciinema rec for multi-step invocations.For tentpole changes, recurring demo needs, or anything that will be seen outside the PR. Each phase is a separate subagent; the critic inspects artifacts cold to prevent self-grading.
vhs, asciinema,
Remotion, hand-captured). Name the target surface (PR comment, draft
release, changelog, customer email, Slack post)..evidence/<branch>/<date>/ and commit
them with the branch. Embed or link that path in the target surface.
A draft GitHub release plus PR comment is an optional mirror when reviewers
need inline asset URLs; PR description path links, release notes, git notes,
and Slack/email for audience-facing posts are all valid. Pick the surface by
audience, not by habit.# WebM -> GIF (800px, 8fps, 128 colors)
ffmpeg -y -i input.webm \
-vf "fps=8,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse=dither=bayer" \
-loop 0 output.gif
For detailed capture patterns, read skills/qa/references/evidence-capture.md.
For PR evidence upload via draft releases, read references/pr-evidence-upload.md.
For Remotion video composition, read references/remotion.md.
For TTS narration, read references/tts-narration.md.
The artifact and the surface are separate choices. Pick the artifact from shape; pick the surface from audience.
| Surface | Good for |
|---|---|
| PR description (markdown + inline images) | Reviewers; the default |
| Release notes / changelog entry | Users reading between versions |
| .evidence/<branch>/<date>/ | Canonical offline storage; default for QA/demo artifacts |
| Draft GitHub release (gh release create --draft) | Optional mirror for large assets or inline PR URLs |
| Commit message body | Long-term record, especially for no-artifact outcomes |
| git notes | Durable annotation without touching history |
| Team Slack / internal post | Timely visual update; lossy over time |
| Customer email / launch post | External polished path |
When a repo vendors or specializes this skill, the local guidance should name the actual demo path for THAT codebase. Concretely:
vhs tapes checked into demo/? asciinema uploads? If none
exist yet, name the lightest-weight option that fits the stack.An exact-copy vendored copy is valid only for a repo that is itself the canonical source. For ordinary repos, either rely on the system-wide skill or add concrete local demo defaults that earn the checked-in copy.
gh release is a sign that the path is different here,
not that there is none. .evidence/<branch>/<date>/ is the default
durable surface unless the repo declares another.development
Lightweight evidence-backed retro and catch-up reports for a current repo, branch, PR, backlog slice, or recent agent session. Use when the user asks for a debrief, catch me up, what changed, why it matters, product implications, end-user implications, developer experience implications, current app state, backlog state, workspace state, alternatives considered, or context rebuild after losing the thread. Trigger: /debrief.
testing
Capture agent-session work records as local JSONL audit evidence. Links a backlog/spec, branch, commits, review verdicts, QA/demo evidence, transcript refs, and shipped ref without storing raw private transcripts. Use when: "trace this work", "write work record", "agent session trace", "journal this delivery", "link transcript evidence". Trigger: /trace, /journal.
data-ai
Turn proven agent-session patterns into first-party Harness Kit skills. Use when: "skillify this conversation", "make this into a skill", "generate a skill from current transcript", "extract reusable workflow". Trigger: /skillify.
testing
Run one targeted, read-only architecture or quality critique through a named lens from the shared rubric. Use when: "critique this module", "run an Ousterhout pass", "lens critique", "architecture critique". Trigger: /critique.