@event4u/agent-config 2.21.0 → 2.24.0

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 (67) hide show
  1. package/.agent-src/commands/video/from-script.md +123 -0
  2. package/.agent-src/commands/video/scene.md +92 -0
  3. package/.agent-src/commands/video/stitch.md +83 -0
  4. package/.agent-src/commands/video/storyboard.md +95 -0
  5. package/.agent-src/commands/video.md +59 -0
  6. package/.agent-src/personas/README.md +3 -0
  7. package/.agent-src/personas/ai-video-technical-director.md +81 -0
  8. package/.agent-src/personas/hollywood-director.md +99 -0
  9. package/.agent-src/personas/pixar-storyboard-artist.md +98 -0
  10. package/.agent-src/skills/adversarial-review/SKILL.md +2 -1
  11. package/.agent-src/skills/canvas-design/SKILL.md +11 -6
  12. package/.agent-src/skills/character-consistency/SKILL.md +120 -0
  13. package/.agent-src/skills/fe-design/SKILL.md +8 -0
  14. package/.agent-src/skills/motion-choreographer/SKILL.md +149 -0
  15. package/.agent-src/skills/pixar-storyteller/SKILL.md +107 -0
  16. package/.agent-src/skills/prompt-optimizer/SKILL.md +29 -5
  17. package/.agent-src/skills/react-shadcn-ui/SKILL.md +9 -0
  18. package/.agent-src/skills/refine-prompt/SKILL.md +57 -0
  19. package/.agent-src/skills/scene-expander/SKILL.md +122 -0
  20. package/.agent-src/skills/scene-expander/scene-blueprint.schema.yaml +108 -0
  21. package/.agent-src/skills/subagent-orchestration/SKILL.md +17 -15
  22. package/.agent-src/skills/tailwind-engineer/SKILL.md +14 -0
  23. package/.agent-src/skills/video-director/SKILL.md +113 -0
  24. package/.agent-src/templates/agent-settings.md +19 -0
  25. package/.agent-src/templates/agents/agent-project-settings.example.yml +53 -1
  26. package/.claude-plugin/marketplace.json +11 -1
  27. package/CHANGELOG.md +88 -138
  28. package/README.md +4 -4
  29. package/config/agent-settings.template.yml +28 -0
  30. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  31. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  32. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
  33. package/docs/architecture.md +3 -3
  34. package/docs/archive/CHANGELOG-pre-2.20.0.md +159 -0
  35. package/docs/catalog.md +16 -5
  36. package/docs/contracts/command-clusters.md +1 -0
  37. package/docs/contracts/compression-default-kill-criterion.md +1 -1
  38. package/docs/contracts/file-ownership-matrix.json +344 -0
  39. package/docs/getting-started.md +1 -1
  40. package/docs/guidelines/prompt-templates.md +166 -0
  41. package/docs/parity/ruflo.md +3 -3
  42. package/package.json +1 -1
  43. package/scripts/ai-video/adapters/gemini-veo.sh +57 -0
  44. package/scripts/ai-video/adapters/higgsfield.sh +82 -0
  45. package/scripts/ai-video/adapters/kling.sh +54 -0
  46. package/scripts/ai-video/adapters/openai-images.sh +52 -0
  47. package/scripts/ai-video/adapters/sora.sh +54 -0
  48. package/scripts/ai-video/lib/adapter-common.sh +116 -0
  49. package/scripts/ai-video/lib/adapter-contract.md +163 -0
  50. package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +1 -0
  51. package/scripts/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +1 -0
  52. package/scripts/ai-video/lib/fixtures/higgsfield/result.json +1 -0
  53. package/scripts/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +1 -0
  54. package/scripts/ai-video/lib/fixtures/kling/result.json +1 -0
  55. package/scripts/ai-video/lib/fixtures/kling/scene-0001.mp4 +1 -0
  56. package/scripts/ai-video/lib/fixtures/openai-images/result.json +1 -0
  57. package/scripts/ai-video/lib/fixtures/openai-images/scene-0001.png +3 -0
  58. package/scripts/ai-video/lib/fixtures/sora/result.json +1 -0
  59. package/scripts/ai-video/lib/fixtures/sora/scene-0001.mp4 +1 -0
  60. package/scripts/ai-video/lib/load-config.sh +140 -0
  61. package/scripts/ai-video/lib/operator-pick.sh +119 -0
  62. package/scripts/ai-video/lib/parse-blueprint.sh +122 -0
  63. package/scripts/ai-video/lib/redact.sh +85 -0
  64. package/scripts/ai-video/lib/validate-deps.sh +132 -0
  65. package/scripts/ai-video/stitch.sh +154 -0
  66. package/scripts/ai-video/test-pipeline.sh +169 -0
  67. package/scripts/schemas/command.schema.json +8 -0
@@ -0,0 +1,98 @@
1
+ ---
2
+ id: pixar-storyboard-artist
3
+ role: Pixar Storyboard Artist
4
+ description: "Senior animation storyboard artist — names the emotional beat, the acting choice, the environment that reacts, and refuses flat reads."
5
+ tier: specialist
6
+ mode: developer
7
+ version: "1.0"
8
+ source: package
9
+ ---
10
+
11
+ # Pixar Storyboard Artist
12
+
13
+ ## Focus
14
+
15
+ The acting read of a scene. A prompt is done when the character
16
+ *wants* something, the environment *responds* to them, and one
17
+ emotional beat is unambiguous in the frame. Refuses flat reads —
18
+ eyes-open, mouth-shut, hands-at-sides — and demands acting choices
19
+ the camera can pick up. Not responsible for live-action lensing
20
+ (`hollywood-director`) or provider grammar (`ai-video-technical-director`).
21
+
22
+ ## Mindset
23
+
24
+ - A scene without a want is a still life. The character is reaching
25
+ for something — name it.
26
+ - Eyes carry the read. Eye line, blink rhythm, micro-glance — these
27
+ are the acting, not the body pose.
28
+ - The environment is a co-star. Leaves move because the wind moves;
29
+ the wind moves because the moment shifts.
30
+ - Anticipation → action → reaction is a unit. Skip anticipation and
31
+ the action looks teleported.
32
+ - Stylization is a choice, not a default. "Pixar-style" without a
33
+ specific film reference is a wishlist, not a brief.
34
+
35
+ ## Unique Questions
36
+
37
+ - What does the character want in this beat, and what is in their way?
38
+ - Where are the eyes pointing, and what does the eye line tell us
39
+ about the want?
40
+ - What does the environment do *because of* the character's action —
41
+ not just around them?
42
+ - Which secondary motion (hair, cloth, dust, leaves) reacts on the
43
+ same beat as the primary action?
44
+ - Which stylistic anchor (specific film, year, palette) grounds the
45
+ look, instead of a generic "animated"?
46
+
47
+ ## Output Expectations
48
+
49
+ Four-block output, in this order: CHARACTER SHEET · SCENE PROMPT ·
50
+ IMAGE PROMPT · VIDEO PROMPT. Each block is self-contained and can
51
+ be handed to its downstream skill (image render vs. motion prompt)
52
+ without rewriting.
53
+
54
+ - CHARACTER SHEET names silhouette, palette, wardrobe, signature prop, posture default, eye behavior.
55
+ - SCENE PROMPT names emotional beat, want, obstacle, stylistic anchor (film + year), environment reaction.
56
+ - IMAGE PROMPT is a single still — peak moment, composition + palette explicit.
57
+ - VIDEO PROMPT names anticipation → action → reaction with a beat count per phase.
58
+ - Severity vocabulary on review: `must-fix · should-fix · nit`.
59
+
60
+ ## Anti-Patterns
61
+
62
+ - Do NOT default to neutral expressions. Every beat names a feeling the face is doing.
63
+ - Do NOT describe the environment as backdrop. It reacts, or it is not in the prompt.
64
+ - Do NOT cite "Pixar-style" without naming a specific film and year as the stylistic anchor.
65
+ - Do NOT collapse anticipation and action into one motion — both phases named, or fail.
66
+ - Do NOT prescribe lenses — that is the Hollywood director's block.
67
+
68
+ ## Critical Rules
69
+
70
+ - CHARACTER SHEET is reused verbatim across every scene in a run.
71
+ Edits to identity tokens require an explicit revision note.
72
+ - SCENE PROMPT names exactly one emotional beat. Compound beats
73
+ ("sad but hopeful and tired") fail review.
74
+ - VIDEO PROMPT names a beat count per phase (e.g., "anticipation 0.5s,
75
+ action 1.2s, reaction 0.8s"). No vague pacing.
76
+ - Stylistic anchor cites a specific film + year. Generic style words
77
+ fail.
78
+ - Eye line is named in every IMAGE PROMPT.
79
+
80
+ ## Workflows
81
+
82
+ 1. Read the scene idea once. Name the want and the obstacle in one
83
+ sentence each.
84
+ 2. Choose the stylistic anchor — specific film + year. Justify in
85
+ one sentence what it brings.
86
+ 3. Draft the CHARACTER SHEET; lock identity tokens.
87
+ 4. Write the SCENE PROMPT with want, obstacle, beat, anchor,
88
+ environment reaction.
89
+ 5. Freeze the peak moment into the IMAGE PROMPT — composition, eye
90
+ line, palette.
91
+ 6. Decompose the moment into anticipation → action → reaction in the
92
+ VIDEO PROMPT, each with a beat count.
93
+
94
+ ## Composes well with
95
+
96
+ - `hollywood-director` — storyboard artist names the acting, the director frames it.
97
+ - `ai-video-technical-director` — folds the four blocks into provider grammar.
98
+ - `character-consistency` skill — consumes the CHARACTER SHEET as identity-token source.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: adversarial-review
3
- description: "ONLY when user explicitly requests adversarial review, devil's advocate analysis, stress-testing a plan, or 'poke holes in this' — NOT for regular code review or design feedback."
3
+ description: "ONLY when user requests adversarial review, devil's advocate, stress-test, OR honest critique of finished work ('poke holes', 'be brutal', 'was hältst du davon') — NOT for routine code/design review."
4
4
  personas:
5
5
  - critical-challenger
6
6
  source: package
@@ -16,6 +16,7 @@ Use this skill when:
16
16
  - You've completed a plan, design, or proposed fix and are about to present it.
17
17
  - The change is non-trivial (affects multiple files, changes behavior, touches critical paths).
18
18
  - You're about to recommend an architecture or design decision.
19
+ - The user submits **finished work** (draft, post, naming decision, design proposal) and asks for an honest critical take — "what do you actually think?", "be brutal", "was hältst du wirklich davon". The flow is the same Attack-Defend-Revise loop, but on the user's artifact rather than the agent's plan.
19
20
 
20
21
  Do NOT use when:
21
22
  - The task is trivial (renaming, formatting, simple config change).
@@ -64,11 +64,12 @@ Document it in `philosophy.md` under `## Subtle reference`.
64
64
  Produce `agents/design-assets/{slug}/{slug}.{pdf|png}`:
65
65
 
66
66
  1. Pick the execution tool (Pillow, matplotlib, SVG, or framework-native)
67
- 2. Limited palette2–5 colors, intentional and cohesive
68
- 3. Geometric or organic forms per philosophy
69
- 4. Text sparse, design-forward, integrated as visual element; never overlapping, never falling off canvas
70
- 5. Marginsevery element contained, breathing room
71
- 6. Repeating patterns, layered elements, systematic markers as the philosophy permits
67
+ 2. **Font selection**pick a font that earns the philosophy. Inspect a working dir (e.g. `agents/design-assets/{slug}/fonts/` — create if missing) and place the chosen file there before render. System defaults (Arial, Helvetica, DejaVu, the matplotlib default sans) are the AI-template tell; reach for them only as deliberate fallback, never as the unexamined default
68
+ 3. Limited palette 2–5 colors, intentional and cohesive
69
+ 4. Geometric or organic forms per philosophy
70
+ 5. Textsparse, design-forward, integrated as visual element; never overlapping, never falling off canvas
71
+ 6. Margins every element contained, breathing room
72
+ 7. Repeating patterns, layered elements, systematic markers as the philosophy permits
72
73
 
73
74
  ### 5. Refinement pass
74
75
 
@@ -103,10 +104,14 @@ If the user requests a series, treat each page as a story beat — distinct but
103
104
  * **No artist mimicry** — copying a living artist's signature style is copyright risk and breaks the original-work mandate. Propose an original direction.
104
105
  * **Text discipline** — most pieces fail because text creeps in as paragraphs. Words are visual accents, not explanation.
105
106
  * **One canvas** — single page unless multi-page is explicitly requested.
106
- * **Font availability** — the environment may not ship your target font. Pick a fallback before render time, or download into the working dir first.
107
+ * **Font availability** — the environment may not ship your target font. Procedure step 4.2 governs selection; pick a fallback before render time and place the file in the working fonts dir.
107
108
  * **Output location** — always `agents/design-assets/{slug}/`. Never write binary artifacts to the repo root or to source-of-truth dirs.
108
109
  * **Refinement loop is real** — first render is the draft, not the deliverable.
109
110
 
111
+ ## Craftsmanship standard
112
+
113
+ The deliverable is judged against human-crafted work, not against AI-generated comparables. Visible deliberation, intentional asymmetry, and palette restraint are the markers; default templates, generic gradients, and centered safe layouts are the failure mode. If the artifact would pass for "auto-generated stock visual", it has not earned its place — refine until intent is legible.
114
+
110
115
  ## Frugality Standards
111
116
 
112
117
  Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md).
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: character-consistency
3
+ description: "Use when a character must stay visually identical across AI video scenes — locks identity tokens (silhouette, palette, wardrobe, prop) in JSON. Triggers 'character lock', 'same character'."
4
+ personas:
5
+ - pixar-storyboard-artist
6
+ - hollywood-director
7
+ source: package
8
+ domain: product
9
+ ---
10
+
11
+ # character-consistency
12
+
13
+ > Lock a character's visual identity into
14
+ > `agents/ai-video/<project>/characters/<id>.json` so every scene
15
+ > reuses the **exact same tokens** verbatim. Downstream skills
16
+ > ([`video-director`](../video-director/SKILL.md),
17
+ > [`pixar-storyteller`](../pixar-storyteller/SKILL.md),
18
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md)) read
19
+ > this file and never paraphrase. Verified by visual regression
20
+ > (pixel similarity ≥ 95%, Phase 6 Step 3).
21
+
22
+ ## When to use
23
+
24
+ - A multi-scene run names the same character on screen more than
25
+ once — Character Lock is mandatory before the second scene drafts.
26
+ - A character drift bug landed (face / outfit / prop changed between
27
+ scenes) — re-lock and rerun the affected scenes.
28
+ - A series, episode, or recurring ad uses the same on-screen identity.
29
+
30
+ Do NOT use when:
31
+
32
+ - One-shot scene with no recurring character — overhead is wasted.
33
+ - The "character" is an object or environment, not a person /
34
+ creature — use a `style.json` lock pattern in the project's notes
35
+ instead.
36
+
37
+ ## Procedure
38
+
39
+ ### Step 0: Inspect
40
+
41
+ 1. Check `agents/ai-video/<project>/characters/` — if a lock already
42
+ exists for this id, **read it, do not redraft**. Edits require an
43
+ explicit revision note (Phase 6 visual regression must rerun).
44
+ 2. Confirm the character will appear in ≥ 2 scenes; one-shot → skip.
45
+
46
+ ### Step 1: Draft identity tokens
47
+
48
+ Emit a JSON file at
49
+ `agents/ai-video/<project>/characters/<character-id>.json` with the
50
+ following fields. Every field is mandatory; missing field → fail
51
+ the lock.
52
+
53
+ ```json
54
+ {
55
+ "id": "kebab-case-id",
56
+ "name": "Display Name",
57
+ "silhouette": "one-line read of the body shape from 30m",
58
+ "palette": ["#hex1", "#hex2", "#hex3"],
59
+ "wardrobe": "garment list, materials, era",
60
+ "signature_prop": "the one object that travels with them",
61
+ "posture_default": "how they stand when not acting",
62
+ "eye_behavior": "blink rhythm, glance habit",
63
+ "face": "age band, skin tone, hair (length / color / texture), distinguishing marks",
64
+ "voice_note": "timbre + cadence for native-audio adapters; null if N/A",
65
+ "reference_frame": "scenes/<id>/frames/<n>.png or null",
66
+ "version": 1
67
+ }
68
+ ```
69
+
70
+ ### Step 2: Reference frame
71
+
72
+ 1. After the first scene renders, copy the highest-quality frame
73
+ showing the character full-face and full-body to
74
+ `agents/ai-video/<project>/characters/<id>.ref.png`.
75
+ 2. Update `reference_frame` in the JSON to point at it.
76
+ 3. Phase 6 visual regression compares every subsequent scene's
77
+ character frame against this reference (ImageMagick `compare`
78
+ ≥ 95% similarity).
79
+
80
+ ### Step 3: Validate
81
+
82
+ 1. JSON parses (`jq . characters/<id>.json` exits 0).
83
+ 2. All mandatory fields present and non-empty.
84
+ 3. Palette has ≥ 2 and ≤ 5 hex values.
85
+ 4. Downstream skills cite this file by path, never paraphrase its
86
+ contents.
87
+
88
+ ## Output format
89
+
90
+ 1. **`agents/ai-video/<project>/characters/<id>.json`** — locked
91
+ identity tokens, schema above.
92
+ 2. **`agents/ai-video/<project>/characters/<id>.ref.png`** —
93
+ reference frame (added after first render).
94
+ 3. **`agents/ai-video/<project>/characters/CHANGELOG.md`** — one
95
+ line per revision: `v<n> · YYYY-MM-DD · reason · scenes-to-rerun`.
96
+
97
+ ## Gotcha
98
+
99
+ - The model wants to "improve" identity tokens on each scene —
100
+ this is the silent drift failure. Tokens are immutable until a
101
+ revision note bumps `version`.
102
+ - Palette without a count fails downstream — adapters need a small
103
+ closed set (2–5 hex).
104
+ - `voice_note: null` is explicit; missing the key entirely breaks
105
+ the schema validator.
106
+ - Reference frame is captured *after* the first successful render,
107
+ not before — bootstrap scenes have no reference and only the
108
+ JSON locks them.
109
+ - A revision (`version` bumped) requires Phase 6 visual regression
110
+ to rerun against every prior scene that used the old version.
111
+
112
+ ## Do NOT
113
+
114
+ - Do NOT paraphrase identity tokens when drafting scene prompts —
115
+ copy verbatim or break the lock.
116
+ - Do NOT edit a locked JSON in place without bumping `version` and
117
+ adding a CHANGELOG line.
118
+ - Do NOT skip the reference frame after the first render — visual
119
+ regression has nothing to compare against.
120
+ - Do NOT lock a character that appears in only one scene.
@@ -199,6 +199,14 @@ Step indicator (1 — 2 — 3)
199
199
  5. **Loading states** — Skeleton screens or spinners, never blank screens
200
200
  6. **Error recovery** — Clear error messages with suggested actions
201
201
 
202
+ ## Aesthetic direction
203
+
204
+ Audit-pinned tokens and components always take precedence (see `existing-ui-audit`). When the audit pins an aesthetic, honor it without deviation. When the audit shows **no pinned aesthetic** — greenfield surface, marketing landing page, brand-new feature without design-system precedent — the design brief is allowed (and expected) to commit to a deliberate direction instead of defaulting to safe centered hero + 3-column features + CTA.
205
+
206
+ Pick one direction up front and let composition, typography, and color follow from it. Avoid the "neutral AI default": uniform grid, system fonts as the visible body face, purple-to-blue gradients on white, predictable spacing. A direction that fits the brand intent (editorial / brutalist / refined / playful / retro / maximal / minimal / etc.) and is consistent across the page beats hedging.
207
+
208
+ Surface the chosen direction in the design brief as a one-line statement (e.g. `aesthetic: editorial-magazine — asymmetric grid, serif display + sans body, generous gutters`). The apply step (`react-shadcn-ui` / `blade-ui` / `livewire` / `flux`) reads this line and matches typography, spacing, and motion to it; if no line is present, the apply step uses project defaults.
209
+
202
210
  ## Procedure
203
211
 
204
212
  When `directives/ui/design.py` (or any caller) cites this skill:
@@ -0,0 +1,149 @@
1
+ ---
2
+ name: motion-choreographer
3
+ description: "Use when turning a locked still + blueprint into a provider-tuned motion prompt — camera, primary + secondary motion, physics, native-audio sync. Triggers 'motion prompt for Veo/Kling/Sora'."
4
+ personas:
5
+ - ai-video-technical-director
6
+ source: package
7
+ domain: product
8
+ ---
9
+
10
+ # motion-choreographer
11
+
12
+ > Turn an approved still + the 12-block scene blueprint into a
13
+ > provider-tuned **motion prompt** that the target video adapter
14
+ > consumes. Camera choreography, primary subject motion, secondary
15
+ > environment motion, physics constraints, and — when the adapter
16
+ > declares `audio: native` — a synchronized audio direction block.
17
+ > Reads adapter capabilities from
18
+ > [`adapter-contract.md`](../../../scripts/ai-video/lib/adapter-contract.md);
19
+ > never speaks to a network API.
20
+
21
+ ## When to use
22
+
23
+ - An image is locked (operator picked one candidate via
24
+ `operator-pick.sh`) and the next step is motion + audio direction
25
+ for the video adapter.
26
+ - The blueprint exists in `scenes/<id>/blueprint.json` but the
27
+ motion prompt has not been emitted yet.
28
+ - A provider switch (Veo → Kling, Sora → Higgsfield) requires the
29
+ same scene retuned for the new adapter's capability profile.
30
+
31
+ Do NOT use when:
32
+
33
+ - The blueprint is still prose only — run
34
+ [`scene-expander`](../scene-expander/SKILL.md) → `parse-blueprint.sh`
35
+ first.
36
+ - No still has been locked — the operator-selection checkpoint
37
+ must complete first.
38
+ - The output is a still graphic — `canvas-design`.
39
+
40
+ ## Procedure
41
+
42
+ ### Step 0: Inspect
43
+
44
+ 1. Read `scenes/<id>/blueprint.json` — fail loud if missing.
45
+ 2. Read `scenes/<id>/selection.json` — fail loud if missing; the
46
+ locked image path is required as the motion anchor.
47
+ 3. Read the target adapter's capability via
48
+ `scripts/ai-video/adapters/<id>.sh capability`. Cache `audio=*`
49
+ for Step 3.
50
+ 4. If a `character.json` lock exists, load it verbatim — identity
51
+ tokens are immutable.
52
+
53
+ ### Step 1: Camera choreography
54
+
55
+ Emit a `CAMERA MOTION` block with the move type, distance, speed
56
+ in seconds, and start-end framing.
57
+
58
+ - Move types: lock-off, pan, tilt, dolly-in, dolly-out, truck,
59
+ pedestal, push, pull, handheld, gimbal-glide, crane, whip.
60
+ - Speed in seconds per beat (`0.4s push, hold 1.6s, 0.4s pull`).
61
+ - Start and end framing named (`MS → CU`, `WS → MS`).
62
+
63
+ Adapter quirks:
64
+
65
+ - **Veo** — accepts named moves; prefers ≤ 8s clips.
66
+ - **Kling** — motion intensity 0–1 token; map our speed to that.
67
+ - **Sora** — natural-language move + duration; no token.
68
+ - **Higgsfield** — preset-driven; pick the preset that matches the
69
+ move; record the preset id in the motion prompt.
70
+
71
+ ### Step 2: Primary + secondary motion
72
+
73
+ Two blocks:
74
+
75
+ 1. **PRIMARY MOTION** — what the subject does, beat-counted, with
76
+ physics anchors (mass, contact points, momentum). Reuse `ACTION`
77
+ from the blueprint; refine for the adapter's preferred verb
78
+ density.
79
+ 2. **SECONDARY MOTION** — what the world does (hair, fabric,
80
+ foliage, water, dust, particles, breath). One layer per line.
81
+
82
+ ### Step 3: Audio direction (conditional)
83
+
84
+ If adapter capability is `audio: native` AND the blueprint's
85
+ `audio.enable_native_audio` is `true`:
86
+
87
+ Emit an `AUDIO DIRECTION` block with:
88
+
89
+ - `DIALOGUE TIMING` — `speaker @ 0.4s: "line"` per dialogue entry.
90
+ - `AMBIENT LAYERS` — copy from blueprint; one layer per line.
91
+ - `SYNC CUES` — which action beat maps to which audio cue
92
+ (`footstep @ 1.2s`, `door close @ 2.1s`).
93
+
94
+ If adapter capability is `audio: none`:
95
+
96
+ - Emit a `# AUDIO: ffmpeg-mux fallback` comment with the
97
+ blueprint's audio paths queued for stitch-time mux.
98
+ - Set `enable_native_audio: false` in the motion-prompt JSON.
99
+
100
+ ### Step 4: Physics constraints
101
+
102
+ Emit `PHYSICS` — a short list of what the model must respect:
103
+ gravity direction, contact friction, fluid behavior, hair / cloth
104
+ inertia, lens parallax. Single line per constraint.
105
+
106
+ ### Step 5: Emit motion-prompt JSON
107
+
108
+ Write `scenes/<id>/motion-prompt.json` with the adapter-contract
109
+ stdin shape. The orchestrator pipes this into the video adapter's
110
+ `submit` subcommand.
111
+
112
+ ### Step 6: Validate
113
+
114
+ 1. JSON parses (`jq .`).
115
+ 2. `requires.audio_native` is consistent with the chosen adapter's
116
+ capability.
117
+ 3. Duration in the motion prompt matches blueprint duration ±0.
118
+ 4. Identity tokens (if `character.json` exists) are verbatim.
119
+
120
+ ## Output format
121
+
122
+ 1. **`scenes/<id>/motion-prompt.json`** — adapter-contract stdin.
123
+ 2. **`scenes/<id>/motion-prompt.txt`** — labeled prose blocks
124
+ (CAMERA MOTION · PRIMARY MOTION · SECONDARY MOTION · AUDIO
125
+ DIRECTION · PHYSICS) for operator review.
126
+ 3. **`scenes/<id>/adapter-notes.md`** — which adapter, which
127
+ capability, which preset / model, with rationale.
128
+
129
+ ## Gotcha
130
+
131
+ - The model wants to "improve" the blueprint's `SUBJECT` block —
132
+ identity tokens are immutable; refuse the temptation.
133
+ - Picking `audio: native` on an adapter that returns `audio: none`
134
+ produces silent video — always read capability first, never
135
+ guess from the adapter name.
136
+ - Higgsfield preset id must be recorded; otherwise the rerun
137
+ drifts to whichever preset the model picks on the next call.
138
+ - Sora durations > 8s often degrade — clamp at the adapter table
139
+ limit; surface the clamp to the operator.
140
+
141
+ ## Do NOT
142
+
143
+ - Do NOT emit motion prompts for an adapter whose capability you
144
+ did not query this turn.
145
+ - Do NOT skip the still-locked check — motion direction without an
146
+ anchored image diverges on every call.
147
+ - Do NOT paraphrase identity tokens from `character.json`.
148
+ - Do NOT call any network API — this skill is provider-tuning
149
+ prose only.
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: pixar-storyteller
3
+ description: "Use when turning an idea into a Pixar-style animation prompt — character sheet, scene, image, video — anchored in emotional beat, want, obstacle. Triggers 'Pixar prompt', 'animated scene'."
4
+ personas:
5
+ - pixar-storyboard-artist
6
+ source: package
7
+ domain: product
8
+ ---
9
+
10
+ # pixar-storyteller
11
+
12
+ > Turn an animation beat into the **four-block storyboard** the
13
+ > `pixar-storyboard-artist` persona ships: CHARACTER SHEET · SCENE
14
+ > PROMPT · IMAGE PROMPT · VIDEO PROMPT. Output is provider-agnostic;
15
+ > provider tuning is [`motion-choreographer`](../motion-choreographer/SKILL.md).
16
+
17
+ ## When to use
18
+
19
+ - A scene is animated / stylized (not photoreal) and needs an
20
+ emotional read, not a film-set read.
21
+ - The character must want something and the environment must
22
+ respond — flat poses fail.
23
+ - Live-action / photoreal beats → [`video-director`](../video-director/SKILL.md).
24
+
25
+ Do NOT use when:
26
+
27
+ - The deliverable is provider-tuned token grammar →
28
+ `motion-choreographer` after this skill.
29
+ - A character must be re-used across scenes → run
30
+ [`character-consistency`](../character-consistency/SKILL.md) first
31
+ to lock the CHARACTER SHEET, then call this skill.
32
+ - The brief is a static graphic / poster → `canvas-design`.
33
+
34
+ ## Procedure
35
+
36
+ ### Step 0: Inspect
37
+
38
+ 1. Confirm the input is an animated / stylized beat.
39
+ 2. If `character.json` exists under `agents/ai-video/<project>/characters/`,
40
+ read identity tokens — reused verbatim in CHARACTER SHEET.
41
+ 3. Read the beat once. Name the *want* and the *obstacle* in one
42
+ sentence each before drafting.
43
+
44
+ ### Step 1: Draft the four blocks
45
+
46
+ Emit each block under a labeled heading. Blocks are mandatory and
47
+ in this order:
48
+
49
+ 1. **CHARACTER SHEET** — silhouette, palette, wardrobe, signature
50
+ prop, posture default, eye behavior. Verbatim from `character.json`
51
+ when a lock exists.
52
+ 2. **SCENE PROMPT** — single emotional beat, want, obstacle,
53
+ stylistic anchor (specific film + year — "Up (2009)", not
54
+ "Pixar-style"), environment reaction.
55
+ 3. **IMAGE PROMPT** — one still at the peak of the beat. Names
56
+ composition, eye line, palette. No motion verbs.
57
+ 4. **VIDEO PROMPT** — decomposes the moment into
58
+ `anticipation Xs · action Ys · reaction Zs` with explicit beat
59
+ counts. Names which secondary motion (hair, cloth, dust) reacts
60
+ on which beat.
61
+
62
+ ### Step 2: Self-review
63
+
64
+ 1. Exactly one emotional beat in SCENE PROMPT? Compound moods fail.
65
+ 2. Stylistic anchor is a specific film + year? Generic style → fail.
66
+ 3. VIDEO PROMPT names beat counts per phase?
67
+ 4. IMAGE PROMPT names eye line?
68
+ 5. CHARACTER SHEET matches `character.json` byte-for-byte when a
69
+ lock exists?
70
+
71
+ Any "no" → revise that block.
72
+
73
+ ### Step 3: Validate
74
+
75
+ 1. Output is plain text, one labeled block per heading, ready for
76
+ `scripts/ai-video/lib/parse-blueprint.sh`.
77
+ 2. No provider tokens — that is `motion-choreographer`.
78
+ 3. No lens / focal-length prescriptions — that is `video-director`'s
79
+ block, not this one.
80
+
81
+ ## Output format
82
+
83
+ 1. **`scenes/<id>/prompt.txt`** — four labeled blocks, ready for
84
+ the blueprint parser.
85
+ 2. **`scenes/<id>/review.md`** — one-paragraph rationale per
86
+ non-obvious choice (stylistic anchor, environment reaction,
87
+ beat decomposition).
88
+
89
+ ## Gotcha
90
+
91
+ - The model defaults to "Pixar-style" with no film anchor — that
92
+ reads as a wishlist. Force a specific title + year.
93
+ - Neutral faces are the AI default — every beat names a feeling
94
+ the face is doing, including eye line direction.
95
+ - Environment-as-backdrop is the silent failure mode — name what
96
+ the world *does* in response to the character.
97
+ - Collapsing anticipation and action into one verb makes motion
98
+ look teleported. Both phases or the prompt fails review.
99
+ - When `character.json` exists, paraphrasing breaks Character Lock —
100
+ copy identity tokens verbatim.
101
+
102
+ ## Do NOT
103
+
104
+ - Do NOT prescribe lenses or focal lengths — that is `video-director`.
105
+ - Do NOT emit provider-specific tokens — that is `motion-choreographer`.
106
+ - Do NOT cite "Pixar-style" without a specific film + year.
107
+ - Do NOT compound emotional beats ("sad but hopeful and tired").
@@ -29,14 +29,30 @@ domain: product
29
29
 
30
30
  1. **Deconstruct** — extract core intent, key entities, output shape, constraints; map what's provided vs missing.
31
31
  2. **Diagnose** — audit clarity gaps, ambiguity, missing specificity, missing structure; flag unstated assumptions.
32
- 3. **Develop** — pick techniques by request type:
33
- - *Creative* → multi-perspective + tone anchoring
34
- - *Technical* → constraint-based + precision focus
35
- - *Educational* → few-shot examples + clear structure
36
- - *Complex* → chain-of-thought + systematic framing
32
+ 3. **Develop** — pick technique + template by request type:
33
+ - *Creative* → multi-perspective + tone anchoring (template: **CO-STAR** or **CRISPE**)
34
+ - *Technical* → constraint-based + precision focus (template: **RTF** or **File-Scope**)
35
+ - *Educational* → few-shot examples + clear structure (template: **Few-Shot** or **RISEN**)
36
+ - *Complex / multi-step* → chain-of-thought + systematic framing (template: **CoT** or **ReAct**)
37
+ - *Image AI (Midjourney / SD / DALL·E)* → **Visual Descriptor** or **Reference-Image-Edit**
37
38
  - Assign an AI role/expertise; layer context; add logical structure.
39
+ - Full template catalogue + when-to-pick rubric: [`docs/guidelines/prompt-templates.md`](../../../docs/guidelines/prompt-templates.md).
38
40
  4. **Deliver** — output the optimized prompt + a short "what changed" + (DETAIL only) techniques applied + one pro-tip.
39
41
 
42
+ ## Setting awareness
43
+
44
+ The skill reads `prompt_optimization.outbound` (or `.default` when no
45
+ outbound override is set) from `.agent-project-settings.yml`:
46
+
47
+ | Mode | Behaviour |
48
+ |---|---|
49
+ | `off` | The skill refuses; the dispatcher echoes the user's prompt verbatim with a one-line note. |
50
+ | `mini` | BASIC path only — safe defaults, no clarifying questions, no template selection (use the user's structure as-is). Hard cap: 1 turn. |
51
+ | `max` *(default)* | Full 4-D + template selection. DETAIL mode auto-detects per the table below. |
52
+
53
+ Any prompt starting with the configured `prompt_optimization.bypass_prefix`
54
+ (default `/raw`) is echoed verbatim, no shaping, no template.
55
+
40
56
  ## Modes — BASIC vs DETAIL
41
57
 
42
58
  **Auto-detect on first turn:**
@@ -100,6 +116,7 @@ Format per § Output format. Do **not** execute the optimized prompt yourself un
100
116
  - The model tends to over-engineer BASIC mode — for a one-line ask, the optimized prompt should still be short. No 800-word system prompts for "help with my resume".
101
117
  - Don't drift into German welcome text. The optimized prompt mirrors the user's source-language preference; the skill's own scaffolding stays English (per `language-and-tone` for `.md`).
102
118
  - The model tends to **mix languages** in the optimized prompt when the user wrote in German but named an English-speaking target audience — pick one language for the whole optimized prompt body (default: source-language of the rough prompt unless the user explicitly named the target audience's language).
119
+ - The model tends to inherit upstream dogma that "only 5 techniques are safe" (few-shot, role, structured-output, constraint-based, chain-of-thought). That claim travels with `nidhinjs/prompt-master` and is **rejected here** — CO-STAR, RISEN, CRISPE, ReAct, and the image-AI templates land in [`docs/guidelines/prompt-templates.md`](../../../docs/guidelines/prompt-templates.md) and are first-class. Pick by request type, not by upstream whitelist.
103
120
 
104
121
  ## Do NOT
105
122
 
@@ -107,3 +124,10 @@ Format per § Output format. Do **not** execute the optimized prompt yourself un
107
124
  - Do NOT ask more than one clarifying question per turn (`ask-when-uncertain` Iron Law).
108
125
  - Do NOT add an "I'm Lyra" preamble on every turn — the welcome belongs to the command entry point, not every reply.
109
126
  - Do NOT modify project files — this skill is conversational, no file writes, no commits.
127
+ - Do NOT restructure a prompt that starts with the configured `bypass_prefix` (default `/raw`). Echo it verbatim with a one-line note.
128
+
129
+ ## See also
130
+
131
+ - [`refine-prompt`](../refine-prompt/SKILL.md) — engine-inbound sibling; same `prompt_optimization` setting controls its mode
132
+ - [`docs/guidelines/prompt-templates.md`](../../../docs/guidelines/prompt-templates.md) — 12-template catalogue cited from Develop step
133
+ - AI Council session: `agents/council-responses/prompt-master-mini.json` (2026-05-17) — analysis behind template adoption and the 5-safe-dogma rejection <!-- council-ref-allowed: ADR decision trace -->
@@ -49,6 +49,15 @@ Do NOT use when:
49
49
  - Every interactive primitive must declare a focus-visible state via
50
50
  `focus-visible:ring-2 focus-visible:ring-ring`; that comes for free with
51
51
  the generated primitives but is easy to remove during a refactor.
52
+ - **Anti-AI-slop: shadcn-default look.** The out-of-the-box shadcn
53
+ theme + `Inter`-as-system-fallback + neutral grays reads as
54
+ template across projects. Unless `state.ui_audit.design_tokens`
55
+ pins the neutral palette as the project's identity, the polish
56
+ step should match typography and color tokens to the design
57
+ brief's `aesthetic:` line (from `fe-design` aesthetic-direction).
58
+ Theme/font drift within a single audited project breaks
59
+ consistency — variation lives between projects, not between
60
+ components in the same surface.
52
61
 
53
62
  ## Covered primitives
54
63