@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
@@ -54,6 +54,50 @@ calling command (`/work`) owns prompt capture; this skill only refines.
54
54
  If `raw` is missing, empty, or whitespace-only the resolver already
55
55
  raised `PromptResolverError`. The skill never receives that input.
56
56
 
57
+ ## Modes and bypass
58
+
59
+ The skill honours `prompt_optimization.inbound` (or
60
+ `prompt_optimization.default` when no inbound override is set) from
61
+ `.agent-project-settings.yml` / `.agent-settings.yml`. Three modes:
62
+
63
+ | Mode | Behaviour |
64
+ |---|---|
65
+ | `off` | The skill is a no-op. The dispatcher writes `confidence={"band":"high","score":1.0}` directly and the engine proceeds with the literal prompt. No assumption inference, no clarifying questions. |
66
+ | `mini` | Stack-aware light shaping. Steps 1-2 run; step 3 only emits `assumes:` lines for *implicit stack constraints* (framework, package manager) detected from config files. Steps 4-5 produce 3 AC bullets max. Low-band halts ask at most one question; medium-band halts are auto-confirmed silently. |
67
+ | `max` *(default)* | Full procedure — every step 1–6 runs. Medium-band halts surface the assumption list verbatim; low-band halts ask one clarifying question. This is the existing behaviour. |
68
+
69
+ **Bypass prefix.** If the raw prompt starts with the configured
70
+ `prompt_optimization.bypass_prefix` (default `/raw`), the skill
71
+ becomes a no-op regardless of mode. The dispatcher strips the
72
+ prefix, passes the remainder through verbatim, and records
73
+ `bypass:true` in the envelope so downstream surfaces (delivery
74
+ report, `--no-prose-synthesis`) can attribute the skip.
75
+
76
+ ```
77
+ /raw migrate auth.service.ts to use jose, keep the API shape
78
+ ```
79
+
80
+ `/raw` is reserved at the prompt boundary only — it has no meaning
81
+ mid-prompt and is not stripped when it appears inside the body.
82
+
83
+ ### Stack-config read (mini / max only)
84
+
85
+ When the mode is `mini` or `max`, step 3 may read these config files
86
+ (read-only, scope-locked) to enrich the `assumes:` block:
87
+
88
+ - `package.json` — JS / TS framework detection (Next.js App vs Pages,
89
+ Remix, SvelteKit, Astro, Expo, …)
90
+ - `composer.json` — PHP framework detection (Laravel, Symfony,
91
+ framework-less)
92
+ - `pyproject.toml` / `requirements.txt` — Python framework detection
93
+ - `CLAUDE.md` / `AGENTS.md` — project-declared stack hints
94
+ - `.cursorrules` — project-declared stack hints
95
+ - `tsconfig.json` — TS path-alias / module-resolution hints
96
+
97
+ The skill MUST NOT read source files, `.env*`, secrets, or user
98
+ data. Detection lands as a single `assumes: stack=<framework>@<version>`
99
+ line; the medium-band halt is the user's chance to flip it.
100
+
57
101
  ## Procedure
58
102
 
59
103
  ### 1. Read and analyze the prompt
@@ -220,11 +264,24 @@ For `low`, the question replaces the AC list:
220
264
  `data.reconstructed_ac` and `data.assumptions`.
221
265
  - Do NOT re-derive band thresholds in prose. They live in
222
266
  `confidence.py` and only there.
267
+ - Do NOT read source files, `.env*`, secrets, or arbitrary user
268
+ files when stack-detecting in mini / max mode. The allowlist
269
+ above (`package.json`, `composer.json`, `pyproject.toml`,
270
+ `requirements.txt`, `CLAUDE.md`, `AGENTS.md`, `.cursorrules`,
271
+ `tsconfig.json`) is exhaustive.
272
+ - Do NOT strip the `bypass_prefix` mid-prompt. The prefix is only
273
+ recognised at the prompt boundary; matches inside the body stay
274
+ literal.
275
+ - Do NOT silently rewrite the prompt in `max` mode without
276
+ surfacing the assumption list on a medium-band halt. The diff
277
+ is the contract.
223
278
 
224
279
  ## See also
225
280
 
226
281
  - [`refine-ticket`](../refine-ticket/SKILL.md) — sibling for ticket-shaped input
282
+ - [`prompt-optimizer`](../prompt-optimizer/SKILL.md) — engine-outbound sibling; same `prompt_optimization` setting controls its mode
227
283
  - [`work_engine.resolvers.prompt`](../../templates/scripts/work_engine/resolvers/prompt.py) — envelope builder
228
284
  - [`work_engine.scoring.confidence`](../../templates/scripts/work_engine/scoring/confidence.py) — rubric + band thresholds
229
285
  - [`ask-when-uncertain`](../../rules/ask-when-uncertain.md) — one-question-per-turn Iron Law
230
286
  - [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) — this skill was drafted under it
287
+ - AI Council session: `agents/council-responses/prompt-master-mini.json` (2026-05-17) — analysis behind the mini/max split and `/raw` bypass <!-- council-ref-allowed: ADR decision trace -->
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: scene-expander
3
+ description: "Use when expanding a one-line idea into the 12-block Cinematic Scene Blueprint — provider-agnostic, includes optional dialogue + ambient. Triggers 'expand this scene', 'blueprint for X'."
4
+ personas:
5
+ - hollywood-director
6
+ - pixar-storyboard-artist
7
+ source: package
8
+ domain: product
9
+ ---
10
+
11
+ # scene-expander
12
+
13
+ > Expand a one-line idea or script line into the **Cinematic Scene
14
+ > Blueprint** — 12 labeled blocks consumed by
15
+ > [`parse-blueprint.sh`](./scene-blueprint.schema.yaml). Picks
16
+ > `hollywood-director` for live-action and `pixar-storyboard-artist`
17
+ > for animated beats. Output is provider-agnostic — provider tuning
18
+ > is [`motion-choreographer`](../motion-choreographer/SKILL.md).
19
+
20
+ ## When to use
21
+
22
+ - A script line, idea, or beat needs a full blueprint before any
23
+ adapter runs.
24
+ - A `/video:from-script` run is parsing `## Scene N` headings and
25
+ needs each scene expanded.
26
+
27
+ Do NOT use when:
28
+
29
+ - The brief is already an 11-block cinematic prompt → call
30
+ `video-director` directly to refine it.
31
+ - The brief is a static graphic → `canvas-design`.
32
+ - Provider-specific token tuning is the next step →
33
+ `motion-choreographer`.
34
+
35
+ ## Procedure
36
+
37
+ ### Step 0: Inspect
38
+
39
+ 1. Read the input line. Classify as **live-action / photoreal** or
40
+ **animated / stylized**.
41
+ 2. Live-action → load `hollywood-director` voice. Animated → load
42
+ `pixar-storyboard-artist`. Hybrid (live-action with VFX) →
43
+ `hollywood-director`; record VFX intent in ENVIRONMENT.
44
+ 3. Check for an existing `character.json` lock under
45
+ `agents/ai-video/<project>/characters/`.
46
+
47
+ ### Step 1: Emit the 12 blocks
48
+
49
+ One label per line. Order is mandatory.
50
+
51
+ 1. **STYLE** — stylistic anchor (live-action: film stock + decade,
52
+ e.g. "Kodak 5219, 2015"; animated: specific film + year).
53
+ 2. **SUBJECT** — character read; verbatim identity tokens when a
54
+ lock exists.
55
+ 3. **ENVIRONMENT** — location, time-of-day, weather, era; what the
56
+ world does in response to the subject.
57
+ 4. **ACTION** — anticipation / action / reaction with beat counts
58
+ (`0.5s / 1.2s / 0.8s`). No adjective paragraphs.
59
+ 5. **CAMERA** — position, height, distance, move (lock-off, dolly,
60
+ handheld, push, pull). Off-axis when on-axis is default.
61
+ 6. **LENS** — focal length in mm and aperture intent. "Cinematic"
62
+ alone fails.
63
+ 7. **LIGHTING** — key / fill / back / practical named; "golden
64
+ hour" requires a sun angle.
65
+ 8. **MOOD** — one emotional read.
66
+ 9. **DIALOGUE** — optional. If present: `speaker: "line"`, one per
67
+ line. Marks `audio: native` capability requirement.
68
+ 10. **AMBIENT SOUND** — optional. Layer list (wind, traffic,
69
+ crowd, ocean). Marks `audio: native` or routes to ffmpeg mux.
70
+ 11. **DURATION** — seconds (integer or one decimal).
71
+ 12. **NEGATIVE** — clichés to reject, load-bearing order top-first.
72
+ Always names: centered framing, symmetric composition, generic
73
+ "cinematic", soap-opera contrast.
74
+
75
+ ### Step 2: Self-review
76
+
77
+ 1. Live-action / animated classification consistent across blocks?
78
+ 2. LENS present with mm (live-action) OR stylistic anchor with
79
+ film+year (animated)?
80
+ 3. LIGHTING with a direction?
81
+ 4. ACTION names beat counts, not adjectives?
82
+ 5. DIALOGUE / AMBIENT SOUND present → the run requires `audio:
83
+ native` adapter OR ffmpeg-mux fallback declared.
84
+ 6. NEGATIVE ≥ 4 entries, load-bearing top?
85
+ 7. SUBJECT verbatim from `character.json` when a lock exists?
86
+
87
+ Any "no" → revise that block.
88
+
89
+ ### Step 3: Validate
90
+
91
+ 1. Pipe output through `scripts/ai-video/lib/parse-blueprint.sh` —
92
+ exits 0 and emits valid adapter-contract JSON.
93
+ 2. No provider tokens (no aspect / model / duration flags).
94
+
95
+ ## Output format
96
+
97
+ 1. **`scenes/<id>/prompt.txt`** — 12 labeled blocks, ready for
98
+ `parse-blueprint.sh`.
99
+ 2. **`scenes/<id>/blueprint.json`** — parser output, adapter-stdin
100
+ ready.
101
+ 3. **`scenes/<id>/review.md`** — one-paragraph rationale per
102
+ non-obvious choice.
103
+
104
+ ## Gotcha
105
+
106
+ - The model wants to skip optional DIALOGUE / AMBIENT SOUND blocks
107
+ silently — if they could plausibly belong, emit them; the parser
108
+ treats missing blocks as `null`, not as an error.
109
+ - Live-action without LENS mm fails the parser's strict mode.
110
+ - Animated without a film+year anchor in STYLE drifts on every run.
111
+ - ACTION written as "the character does X dramatically" fails —
112
+ adapters need verbs with beat counts.
113
+ - DIALOGUE forces `audio: native` requirement — flag this to the
114
+ orchestrator so it picks a capable adapter (Veo / Sora).
115
+
116
+ ## Do NOT
117
+
118
+ - Do NOT emit provider tokens — that is `motion-choreographer`.
119
+ - Do NOT skip the blueprint parser validation step.
120
+ - Do NOT paraphrase identity tokens when a lock exists.
121
+ - Do NOT mix live-action LENS prescriptions with animated STYLE
122
+ anchors in the same scene — pick one mode.
@@ -0,0 +1,108 @@
1
+ # Scene Blueprint Schema (v1)
2
+ #
3
+ # Maps the 12 labeled blocks emitted by `scene-expander` to the
4
+ # adapter-contract JSON consumed by every adapter under
5
+ # `scripts/ai-video/adapters/`. Validation lives in
6
+ # `scripts/ai-video/lib/parse-blueprint.sh`.
7
+ #
8
+ # Source format: plain-text, one labeled block per line OR per
9
+ # heading. Labels are case-insensitive; whitespace around `:` is
10
+ # tolerated. Block order is the canonical order below — out-of-order
11
+ # blocks are accepted but logged as a warning.
12
+
13
+ version: 1
14
+
15
+ blocks:
16
+ STYLE:
17
+ required: true
18
+ target: prompt.style
19
+ description: "Film stock + decade (live-action) or film title + year (animated)."
20
+
21
+ SUBJECT:
22
+ required: true
23
+ target: prompt.subject
24
+ description: "Character read. Verbatim from character.json when locked."
25
+
26
+ ENVIRONMENT:
27
+ required: true
28
+ target: prompt.environment
29
+ description: "Location, time-of-day, weather, era; world reaction."
30
+
31
+ ACTION:
32
+ required: true
33
+ target: prompt.action
34
+ description: "Anticipation / action / reaction with beat counts."
35
+
36
+ CAMERA:
37
+ required: true
38
+ target: prompt.camera
39
+ description: "Position, height, distance, move."
40
+
41
+ LENS:
42
+ required: true
43
+ target: prompt.lens
44
+ description: "Focal length in mm + aperture intent (live-action). Animated runs may emit 'n/a' but the block must be present."
45
+
46
+ LIGHTING:
47
+ required: true
48
+ target: prompt.lighting
49
+ description: "Key / fill / back / practical with direction."
50
+
51
+ MOOD:
52
+ required: true
53
+ target: prompt.mood
54
+ description: "Single emotional read."
55
+
56
+ DIALOGUE:
57
+ required: false
58
+ target: audio.dialogue
59
+ description: "Optional. Marks audio.native requirement when present."
60
+ null_when_absent: true
61
+
62
+ AMBIENT SOUND:
63
+ required: false
64
+ target: audio.ambient
65
+ description: "Optional ambient layer list."
66
+ null_when_absent: true
67
+
68
+ DURATION:
69
+ required: true
70
+ target: duration
71
+ type: number
72
+ description: "Seconds. Integer or one decimal."
73
+
74
+ NEGATIVE:
75
+ required: true
76
+ target: negative
77
+ description: "Clichés to reject, load-bearing top-first."
78
+
79
+ # Adapter-contract JSON shape produced by parse-blueprint.sh
80
+ output_shape: |
81
+ {
82
+ "prompt": {
83
+ "style": "...",
84
+ "subject": "...",
85
+ "environment": "...",
86
+ "action": "...",
87
+ "camera": "...",
88
+ "lens": "...",
89
+ "lighting": "...",
90
+ "mood": "..."
91
+ },
92
+ "audio": {
93
+ "dialogue": [...] | null,
94
+ "ambient": [...] | null,
95
+ "enable_native_audio": true | false
96
+ },
97
+ "duration": 5.0,
98
+ "negative": ["...", "..."],
99
+ "requires": {
100
+ "audio_native": true | false
101
+ }
102
+ }
103
+
104
+ # `enable_native_audio` derives from: DIALOGUE present OR AMBIENT SOUND present.
105
+ # Orchestrator uses `requires.audio_native` to pick an adapter with
106
+ # `audio: native` capability (Phase 4 Step 1). When no native adapter
107
+ # is available the orchestrator routes audio.* to ffmpeg mux at
108
+ # stitch time (Phase 4 Step 7) and clears `enable_native_audio`.
@@ -56,7 +56,7 @@ model pairing. Defaults come from
56
56
  Descriptive, not enforced. Documents the **expected agent-to-agent
57
57
  communication topology** so consumers can predict latency, failure
58
58
  modes, and where consensus is required. Cited from
59
- [`external-findings.md § 2`](../../../agents/audit-2026-05-14-north-star/external-findings.md)
59
+ [`external-findings.md § 2`](../../../agents/council-sessions/audit-2026-05-14-north-star/external-findings.md) <!-- council-ref-allowed: ADR decision trace for topology anti-drift defaults -->
60
60
  row 7 (Ruflo's `hierarchical, 6–8 agents, raft consensus` anti-drift
61
61
  default).
62
62
 
@@ -72,8 +72,8 @@ default).
72
72
 
73
73
  **Anti-drift default** (Ruflo convention, descriptive only):
74
74
  `hierarchical, 6–8 agents, raft consensus`. Consumers free to
75
- override per orchestration — table is **starting point**, not a
76
- constraint. Topology is metadata for capacity planning, not
75
+ override per orchestration — the table is the **starting point**,
76
+ not a constraint. Topology is metadata for capacity planning, not
77
77
  runtime-enforced.
78
78
 
79
79
  **Glossary:**
@@ -81,7 +81,7 @@ runtime-enforced.
81
81
  - `mesh` — agents see each other's outputs (e.g. competing diffs).
82
82
  - `hierarchical-mesh` — peer debate followed by hub reconciliation.
83
83
  - `ring` — output of step N feeds input of step N+1 in order.
84
- - `star` — N agents fan out from single hub; no peer comms.
84
+ - `star` — N agents fan out from a single hub; no peer comms.
85
85
  - `adaptive` — topology shifts per step; outer chain remains hub.
86
86
 
87
87
  ### 1. do-and-judge
@@ -193,17 +193,19 @@ step is under ~30 minutes. The branch-creation, context-switch, and
193
193
  worktree-cleanup cost dominates. Stick with mode 1 (do-and-judge)
194
194
  or mode 3 (do-in-steps) for those.
195
195
 
196
- **Competitive variant — per-candidate isolation.** Mode 5
197
- (`do-competitively`) + worktrees: each candidate runs in its own
198
- worktree (no cross-candidate state leak). Selection rules:
199
-
200
- - **No auto-merge.** Orchestrator never merges candidate branches.
201
- Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md)
202
- applies even under standing autonomy. ADR-005 records reasoning.
203
- - **Ranked presentation.** Judge ranks 1..N with one-line
204
- justifications; user picks winner.
205
- - **Loser worktrees stay.** Orchestrator does not auto-delete losing
206
- worktrees user keeps option to harvest a partial idea before cleanup.
196
+ **Competitive variant — per-candidate isolation.** When mode 5
197
+ (`do-competitively`) is combined with worktrees, each candidate
198
+ implementer runs in its own worktree (so candidates cannot read each
199
+ other's open files or branch state). Selection rules:
200
+
201
+ - **No auto-merge.** The orchestrator never merges a candidate
202
+ branch. Hard Floor per [`non-destructive-by-default`](../../rules/non-destructive-by-default.md)
203
+ applies even under standing autonomy. ADR-005 records the reasoning.
204
+ - **Ranked presentation.** Judge ranks candidates (1..N) with a
205
+ one-line justification per rank; user picks the winner.
206
+ - **Loser worktrees stay.** The orchestrator does not delete losing
207
+ worktrees automatically — the user keeps the option to harvest a
208
+ partial idea before cleanup.
207
209
 
208
210
  ## Status taxonomy — every subagent return uses one envelope
209
211
 
@@ -117,6 +117,20 @@ Risks: <arbitrary values, !important, dark-mode gaps>
117
117
  break the design system; they accumulate silently.
118
118
  - `@apply` inside component CSS interacts with PurgeCSS — keep it
119
119
  in files Tailwind scans, not in vendor CSS.
120
+ - **Anti-AI-slop: gradients.** Unless audit-pinned or brief-explicit,
121
+ avoid the default purple-to-blue / cyan-to-pink gradients on white —
122
+ they read as auto-generated. Reach for a single accent from the
123
+ token map, or a duotone built from configured tokens.
124
+ - **Anti-AI-slop: typography.** Unless audit-pinned, avoid surfacing
125
+ the system stack (`font-sans` fallback to Arial / Helvetica / Inter
126
+ via system defaults) as the *visible* body face. If `tailwind.config`
127
+ pins a font family, use it; if not, treat the missing token as a
128
+ gap to flag, not a license to ship the OS default.
129
+ - **Anti-AI-slop: layout.** Unless audit-pinned, the centered hero +
130
+ 3-column features + CTA stack is the AI-template tell. Break the
131
+ grid intentionally (asymmetric column split, overlap, diagonal
132
+ flow) when the brief allows; cite the design brief's `aesthetic:`
133
+ line if `fe-design`'s aesthetic-direction section produced one.
120
134
 
121
135
  ## Do NOT
122
136
 
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: video-director
3
+ description: "Use when turning a scene idea into the 11-block cinematic prompt for live-action AI video — lens, lighting, blocking, motion, negatives. Triggers 'cinematic prompt', 'film-grade scene'."
4
+ personas:
5
+ - hollywood-director
6
+ source: package
7
+ domain: product
8
+ ---
9
+
10
+ # video-director
11
+
12
+ > Turn a scene idea into the **11-block cinematic prompt** the
13
+ > `hollywood-director` persona ships. Output is provider-agnostic
14
+ > prose; provider-specific tuning is handed off to
15
+ > [`motion-choreographer`](../motion-choreographer/SKILL.md).
16
+
17
+ ## When to use
18
+
19
+ - A scene idea, beat, or script line needs to become a cinematic
20
+ prompt ready to feed an image+video pipeline.
21
+ - A draft prompt reads as "AI video" — flat, centered, generic
22
+ golden-hour — and needs directorial choices on the page.
23
+ - Live-action / photoreal scenes. For animation acting beats, route
24
+ to [`pixar-storyteller`](../pixar-storyteller/SKILL.md).
25
+
26
+ Do NOT use when:
27
+
28
+ - The deliverable is a still graphic or poster → `canvas-design`.
29
+ - The work is provider-specific token tuning →
30
+ `motion-choreographer` after this skill has produced the blocks.
31
+ - A character identity must be re-used across scenes → run
32
+ [`character-consistency`](../character-consistency/SKILL.md) first
33
+ to lock identity tokens, then call this skill.
34
+
35
+ ## Procedure
36
+
37
+ ### Step 0: Inspect
38
+
39
+ 1. Confirm the input is a live-action / photoreal beat (not animation).
40
+ 2. If a `character.json` exists under `agents/ai-video/<project>/characters/`,
41
+ read the identity tokens — they are reused verbatim.
42
+ 3. Read the scene's intent in one sentence — what is the camera
43
+ witnessing, and why now?
44
+
45
+ ### Step 1: Draft the 11 blocks
46
+
47
+ Emit each block on its own labeled line. Blocks are mandatory and
48
+ in this order:
49
+
50
+ 1. **SCENE** — location, time-of-day, weather, era.
51
+ 2. **CHARACTER** — verbatim identity tokens from `character.json`
52
+ when present; otherwise silhouette + wardrobe + signature prop.
53
+ 3. **ACTION** — verbs and beats. Anticipation → action → reaction
54
+ named separately. No "doing things" prose.
55
+ 4. **CAMERA** — position, height, distance, move (lock-off, dolly,
56
+ handheld, push, pull). Off-axis when on-axis is the AI default.
57
+ 5. **LENS** — focal length in mm (24 / 35 / 50 / 85 / 200) and
58
+ aperture intent (deep / shallow). "Cinematic" alone fails.
59
+ 6. **LIGHTING** — key, fill, back, practical sources named. "Golden
60
+ hour" requires an angle (low-east 15°, etc.).
61
+ 7. **ENVIRONMENT MOTION** — what the world does (wind, water,
62
+ crowd, traffic) and on which beat.
63
+ 8. **SECONDARY MOTION** — hair, cloth, dust, breath. Names the
64
+ reactive layer that sells the primary action.
65
+ 9. **MOOD** — one emotional read; no compound moods.
66
+ 10. **DURATION** — seconds. Integer or one decimal.
67
+ 11. **NEGATIVE CONSTRAINTS** — clichés to reject, in load-bearing
68
+ order (top survives truncation). Always names: centered framing,
69
+ symmetric composition, generic "cinematic", soap-opera contrast.
70
+
71
+ ### Step 2: Self-review
72
+
73
+ 1. Lens length present? "Cinematic" without mm → fail.
74
+ 2. Lighting direction present? "Golden hour" without angle → fail.
75
+ 3. ACTION names beats, not adjectives?
76
+ 4. NEGATIVE block has at least 4 entries, load-bearing on top?
77
+ 5. CHARACTER block reuses identity tokens verbatim when a lock exists?
78
+
79
+ Any "no" → revise that block before handing off.
80
+
81
+ ### Step 3: Validate
82
+
83
+ 1. Output is plain text, one labeled block per line, ready for
84
+ `scripts/ai-video/lib/parse-blueprint.sh` (Phase 3 Step 5).
85
+ 2. No provider tokens (no `--aspect`, no `--model`). That is
86
+ `motion-choreographer`'s job.
87
+
88
+ ## Output format
89
+
90
+ 1. **`scenes/<id>/prompt.txt`** — 11 labeled blocks, one per line,
91
+ ready for the blueprint parser.
92
+ 2. **`scenes/<id>/review.md`** — one-paragraph rationale per
93
+ non-obvious directorial choice (lens, light angle, camera move).
94
+
95
+ ## Gotcha
96
+
97
+ - The model defaults to centered, on-axis, symmetric — name an
98
+ off-axis or rule-of-thirds camera or it will silently center.
99
+ - "Golden hour" alone reads as a sunset GIF; require a sun angle.
100
+ - ACTION written as a paragraph of adjectives ("dynamically", "powerfully")
101
+ fails — adapters need verbs with beat counts.
102
+ - When `character.json` exists, paraphrasing identity tokens breaks
103
+ Character Lock — copy them verbatim.
104
+ - Negative constraints in the truncated tail get dropped — load-
105
+ bearing ones go first.
106
+
107
+ ## Do NOT
108
+
109
+ - Do NOT emit provider-specific tokens (aspect ratio, model id,
110
+ duration flags) — that is `motion-choreographer`'s scope.
111
+ - Do NOT collapse anticipation / action / reaction into one verb.
112
+ - Do NOT use "cinematic" without lens + lighting + camera move.
113
+ - Do NOT invent character details when a `character.json` exists.
@@ -217,6 +217,23 @@ roadmap:
217
217
  # mandatory before any "roadmap complete" claim, regardless of cadence.
218
218
  quality_cadence: end_of_roadmap
219
219
 
220
+ # --- Quality / CI execution ---
221
+ quality:
222
+ # Run local quality / CI tasks and tests autonomously (true, false)
223
+ # true = agent runs the quality pipeline whenever work is ready
224
+ # for verification, without asking (default)
225
+ # false = agent asks before running quality tools / tests locally
226
+ # Carve-out: NEW CI gates / smoke tests / test files MUST run
227
+ # locally regardless of this flag — without execution the gate is
228
+ # unverified evidence. Iron Law `verify-before-complete` still applies.
229
+ local_auto_run: true
230
+
231
+ # Wait for remote CI to finish on the PR / pipeline (true, false)
232
+ # true = poll GitHub check-runs / pipeline after push and report
233
+ # green / red before handing back
234
+ # false = push and hand back immediately (default)
235
+ wait_for_remote_ci: false
236
+
220
237
  # --- Subagent orchestration ---
221
238
  subagents:
222
239
  # Model for implementer subagents (empty = same tier as the session model)
@@ -447,6 +464,8 @@ the canonical narrative lives in
447
464
  | `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
448
465
  | `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
449
466
  | `roadmap.quality_cadence` | `end_of_roadmap`, `per_phase`, `per_step` | `end_of_roadmap` | When `/roadmap:process-step|phase|full` runs the project's quality pipeline. Default skips per-step / per-phase runs and gates only the final archival. `per_phase` runs once after every phase; `per_step` is the legacy verbose mode. Step checkboxes and the dashboard are always updated regardless. `verify-before-complete` still requires fresh output before any "roadmap complete" claim. |
467
+ | `quality.local_auto_run` | `true`, `false` | `true` | When `true`: agent runs the project's quality pipeline (`task ci`, `make test`, `npm run check`, PHPStan, ECS, Rector, test suites) autonomously when work is ready for verification. When `false`: agent asks before running locally. **Carve-out**: NEW CI gates / smoke tests / test files MUST run locally regardless of this flag — without execution the new gate is unverified evidence. Iron Law `verify-before-complete` still applies; suppressed runs require the agent to surface the gap before claiming completion. |
468
+ | `quality.wait_for_remote_ci` | `true`, `false` | `false` | When `true`: after `git push`, the agent polls GitHub check-runs / pipeline status on the PR and reports green / red before handing back. When `false`: agent pushes and hands back immediately; the user inspects CI themselves (default — saves agent runtime and tokens). |
450
469
  | `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
451
470
  | `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
452
471
  | `subagents.max_parallel` | integer | `3` | Maximum parallel subagent invocations. `1` serializes. |
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.py (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "2.20.1"
42
+ agent_config_version: "2.23.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -152,6 +152,58 @@ quality:
152
152
  # Known: eslint, prettier, tsc, biome.
153
153
  tools: [eslint, prettier, tsc]
154
154
 
155
+ # --- Prompt optimization (engine-inbound + engine-outbound) ---
156
+ #
157
+ # Controls how aggressively the agent reshapes a free-form prompt
158
+ # *before* the engine plans (`/work "<prompt>"`) and how the
159
+ # outbound `/optimize-prompt` skill polishes a copy-and-paste
160
+ # prompt for an external AI.
161
+ #
162
+ # Single-knob model — `default:` applies to both inbound and
163
+ # outbound surfaces unless an override key is set:
164
+ #
165
+ # off — engine runs the user's literal prompt. No reconstruction,
166
+ # no AC inference, no template selection. Closest to "raw"
167
+ # behaviour; useful for power users who already write
168
+ # structured prompts.
169
+ # mini — light shaping. Inbound: `refine-prompt` runs in
170
+ # stack-aware mode (reads `package.json` / `CLAUDE.md` /
171
+ # `.cursorrules` only to infer the framework), asks at
172
+ # most 5 targeted clarifying questions, emits a structured
173
+ # 6-block prompt. Outbound: BASIC mode of `prompt-optimizer`
174
+ # (4-D pass with safe defaults, no clarifying questions).
175
+ # max — full restructure. Inbound: `refine-prompt` runs the
176
+ # 5-dimension confidence rubric + assumption inference;
177
+ # medium-band halts surface the assumption list, low-band
178
+ # asks one clarifying question. Outbound: DETAIL mode of
179
+ # `prompt-optimizer` with template selection (RTF, CO-STAR,
180
+ # RISEN, CRISPE, …) per `docs/guidelines/prompt-templates.md`.
181
+ #
182
+ # Default `max` reshapes every prompt before the engine plans —
183
+ # the AI Council (anthropic/openai, 2026-05-17) warned this risks
184
+ # latency, token cost, and loss of author intent on the inbound
185
+ # side. If that bites you, uncomment `inbound: mini` below. The
186
+ # outbound side (explicit `/optimize-prompt`) is opt-in and stays
187
+ # at `max` regardless.
188
+ #
189
+ # Bypass: any prompt starting with `bypass_prefix` skips both
190
+ # inbound and outbound shaping verbatim. `/`-prefixed slash
191
+ # commands (`/work`, `/commit`, …) and `#`-prefixed memory entries
192
+ # auto-bypass.
193
+ prompt_optimization:
194
+ default: max
195
+
196
+ # Optional per-surface overrides. Leave commented to inherit
197
+ # `default:`. Council-recommended split is `inbound: mini,
198
+ # outbound: max` — uncomment if you want fewer interceptions
199
+ # on `/work` but full polish on `/optimize-prompt`.
200
+ # inbound: mini
201
+ # outbound: max
202
+
203
+ # Prefix that skips all shaping. Must start with `/` to align
204
+ # with this project's slash-command convention. Default `/raw`.
205
+ bypass_prefix: "/raw"
206
+
155
207
  # --- Locked keys (override this file only; never locks .agent-settings.yml) ---
156
208
  #
157
209
  # List keys from this file whose values cannot be overridden by a
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "2.21.0",
9
+ "version": "2.24.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
@@ -85,6 +85,7 @@
85
85
  "./.claude/skills/chat-history-import",
86
86
  "./.claude/skills/chat-history-learn",
87
87
  "./.claude/skills/chat-history-show",
88
+ "./.claude/skills/character-consistency",
88
89
  "./.claude/skills/check-current-md",
89
90
  "./.claude/skills/check-refs",
90
91
  "./.claude/skills/churn-prevention",
@@ -236,6 +237,7 @@
236
237
  "./.claude/skills/module-create",
237
238
  "./.claude/skills/module-explore",
238
239
  "./.claude/skills/module-management",
240
+ "./.claude/skills/motion-choreographer",
239
241
  "./.claude/skills/multi-tenancy",
240
242
  "./.claude/skills/nextjs-patterns",
241
243
  "./.claude/skills/okr-tree-modeling",
@@ -267,6 +269,7 @@
267
269
  "./.claude/skills/php-debugging",
268
270
  "./.claude/skills/php-service",
269
271
  "./.claude/skills/pipeline-strategy",
272
+ "./.claude/skills/pixar-storyteller",
270
273
  "./.claude/skills/playwright-architect",
271
274
  "./.claude/skills/playwright-testing",
272
275
  "./.claude/skills/po-discovery",
@@ -324,6 +327,7 @@
324
327
  "./.claude/skills/rule-writing",
325
328
  "./.claude/skills/runway-cognition",
326
329
  "./.claude/skills/scenario-modeling",
330
+ "./.claude/skills/scene-expander",
327
331
  "./.claude/skills/script-writing",
328
332
  "./.claude/skills/secrets-management",
329
333
  "./.claude/skills/security",
@@ -367,6 +371,12 @@
367
371
  "./.claude/skills/using-git-worktrees",
368
372
  "./.claude/skills/validate-feature-fit",
369
373
  "./.claude/skills/verify-completion-evidence",
374
+ "./.claude/skills/video",
375
+ "./.claude/skills/video-director",
376
+ "./.claude/skills/video-from-script",
377
+ "./.claude/skills/video-scene",
378
+ "./.claude/skills/video-stitch",
379
+ "./.claude/skills/video-storyboard",
370
380
  "./.claude/skills/vision-articulation",
371
381
  "./.claude/skills/voc-extract",
372
382
  "./.claude/skills/voice-and-tone-design",