Author a project's reusable demo-generation skill — the machinery that showcases an initiative's CHANGES (before/after) as a Forge-styled HTML page — and render a real sample from a recent change, iterating on operator feedback until locked.
Install
npx skillscat add parsofish/forge-studio/demo-builder Install via the SkillsCat registry.
Demo-Builder
Your job is NOT to write a one-off marketing page for the whole project. It is
to build the project's reusable demo-generation skill — the machinery that,
every time forge finishes an initiative, produces a rich before/after HTML
demo of THAT initiative's changes — and then render one real sample so the
operator can judge the machinery. You run with write tools, with the project repo
as your working directory.
This replaces the rigid demo.json contract: demos are bespoke HTML the project's
own skill generates, tailored per project, scoped to what an initiative changed.
Scope every demo to an initiative's CHANGES
The unit of a demo is "what this initiative changed", not "what the project is".
A good generated demo answers: what was true before, what is true now, and the
concrete evidence of the difference — for the slice of behaviour the initiative
touched. Design the skill around a before/after pair (two states of the repo) and
make the sample a genuine before/after of a real change.
Update mode
When the Mode: line in the data block below reads update — UPDATE MODE: a
locked demo already exists — .forge/skills/demo-design/SKILL.md (the composer) and.forge/demo/DEMO.html (the sample). READ them and REVISE per the operator's
change-notes; do NOT rebuild from scratch.
Two passes, and this one is the FIRST
Every generate turn runs you twice. This pass has no Bash: author the
deliverables its task section names, from what you can read. Put a clearly marked
placeholder wherever real captured output belongs — the second pass fills those
in with genuine before/after output and has the tools to do it. Do not describe
output you have not seen; mark the slot and move on.
The demo skill's quality bar
Whichever demo skill you author this turn — the composer at.forge/skills/demo-design/SKILL.md, or a per-element skill — it must instruct a
future agent how to, given an initiative's before/after (a base SHA / worktree vs
the merged result), render a self-contained Forge-styled HTML demo that showcases
the changes that initiative introduced — the new behaviour, the diff that matters,
real captured output before vs after, the verification that makes it non-trivial.
This is also the file forge preflight DEMO-SKILL checks.
Honor the inputs
Each turn's data block below gives you the operator's look-and-feel guidance
(or, on an update turn, their change-notes), the project's configured demo
process where relevant, and — on revision turns — the operator's feedback on
the previous sample. Apply all of them. On a revision, EDIT the existing skill +
sample toward the feedback; don't rebuild from scratch unless asked.
Contract
- Write under
.forge/skills/demo-design/(or, for a targeted element,.forge/skills/demo/<id>/) and.forge/demo/(and nowhere surprising); touch
the project's source only for a tiny, reversible hook if the demo genuinely
needs one (call it out). - The deliverable paths this turn's instructions name below MUST both exist when
your turn ends. - Keep the sample tight and readable; lead with a one-line essence of the change.
- The operator reviews the sample and either gives feedback (another turn) or
locks it.
Your task this turn: refine the targeted demo element
Author/refine the project-side element-skill at the path named Target element skill path: in the data block below, using its generator (also in the data block
below). Write this element's rendered HTML fragment to the path named Target element fragment path: in the data block below (so the operator can view this
part's output independently), and render .forge/demo/DEMO.html as JUST this
element's fragment (wrapped, with the base CSS), structured as a before/after
with the captured output left as marked placeholders for the grounding pass, so
the operator can perfect this element before composing the whole demo. Do NOT
build the other elements this turn.
Stop when the target element's skill path and .forge/demo/DEMO.html both exist.
Your task this turn: build the demo + render a sample
For each element kind in the ordered list below: author/refresh a project-side
element-skill at .forge/skills/demo/<id>/SKILL.md using its generator (below)
AND have it write its rendered HTML fragment to .forge/demo/fragments/<id>.html
(one file per element, so each part's output is viewable independently). Then
author .forge/skills/demo-design/SKILL.md — the composer that reads those
fragments IN THIS ORDER and assembles them into .forge/demo/DEMO.html (wrapped
with / + the base CSS). Structure every fragment as a before/after,
leaving the captured output as marked placeholders for the grounding pass.
Scope to what a change introduced, not the whole project. Stop when.forge/skills/demo-design/SKILL.md and .forge/demo/DEMO.html exist.
Your task this turn: build the demo + render a sample
Deliver BOTH:
.forge/skills/demo-design/SKILL.md— the reusable generator that renders a
before/after HTML demo of an INITIATIVE'S CHANGES, meeting the demo skill's
quality bar. It bakes in the concrete commands for THIS project drawn from the
configured demo process in the data block below, and inlines the Forge demo
base stylesheet from the data block below so every generated demo reads as
Forge..forge/demo/DEMO.html— a sample produced by running that generator against
a representative recent change, structured as a before/after with the
captured output left as marked placeholders for the grounding pass. This
sample, once grounded, is what the operator reviews to judge the skill.
Scope the demo to what a change introduced, not the whole project. Stop when both.forge/skills/demo-design/SKILL.md and .forge/demo/DEMO.html exist.
Your task this turn: ground the sample in REAL output
The deliverables already exist — the previous pass authored them. Edit them; do
not rebuild them.
Use Bash to actually check out / build / run the relevant states and capture real
output into the sample, replacing the placeholders the previous pass marked.
Ground the sample in a representative recent change. Use Bash + git to find one
(git log --oneline -20; pick the most recent substantive feature commit or
commit range) and render an actual before/after of it — real output on both
sides, not a mock. Never fabricate results, fake metrics, or invent a passing
run. If a before/after can't be produced for the chosen change, pick a different
recent change or say so in the page — don't fake it.
Also fold what you learned into the demo SKILL the previous pass wrote, so the
next agent to run it produces real output the same way.