@event4u/agent-config 2.23.0 → 2.25.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/create-pr/description-only.md +39 -11
- package/.agent-src/commands/create-pr.md +59 -5
- 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/contexts/execution/roadmap-process-loop.md +69 -14
- package/.agent-src/personas/README.md +5 -1
- package/.agent-src/personas/ai-video-technical-director.md +81 -0
- package/.agent-src/personas/hollywood-director.md +99 -0
- package/.agent-src/profiles/content_creator.yml +5 -0
- package/.agent-src/rules/media-governance-routing.md +82 -0
- package/.agent-src/rules/persona-governance.md +90 -0
- package/.agent-src/rules/post-push-rewrite-discipline.md +70 -0
- package/.agent-src/rules/provider-lifecycle-discipline.md +75 -0
- package/.agent-src/rules/roadmap-ci-steps-policy.md +145 -0
- package/.agent-src/rules/roadmap-progress-sync.md +11 -5
- package/.agent-src/skills/character-consistency/SKILL.md +131 -0
- package/.agent-src/skills/git-workflow/SKILL.md +133 -0
- package/.agent-src/skills/motion-choreographer/SKILL.md +161 -0
- package/.agent-src/skills/pixar-storyteller/SKILL.md +120 -0
- package/.agent-src/skills/roadmap-writing/SKILL.md +10 -0
- package/.agent-src/skills/scene-expander/SKILL.md +137 -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/video-director/SKILL.md +126 -0
- package/.agent-src/templates/agent-settings.md +19 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/roadmaps.md +16 -0
- package/.claude-plugin/marketplace.json +11 -1
- package/CHANGELOG.md +65 -0
- package/README.md +7 -5
- package/config/agent-settings.template.yml +54 -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/catalog.md +18 -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 +405 -0
- package/docs/contracts/provider-lifecycle.md +122 -0
- package/docs/decisions/ADR-011-domain-pack-readiness.md +213 -0
- package/docs/decisions/INDEX.md +1 -0
- package/docs/getting-started-by-role.md +10 -0
- package/docs/getting-started.md +2 -2
- package/docs/parity/ruflo.md +3 -3
- package/docs/personas.md +73 -26
- package/docs/profiles.md +9 -4
- package/package.json +1 -1
- package/scripts/_tmp_scan_framework_leakage.py +119 -0
- package/scripts/ai-video/adapters/gemini-veo.sh +62 -0
- package/scripts/ai-video/adapters/higgsfield.sh +88 -0
- package/scripts/ai-video/adapters/kling.sh +59 -0
- package/scripts/ai-video/adapters/openai-images.sh +57 -0
- package/scripts/ai-video/adapters/sora.sh +60 -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/check_portability.py +6 -0
- package/scripts/lint_media_policy_linkage.py +140 -0
- package/scripts/lint_persona_governance.py +164 -0
- package/scripts/lint_roadmap_ci_steps.py +182 -0
- package/scripts/schemas/command.schema.json +8 -0
- package/scripts/smoke/schema.sh +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
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
|
+
source: package
|
|
5
|
+
domain: product
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# pixar-storyteller
|
|
9
|
+
|
|
10
|
+
> Turn an animation beat into the **four-block storyboard**:
|
|
11
|
+
> CHARACTER SHEET · SCENE PROMPT · IMAGE PROMPT · VIDEO PROMPT.
|
|
12
|
+
> Output is provider-agnostic; provider tuning is
|
|
13
|
+
> [`motion-choreographer`](../motion-choreographer/SKILL.md).
|
|
14
|
+
>
|
|
15
|
+
> The acting / storyboard lens is enforced inline by the procedure
|
|
16
|
+
> and self-review below.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- A scene is animated / stylized (not photoreal) and needs an
|
|
21
|
+
emotional read, not a film-set read.
|
|
22
|
+
- The character must want something and the environment must
|
|
23
|
+
respond — flat poses fail.
|
|
24
|
+
- Live-action / photoreal beats → [`video-director`](../video-director/SKILL.md).
|
|
25
|
+
|
|
26
|
+
Do NOT use when:
|
|
27
|
+
|
|
28
|
+
- The deliverable is provider-tuned token grammar →
|
|
29
|
+
`motion-choreographer` after this skill.
|
|
30
|
+
- A character must be re-used across scenes → run
|
|
31
|
+
[`character-consistency`](../character-consistency/SKILL.md) first
|
|
32
|
+
to lock the CHARACTER SHEET, then call this skill.
|
|
33
|
+
- The brief is a static graphic / poster → `canvas-design`.
|
|
34
|
+
|
|
35
|
+
## Procedure
|
|
36
|
+
|
|
37
|
+
### Step 0: Inspect
|
|
38
|
+
|
|
39
|
+
1. Confirm the input is an animated / stylized beat.
|
|
40
|
+
2. If `character.json` exists under `agents/ai-video/<project>/characters/`,
|
|
41
|
+
read identity tokens — reused verbatim in CHARACTER SHEET.
|
|
42
|
+
3. Read the beat once. Name the *want* and the *obstacle* in one
|
|
43
|
+
sentence each before drafting.
|
|
44
|
+
|
|
45
|
+
### Step 1: Draft the four blocks
|
|
46
|
+
|
|
47
|
+
Emit each block under a labeled heading. Blocks are mandatory and
|
|
48
|
+
in this order:
|
|
49
|
+
|
|
50
|
+
1. **CHARACTER SHEET** — silhouette, palette, wardrobe, signature
|
|
51
|
+
prop, posture default, eye behavior. Verbatim from `character.json`
|
|
52
|
+
when a lock exists.
|
|
53
|
+
2. **SCENE PROMPT** — single emotional beat, want, obstacle,
|
|
54
|
+
stylistic anchor (specific film + year — "Up (2009)", not
|
|
55
|
+
"Pixar-style"), environment reaction.
|
|
56
|
+
3. **IMAGE PROMPT** — one still at the peak of the beat. Names
|
|
57
|
+
composition, eye line, palette. No motion verbs.
|
|
58
|
+
4. **VIDEO PROMPT** — decomposes the moment into
|
|
59
|
+
`anticipation Xs · action Ys · reaction Zs` with explicit beat
|
|
60
|
+
counts. Names which secondary motion (hair, cloth, dust) reacts
|
|
61
|
+
on which beat.
|
|
62
|
+
|
|
63
|
+
### Step 2: Self-review
|
|
64
|
+
|
|
65
|
+
1. Exactly one emotional beat in SCENE PROMPT? Compound moods fail.
|
|
66
|
+
2. Stylistic anchor is a specific film + year? Generic style → fail.
|
|
67
|
+
3. VIDEO PROMPT names beat counts per phase?
|
|
68
|
+
4. IMAGE PROMPT names eye line?
|
|
69
|
+
5. CHARACTER SHEET matches `character.json` byte-for-byte when a
|
|
70
|
+
lock exists?
|
|
71
|
+
|
|
72
|
+
Any "no" → revise that block.
|
|
73
|
+
|
|
74
|
+
### Step 3: Validate
|
|
75
|
+
|
|
76
|
+
1. Output is plain text, one labeled block per heading, ready for
|
|
77
|
+
`scripts/ai-video/lib/parse-blueprint.sh`.
|
|
78
|
+
2. No provider tokens — that is `motion-choreographer`.
|
|
79
|
+
3. No lens / focal-length prescriptions — that is `video-director`'s
|
|
80
|
+
block, not this one.
|
|
81
|
+
|
|
82
|
+
## Output format
|
|
83
|
+
|
|
84
|
+
1. **`scenes/<id>/prompt.txt`** — four labeled blocks, ready for
|
|
85
|
+
the blueprint parser.
|
|
86
|
+
2. **`scenes/<id>/review.md`** — one-paragraph rationale per
|
|
87
|
+
non-obvious choice (stylistic anchor, environment reaction,
|
|
88
|
+
beat decomposition).
|
|
89
|
+
|
|
90
|
+
## Gotcha
|
|
91
|
+
|
|
92
|
+
- The model defaults to "Pixar-style" with no film anchor — that
|
|
93
|
+
reads as a wishlist. Force a specific title + year.
|
|
94
|
+
- Neutral faces are the AI default — every beat names a feeling
|
|
95
|
+
the face is doing, including eye line direction.
|
|
96
|
+
- Environment-as-backdrop is the silent failure mode — name what
|
|
97
|
+
the world *does* in response to the character.
|
|
98
|
+
- Collapsing anticipation and action into one verb makes motion
|
|
99
|
+
look teleported. Both phases or the prompt fails review.
|
|
100
|
+
- When `character.json` exists, paraphrasing breaks Character Lock —
|
|
101
|
+
copy identity tokens verbatim.
|
|
102
|
+
|
|
103
|
+
## Do NOT
|
|
104
|
+
|
|
105
|
+
- Do NOT prescribe lenses or focal lengths — that is `video-director`.
|
|
106
|
+
- Do NOT emit provider-specific tokens — that is `motion-choreographer`.
|
|
107
|
+
- Do NOT cite "Pixar-style" without a specific film + year.
|
|
108
|
+
- Do NOT compound emotional beats ("sad but hopeful and tired").
|
|
109
|
+
|
|
110
|
+
## Policies
|
|
111
|
+
|
|
112
|
+
The Pixar-storyteller skill anchors prompts to named films and studios by design — the policy surface is the largest in the video cluster:
|
|
113
|
+
|
|
114
|
+
- [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — naming a film + year as the *primary* anchor crosses the "in the style of [STUDIO]" trigger; surface and refuse without a transformative-intent rationale.
|
|
115
|
+
- [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when a beat references a named animator's signature character (real-person extension of style).
|
|
116
|
+
- [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the storyteller's character is a recognised public figure rendered in Pixar shape.
|
|
117
|
+
- [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every Pixar-style output ships with the AI-generation disclosure; parody / commentary cases are flagged for human review.
|
|
118
|
+
|
|
119
|
+
Refuse-and-surface when style ⇒ primary signature, not one influence among several.
|
|
120
|
+
|
|
@@ -137,6 +137,16 @@ to every roadmap you author.
|
|
|
137
137
|
user (`commit-policy` Iron Law). A roadmap is "implementation-complete"
|
|
138
138
|
once its checkboxes are ticked and verification has been run — merge
|
|
139
139
|
timing is tracked outside the roadmap.
|
|
140
|
+
* Schedule full-pipeline CI literals (`task ci`, `task ci-fast`,
|
|
141
|
+
`task ci-strict`, `make ci`, `make test`, `npm/pnpm run check`,
|
|
142
|
+
`yarn check`, `composer test`, whole-suite `vendor/bin/phpunit`,
|
|
143
|
+
whole-suite `php artisan test`) as checkbox steps when
|
|
144
|
+
`quality.local_auto_run: false` — blocked by
|
|
145
|
+
`task lint-roadmap-ci-steps` per
|
|
146
|
+
[`roadmap-ci-steps-policy`](../../rules/roadmap-ci-steps-policy.md).
|
|
147
|
+
Reword as narrow verifications, or mark with
|
|
148
|
+
`<!-- carve-out: new-gate-verification -->` when it verifies a NEW
|
|
149
|
+
gate this roadmap introduces.
|
|
140
150
|
* Use ALL-CAPS Iron-Law fenced blocks — those belong in
|
|
141
151
|
[`kernel-membership`](../../../docs/contracts/kernel-membership.md)-listed
|
|
142
152
|
rules, not roadmaps.
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# scene-expander
|
|
11
|
+
|
|
12
|
+
> Expand a one-line idea or script line into the **Cinematic Scene
|
|
13
|
+
> Blueprint** — 12 labeled blocks consumed by
|
|
14
|
+
> [`parse-blueprint.sh`](./scene-blueprint.schema.yaml). Picks
|
|
15
|
+
> `hollywood-director` for live-action; hands off animated beats to
|
|
16
|
+
> [`pixar-storyteller`](../pixar-storyteller/SKILL.md). Output is
|
|
17
|
+
> provider-agnostic — provider tuning is
|
|
18
|
+
> [`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 → hand
|
|
42
|
+
off to [`pixar-storyteller`](../pixar-storyteller/SKILL.md) (its
|
|
43
|
+
procedure carries the acting / beat-decomposition lens). Hybrid
|
|
44
|
+
(live-action with VFX) → `hollywood-director`; record VFX intent
|
|
45
|
+
in ENVIRONMENT.
|
|
46
|
+
3. Check for an existing `character.json` lock under
|
|
47
|
+
`agents/ai-video/<project>/characters/`.
|
|
48
|
+
|
|
49
|
+
### Step 1: Emit the 12 blocks
|
|
50
|
+
|
|
51
|
+
One label per line. Order is mandatory.
|
|
52
|
+
|
|
53
|
+
1. **STYLE** — stylistic anchor (live-action: film stock + decade,
|
|
54
|
+
e.g. "Kodak 5219, 2015"; animated: specific film + year).
|
|
55
|
+
2. **SUBJECT** — character read; verbatim identity tokens when a
|
|
56
|
+
lock exists.
|
|
57
|
+
3. **ENVIRONMENT** — location, time-of-day, weather, era; what the
|
|
58
|
+
world does in response to the subject.
|
|
59
|
+
4. **ACTION** — anticipation / action / reaction with beat counts
|
|
60
|
+
(`0.5s / 1.2s / 0.8s`). No adjective paragraphs.
|
|
61
|
+
5. **CAMERA** — position, height, distance, move (lock-off, dolly,
|
|
62
|
+
handheld, push, pull). Off-axis when on-axis is default.
|
|
63
|
+
6. **LENS** — focal length in mm and aperture intent. "Cinematic"
|
|
64
|
+
alone fails.
|
|
65
|
+
7. **LIGHTING** — key / fill / back / practical named; "golden
|
|
66
|
+
hour" requires a sun angle.
|
|
67
|
+
8. **MOOD** — one emotional read.
|
|
68
|
+
9. **DIALOGUE** — optional. If present: `speaker: "line"`, one per
|
|
69
|
+
line. Marks `audio: native` capability requirement.
|
|
70
|
+
10. **AMBIENT SOUND** — optional. Layer list (wind, traffic,
|
|
71
|
+
crowd, ocean). Marks `audio: native` or routes to ffmpeg mux.
|
|
72
|
+
11. **DURATION** — seconds (integer or one decimal).
|
|
73
|
+
12. **NEGATIVE** — clichés to reject, load-bearing order top-first.
|
|
74
|
+
Always names: centered framing, symmetric composition, generic
|
|
75
|
+
"cinematic", soap-opera contrast.
|
|
76
|
+
|
|
77
|
+
### Step 2: Self-review
|
|
78
|
+
|
|
79
|
+
1. Live-action / animated classification consistent across blocks?
|
|
80
|
+
2. LENS present with mm (live-action) OR stylistic anchor with
|
|
81
|
+
film+year (animated)?
|
|
82
|
+
3. LIGHTING with a direction?
|
|
83
|
+
4. ACTION names beat counts, not adjectives?
|
|
84
|
+
5. DIALOGUE / AMBIENT SOUND present → the run requires `audio:
|
|
85
|
+
native` adapter OR ffmpeg-mux fallback declared.
|
|
86
|
+
6. NEGATIVE ≥ 4 entries, load-bearing top?
|
|
87
|
+
7. SUBJECT verbatim from `character.json` when a lock exists?
|
|
88
|
+
|
|
89
|
+
Any "no" → revise that block.
|
|
90
|
+
|
|
91
|
+
### Step 3: Validate
|
|
92
|
+
|
|
93
|
+
1. Pipe output through `scripts/ai-video/lib/parse-blueprint.sh` —
|
|
94
|
+
exits 0 and emits valid adapter-contract JSON.
|
|
95
|
+
2. No provider tokens (no aspect / model / duration flags).
|
|
96
|
+
|
|
97
|
+
## Output format
|
|
98
|
+
|
|
99
|
+
1. **`scenes/<id>/prompt.txt`** — 12 labeled blocks, ready for
|
|
100
|
+
`parse-blueprint.sh`.
|
|
101
|
+
2. **`scenes/<id>/blueprint.json`** — parser output, adapter-stdin
|
|
102
|
+
ready.
|
|
103
|
+
3. **`scenes/<id>/review.md`** — one-paragraph rationale per
|
|
104
|
+
non-obvious choice.
|
|
105
|
+
|
|
106
|
+
## Gotcha
|
|
107
|
+
|
|
108
|
+
- The model wants to skip optional DIALOGUE / AMBIENT SOUND blocks
|
|
109
|
+
silently — if they could plausibly belong, emit them; the parser
|
|
110
|
+
treats missing blocks as `null`, not as an error.
|
|
111
|
+
- Live-action without LENS mm fails the parser's strict mode.
|
|
112
|
+
- Animated without a film+year anchor in STYLE drifts on every run.
|
|
113
|
+
- ACTION written as "the character does X dramatically" fails —
|
|
114
|
+
adapters need verbs with beat counts.
|
|
115
|
+
- DIALOGUE forces `audio: native` requirement — flag this to the
|
|
116
|
+
orchestrator so it picks a capable adapter (Veo / Sora).
|
|
117
|
+
|
|
118
|
+
## Do NOT
|
|
119
|
+
|
|
120
|
+
- Do NOT emit provider tokens — that is `motion-choreographer`.
|
|
121
|
+
- Do NOT skip the blueprint parser validation step.
|
|
122
|
+
- Do NOT paraphrase identity tokens when a lock exists.
|
|
123
|
+
- Do NOT mix live-action LENS prescriptions with animated STYLE
|
|
124
|
+
anchors in the same scene — pick one mode.
|
|
125
|
+
|
|
126
|
+
## Policies
|
|
127
|
+
|
|
128
|
+
The 12-block Cinematic Scene Blueprint is the policy choke point — every downstream skill (`motion-choreographer`, `video-director`) inherits whatever the blueprint encodes. Before emitting:
|
|
129
|
+
|
|
130
|
+
- [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — when the SUBJECT block names or visually identifies a real person.
|
|
131
|
+
- [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — when the SUBJECT block is a recognised public figure.
|
|
132
|
+
- [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — when STYLE / ENVIRONMENT references a recognised brand's visual identity.
|
|
133
|
+
- [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — when STYLE anchors to a named living artist or studio as the primary signature.
|
|
134
|
+
- [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed blueprint output carries the AI-generation disclosure downstream.
|
|
135
|
+
|
|
136
|
+
Refuse-and-surface at the blueprint layer; do not push policy questions down to the adapter.
|
|
137
|
+
|
|
@@ -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**,
|
|
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.**
|
|
197
|
-
(`do-competitively`)
|
|
198
|
-
worktree (
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
-
|
|
206
|
-
|
|
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
|
|
|
@@ -0,0 +1,126 @@
|
|
|
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.
|
|
114
|
+
|
|
115
|
+
## Policies
|
|
116
|
+
|
|
117
|
+
11-block cinematic prompt is live-action shape — real-person + brand-impersonation risks highest in cluster. Before emitting:
|
|
118
|
+
|
|
119
|
+
- [`agents/policies/media/likeness.md`](../../../agents/policies/media/likeness.md) — prompt names / visually identifies real person on camera.
|
|
120
|
+
- [`agents/policies/media/public-figures.md`](../../../agents/policies/media/public-figures.md) — subject is recognised public figure.
|
|
121
|
+
- [`agents/policies/media/brand-impersonation.md`](../../../agents/policies/media/brand-impersonation.md) — prompt copies journalism / broadcaster / regulated-industry visual identity.
|
|
122
|
+
- [`agents/policies/media/style.md`](../../../agents/policies/media/style.md) — LIGHT / LENS anchored to named living cinematographer's signature.
|
|
123
|
+
- [`agents/policies/media/disclosure.md`](../../../agents/policies/media/disclosure.md) — every distributed live-action AI clip carries non-removable AI-generation disclosure.
|
|
124
|
+
|
|
125
|
+
Refuse-and-surface at directorial layer; live-action realism amplifies every downstream policy gap.
|
|
126
|
+
|
|
@@ -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.
|
|
42
|
+
agent_config_version: "2.24.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -84,6 +84,22 @@ php artisan test # Tests (or: vendor/bin/phpunit)
|
|
|
84
84
|
|
|
85
85
|
Check `AGENTS.md` or `Makefile` / `Taskfile.yml` for the exact commands.
|
|
86
86
|
|
|
87
|
+
### CI-step gate (when `quality.local_auto_run: false`)
|
|
88
|
+
|
|
89
|
+
Roadmaps **must not** schedule full-pipeline literals (`task ci`,
|
|
90
|
+
`task ci-fast`, `task ci-strict`, `make ci`, `make test`,
|
|
91
|
+
`npm/pnpm run check`, `yarn check`, `composer test`, whole-suite
|
|
92
|
+
`vendor/bin/phpunit`, whole-suite `php artisan test`) as checkbox
|
|
93
|
+
steps when `quality.local_auto_run` is `false` in
|
|
94
|
+
`.agent-settings.yml` — `task lint-roadmap-ci-steps` blocks them.
|
|
95
|
+
Reword as narrow verifications (`vendor/bin/phpstan analyse
|
|
96
|
+
app/Modules/X`, `php artisan test --filter=…`) or mark with
|
|
97
|
+
`<!-- carve-out: new-gate-verification -->` when the step verifies a
|
|
98
|
+
**new** gate this roadmap introduces. At execution,
|
|
99
|
+
`/roadmap:process-*` flips matching steps to `[-]` with reason and
|
|
100
|
+
skips them. Full contract:
|
|
101
|
+
[`roadmap-ci-steps-policy`](../rules/roadmap-ci-steps-policy.md).
|
|
102
|
+
|
|
87
103
|
---
|
|
88
104
|
|
|
89
105
|
## Template
|