---
name: omnigent-ai-feature-demo
description: "Record at least one captioned demo for every covered CUJ through its real entry point."
license: "Apache-2.0"
metadata:
  decimalai-skill-id: "3bae9a30-9886-4def-a611-139e7fe1fd01"
  decimalai-version-id: "d2409086-c71e-4448-9fe1-e992eb8e5576"
  decimalai-version: "1"
  decimalai-body-sha256: "8e64a15204171e5fa61548c0f970539ca3ba91704b6073e041e3cdc962a003cb"
  decimalai-name: "omnigent-ai/feature-demo"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "design-media"
  decimalai-source: "https://app.decimal.ai/s/omnigent-ai-feature-demo@1/SKILL.md"
---
# Demo recordings

The demo is required. Record **at least one** clip for every covered CUJ; a CUJ
with several entry points or steps may have more. Each clip shows the user
action and the product's response through the CUJ's real entry point, never
pytest output, assertions, test source, or debug logs.

Follow [`dev/recording-lanes.md`](../../../recording-lanes.md) for the recorder,
the per-surface mechanics, and captioning. Use the CUJ ID as the facet and
`demo` as the kind:

- Save each raw capture as `recordings/<ticket-key>/raw/demo-<cuj>.<ext>` (add a
  short suffix, e.g. `demo-cuj-1-edit`, for extra clips of the same CUJ).
- Burn timed captions into each clip with `dev/caption_recording.py`, rendering
  to `recordings/<ticket-key>/demo-<cuj>.mp4`. Captions list the actions shown
  and end with the observed result.
- Play and inspect each render before declaring it in the handoff and PR Demo.
  If captioning fails, use the guide's uncaptioned fallback path and say why in
  that clip's `caption` and the PR Demo. A usable uncaptioned clip still counts.
- For API or configuration CUJs, record a VHS terminal session that runs the
  real CLI or API call and shows its output. Written evidence alone is not a
  demo.
- Build the SPA before starting the recorder. Inside a server-spawned runner
  (`OMNIGENT_RUNNER_ID` is set), strip the inherited runner variables as the
  guide describes, and retry before reporting a blocker.

Never commit recordings; upload them to the PR as described in
`feature-publish`.

## When a recording can't be made

Recording should almost always work. When a covered CUJ really can't be recorded
(the recorder can't start in this environment, or the surface needs hardware or
an external account the sandbox doesn't have), still publish a **ready** PR and
drive it as usual. For that CUJ:

- set `recording_blocker` to the specific blocker, with the command and error;
- write `manual_test`: step-by-step instructions a human can follow to test the
  journey, including setup, the inputs to give, and what they should see;
- put both in the PR's Demo section in place of the clip.

The outcome is then `partially_implemented`, with that CUJ's recording in
`remaining_work`. Only declare clips you actually produced. Then load
`feature-publish`.
