@cueframe/skills 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +9 -104
  2. package/{skills → dist/skills}/add-music-bed/SKILL.md +12 -7
  3. package/{skills → dist/skills}/brand-reel/SKILL.md +19 -15
  4. package/{skills → dist/skills}/clip-a-talking-head/SKILL.md +15 -7
  5. package/dist/skills/composing-video/SKILL.md +447 -0
  6. package/{skills → dist/skills}/cueframe-brand-demo/SKILL.md +9 -2
  7. package/{skills → dist/skills}/cueframe-cli/SKILL.md +54 -49
  8. package/{skills → dist/skills}/cueframe-component-authoring/SKILL.md +14 -6
  9. package/{skills → dist/skills}/cueframe-compose-loop/SKILL.md +20 -6
  10. package/dist/skills/cueframe-compose-loop/references/builtin-insertion.md +49 -0
  11. package/dist/skills/cueframe-compose-loop/references/builtin-requests.json +111 -0
  12. package/dist/skills/cueframe-connect/SKILL.md +53 -0
  13. package/{skills → dist/skills}/cueframe-product-video/SKILL.md +15 -7
  14. package/{skills → dist/skills}/cueframe-scene-shot/SKILL.md +8 -0
  15. package/dist/skills/cueframe-storyboard/SKILL.md +76 -0
  16. package/{skills → dist/skills}/every-format-from-one-edit/SKILL.md +14 -8
  17. package/{skills → dist/skills}/extracting-brand-kits/SKILL.md +8 -0
  18. package/{skills → dist/skills}/launch-video/SKILL.md +17 -11
  19. package/{skills → dist/skills}/make-a-social-reel/SKILL.md +19 -15
  20. package/{skills → dist/skills}/rebrand-a-video/SKILL.md +18 -16
  21. package/dist/skills/video-craft-standards/SKILL.md +121 -0
  22. package/dist/skills/video-craft-standards/agents/openai.yaml +6 -0
  23. package/package.json +9 -28
  24. package/skills-dir.d.ts +1 -0
  25. package/skills-dir.js +2 -1
  26. package/.agents/plugins/marketplace.json +0 -12
  27. package/.claude-plugin/marketplace.json +0 -6
  28. package/.claude-plugin/plugin.json +0 -15
  29. package/.codex-plugin/plugin.json +0 -30
  30. package/.cursor-plugin/plugin.json +0 -1
  31. package/.mcp.json +0 -1
  32. package/AGENTS.md +0 -20
  33. package/assets/logo-400.png +0 -0
  34. package/gemini-extension.json +0 -1
  35. package/glama.json +0 -1
  36. package/hooks/hooks.json +0 -7
  37. package/hooks/session-inject.md +0 -15
  38. package/hooks/session-start.sh +0 -6
  39. package/llms-install.md +0 -47
  40. package/mcp.json +0 -1
  41. package/plugin.json +0 -46
  42. package/rules/cueframe.mdc +0 -19
  43. package/skills/composing-video/SKILL.md +0 -702
  44. package/skills/cueframe-connect/SKILL.md +0 -45
  45. package/skills/cueframe-storyboard/SKILL.md +0 -104
  46. package/skills/video-craft-standards/SKILL.md +0 -128
  47. package/skills/video-craft-standards/agents/openai.yaml +0 -6
  48. package/skills/video-craft-standards/assets/icon.svg +0 -16
  49. package/skills.sh.json +0 -1
  50. /package/{skills → dist/skills}/add-music-bed/agents/openai.yaml +0 -0
  51. /package/{assets → dist/skills/add-music-bed/assets}/icon.svg +0 -0
  52. /package/{skills → dist/skills}/brand-reel/agents/openai.yaml +0 -0
  53. /package/{skills/add-music-bed → dist/skills/brand-reel}/assets/icon.svg +0 -0
  54. /package/{skills → dist/skills}/clip-a-talking-head/agents/openai.yaml +0 -0
  55. /package/{skills/brand-reel → dist/skills/clip-a-talking-head}/assets/icon.svg +0 -0
  56. /package/{skills → dist/skills}/composing-video/agents/openai.yaml +0 -0
  57. /package/{skills/clip-a-talking-head → dist/skills/composing-video}/assets/icon.svg +0 -0
  58. /package/{skills → dist/skills}/cueframe-brand-demo/agents/openai.yaml +0 -0
  59. /package/{skills/composing-video → dist/skills/cueframe-brand-demo}/assets/icon.svg +0 -0
  60. /package/{skills → dist/skills}/cueframe-cli/agents/openai.yaml +0 -0
  61. /package/{skills/cueframe-brand-demo → dist/skills/cueframe-cli}/assets/icon.svg +0 -0
  62. /package/{skills → dist/skills}/cueframe-component-authoring/agents/openai.yaml +0 -0
  63. /package/{skills/cueframe-cli → dist/skills/cueframe-component-authoring}/assets/icon.svg +0 -0
  64. /package/{skills → dist/skills}/cueframe-compose-loop/agents/openai.yaml +0 -0
  65. /package/{skills/cueframe-component-authoring → dist/skills/cueframe-compose-loop}/assets/icon.svg +0 -0
  66. /package/{skills → dist/skills}/cueframe-compose-loop/references/preview-workflow.md +0 -0
  67. /package/{skills → dist/skills}/cueframe-connect/agents/openai.yaml +0 -0
  68. /package/{skills/cueframe-compose-loop → dist/skills/cueframe-connect}/assets/icon.svg +0 -0
  69. /package/{skills → dist/skills}/cueframe-product-video/agents/openai.yaml +0 -0
  70. /package/{skills/cueframe-connect → dist/skills/cueframe-product-video}/assets/icon.svg +0 -0
  71. /package/{skills → dist/skills}/cueframe-scene-shot/agents/openai.yaml +0 -0
  72. /package/{skills/cueframe-product-video → dist/skills/cueframe-scene-shot}/assets/icon.svg +0 -0
  73. /package/{skills → dist/skills}/cueframe-storyboard/agents/openai.yaml +0 -0
  74. /package/{skills/cueframe-scene-shot → dist/skills/cueframe-storyboard}/assets/icon.svg +0 -0
  75. /package/{skills → dist/skills}/every-format-from-one-edit/agents/openai.yaml +0 -0
  76. /package/{skills/cueframe-storyboard → dist/skills/every-format-from-one-edit}/assets/icon.svg +0 -0
  77. /package/{skills → dist/skills}/extracting-brand-kits/agents/openai.yaml +0 -0
  78. /package/{skills/every-format-from-one-edit → dist/skills/extracting-brand-kits}/assets/icon.svg +0 -0
  79. /package/{skills → dist/skills}/launch-video/agents/openai.yaml +0 -0
  80. /package/{skills/extracting-brand-kits → dist/skills/launch-video}/assets/icon.svg +0 -0
  81. /package/{skills → dist/skills}/make-a-social-reel/agents/openai.yaml +0 -0
  82. /package/{skills/launch-video → dist/skills/make-a-social-reel}/assets/icon.svg +0 -0
  83. /package/{skills → dist/skills}/rebrand-a-video/agents/openai.yaml +0 -0
  84. /package/{skills/make-a-social-reel → dist/skills/rebrand-a-video}/assets/icon.svg +0 -0
  85. /package/{skills/rebrand-a-video → dist/skills/video-craft-standards}/assets/icon.svg +0 -0
@@ -5,10 +5,17 @@ description: Use when editing, clipping, or rendering video via the CueFrame CLI
5
5
 
6
6
  # CueFrame CLI
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  ## MCP is the primary surface — read this before using the CLI
9
17
 
10
- **If you are an agent that can call tools, connect to CueFrame's MCP server instead of shelling
11
- out to this CLI.** MCP is the supported, maintained integration surface: it hides transport and
18
+ **For a tool-driven workflow, prefer an existing supported MCP connection. For an explicitly requested terminal or CI workflow, use the CLI.** MCP is the supported, maintained integration surface: it hides transport and
12
19
  contract details, its tools are generated from the same OpenAPI SSOT the CLI is, and it is where
13
20
  new capability lands first. The `cueframe-connect` skill owns the setup for every host
14
21
  (Claude Code, Claude/ChatGPT connectors, Cursor/Codex/VS Code/Windsurf/Zed, and the
@@ -24,11 +31,11 @@ both MCP and this CLI exist so you do not have to.
24
31
 
25
32
  ## Overview
26
33
 
27
- The `cueframe` CLI drives the CueFrame platform from the terminal. Optimized for agents — every command supports `--json` (NDJSON event stream) and the binary self-describes via `npx -y cueframe@0.5 describe --json`.
34
+ The `cueframe` CLI drives the CueFrame platform from the terminal. Optimized for agents — every command supports `--json` (NDJSON event stream) and the binary self-describes via `npx -y cueframe@0.6 describe --json`.
28
35
 
29
- **Run it as `npx -y cueframe@0.5 …` — every command in this skill is written that way, and
36
+ **Run it as `npx -y cueframe@0.6 …` — every command in this skill is written that way, and
30
37
  that form is executable verbatim.** There is no `cueframe` on your PATH unless you put it
31
- there: `npx -y cueframe@0.5 install` wires the MCP server and drops these skills, but npx
38
+ there: `npx -y cueframe@0.6 install` wires the MCP server and drops these skills, but npx
32
39
  unpacks to an ephemeral cache, so it installs no binary. `npx` re-resolves the current
33
40
  version on each call (~0.5s warm, ~5s cold), which also means these commands never go
34
41
  stale. If you are running many in a row and want to skip that, `npm i -g cueframe` once
@@ -39,9 +46,9 @@ the documented path.
39
46
  **The framework is three verbs:** `upload` (register media) → `composition put` (author the timeline) → `render` (→ MP4). The `Composition` is the contract — render takes the saved composition, nothing else. Everything domain-specific (AI clip suggestions, FCPXML/Premiere export) is a **use-case on-ramp** layered on top, not part of the core.
40
47
 
41
48
  **Core principle — discover, don't guess.** Never author a composition from the
42
- examples below alone. The live contract is `npx -y cueframe@0.5 schema composition` (prints
49
+ examples below alone. The live contract is `npx -y cueframe@0.6 schema composition` (prints
43
50
  the real wire schema the server enforces); confirm any draft with
44
- `npx -y cueframe@0.5 composition validate -b @file.json` BEFORE you render. Validation is
51
+ `npx -y cueframe@0.6 composition validate -b @file.json` BEFORE you render. Validation is
45
52
  free and instant; a render is neither. The examples here are orientation — the
46
53
  schema is the source of truth.
47
54
 
@@ -63,20 +70,20 @@ delivery, not checking each edit. CLI validation does not replace visual evidenc
63
70
  # Commands run against production; auth is stored in ~/.cueframe/auth.json.
64
71
 
65
72
  # 1. Register media (one or many — mixed video / image / audio).
66
- npx -y cueframe@0.5 upload "/path/to/source.mp4" --json # → mediaItemId (process_complete)
73
+ npx -y cueframe@0.6 upload "/path/to/source.mp4" --json # → mediaItemId (process_complete)
67
74
 
68
75
  # 2. Create a project (sets aspect/format).
69
- npx -y cueframe@0.5 project create -n "promo" -a 9:16 --json # → projectId
76
+ npx -y cueframe@0.6 project create -n "promo" -a 9:16 --json # → projectId
70
77
 
71
78
  # 3. Author the composition: tracks of clips (per-clip reframe/trim), optional
72
79
  # captions (captions.segments), brandKitId. The composition is the SSOT.
73
80
  # Discover the live schema, then validate the draft BEFORE saving/rendering:
74
- npx -y cueframe@0.5 schema composition # → live wire schema
75
- npx -y cueframe@0.5 composition validate -b @composition.json # → ✓ valid | per-field errors (no render)
76
- npx -y cueframe@0.5 composition put <projectId> -b @composition.json # ETag auto
81
+ npx -y cueframe@0.6 schema composition # → live wire schema
82
+ npx -y cueframe@0.6 composition validate -b @composition.json # → ✓ valid | per-field errors (no render)
83
+ npx -y cueframe@0.6 composition put <projectId> -b @composition.json # ETag auto
77
84
 
78
85
  # 4. Render the saved composition to MP4. SSE-watches + downloads when done.
79
- npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
86
+ npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
80
87
  # → render_queued → render_progress* → render_complete
81
88
  #
82
89
  # `render` takes ONLY a projectId and renders the SAVED composition (tracks +
@@ -85,14 +92,14 @@ npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
85
92
  # a hand-authored composition; if absent, the clip is rendered without captions.
86
93
 
87
94
  # Reattach to an in-flight render later (e.g. after disconnect):
88
- npx -y cueframe@0.5 render watch <renderId> -p <projectId> -o ./out.mp4 --json
95
+ npx -y cueframe@0.6 render watch <renderId> -p <projectId> -o ./out.mp4 --json
89
96
  ```
90
97
 
91
98
  ## Anatomy of a composition.json
92
99
 
93
100
  This section orients you to the shape; the authoritative contract is
94
- `npx -y cueframe@0.5 schema composition` (the live wire schema) — run it when a field is
95
- unclear, and `npx -y cueframe@0.5 composition validate -b @file.json` to check a draft.
101
+ `npx -y cueframe@0.6 schema composition` (the live wire schema) — run it when a field is
102
+ unclear, and `npx -y cueframe@0.6 composition validate -b @file.json` to check a draft.
96
103
 
97
104
  `composition put` takes the **bare** `Composition` object (no wrapper; the CLI POSTs
98
105
  the `@file` verbatim and handles the ETag). Minimal valid shape:
@@ -159,18 +166,18 @@ the composition yourself (above).
159
166
 
160
167
  ```bash
161
168
  # 1. Upload + chain the AI clip pass.
162
- npx -y cueframe@0.5 upload "/path/to/source.mp4" --analyze --json # mediaItemId + suggestions
163
- # (or run it explicitly: npx -y cueframe@0.5 analyze <mediaItemId> --wait --json)
169
+ npx -y cueframe@0.6 upload "/path/to/source.mp4" --analyze --json # mediaItemId + suggestions
170
+ # (or run it explicitly: npx -y cueframe@0.6 analyze <mediaItemId> --wait --json)
164
171
 
165
172
  # 2. List clip suggestions (publicId sug_…, title, startMs/endMs, score).
166
- npx -y cueframe@0.5 clips <mediaItemId> --json
173
+ npx -y cueframe@0.6 clips <mediaItemId> --json
167
174
 
168
175
  # 3. Create a project AND author its composition from the chosen suggestion.
169
- npx -y cueframe@0.5 project create -n "paul-klein-shorts" -a 9:16 --from-suggestion <sug_…> --json
170
- # (or, on an existing project: npx -y cueframe@0.5 composition from-suggestion <projectId> -s <sug_…>)
176
+ npx -y cueframe@0.6 project create -n "paul-klein-shorts" -a 9:16 --from-suggestion <sug_…> --json
177
+ # (or, on an existing project: npx -y cueframe@0.6 composition from-suggestion <projectId> -s <sug_…>)
171
178
 
172
179
  # 4. Render — same framework verb as above.
173
- npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
180
+ npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
174
181
  ```
175
182
 
176
183
  Both flows converge on `composition put` → `render`; the on-ramp just authors the
@@ -187,12 +194,12 @@ video and composites it (the shared renderer never runs your code).
187
194
 
188
195
  ```bash
189
196
  # 1. Scaffold a workspace (writes cueframe.json + cueframe/components/). Idempotent.
190
- npx -y cueframe@0.5 init --json
197
+ npx -y cueframe@0.6 init --json
191
198
 
192
199
  # 2a. Scaffold a component in cueframe/components/<id>/ as owned, editable source.
193
- npx -y cueframe@0.5 new component my-badge --json
200
+ npx -y cueframe@0.6 new component my-badge --json
194
201
 
195
- # 2b. …or FORK a built-in: discover ids from the catalog (npx -y cueframe@0.5 api GET /v1/components),
202
+ # 2b. …or FORK a built-in: discover ids from the catalog (npx -y cueframe@0.6 api GET /v1/components),
196
203
  # fetch that primitive's source with the `get_component_source` tool, and paste it into
197
204
  # cueframe/components/my-badge/index.tsx as your starting point.
198
205
 
@@ -200,38 +207,38 @@ npx -y cueframe@0.5 new component my-badge --json
200
207
  # ({ durationInFrames, params, assets, render }) at render; declare its v2 manifest.
201
208
 
202
209
  # 4. Publish to CueFrame so it can render (uploads index.tsx as the component's tsxSource).
203
- npx -y cueframe@0.5 push my-badge --json # one component
204
- npx -y cueframe@0.5 sync --json # every component in the workspace
210
+ npx -y cueframe@0.6 push my-badge --json # one component
211
+ npx -y cueframe@0.6 sync --json # every component in the workspace
205
212
 
206
213
  # 5. Reference the component id in your composition as a {kind:'component', componentId, props}
207
214
  # clip, then render with the same verb. Preview a single component first via the MCP
208
215
  # preview_component loop.
209
- npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
216
+ npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
210
217
  ```
211
218
 
212
219
  ## Quick reference
213
220
 
214
221
  | Need to… | Command |
215
222
  |---|---|
216
- | See every command + flags | `npx -y cueframe@0.5 describe --json` |
217
- | Install/refresh managed skills | `npx -y cueframe@0.5 install` (shared `~/.agents/skills` and Claude `~/.claude/skills`; locally changed or untracked packages are preserved and reported) |
218
- | List projects | `npx -y cueframe@0.5 list -n 50` |
219
- | List your media | `npx -y cueframe@0.5 clips` (no mediaId arg) |
220
- | Discover the live composition schema | `npx -y cueframe@0.5 schema composition` |
221
- | Validate a draft (no save, no render) | `npx -y cueframe@0.5 composition validate -b @plan.json` |
222
- | Read composition + ETag | `npx -y cueframe@0.5 composition get <projectId> --json` |
223
- | Write composition | `npx -y cueframe@0.5 composition put <projectId> -b @plan.json` (ETag auto) |
224
- | Export to Final Cut | `npx -y cueframe@0.5 export fcpxml <projectId> -s <sug> --wait -o cut.zip` |
225
- | Export to Premiere | `npx -y cueframe@0.5 export premiere <projectId> -s <sug> --wait -o cut.zip` |
226
- | Anything not wrapped | `npx -y cueframe@0.5 api GET /v1/... -i` (escape hatch, like `gh api`) |
227
- | Validate a composition without mutating | `npx -y cueframe@0.5 composition validate -b @plan.json` |
223
+ | See every command + flags | `npx -y cueframe@0.6 describe --json` |
224
+ | Install/refresh managed skills | `npx -y cueframe@0.6 install` (shared `~/.agents/skills` and Claude `~/.claude/skills`; locally changed or untracked packages are preserved and reported) |
225
+ | List projects | `npx -y cueframe@0.6 list -n 50` |
226
+ | List your media | `npx -y cueframe@0.6 clips` (no mediaId arg) |
227
+ | Discover the live composition schema | `npx -y cueframe@0.6 schema composition` |
228
+ | Validate a draft (no save, no render) | `npx -y cueframe@0.6 composition validate -b @plan.json` |
229
+ | Read composition + ETag | `npx -y cueframe@0.6 composition get <projectId> --json` |
230
+ | Write composition | `npx -y cueframe@0.6 composition put <projectId> -b @plan.json` (ETag auto) |
231
+ | Export to Final Cut | `npx -y cueframe@0.6 export fcpxml <projectId> -s <sug> --wait -o cut.zip` |
232
+ | Export to Premiere | `npx -y cueframe@0.6 export premiere <projectId> -s <sug> --wait -o cut.zip` |
233
+ | Anything not wrapped | `npx -y cueframe@0.6 api GET /v1/... -i` (escape hatch, like `gh api`) |
234
+ | Validate a composition without mutating | `npx -y cueframe@0.6 composition validate -b @plan.json` |
228
235
 
229
236
  ## Auth
230
237
 
231
238
  Commands run against production. Authenticate once:
232
239
 
233
- - `npx -y cueframe@0.5 login` — OAuth device flow (laptops).
234
- - `npx -y cueframe@0.5 auth <cf_live_… key>` — save a static API key (CI / headless).
240
+ - `npx -y cueframe@0.6 login` — OAuth device flow (laptops).
241
+ - `npx -y cueframe@0.6 auth <cf_live_… key>` — save a static API key (CI / headless).
235
242
 
236
243
  Creds are stored in `~/.cueframe/auth.json`; the key can also come from the `CUEFRAME_API_KEY` env var.
237
244
 
@@ -249,17 +256,15 @@ Errors come as `{"event":"error", "phase":"<step>", "message":"...", "code":"...
249
256
 
250
257
  | Mistake | Reality |
251
258
  |---|---|
252
- | Reaching for `curl …/v1/...` because the CLI didn't have a command | Use `npx -y cueframe@0.5 api METHOD /v1/...` — same auth, same JSON pipeline. |
253
- | Polling for render completion with a sleep loop | `npx -y cueframe@0.5 render` already SSE-watches and exits when done. Use `render watch <id>` to reattach. |
259
+ | Reaching for `curl …/v1/...` because the CLI didn't have a command | Use `npx -y cueframe@0.6 api METHOD /v1/...` — same auth, same JSON pipeline. |
260
+ | Polling for render completion with a sleep loop | `npx -y cueframe@0.6 render` already SSE-watches and exits when done. Use `render watch <id>` to reattach. |
254
261
  | Skipping `--json` and trying to parse human output | Human output is for humans. Agents always use `--json`. |
255
262
  | Hand-editing the composition without an ETag | `composition put` GETs the ETag for you; `from-suggestion` rebuilds from a clip. Don't hand-craft unless you have to. |
256
- | Calling `npx -y cueframe@0.5 render <projectId> <suggestionId>` (old two-positional shape) | `render` takes ONLY a projectId; commander rejects the extra arg. It renders the SAVED composition — author it first via `composition put` (hand-author) or `project create --from-suggestion <sug>` (clip-finder on-ramp). |
263
+ | Calling `npx -y cueframe@0.6 render <projectId> <suggestionId>` (old two-positional shape) | `render` takes ONLY a projectId; commander rejects the extra arg. It renders the SAVED composition — author it first via `composition put` (hand-author) or `project create --from-suggestion <sug>` (clip-finder on-ramp). |
257
264
  | Assuming `render` needs a clip suggestion / that captions only come from a suggestion | No — `render` renders the saved composition directly; a suggestion is optional. Captions come from `composition.captions` (author them in the `put` JSON). The clip-suggestion on-ramp just fills those captions for you by slicing the transcript at author time. |
258
265
 
259
266
  ## When this skill applies (routing)
260
267
 
261
- Route on **intent, not operation**. This is the path whenever the task is *creating a video* — captioning, reframing or keeping a subject framed, finding the best moment, composing or branding clips, rendering to a target aspect/format. A mechanical verb ("trim", "concat") *inside* a creative goal ("…into a captioned 9:16 short") is still this skill — CueFrame does the trim too. If a task is part mechanical and part creative, it's this skill. When unsure whether a video task needs CueFrame, it does — author it here; validate cost-free with `--dry-run` first.
262
-
263
- Drop to raw `ffmpeg` only for a **single mechanical operation with zero creative or perceptual intent** — losslessly concatenating two finished files, transcoding a codec, extracting an audio track. That one carve-out aside, reach for `cueframe`.
268
+ Use this skill for a requested terminal/CI workflow or when the available CLI is the supported path for the task. If supported MCP tools are already connected, use their narrow edit/preview guidance instead. A mechanical operation inside a creative task does not require a different project or new installation. If a required capability is absent, report the limitation and a supported alternative; do not invent a command or silently change lanes.
264
269
 
265
- Not this skill at all: inspecting internal backend state (that has its own operator tooling); changing the CLI's own source (that's CLI development, not usage).
270
+ CLI development and internal backend inspection are outside this usage skill.
@@ -5,6 +5,14 @@ description: Use when authoring, forking, or customizing a CueFrame motion-graph
5
5
 
6
6
  # CueFrame component authoring (fork / customize / own)
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  Use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/references/preview-workflow.md)
9
17
  to select hosted or local evidence and separate iteration from final delivery.
10
18
 
@@ -60,15 +68,15 @@ Source lives in `cueframe/components/<id>/` (the `cueframe.json` workspace); edi
60
68
  standard Remotion, push to render.
61
69
 
62
70
  ```bash
63
- npx -y cueframe@0.5 init --json # scaffold cueframe.json + cueframe/components/
64
- npx -y cueframe@0.5 new component my-badge --json # scaffold a component in the workspace
71
+ npx -y cueframe@0.6 init --json # scaffold cueframe.json + cueframe/components/
72
+ npx -y cueframe@0.6 new component my-badge --json # scaffold a component in the workspace
65
73
  # to start from a built-in instead of a blank file: fetch its source with the
66
74
  # `get_component_source` tool and paste it into cueframe/components/my-badge/index.tsx
67
75
  # …edit cueframe/components/<id>/ in your editor (standard Remotion)…
68
- npx -y cueframe@0.5 push my-badge --json # upload index.tsx as the component tsxSource
69
- # or: npx -y cueframe@0.5 sync --json # push every component in the workspace
76
+ npx -y cueframe@0.6 push my-badge --json # upload index.tsx as the component tsxSource
77
+ # or: npx -y cueframe@0.6 sync --json # push every component in the workspace
70
78
  # reference the component id in your composition, then render:
71
- npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
79
+ npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
72
80
  ```
73
81
 
74
82
  The CLI writes a 3-file layout (`index.tsx` = renderable module + adapter; `_config.ts` + `config.ts`
@@ -173,7 +181,7 @@ const R = params.region ?? { x: 0, y: 0, w: 1, h: 1 };
173
181
  - Don't expect a forked primitive to use rich named props — read `params` inside and use the explicit
174
182
  `assets` and `render` bags for media and frame state.
175
183
  - Don't hand-roll a graphic from zero when a built-in is close — fork it (fetch the source with
176
- `get_component_source`, paste it into a `npx -y cueframe@0.5 new component` scaffold) and edit.
184
+ `get_component_source`, paste it into a `npx -y cueframe@0.6 new component` scaffold) and edit.
177
185
  - Don't `create_component` a fresh id each fix iteration — `update_component` (same id) is the loop.
178
186
  - Don't update a placed component without its `projectId` in the body — the placed clips keep the
179
187
  version they pin, so the next preview or render shows the old graphic.
@@ -5,6 +5,14 @@ description: Use when an AI agent should DRIVE CueFrame to a high-quality clip i
5
5
 
6
6
  # CueFrame — Compose convergence loop
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  You are the director. CueFrame gives you hands (author), eyes (capture), and a
9
17
  judge (verify); you supply the taste and the iteration. The engine does NOT
10
18
  auto-compose for you here — you drive the loop and decide when it's done. Drive
@@ -27,7 +35,7 @@ Hosted preview and scoring are durable, stateless jobs. Keep their job IDs and
27
35
  wait for each terminal result; there is no hosted render box to open, warm, or close.
28
36
  Use the local live-preview tools when working in a desktop project that exposes them.
29
37
 
30
- ## 0. Context — always first
38
+ ## 0. Context — relevant project and source first
31
39
 
32
40
  `GET /v1/media/:id/context` (`cueframe_api_getMediaContext`) returns what you need
33
41
  to author well for a source:
@@ -40,10 +48,15 @@ to author well for a source:
40
48
  - **transcript** — utterances with per-word `start`/`end` (seconds). Use for
41
49
  caption timing and for placing overlays on the right beat.
42
50
 
51
+ For a maintained builtin package, follow [exact builtin insertion](references/builtin-insertion.md)
52
+ before authoring custom source.
53
+
43
54
  ## 1. Author
44
55
 
45
56
  Build/modify the working composition with the op vocabulary —
46
- `cueframe_api_applyCompositionOp` (one op) or `putComposition` (whole). Op keys
57
+ the curated `apply_composition({ projectId, body: { ops: [...] } })`. Read
58
+ `describe_composition_ops` for supported operations and `get_composition` for
59
+ current revision and brand witnesses before editing. Op keys
47
60
  are `.strict()`: a typo'd key is rejected, not silently dropped, so read the
48
61
  error and fix the key. Reference faces from get_context in your reframe segments;
49
62
  time captions/overlays from the transcript word timings.
@@ -61,9 +74,9 @@ and audio timing; use `preview_component` or `preview_card` for isolated authori
61
74
 
62
75
  ## 3. Score it
63
76
 
64
- Use `score_composition`, or `POST /v1/projects/:id/score-composition`, with the
77
+ When broader review is useful and within budget, use `score_composition`, or `POST /v1/projects/:id/score-composition`, with the
65
78
  composition target plus optional `editorialIntent` and `brandContext`. It returns
66
- `{ jobId }`; call `wait_job({ kind: "verify", jobId })`. CueFrame's judge samples
79
+ `{ jobId }`; call `wait_job({ kind: "verify", id: jobId })`. CueFrame's judge samples
67
80
  the meaningful beats, renders them, and returns:
68
81
 
69
82
  ```
@@ -82,6 +95,8 @@ The four criteria:
82
95
  | **brand** | on-brand color/typography/voice; cohesive look |
83
96
  | **caption** | caption legibility, timing, placement (or `no_captions` when absent) |
84
97
 
98
+ The hosted caption criterion can penalize intentionally uncaptioned work; do not add captions solely for a score. These instructions do not change judge behavior.
99
+
85
100
  You get **scores and the critique, never the rubric** — the taste is CueFrame's.
86
101
  Pass `editorialIntent` (your brief/hook) so editorial is graded against what you
87
102
  meant.
@@ -98,8 +113,7 @@ nudge pixels (see `cueframe-component-authoring`).
98
113
 
99
114
  ## 5. Stop — then render
100
115
 
101
- For a whole-film review, use **composite ≥ ~7.5** as a guide alongside the brief's actual
102
- acceptance criteria. Two no-improvement passes are a reason to stop spending and report what
116
+ For a whole-film review, check the brief's actual acceptance criteria; no fixed score threshold applies. Two no-improvement passes are a reason to stop spending and report what
103
117
  remains, not to declare a rejected result approved. Render with `create_render` only when a
104
118
  finished video is requested or the work reaches final delivery. A scoped revision can end with
105
119
  verified preview evidence and an explicit note that no new final export was made.
@@ -0,0 +1,49 @@
1
+ # Discover and insert an exact builtin
2
+
3
+ Use the hosted MCP tools in this order. The CLI reaches the same REST operations
4
+ through `cueframe api ... --json`; read `cueframe describe --json` for its current
5
+ request options. Use the selected environment consistently.
6
+
7
+ 1. Call `list_catalog` with `projection: "component-library"`, `origin: "builtin"`,
8
+ `limit: 10` and a search term. Follow the returned cursor for more results.
9
+ 2. Preserve the selected card's complete identity, including collection, id and
10
+ revision. Call `resolve_builtin_component` with that exact identity. For a
11
+ preset or recipe, retain the returned `documentSha256` and canonical document.
12
+ A definition is source material, not a whole insertable package.
13
+ 3. Read the target with `get_composition`, negotiating component execution 3 and
14
+ dependencies. Keep its revision and brand identity. Do not recreate the project.
15
+ 4. Call `apply_template` with `template` equal to the selected builtin id. Put
16
+ projectId, documentSha256, insert, values, media and concurrency witnesses
17
+ inside `body`, following the live tool schema. Use an explicit nonnegative
18
+ `insert.startTime` and a unique `insert.idPrefix`; the package keeps its
19
+ authored placement offsets. Select pinned samples explicitly for every media slot you intend to use:
20
+ `media: { image1: { sample: true }, image2: { sample: true } }` (continue
21
+ for all declared slots), or bind real media IDs. Missing required bindings
22
+ are refused; samples are never selected implicitly.
23
+ 5. Read back the composition. Check that existing clips remain, every package
24
+ placement exists at its intended offset, and exact source pins are retained.
25
+ 6. Preview the affected interval, then use `create_render` and wait for the actual
26
+ artifact. Inspect the produced video; a successful request alone is not render
27
+ evidence.
28
+
29
+ Never replace a selected revision with the latest, switch its scope, refresh a
30
+ stale concurrency witness silently, synthesize replacement wrapper source, or
31
+ use a thumbnail as the package. A pinned sample failure identifies the slot;
32
+ report it or bind an explicit replacement instead of accepting changed bytes.
33
+
34
+ The executable request examples beside this guide are validated against the
35
+ MCP introspection snapshot generated from the server package.
36
+
37
+ CLI discovery uses the same contract:
38
+
39
+ ```sh
40
+ cueframe api GET '/v1/components?projection=component-library&origin=builtin&q=wheel&limit=10' --target dev --json
41
+ cueframe api GET '/v1/components/builtin/resolve?collection=curated-looks&id=builtin%3Areference-component-wheel-full&revision=OBSERVED_REVISION' --target dev --json
42
+ cueframe api POST '/v1/templates/builtin%3Areference-component-wheel-full/apply' --body @insertion.json --target dev --json
43
+ ```
44
+
45
+ Replace `OBSERVED_REVISION` with the returned card revision. `insertion.json`
46
+ contains the `body` object from the MCP example with real observed identifiers
47
+ and witnesses. The fixture digest identifies the reviewed Wheel document; use the live resolved
48
+ digest and observed brand identity instead of copying example witnesses. A 202 means pinned media preparation is pending: repeat the same
49
+ insertion command after the response's retry delay, retaining `commandId`.
@@ -0,0 +1,111 @@
1
+ [
2
+ {
3
+ "name": "discover_builtin",
4
+ "tool": "list_catalog",
5
+ "arguments": {
6
+ "projection": "component-library",
7
+ "origin": "builtin",
8
+ "limit": 10,
9
+ "q": "Wheel"
10
+ }
11
+ },
12
+ {
13
+ "name": "resolve_exact_builtin",
14
+ "tool": "resolve_builtin_component",
15
+ "arguments": {
16
+ "collection": "curated-looks",
17
+ "id": "builtin:reference-component-wheel-full",
18
+ "revision": "2577db06c45171396e2f0199b2616877dfa25f3f68be0ec75fefea8e6a54755b"
19
+ }
20
+ },
21
+ {
22
+ "name": "read_insertion_witnesses",
23
+ "tool": "get_composition",
24
+ "arguments": {
25
+ "projectId": "observed-project",
26
+ "componentExecutionVersions": "3",
27
+ "includeDependencies": "true"
28
+ }
29
+ },
30
+ {
31
+ "name": "insert_exact_builtin",
32
+ "tool": "apply_template",
33
+ "arguments": {
34
+ "template": "builtin:reference-component-wheel-full",
35
+ "body": {
36
+ "projectId": "observed-project",
37
+ "documentSha256": "2577db06c45171396e2f0199b2616877dfa25f3f68be0ec75fefea8e6a54755b",
38
+ "insert": {
39
+ "startTime": 3,
40
+ "idPrefix": "wheel-insertion-1"
41
+ },
42
+ "expectedRevision": 1,
43
+ "commandId": "insert-wheel-1",
44
+ "values": {},
45
+ "media": {
46
+ "image1": {
47
+ "sample": true
48
+ },
49
+ "image2": {
50
+ "sample": true
51
+ },
52
+ "image3": {
53
+ "sample": true
54
+ },
55
+ "image4": {
56
+ "sample": true
57
+ },
58
+ "image5": {
59
+ "sample": true
60
+ },
61
+ "image6": {
62
+ "sample": true
63
+ },
64
+ "image7": {
65
+ "sample": true
66
+ },
67
+ "image8": {
68
+ "sample": true
69
+ }
70
+ },
71
+ "componentExecutionVersions": [
72
+ 3
73
+ ],
74
+ "expectedBrandIdentity": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
75
+ }
76
+ }
77
+ },
78
+ {
79
+ "name": "wait_for_score",
80
+ "tool": "wait_job",
81
+ "arguments": {
82
+ "kind": "verify",
83
+ "id": "returned-job-id"
84
+ }
85
+ },
86
+ {
87
+ "name": "render_inserted_wheel",
88
+ "tool": "create_render",
89
+ "arguments": {
90
+ "projectId": "observed-project",
91
+ "body": {
92
+ "compositionId": "observed-composition",
93
+ "format": {
94
+ "aspectRatio": "16:9",
95
+ "fps": 30,
96
+ "resolution": "fhd"
97
+ },
98
+ "intent": "final"
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "name": "wait_for_render",
104
+ "tool": "wait_job",
105
+ "arguments": {
106
+ "kind": "render",
107
+ "id": "returned-render-id",
108
+ "projectId": "observed-project"
109
+ }
110
+ }
111
+ ]
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: cueframe-connect
3
+ description: Use when CueFrame is not connected yet, the user asks how to connect or authenticate CueFrame, or another CueFrame skill is about to call a tool and needs the one-time setup path for Claude Code, Claude, ChatGPT, Cursor, Codex, VS Code, Windsurf, Zed, Antigravity CLI, Copilot CLI, or an x402 wallet.
4
+ ---
5
+
6
+ # Connect CueFrame
7
+
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
16
+ First inspect available CueFrame tools and their current project context. If the requested work is supported by an existing connection, use it without installing again. Preserve the user's chosen local or hosted lane. Local-only desktop work needs no hosted registration; desktop connection instructions are at https://docs.cueframe.ai. This public plugin connects to the hosted product at `https://api.cueframe.ai/v1/mcp`.
17
+
18
+ When a required capability is missing, explain the limitation and the supported alternative. Setup is warranted only when requested or necessary for an authorized tool action. Do not silently install across clients, launch authentication, switch projects or upload local content. For CLI setup, select the intended client using its supported flags rather than wiring every detected host. Resume the original task after setup.
19
+
20
+ - **Claude Code:** offer to run
21
+ `claude mcp add --transport http cueframe https://api.cueframe.ai/v1/mcp` — a browser
22
+ opens and the user clicks **Allow**. No API key.
23
+ - **Claude.ai / Claude Desktop:** Settings → Connectors → add a custom connector with
24
+ `https://api.cueframe.ai/v1/mcp`.
25
+ - **Other agents (Cursor, Codex, VS Code, Windsurf, Zed, Antigravity CLI, Copilot CLI, …):**
26
+ use `npx -y cueframe@0.6 install --help` to select the intended client; preserve existing configuration and avoid duplicate installs.
27
+ - **ChatGPT:** the CLI cannot wire it because there is no local config to write; add
28
+ `https://api.cueframe.ai/v1/mcp` as a custom connector instead.
29
+ - **No account (pay per call):** connect
30
+ `https://api.cueframe.ai/v1/mcp/x402` — no sign-up or API key; priced calls settle
31
+ per call in USDC over x402 from the agent's wallet.
32
+
33
+ Do not ask the user to configure a model provider for CueFrame. This connection exposes CueFrame's
34
+ tools; the host agent keeps using its already-selected CueFrame Gateway, BYOK, or local model.
35
+
36
+ ## Confirm the capabilities needed for the task
37
+
38
+ Connected is not the same as working, and finding out at the first *paid* call is the expensive
39
+ way. Use available read-only discovery for the selected lane:
40
+
41
+ 1. **Discover the surface.** List the tools your host now exposes. You should see the compose loop
42
+ (`new_composition`, `apply_composition`, `validate_composition`, `create_render`) alongside
43
+ discovery reads (`list_catalog`, `list_media`, `get_account`). There are also resources
44
+ (`cueframe://scene-shot` for 3D product shots) and workflow prompts — a flat tool list is not
45
+ the whole surface.
46
+ 2. **For hosted work, smoke-call `get_account` before spending.** It takes no arguments, costs nothing, and answers the questions
47
+ worth knowing before you spend: which org the key is bound to, the plan, per-feature
48
+ entitlements and — the one that matters — `balance`, not `included`. CueFrame is credit-funded,
49
+ so rendering, generation, preview stills, the judge and the Director all draw on ONE shared
50
+ wallet. A successful `get_account` proves that read is authorized; check the specific capability and current quote separately. Local tools without metered hosted work do not need this hosted call.
51
+
52
+ If a later call fails on scope, the error names the exact missing permission (for example
53
+ `billing:read`, which `get_usage` needs and a creative-only key will not have). Explain the missing permission and use an authorized setup path; do not broaden credentials automatically.
@@ -5,6 +5,14 @@ description: Use when turning a screen recording (with cursor/click events) into
5
5
 
6
6
  # CueFrame — Product Video recipe
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  A **use-case recipe**, not new framework surface. CueFrame's engine only knows
9
17
  primitives (`upload` → `composition put` → `render`, the `reframe` viewport, the
10
18
  overlay/effect primitives). This skill is the *judgment* on top: how to turn a
@@ -13,7 +21,7 @@ to author, not how to transport it.
13
21
 
14
22
  **Drive the primitives over MCP if you can call tools** (`new_composition` /
15
23
  `apply_composition` / `validate_composition` / `create_render` — see the
16
- `cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.5 …` commands
24
+ `cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.6 …` commands
17
25
  written out below are the same operations for a terminal or CI job with no MCP
18
26
  host; see the `cueframe-cli` skill.
19
27
 
@@ -56,7 +64,7 @@ style's) over each window. Result → `source.reframe.segments` on the clip.
56
64
  ## 3. Compose
57
65
 
58
66
  One video track, the screen recording as a media clip carrying the reframe.
59
- `npx -y cueframe@0.5 composition put <projectId> -b @composition.json` (see `cueframe-cli`).
67
+ `npx -y cueframe@0.6 composition put <projectId> -b @composition.json` (see `cueframe-cli`).
60
68
  Choose `-a 16:9` for landscape product video, `9:16` for social.
61
69
 
62
70
  ## 4. Polish — layer overlay primitives (this is what makes it look "produced")
@@ -94,21 +102,21 @@ check framing with `preview_frame` and click/zoom timing with an affected-window
94
102
  For a small revision, verify that change and relevant regressions without exporting the whole film.
95
103
  When delivering the finished video:
96
104
 
97
- `npx -y cueframe@0.5 render <projectId> -o out.mp4 --json`. Verify the output (ffprobe +
105
+ `npx -y cueframe@0.6 render <projectId> -o out.mp4 --json`. Verify the output (ffprobe +
98
106
  sample frames) before declaring done.
99
107
 
100
108
  ## Worked examples — composition JSON
101
109
 
102
110
  These are **orientation, not the contract.** The live wire schema is
103
- `npx -y cueframe@0.5 schema composition`, and the way to know a draft is correct is
104
- `npx -y cueframe@0.5 composition validate -b @composition.json` — it runs the same
111
+ `npx -y cueframe@0.6 schema composition`, and the way to know a draft is correct is
112
+ `npx -y cueframe@0.6 composition validate -b @composition.json` — it runs the same
105
113
  validator the server enforces, with no save and no render. Discover + validate
106
114
  before you render; never spend a render to find a schema mistake.
107
115
 
108
116
  Each block below is a complete `@composition.json` (the bare object `composition put`
109
117
  accepts: top-level `v`, `format`, `tracks`, optional `captions`). All five validate
110
118
  against the real wire schema + save invariants (swap the `<…MediaId>` placeholders for
111
- real `npx -y cueframe@0.5 upload` ids). Conventions that keep them valid:
119
+ real `npx -y cueframe@0.6 upload` ids). Conventions that keep them valid:
112
120
 
113
121
  - Tracks hold **`contents`** (not `clips`); each clip wraps a `source`.
114
122
  - A clip's `source.kind` must match the track `kind`: `media` → `video`/`image`/`audio`
@@ -290,4 +298,4 @@ Talking-head with an `active-speaker` reframe and a `heroText` title at `zPlane:
290
298
  background. See EX3 / EX4 below.
291
299
  - This recipe lives in a skill on purpose: the engine stays use-case-free; the
292
300
  product opinions (style, which primitives, layout) live here and ship via
293
- `npx -y cueframe@0.5 install`. Add sibling recipes (`cueframe-podcast-clip`, …) the same way.
301
+ `npx -y cueframe@0.6 install`. Add sibling recipes (`cueframe-podcast-clip`, …) the same way.
@@ -5,6 +5,14 @@ description: Author a CueFrame 3D world-object shot as canonical SceneShotSpecV2
5
5
 
6
6
  # CueFrame scene shots
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  Use `scene.add` and `scene.update` through `apply_composition`. Author the scene JSON; CueFrame owns the generated wrapper, preparation, resource admission, previews, and export.
9
17
 
10
18
  Before authoring, read `cueframe://scene-shot`. It serves the canonical generated `SceneShotSpecV2` schema, exact operation contracts, supported brand tokens, refusal rules, and a copyable nested slab-and-page recipe. Do not infer fields from an older example.