@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
|
@@ -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**,
|
|
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
|
|
|
@@ -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.
|
|
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.
|
|
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",
|