@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.
- package/.agent-src/commands/video/from-script.md +123 -0
- package/.agent-src/commands/video/scene.md +92 -0
- package/.agent-src/commands/video/stitch.md +83 -0
- package/.agent-src/commands/video/storyboard.md +95 -0
- package/.agent-src/commands/video.md +59 -0
- package/.agent-src/personas/README.md +3 -0
- package/.agent-src/personas/ai-video-technical-director.md +81 -0
- package/.agent-src/personas/hollywood-director.md +99 -0
- package/.agent-src/personas/pixar-storyboard-artist.md +98 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +2 -1
- package/.agent-src/skills/canvas-design/SKILL.md +11 -6
- package/.agent-src/skills/character-consistency/SKILL.md +120 -0
- package/.agent-src/skills/fe-design/SKILL.md +8 -0
- package/.agent-src/skills/motion-choreographer/SKILL.md +149 -0
- package/.agent-src/skills/pixar-storyteller/SKILL.md +107 -0
- package/.agent-src/skills/prompt-optimizer/SKILL.md +29 -5
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +9 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +57 -0
- package/.agent-src/skills/scene-expander/SKILL.md +122 -0
- package/.agent-src/skills/scene-expander/scene-blueprint.schema.yaml +108 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +17 -15
- package/.agent-src/skills/tailwind-engineer/SKILL.md +14 -0
- package/.agent-src/skills/video-director/SKILL.md +113 -0
- package/.agent-src/templates/agent-settings.md +19 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +53 -1
- package/.claude-plugin/marketplace.json +11 -1
- package/CHANGELOG.md +88 -138
- package/README.md +4 -4
- package/config/agent-settings.template.yml +28 -0
- package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
- package/docs/architecture.md +3 -3
- package/docs/archive/CHANGELOG-pre-2.20.0.md +159 -0
- package/docs/catalog.md +16 -5
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/compression-default-kill-criterion.md +1 -1
- package/docs/contracts/file-ownership-matrix.json +344 -0
- package/docs/getting-started.md +1 -1
- package/docs/guidelines/prompt-templates.md +166 -0
- package/docs/parity/ruflo.md +3 -3
- package/package.json +1 -1
- package/scripts/ai-video/adapters/gemini-veo.sh +57 -0
- package/scripts/ai-video/adapters/higgsfield.sh +82 -0
- package/scripts/ai-video/adapters/kling.sh +54 -0
- package/scripts/ai-video/adapters/openai-images.sh +52 -0
- package/scripts/ai-video/adapters/sora.sh +54 -0
- package/scripts/ai-video/lib/adapter-common.sh +116 -0
- package/scripts/ai-video/lib/adapter-contract.md +163 -0
- package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/higgsfield/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/kling/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/kling/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/openai-images/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/openai-images/scene-0001.png +3 -0
- package/scripts/ai-video/lib/fixtures/sora/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/sora/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/load-config.sh +140 -0
- package/scripts/ai-video/lib/operator-pick.sh +119 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +122 -0
- package/scripts/ai-video/lib/redact.sh +85 -0
- package/scripts/ai-video/lib/validate-deps.sh +132 -0
- package/scripts/ai-video/stitch.sh +154 -0
- package/scripts/ai-video/test-pipeline.sh +169 -0
- 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
|
|
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.
|
|
68
|
-
3.
|
|
69
|
-
4.
|
|
70
|
-
5.
|
|
71
|
-
6.
|
|
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. Text — sparse, 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.
|
|
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
|
|
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
|
|