wizz-method 2.5.0 → 2.7.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 (43) hide show
  1. package/package.json +1 -1
  2. package/skills-registry.yaml +37 -0
  3. package/src/bmm-skills/4-implementation/wizz-code-review/references/review-economy.md +1 -1
  4. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-03-triage.md +1 -1
  5. package/src/bmm-skills/4-implementation/wizz-quick-dev/references/review-economy.md +1 -1
  6. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-04-review.md +1 -1
  7. package/src/core-skills/_shared/handoff-protocol.md +15 -10
  8. package/src/modules/wizz/README.md +1 -1
  9. package/src/modules/wizz/_shared/despacho-barato.md +1 -1
  10. package/src/modules/wizz/_shared/model-ladder.md +53 -30
  11. package/src/modules/wizz/_shared/token-economy.md +7 -6
  12. package/src/modules/wizz/_shared/video-pipeline.md +29 -4
  13. package/src/modules/wizz/agents/wizz-designer/SKILL.md +1 -1
  14. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +1 -1
  15. package/src/modules/wizz/agents/wizz-social/SKILL.md +6 -3
  16. package/src/modules/wizz/agents/wizz-social/customize.toml +2 -2
  17. package/src/modules/wizz/module.yaml +1 -1
  18. package/src/modules/wizz/subagents/codex/{wizz-exec-haiku.toml → wizz-exec-mechanical.toml} +4 -3
  19. package/src/modules/wizz/subagents/codex/wizz-exec-review.toml +3 -2
  20. package/src/modules/wizz/subagents/codex/{wizz-exec-sonnet.toml → wizz-exec-standard.toml} +5 -3
  21. package/src/modules/wizz/subagents/codex/{wizz-exec-opus.toml → wizz-exec-strong.toml} +7 -5
  22. package/src/modules/wizz/subagents/codex/wizz-exec-ultra.toml +35 -0
  23. package/src/modules/wizz/subagents/gemini/{wizz-exec-haiku.md → wizz-exec-mechanical.md} +6 -4
  24. package/src/modules/wizz/subagents/gemini/wizz-exec-review.md +4 -2
  25. package/src/modules/wizz/subagents/gemini/{wizz-exec-sonnet.md → wizz-exec-standard.md} +7 -4
  26. package/src/modules/wizz/subagents/gemini/{wizz-exec-opus.md → wizz-exec-strong.md} +8 -5
  27. package/src/modules/wizz/subagents/opencode/{wizz-exec-haiku.md → wizz-exec-mechanical.md} +3 -2
  28. package/src/modules/wizz/subagents/opencode/wizz-exec-review.md +2 -1
  29. package/src/modules/wizz/subagents/opencode/{wizz-exec-sonnet.md → wizz-exec-standard.md} +4 -2
  30. package/src/modules/wizz/subagents/opencode/{wizz-exec-opus.md → wizz-exec-strong.md} +5 -3
  31. package/src/modules/wizz/subagents/opencode/wizz-exec-ultra.md +34 -0
  32. package/src/modules/wizz/subagents/spec.yaml +104 -51
  33. package/src/modules/wizz/subagents/{wizz-exec-haiku.md → wizz-exec-mechanical.md} +5 -3
  34. package/src/modules/wizz/subagents/wizz-exec-review.md +4 -1
  35. package/src/modules/wizz/subagents/{wizz-exec-sonnet.md → wizz-exec-standard.md} +7 -3
  36. package/src/modules/wizz/subagents/{wizz-exec-opus.md → wizz-exec-strong.md} +8 -4
  37. package/src/modules/wizz/subagents/wizz-exec-ultra.md +36 -0
  38. package/src/skills-lib/wizz-router/SKILL.md +1 -1
  39. package/src/skills-lib/wizz-router/references/routing-table-flat.md +1 -0
  40. package/tools/hooks/wizz-decision-trace.js +2 -1
  41. package/tools/hooks/wizz-router-enforce.js +2 -1
  42. package/tools/installer/commands/trace-report.js +60 -2
  43. package/tools/installer/ide/_config-driven.js +11 -3
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "wizz-method",
4
- "version": "2.5.0",
4
+ "version": "2.7.0",
5
5
  "description": "Wizz Method: método de agência orientado por IA em PT-BR",
6
6
  "keywords": [
7
7
  "agile",
@@ -164,6 +164,43 @@ areas:
164
164
  # Pin de supply chain (2026-08-23): clone temporário + checkout do SHA
165
165
  # + `skills add` local. Atualizar conscientemente.
166
166
  install: 'd="$(mktemp -d)" && git clone https://github.com/bradautomates/claude-video.git "$d" && git -C "$d" checkout 83da59fa78c3eee9e20f515fe75c438bb5166efd && npx skills add "$d" -g -y --copy && printf "%s\\n" 83da59fa78c3eee9e20f515fe75c438bb5166efd > "$HOME/.claude/skills/watch/.wizz-pin" && rm -rf "$d"'
167
+ - id: get-brolls
168
+ # Versão que o SKILL.md do upstream declara no SHA pinado abaixo. A
169
+ # última tag publicada lá é a v2.3.7; o 2.3.8 só existe como HEAD.
170
+ metadata:
171
+ version: "2.3.8"
172
+ when: "CAPTAR B-roll/insert: acha a fonte LITERAL do que a narração cita (o fato, a pessoa, o produto, a notícia, a tela) em YouTube (yt-dlp, sem API key), Instagram/TikTok (navegador/Playwright, sessão do usuário), Pexels/Pixabay/Wikimedia Commons/NASA ou arquivo local; gera prévia (poster, contact sheet numerado, GIF), monta um Storyboard HTML para REVISÃO HUMANA e entrega o corte com origem/autor/condições de uso registrados. Etapa de CAPTAÇÃO do pipeline de vídeo: enche a timeline de material real antes do corte fino e da montagem. Stock só quando o usuário pedir stock explicitamente — nunca como preenchimento de um beat sem fonte literal."
173
+ not_when:
174
+ - "Analisar/resumir um vídeo que já se tem em mãos: é claude-video."
175
+ - "Cortar/montar footage já captado: é buttercut (corte fino) ou wizz-remotion-best-practices (montagem final)."
176
+ - "Gerar imagem/vídeo por IA: é fal-video. O get-brolls busca material REAL, não sintético."
177
+ - "Desenhar uma tela/cena em HTML: é hyperframes."
178
+ - "Minerar/estudar criativo ou oferta de concorrente (Biblioteca de Anúncios, 'baixa esse anúncio pra eu ver'): é wizz-lowticket-minerador na área ads. O get-brolls capta insert para a SUA edição, com procedência registrada — não é ferramenta de inteligência competitiva, e o fato de saber baixar um Reel não o torna uma."
179
+ rel:
180
+ before: [buttercut, wizz-remotion-best-practices]
181
+ pairs_with: [claude-video]
182
+ # macOS apenas: o upstream declara macOS/Windows (Linux não é testado lá)
183
+ # e o `install` daqui é POSIX. Windows fica fora porque o installer do
184
+ # Wizz não roda nele — quem estiver no Windows segue o README do upstream.
185
+ platform: [darwin]
186
+ # O check confere o SHA fixado, não só a existência da pasta: o bundle é
187
+ # copiado (não clonado), então o pin é gravado num marcador no install.
188
+ check: 'grep -qx 3d2313b0b856594617371697875ccfd59861c693 "$HOME/.claude/skills/get-brolls/.wizz-pin" 2>/dev/null'
189
+ # Pin de supply chain (2026-09-17): clone temporário + checkout do SHA
190
+ # + `skills add` global + o `install.sh` do próprio upstream (cria .venv
191
+ # e .tools DENTRO da skill: yt-dlp fixado, EJS e Playwright CLI). O
192
+ # upstream documenta 2.3.8 mas a última tag publicada é v2.3.7, então o
193
+ # pin é o SHA do HEAD de 2026-09-17 (mesmo caso do apple-design).
194
+ # Atualizar conscientemente. O install.sh aborta sozinho se faltar
195
+ # python3/ffmpeg/node 22+; sem pin gravado, o installer volta a oferecer.
196
+ # Escopo GLOBAL (-g) de propósito: a skill guarda .venv/.tools/.env na
197
+ # própria raiz e recebe o projeto por `--project`, então é instalar uma
198
+ # vez e usar em todos — igual hyperframes e claude-video.
199
+ install: 'd="$(mktemp -d)" && git clone https://github.com/engenheirodevideo/get-brolls.git "$d" && git -C "$d" checkout 3d2313b0b856594617371697875ccfd59861c693 && npx skills add "$d" -g -y --copy && bash "$HOME/.claude/skills/get-brolls/scripts/install.sh" && printf "%s\\n" 3d2313b0b856594617371697875ccfd59861c693 > "$HOME/.claude/skills/get-brolls/.wizz-pin" && rm -rf "$d"'
200
+ # Sem drawtext (libfreetype) o contact sheet sai sem número e timecode e
201
+ # o Storyboard degrada EM SILÊNCIO — por isso o probe olha o filtro, não
202
+ # só o binário do ffmpeg. A venv prova que o install.sh chegou ao fim.
203
+ verify: 'command -v ffmpeg >/dev/null 2>&1 && ffmpeg -hide_banner -filters 2>/dev/null | grep -q " drawtext " && test -x "$HOME/.claude/skills/get-brolls/.venv/bin/python"'
167
204
  - id: buttercut
168
205
  when: "EDITAR vídeo por IA: cortes, selects, cenas, roughcut via XML/FFmpeg. Sugerir quando o pedido for editar/cortar vídeo. Clone-and-run no PROJETO (não é skill add), pesado: Ruby + Python + FFmpeg + WhisperX. AVISOS: ~GB de modelos (WhisperX), build demorado, só Apple Silicon."
169
206
  platform: darwin-arm64
@@ -62,7 +62,7 @@ When the brief names a `review-prompts/` file, that file owns the method and the
62
62
  The Forte tier is defined in `_shared/model-ladder.md`.
63
63
 
64
64
  - **Session runs on the Forte tier:** the session triages, as the triage instructions say. It already holds the context, so a subagent would only re-read it.
65
- - **Any session model other than the Forte tier:** write the collected findings, each with its originating layer `id`, to a uniquely-named temp file and launch one `wizz-exec-opus` subagent. Its brief is: the triage instructions (the path of the step file that holds them), the findings file, `{diff_file}`, `{spec_file}` when present, the paths of any loaded context docs, `{tier}`, `{failed_layers}`, `{layer_status}` (the active/dropped layer ids with drop reasons, so the triager knows which layers actually ran), and — only in workflows that set it (`wizz-code-review`) — `{review_mode}`. The subagent runs the whole pipeline itself: verdicts, the acceptance audit, grouping, and routing into categories. It returns every entry with severity, category and evidence, plus every dismissal with its reason — it never writes to any file; the session writes every log. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, not a new prompt to the user — and carries on per each workflow's own step. In `wizz-code-review`, `decision_needed` entries still get a genuine human confirmation before continuing, exactly as the presentation step already does; a confirmed entry the user rejects there is logged as dismissed with the user's own reason, never forced through. In `wizz-quick-dev`, `intent_gap` still loops back to the human as part of resolving it, and `bad_spec` still loops back automatically — the session's re-check adds no new user prompt for either.
65
+ - **Any session model other than the Forte tier:** write the collected findings, each with its originating layer `id`, to a uniquely-named temp file and launch one `wizz-exec-strong` subagent. Its brief is: the triage instructions (the path of the step file that holds them), the findings file, `{diff_file}`, `{spec_file}` when present, the paths of any loaded context docs, `{tier}`, `{failed_layers}`, `{layer_status}` (the active/dropped layer ids with drop reasons, so the triager knows which layers actually ran), and — only in workflows that set it (`wizz-code-review`) — `{review_mode}`. The subagent runs the whole pipeline itself: verdicts, the acceptance audit, grouping, and routing into categories. It returns every entry with severity, category and evidence, plus every dismissal with its reason — it never writes to any file; the session writes every log. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, not a new prompt to the user — and carries on per each workflow's own step. In `wizz-code-review`, `decision_needed` entries still get a genuine human confirmation before continuing, exactly as the presentation step already does; a confirmed entry the user rejects there is logged as dismissed with the user's own reason, never forced through. In `wizz-quick-dev`, `intent_gap` still loops back to the human as part of resolving it, and `bad_spec` still loops back automatically — the session's re-check adds no new user prompt for either.
66
66
 
67
67
  `{failed_layers}` stores layer `id`s (append ` (partial)` for a partial layer); every check against it compares ids, not names.
68
68
 
@@ -9,7 +9,7 @@
9
9
 
10
10
  ## INSTRUCTIONS
11
11
 
12
- 0. **Decide who triages**, per `references/review-economy.md` section 4. When a `wizz-exec-opus` subagent triages, its brief includes `{layer_status}` so it can tell which layers ran; it runs every instruction of this step through routing (instructions 1-5 below) and returns the result. The session then re-checks the subagent's verdicts and routing against the evidence, confirms `decision_needed` entries with the user, and continues with instruction 6.
12
+ 0. **Decide who triages**, per `references/review-economy.md` section 4. When a `wizz-exec-strong` subagent triages, its brief includes `{layer_status}` so it can tell which layers ran; it runs every instruction of this step through routing (instructions 1-5 below) and returns the result. The session then re-checks the subagent's verdicts and routing against the evidence, confirms `decision_needed` entries with the user, and continues with instruction 6.
13
13
 
14
14
  1. **Normalize** findings from all layers into a unified list where each finding has:
15
15
  - `id` -- sequential integer
@@ -62,7 +62,7 @@ When the brief names a `review-prompts/` file, that file owns the method and the
62
62
  The Forte tier is defined in `_shared/model-ladder.md`.
63
63
 
64
64
  - **Session runs on the Forte tier:** the session triages, as the triage instructions say. It already holds the context, so a subagent would only re-read it.
65
- - **Any session model other than the Forte tier:** write the collected findings, each with its originating layer `id`, to a uniquely-named temp file and launch one `wizz-exec-opus` subagent. Its brief is: the triage instructions (the path of the step file that holds them), the findings file, `{diff_file}`, `{spec_file}` when present, the paths of any loaded context docs, `{tier}`, `{failed_layers}`, `{layer_status}` (the active/dropped layer ids with drop reasons, so the triager knows which layers actually ran), and — only in workflows that set it (`wizz-code-review`) — `{review_mode}`. The subagent runs the whole pipeline itself: verdicts, the acceptance audit, grouping, and routing into categories. It returns every entry with severity, category and evidence, plus every dismissal with its reason — it never writes to any file; the session writes every log. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, not a new prompt to the user — and carries on per each workflow's own step. In `wizz-code-review`, `decision_needed` entries still get a genuine human confirmation before continuing, exactly as the presentation step already does; a confirmed entry the user rejects there is logged as dismissed with the user's own reason, never forced through. In `wizz-quick-dev`, `intent_gap` still loops back to the human as part of resolving it, and `bad_spec` still loops back automatically — the session's re-check adds no new user prompt for either.
65
+ - **Any session model other than the Forte tier:** write the collected findings, each with its originating layer `id`, to a uniquely-named temp file and launch one `wizz-exec-strong` subagent. Its brief is: the triage instructions (the path of the step file that holds them), the findings file, `{diff_file}`, `{spec_file}` when present, the paths of any loaded context docs, `{tier}`, `{failed_layers}`, `{layer_status}` (the active/dropped layer ids with drop reasons, so the triager knows which layers actually ran), and — only in workflows that set it (`wizz-code-review`) — `{review_mode}`. The subagent runs the whole pipeline itself: verdicts, the acceptance audit, grouping, and routing into categories. It returns every entry with severity, category and evidence, plus every dismissal with its reason — it never writes to any file; the session writes every log. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, not a new prompt to the user — and carries on per each workflow's own step. In `wizz-code-review`, `decision_needed` entries still get a genuine human confirmation before continuing, exactly as the presentation step already does; a confirmed entry the user rejects there is logged as dismissed with the user's own reason, never forced through. In `wizz-quick-dev`, `intent_gap` still loops back to the human as part of resolving it, and `bad_spec` still loops back automatically — the session's re-check adds no new user prompt for either.
66
66
 
67
67
  `{failed_layers}` stores layer `id`s (append ` (partial)` for a partial layer); every check against it compares ids, not names.
68
68
 
@@ -62,7 +62,7 @@ This section's only file changes are temp diff files (`{diff_file}` and `{clean_
62
62
 
63
63
  ### Classify
64
64
 
65
- Decide who triages, per `./references/review-economy.md` § 4. When the session runs on the Forte tier, it triages directly, following the instructions below. Otherwise, write the collected findings — each tagged with its originating layer `id` — to a uniquely-named temp file and launch one `wizz-exec-opus` subagent. Its brief is: these Classify instructions (Classify items 1–4 below — the acceptance audit, verdicts, grouping, and routing into intent_gap/bad_spec/patch/defer, including the dismissal reasons), the findings file, `{diff_file}`, `{spec_file}` (when present), the paths of any context docs loaded from `{spec_file}`'s `context:` frontmatter list in step-03, `{tier}`, `{failed_layers}`, and `{layer_status}` (so the triager can tell which layers actually ran) — quick-dev never sets `{review_mode}`, so the brief never carries it. The subagent never writes to any file, including `{spec_file}` — it returns every entry with severity, category and evidence, plus every dismissal with its reason. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, it adds no new prompt to the user — writes the `## Review Triage Log`, and runs Classify item 5 (loopbacks, patches, defers) itself exactly as when the session triages directly.
65
+ Decide who triages, per `./references/review-economy.md` § 4. When the session runs on the Forte tier, it triages directly, following the instructions below. Otherwise, write the collected findings — each tagged with its originating layer `id` — to a uniquely-named temp file and launch one `wizz-exec-strong` subagent. Its brief is: these Classify instructions (Classify items 1–4 below — the acceptance audit, verdicts, grouping, and routing into intent_gap/bad_spec/patch/defer, including the dismissal reasons), the findings file, `{diff_file}`, `{spec_file}` (when present), the paths of any context docs loaded from `{spec_file}`'s `context:` frontmatter list in step-03, `{tier}`, `{failed_layers}`, and `{layer_status}` (so the triager can tell which layers actually ran) — quick-dev never sets `{review_mode}`, so the brief never carries it. The subagent never writes to any file, including `{spec_file}` — it returns every entry with severity, category and evidence, plus every dismissal with its reason. The session then re-checks the subagent's own verdicts and routing against the evidence it returned — this is the session validating a delegated triager's work, it adds no new prompt to the user — writes the `## Review Triage Log`, and runs Classify item 5 (loopbacks, patches, defers) itself exactly as when the session triages directly.
66
66
 
67
67
  1. On every tier — this workflow has no `acceptance-auditor` layer — run the acceptance audit from `./references/review-economy.md` § 4 against `{spec_file}`: check the diff against the spec's acceptance criteria and constraints, and add a finding for each violation, deviation or missing behavior, with source `triage-acceptance`, to the unified list, before verdicts. It gets a verdict like any other finding, per Classify item 2.
68
68
 
@@ -23,20 +23,25 @@ and pass along only the skill's entrypoint and the references actually needed
23
23
  The receiver first loads the full SKILL.md by invoking the skill;
24
24
  then reads only the references the task requires. Skills loaded
25
25
  by the lead are not automatically inherited by a subagent.
26
- - model_hint (optional): a rung on the ladder, not a raw model. Values:
27
- `haiku | sonnet | opus | review`. The receiver dispatches `wizz-exec-<hint>`
28
- (native in Claude Code, Codex, OpenCode and Gemini CLI). Escalation: at
29
- most 1 rung up if the executor returns ambiguity or tests
30
- fail twice. `opus` is only a real rung when the delegating session runs
31
- above Opus (Fable); in an Opus session the receiver jumps straight to `review`
32
- (full detail in `_shared/model-ladder.md`, in the wizz module).
33
- Optional field: the handoff works fine without it.
26
+ - model_hint (optional): a tier on the ladder, not a raw model. Values:
27
+ `mechanical | standard | strong | ultra | review`. Legacy values `haiku`,
28
+ `sonnet`, `opus` map to `mechanical`, `standard`, `strong` respectively.
29
+ The receiver dispatches `wizz-exec-<hint>` (native in Claude Code, Codex
30
+ and OpenCode). Escalation: `strong` is dispatched when the delegating
31
+ session's own tier isn't enough; `ultra` is only valid after a Strong-tier
32
+ `ESCALAR` — from `wizz-exec-strong`, or from the session itself when it
33
+ absorbed strong's work and hit the same signal; strong never dispatches
34
+ anything itself. If `ultra` also returns `ESCALAR`, the work goes back to
35
+ the user (full detail in `_shared/model-ladder.md`, in the wizz module).
36
+ On Gemini CLI there is no `wizz-exec-ultra`: an `ultra` hint goes back to
37
+ the user instead of dispatching. Optional field: the handoff works fine
38
+ without it.
34
39
  - max_calls (optional): a cap on tool calls the executor can spend
35
40
  on this brief, as an integer. The receiver dispatches
36
41
  `wizz-exec-<hint>` with that cap declared in the brief. On hitting the cap,
37
42
  the executor STOPS, delivers the partial work with explicit pending items, and does not
38
43
  escalate on its own: the delegator decides the next step (reissue with a
39
- higher cap, escalate one rung, or absorb the rest). An instructional rule, just
44
+ higher cap, escalate one tier, or absorb the rest). An instructional rule, just
40
45
  like the anti-loop one: nothing programmatic counts the calls. Without `max_calls` the
41
46
  handoff works fine.
42
47
  - needs planning (optional): a yes/no verdict on the planning factor
@@ -55,7 +60,7 @@ and pass along only the skill's entrypoint and the references actually needed
55
60
  approved; checkout still needs finishing.
56
61
  decisions already made in the chain: scope is mobile-first only.
57
62
  relevant section of the skill: page-cro/references/checkout-flow.md
58
- model_hint: sonnet
63
+ model_hint: standard
59
64
  max_calls: 40
60
65
 
61
66
  ## Anti-loop rule
@@ -19,7 +19,7 @@ The dev/product roles reuse the WIZZ agents (Mary, John, Winston, Amelia, Sally,
19
19
  ## Wizz Layer (on every agent)
20
20
 
21
21
  - **Closing** (`_shared/encerramento.md`): ✅/➡️/🎯 block at the end.
22
- - **Token economy** (`_shared/token-economy.md`): cerebro → grep before reading files; RTK rewrites shell commands; mechanical work becomes a fact-line at every agent's activation (2+ `wizz-exec-haiku`/`wizz-exec-sonnet` subagents in parallel, never in the main session); the session's model is the boss (orchestrates and decides, doesn't execute): `wizz-exec-opus` is the default destination for hard work in a Fable session and `wizz-exec-review` always runs pinned to the Strong tier, never inheriting the session; full ladder in `_shared/model-ladder.md`.
22
+ - **Token economy** (`_shared/token-economy.md`): cerebro → grep before reading files; RTK rewrites shell commands; mechanical work becomes a fact-line at every agent's activation (work that fits 3 files or fewer is 1 subagent or the session itself; larger partitionable work fans out `wizz-exec-mechanical`/`wizz-exec-standard` subagents 1 per file/module, up to 4 concurrent / 10 per request); the session's model is the boss (orchestrates and decides, doesn't execute): hard work goes to `wizz-exec-strong`, which escalates to `wizz-exec-ultra` via the session on `ESCALAR`, and `wizz-exec-review` always runs pinned to the Strong tier, never inheriting the session; full ladder in `_shared/model-ladder.md`.
23
23
  - **Cerebro** (`_shared/cerebro.md`): light auto-load on activation, reminder to save at the end.
24
24
  - **Language**: chosen in `wizz-init` (default Português (BR)), recorded in `_wizz/bmm/config.yaml`.
25
25
  - **Chaining**: automatic. The maestro announces the sequence and it runs in order to the end; it only pauses on a business decision or irreversible risk.
@@ -6,4 +6,4 @@
6
6
  # once. Don't copy this text into another toml: reference it via `include`.
7
7
  # ---
8
8
 
9
- Mechanical work (scanning, lookup, repetitive diff, an already-specified change): don't run it in the session; dispatch 2+ wizz-exec-haiku/wizz-exec-sonnet subagents in parallel, one per file/module. The session's model is the boss: it orchestrates and decides, it doesn't execute. Hard work goes to wizz-exec-opus when the session runs above Opus (Fable); in an Opus session the boss absorbs that rung. Diff review always goes to wizz-exec-review (pinned to opus, never inherits the session). Tell the user the rung and quantity of each dispatch. Full ladder in `_shared/model-ladder.md` and the rule in `_shared/token-economy.md` of the wizz module.
9
+ Mechanical work (scanning, lookup, repetitive diff, an already-specified change): don't run it in the session when it's large; dispatch wizz-exec-mechanical/wizz-exec-standard subagents, partitioned one per file/module, up to 4 concurrent. The session's model is the boss: it does common work itself, dispatches, and decides with the user. Hard work escalates to wizz-exec-strong when the session's own tier isn't enough (same error twice, cause unclear, or architecture/schema/auth/payments/3+ modules); strong never dispatches, it returns ESCALAR to the session, which then dispatches wizz-exec-ultra with strong's findings. Diff review always goes to wizz-exec-review (pinned to the Strong tier, never inherits the session). Tell the user the tier and quantity of each dispatch. Full ladder in `_shared/model-ladder.md` and the rule in `_shared/token-economy.md` of the wizz module.
@@ -1,39 +1,62 @@
1
1
  # Model Ladder
2
2
 
3
- The names `wizz-exec-haiku`/`wizz-exec-sonnet`/`wizz-exec-opus` are RUNG names, not the underlying model: on other platforms the model behind them changes, but the rung name stays.
3
+ The names `wizz-exec-mechanical`/`wizz-exec-standard`/`wizz-exec-strong`/`wizz-exec-ultra` are TIER names, not the underlying model: on other platforms the model behind them changes, but the tier name stays.
4
4
 
5
- ## The boss is the session's model
5
+ ## The recommended session (the boss)
6
6
 
7
- The main session's model is the boss: it orchestrates, arbitrates conflict between executor and reviewer, and decides architecture and product. The boss doesn't execute; it delegates to the rungs below it. Who the boss is changes with the session's `/model`, and what changes along with it is only WHICH rungs sit below it:
7
+ The recommended session model is the Standard tier (Sonnet 5 / gpt-5.6-terra / claude-sonnet-5 / gemini-3.5-flash). The boss does common work itself — commands, questions, implementation with a spec — dispatches subagents for isolation or parallel work, arbitrates conflict between executor and reviewer, and takes architecture/product decisions WITH the user.
8
8
 
9
- | Session (boss) | Rungs below the boss | Where hard work lands |
10
- |---|---|---|
11
- | Fable / Mythos (above Opus) | haiku, sonnet, opus, review | `wizz-exec-opus` |
12
- | Opus | haiku, sonnet, review | the boss itself (it's the same model as the Strong rung, already with context loaded) |
13
- | Sonnet or below | haiku, review | the boss itself; review stays pinned to the Strong rung (reviews hard even in a cheap session) |
9
+ A session running above Standard (Opus, Fable, Mythos...) absorbs every tier at or below its own model: an Opus session does Strong work itself, and dispatches `wizz-exec-ultra` only after that attempt returns `ESCALAR` per the escalation signals below. A session on the Ultra model (Fable) absorbs Ultra too: it takes strong's `ESCALAR` itself and never dispatches `wizz-exec-ultra`. Review is the exception — it's NEVER absorbed: it always runs on `wizz-exec-review`, pinned to the Strong tier, so in a Fable session review moves off the boss and onto Opus.
14
10
 
15
- How to know who the boss is in Claude Code: the system prompt states the session's model ("You are powered by the model named ..."). Fable and Mythos sit above Opus.
11
+ How to know who the boss is in Claude Code: the system prompt states the session's model ("You are powered by the model named ..."). Fable and Mythos sit above Opus. The same logic applies on every platform, swapping in the names from the table below.
16
12
 
17
- The same logic applies on every platform, swapping in the names from the table below. In Codex: a session on a model above gpt-5.6 (e.g., astra) → `wizz-exec-opus` (gpt-5.6, effort high) is the default destination for hard work and `wizz-exec-review` runs on it; a session already on gpt-5.6 → the boss absorbs the Strong rung. In OpenCode and Gemini CLI, same thing with claude-opus-5 and gemini-3-pro-preview.
13
+ ## Tier table
18
14
 
19
- ## Rung table
20
-
21
- | Rung | Subagent | Use | Claude Code | Codex | OpenCode | Gemini CLI |
15
+ | Tier | Subagent | Use | Claude Code | Codex | OpenCode | Gemini CLI |
22
16
  |---|---|---|---|---|---|---|
23
- | Mechanical | `wizz-exec-haiku` | scanning, rename, repetitive diff, 100% specified change | haiku | gpt-5.6-luna (effort low) | anthropic/claude-haiku-4-5 | gemini-3-flash-preview |
24
- | Standard | `wizz-exec-sonnet` | small/medium defined feature, bug with known cause, tests | sonnet | gpt-5.6-terra (effort medium) | anthropic/claude-sonnet-5 | gemini-3-flash-preview |
25
- | Strong | `wizz-exec-opus` | bug with unclear cause, refactor spanning modules, local technical decision | opus | gpt-5.6 (effort high) | anthropic/claude-opus-5 | gemini-3-pro-preview |
26
- | Review | `wizz-exec-review` | review of diff produced by any rung; pinned to the Strong model, never inherits the session | opus | gpt-5.6 (effort high) | anthropic/claude-opus-5 | gemini-3-pro-preview |
27
-
28
- ## Rules
29
-
30
- 1. Initial dispatch: the lowest rung that qualifies.
31
- 2. Automatic escalation by evidence: if the executor returned ambiguity OR the tests failed twice on the same brief, reissue the SAME brief 1 rung up. Maximum 1 escalation; after that the work returns to the boss. In a Fable session, Sonnet escalates to `wizz-exec-opus`; in an Opus session, Sonnet escalates straight to the boss.
32
- 3. The Strong rung follows the boss: in a session above Opus (Fable, Mythos), `wizz-exec-opus` is the DEFAULT destination for a bug with unclear cause, a refactor spanning modules, and a local technical decision; the boss doesn't do that work in its own session. In an Opus session or below, the Strong rung coincides with the boss or sits above it: skip from Standard straight to `wizz-exec-review` or to the boss (pinning opus in an opus session duplicates cost for no gain).
33
- 4. Implement cheap, review strong: a diff produced by `wizz-exec-haiku`/`wizz-exec-sonnet`/`wizz-exec-opus` goes through `wizz-exec-review` before integrating. The reviewer runs pinned to the platform's Strong rung, not the session's model: in a Fable session, review leaves Fable and goes to Opus; in an Opus session nothing changes. Conflict between executor and reviewer escalates to the boss to decide.
34
- - Review workflows (`wizz-code-review`, `wizz-quick-dev`) stay pinned to the Strong rung, but the number of layers scales with the size of the diff (1, 2, or up to 4), git pathspecs discard lockfiles and similar noise before counting lines, the session itself judges whether the change is critical, and triage stays on the Strong rung (the session itself if it is the Strong rung; otherwise 1 `wizz-exec-opus`); see `wizz-code-review/references/review-economy.md`.
35
- 5. An architecture or product decision never goes down the ladder: it stays with the boss or the user.
36
- 6. Transparency: every dispatch states in the text to the user the rung and quantity ("3 × Sonnet", "1 × Opus for review"). Never just "executors".
37
- 7. No cap on quantity: dispatch as many subagents as the work calls for, one per independent unit (file, module, verification front). The minimum is 2 in parallel; there's no maximum. What limits it is the partition (two agents never edit the same file), not a number.
38
-
39
- Final note: the models in the table were checked on 2026-08-20 against each platform's official docs. If your plan uses other models, edit the installed files (`.claude/agents/`, `.codex/agents/`, `.opencode/agents/`, `.gemini/agents/`).
17
+ | Mechanical | `wizz-exec-mechanical` | scanning, rename, repetitive diff, 100% specified change | haiku (maxTurns 50, no effort field) | gpt-5.6-luna, effort low | anthropic/claude-haiku-4-5 | gemini-3.1-flash-lite (max_turns 50, no effort field) |
18
+ | Standard | `wizz-exec-standard` | small/medium defined feature, bug with known cause, tests | sonnet, effort medium (maxTurns 80) | gpt-5.6-terra, effort medium | anthropic/claude-sonnet-5 | gemini-3.5-flash (max_turns 80) |
19
+ | Strong | `wizz-exec-strong` | bug with unclear cause after one investigation cycle, refactor spanning modules, schema/auth/payment changes, local technical decision | opus, effort high (maxTurns 120) | gpt-5.6-sol, effort high | anthropic/claude-opus-5 | gemini-3.1-pro-preview (max_turns 120) |
20
+ | Ultra | `wizz-exec-ultra` | ultra-hard work the Strong tier returned `ESCALAR` on, plus its findings | fable, effort xhigh (maxTurns 150) | gpt-6-astra, effort xhigh | anthropic/claude-fable-5-1 | no ultra tier on this platform |
21
+ | Review | `wizz-exec-review` | review of a diff produced by any tier; pinned to Strong, never inherits the session | opus, effort high (maxTurns 60) | gpt-5.6-sol, effort high | anthropic/claude-opus-5 | gemini-3.1-pro-preview (max_turns 60) |
22
+
23
+ OpenCode gets the model only: its per-agent effort field isn't documented, and it has no per-agent turn cap field either. Claude Code and Gemini CLI enforce turn caps natively (`maxTurns` / `max_turns`); Codex and OpenCode have no per-agent turn cap field, so briefs to them should always carry `max_calls`.
24
+
25
+ ## Escalation
26
+
27
+ - Escalate to `wizz-exec-strong` when the session's own tier isn't enough: the same error comes back twice, the cause is still unknown after one investigation cycle, or the change touches architecture, schema, auth, payments, or 3+ modules. If the work is clearly hard from the start, dispatch strong directly — no need to fail first.
28
+ - If `wizz-exec-mechanical` or `wizz-exec-standard` returns `ESCALAR`, the session either finishes the work itself (if its own tier is above the executor's) or dispatches `wizz-exec-strong` with the findings.
29
+ - If the work turns out to be ultra hard, strong stops and returns `ESCALAR` with what it found and what it ruled out. Ultra is dispatched only after this ESCALAR: from `wizz-exec-strong`, or from the session itself when the session runs on the Strong model (Opus) and absorbed that work. A session on the Ultra model (Fable) absorbs ultra too: it takes strong's `ESCALAR` itself and never dispatches `wizz-exec-ultra`.
30
+ - If ultra also returns `ESCALAR`, the work goes back to the user with the exact question — there's no tier above ultra.
31
+ - Gemini CLI has no ultra model: on that platform, strong's `ESCALAR` goes straight to the user.
32
+
33
+ ## No nesting
34
+
35
+ A subagent never dispatches another subagent — Codex and Gemini CLI don't allow it, and Claude Code follows the same rule. All dispatch goes through the session (the boss); strong never dispatches ultra itself.
36
+
37
+ ## Decisions stay with the user
38
+
39
+ Strong and ultra never take architecture or product decisions: they return options with a recommendation, and the user decides. Local technical decisions (abstraction naming, a module's internal structure) are theirs to make.
40
+
41
+ ## Implement cheap, review strong
42
+
43
+ A diff produced by mechanical, standard, strong, or ultra goes through `wizz-exec-review` before integrating. The reviewer runs pinned to the Strong tier, not the session's model: in a Fable session, review leaves Fable and goes to Opus; in an Opus session nothing changes. Conflict between executor and reviewer escalates to the boss to decide.
44
+
45
+ Review workflows (`wizz-code-review`, `wizz-quick-dev`) stay pinned to the Strong tier, but the number of layers scales with the size of the diff (1, 2, or up to 4); see `wizz-code-review/references/review-economy.md`.
46
+
47
+ ## Fan-out cap
48
+
49
+ - Work that fits in 3 files or fewer: 1 subagent, or the session itself.
50
+ - Parallel instances only when the work is partitionable and each unit justifies the ~50k-token fixed context every subagent starts with.
51
+ - Default cap: 4 concurrent, 10 per request. Going past 10 dispatches in one request, or past 4 concurrent, requires asking the user first. Never two on the same file.
52
+ - "Large" mechanical work is more than 3 files, or a scan across a directory — it still doesn't run in the session. A small mechanical change can run in the session.
53
+
54
+ ## Transparency
55
+
56
+ Every dispatch states the tier and quantity in the text to the user ("1 × strong", "3 × mechanical"). Never just "executors".
57
+
58
+ ## max_calls
59
+
60
+ A brief can carry `max_calls` (see `handoff-protocol.md`): a tool-call ceiling. An executor that hits the cap stops and returns partial work with explicit pending items; it never escalates on its own.
61
+
62
+ Final note: the models in the table were checked on 2026-09-16 against each platform's official docs. The table mirrors `src/modules/wizz/subagents/spec.yaml` (the generated subagent files come from it); when the spec changes, update this table and `docs/reference/agents.md` by hand.
@@ -34,16 +34,17 @@ When the task requires scanning many files, launch an Explore subagent and keep
34
34
 
35
35
  ## Cheap dispatch (rule, not a suggestion)
36
36
 
37
- Mechanical work NEVER runs in the main session. This includes: scanning files, lookup, repetitive diff, an already-100%-specified change. Always dispatch 2+ subagents in parallel, partitioned by file/module (never two on the same file), with an explicit model:
37
+ Mechanical work NEVER runs in the main session when it's large (more than 3 files, or a scan across a directory) — a tiny mechanical change can. This includes: scanning files, lookup, repetitive diff, an already-100%-specified change. Fan-out cap: work that fits in 3 files or fewer is 1 subagent or the session itself; parallel instances only when the work is partitionable and each unit justifies the fixed context every subagent starts with — up to 4 concurrent, 10 per request, never two on the same file:
38
38
 
39
- - **`wizz-exec-haiku`**: scanning, lookup, renaming, mechanical diff, an already-100%-specified change. Zero ambiguity.
40
- - **`wizz-exec-sonnet`**: day-to-day implementation, bug with an already-known root cause, multi-file edits, tests.
41
- - **`wizz-exec-opus`**: bug with unclear cause, refactor spanning modules, local technical decision. Default destination for this work when the session runs above Opus (Fable); in an Opus session the boss absorbs the rung and skips to review.
42
- - **`wizz-exec-review`** (pinned to the Strong rung, `opus` in Claude Code): review of the diff produced by the rungs above before integrating. Doesn't inherit the session: in a Fable session, review goes to Opus. The number of subagents scales with the size of the diff, see `wizz-code-review/references/review-economy.md`.
39
+ - **`wizz-exec-mechanical`**: scanning, lookup, renaming, mechanical diff, an already-100%-specified change. Zero ambiguity.
40
+ - **`wizz-exec-standard`**: day-to-day implementation, bug with an already-known root cause, multi-file edits, tests. Same tier as the recommended session model.
41
+ - **`wizz-exec-strong`**: bug with unclear cause after one investigation cycle, refactor spanning modules, schema/auth/payment changes, local technical decision. The session dispatches it when its own tier isn't enough; strong never dispatches anything itself — if the work is ultra hard it returns `ESCALAR` with its findings.
42
+ - **`wizz-exec-ultra`**: only after a Strong-tier `ESCALAR` (from `wizz-exec-strong`, or from the session itself when it runs on the Strong model); a session on the Ultra model absorbs it and never dispatches it. Dispatched by the session with the same brief plus strong's findings. If ultra also returns `ESCALAR`, the work goes back to the user. No ultra model on Gemini CLI.
43
+ - **`wizz-exec-review`** (pinned to the Strong tier, `opus` in Claude Code): review of the diff produced by any tier above before integrating. Doesn't inherit the session: in a Fable session, review goes to Opus. The number of subagents scales with the size of the diff, see `wizz-code-review/references/review-economy.md`.
43
44
 
44
45
  Every dispatch can carry `max_calls` (see handoff-protocol.md): an executor that hits the cap returns partial work, never escalates on its own.
45
46
 
46
- Escalation: if the executor returned ambiguity or the tests failed twice on the same brief, reissue 1 rung up. Maximum 1 escalation per brief. The session's model is the boss: it orchestrates, arbitrates, and decides; it doesn't execute. Every dispatch tells the user the rung and quantity. No cap on quantity: as many as the work calls for, one per independent unit. Full detail, per-platform table, and rules 1-7: `_shared/model-ladder.md`.
47
+ No nesting: a subagent never dispatches another subagent; all dispatch goes through the session. Architecture and product decisions never go to strong or ultra: they return options with a recommendation, the user decides. The session's model is the boss: it orchestrates, arbitrates, and decides; a session above Standard absorbs every tier at or below its own model (review excepted — always pinned to Strong). Every dispatch tells the user the tier and quantity. Full detail, per-platform table, and rules: `_shared/model-ladder.md`.
47
48
 
48
49
  Diff review can go to `wizz-exec-review`; architecture and product decisions stay with the main session's model (this is already in the review rules of wizz-quick-dev and wizz-code-review; it doesn't change).
49
50
 
@@ -22,6 +22,7 @@
22
22
  | Assemble the film: sequence of scenes + narration + SFX + captions + frame timing | **Remotion** (skill `wizz-remotion-best-practices`) |
23
23
  | Word-by-word timestamps of the TTS narration (sync captions/cuts/animation) | `ctc-align` |
24
24
  | Narration / voice / TTS / voice cloning | `voicebox` |
25
+ | **Source B-roll / inserts: find real footage of what the script names** | `get-brolls` (darwin) |
25
26
  | Edit/cut recorded footage (cuts, selects, roughcut) | `buttercut` (darwin-arm64 only) |
26
27
  | Analyze an existing reference video (frames + transcription) | `claude-video` |
27
28
  | AI-generated video ad (Sora/Veo/Kling) + publish to Meta | `arcads` (ads area) |
@@ -34,10 +35,22 @@
34
35
  (single source of timing; replaces Whisper and manual estimation).
35
36
  4. **Screens** — `hyperframes` draws each visual scene, SILENT, isolated
36
37
  (one composition per scene avoids CSS leaking between screens).
37
- 5. **Assembly** — **Remotion** joins the exported scenes, adds audio, SFX, and
38
- captions at the ctc-align timestamps, with frame precision.
39
- 6. **Fine cut** (if there's recorded footage) — `buttercut`.
40
- 7. **Publishing/distribution** — social/ads area.
38
+ 5. **B-roll / inserts** — `get-brolls` sources the REAL footage the script names
39
+ (the fact, the person, the product, the news item, the screen), builds previews
40
+ and a Storyboard, waits for the human to approve, and only then delivers the cut
41
+ with its provenance recorded. Runs in parallel with steps 2–4: it depends on the
42
+ script, not on the voice. **This step has a human gate — the agent never
43
+ self-approves.**
44
+ 6. **Assembly** — **Remotion** joins the exported scenes and the approved B-roll,
45
+ adds audio, SFX, and captions at the ctc-align timestamps, with frame precision.
46
+ 7. **Fine cut** (if there's recorded footage) — `buttercut`.
47
+ 8. **Publishing/distribution** — social/ads area.
48
+
49
+ **Screens vs. B-roll — they are not interchangeable.** `hyperframes` invents a
50
+ visual (a mockup, a chart, a title); `get-brolls` finds the real thing that the
51
+ narration cites. A script that says "Nvidia's CEO announced" wants the actual
52
+ footage, not a drawn card with his name on it. Reach for `hyperframes` when
53
+ there is nothing real to show; reach for `get-brolls` when there is.
41
54
 
42
55
  ## Anti-patterns (don't do this)
43
56
 
@@ -46,3 +59,15 @@
46
59
  isolation between them.
47
60
  - Don't migrate a working Remotion composition to HyperFrames "to standardize":
48
61
  the pipeline direction is screens in HyperFrames, film in Remotion.
62
+ - Don't fill a beat with generic stock just to hit a clip count. `get-brolls`
63
+ searches for the literal source first; stock (Pexels/Pixabay) only enters when
64
+ the user explicitly asks for stock.
65
+ - Don't approve your own B-roll. `get-brolls approve` records a decision a human
66
+ already made; the agent serves the Storyboard and waits. Changing the clip's
67
+ in/out range or its context invalidates an approval that was already given.
68
+ - Don't describe frames you didn't look at. The contact sheet exists to be opened
69
+ and read before the clip goes into the cut.
70
+ - Don't publish signed URLs or the private `_video.conf`/`_audio.conf` pairs that
71
+ the Instagram route writes, and don't invent a licence: `permit --evidence`
72
+ records the real terms. Responsibility for the terms of use sits with whoever
73
+ produces the video; the skill answers for fidelity and for the provenance record.
@@ -25,7 +25,7 @@ You are Wizz's Designer. It creates high-level interfaces and landing pages, sho
25
25
 
26
26
  ## How I work (bridge to global skills)
27
27
 
28
- > **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`designer`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/designer.yaml` (already comes as the full `areas.designer` block — skills/mcps/clis/references); if it's missing (old install), fall back to the monolith in order `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml` and find the `areas.designer` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), also read `{project-root}/_wizz/_config/registry/_shared.yaml`. Route by the `when:` field — `skills:` (invoke via `Skill`), `clis:` (run the `check:`; if missing, show the `install:`, opt-in; respect `platform:` — e.g. `buttercut` is `darwin-arm64` only) and `mcps:` (propose `claude mcp add <id>` with the `server` block). **Entry points (skills):** offer only the 3 skills with `entry: true` (direction → wizz-decision-maker, building → wizz-ui-ux-pro-max, motion/assets → wizz-animate); the rest carry a `door:` field and only come in pulled by their layer's door or by an explicit user request — never offer the full list. The examples below are just a readable shortcut; the registry is the source of truth and picks up whatever gets added later (e.g. video tools: hyperframes, claude-video, buttercut, voicebox, ctc-align). **Video:** before choosing a tool, apply `_shared/video-pipeline.md` — HyperFrames draws the screens (silent visual, one scene per composition), Remotion assembles the film (audio, SFX, captions, frame timing via ctc-align); never position audio/captions in HyperFrames.
28
+ > **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`designer`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/designer.yaml` (already comes as the full `areas.designer` block — skills/mcps/clis/references); if it's missing (old install), fall back to the monolith in order `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml` and find the `areas.designer` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), also read `{project-root}/_wizz/_config/registry/_shared.yaml`. Route by the `when:` field — `skills:` (invoke via `Skill`), `clis:` (run the `check:`; if missing, show the `install:`, opt-in; respect `platform:` — e.g. `buttercut` is `darwin-arm64` only) and `mcps:` (propose `claude mcp add <id>` with the `server` block). **Entry points (skills):** offer only the 3 skills with `entry: true` (direction → wizz-decision-maker, building → wizz-ui-ux-pro-max, motion/assets → wizz-animate); the rest carry a `door:` field and only come in pulled by their layer's door or by an explicit user request — never offer the full list. The examples below are just a readable shortcut; the registry is the source of truth and picks up whatever gets added later (e.g. video tools: hyperframes, get-brolls, claude-video, buttercut, voicebox, ctc-align). **Video:** before choosing a tool, apply `_shared/video-pipeline.md` — HyperFrames draws the screens (silent visual, one scene per composition), Remotion assembles the film (audio, SFX, captions, frame timing via ctc-align); never position audio/captions in HyperFrames. **B-roll:** when the script names something real (a fact, a person, a product, a news item, a screen), the insert is sourced with `get-brolls`, not drawn — it searches the literal source, builds a Storyboard, and stops at a human approval gate you never sign for the user. Stock only enters if the user asks for stock.
29
29
 
30
30
  For every task, **go through the right door via the `Skill` tool** and bring the result in plain language:
31
31
  - Decide BEFORE building (brief, visual direction, motion/3D path) → `wizz-decision-maker` (pulls in wizz-taste-skill, wizz-motion-3d-director)
@@ -76,7 +76,7 @@ The Diretor (`wizz-router`) has already done the triage and handed it to you bec
76
76
  - `areas:` — `agent` (must match the menu's) and `skills:` (each with an `id` + short `when`). Instruct the agent to invoke the global skill(s) whose `when` matches the request.
77
77
  - `utility:` — cross-cutting skills (find-skills, enhance-prompt, wizz-router). Offer when it fits.
78
78
  - `mcps:` (per area) and `mcp_utility:` (cross-cutting) — MCP servers the area uses to actually ACT (e.g. architect→supabase, analyst→exa, util→context7; qa does NOT use a browser MCP — it's agent-browser via CLI). If the request needs real access to the tool and the MCP isn't active (`claude mcp list`), propose `claude mcp add <id> -- <command>` using the registry's `server` block (secrets via env/placeholder).
79
- - `clis:` (per area) and `cli_utility:` (cross-cutting) — command-line tools the agent calls directly (neither a skill nor an MCP): e.g. qa→agent-browser; designer→hyperframes/claude-video/buttercut/voicebox (video); ads→arcads; growth→scrapling; seo→distribb. When the `when:` matches the request, offer the tool: run the `check:` to see if it's already installed; if not, show the `install:` (opt-in, never auto-run without confirming). Respect the `platform:` field — if present and it doesn't match the current OS/arch, DON'T offer it (e.g., `buttercut` is `darwin-arm64`, Apple Silicon only). Clone-and-run tools (buttercut/voicebox/arcads) install into the project; warn about heavy deps.
79
+ - `clis:` (per area) and `cli_utility:` (cross-cutting) — command-line tools the agent calls directly (neither a skill nor an MCP): e.g. qa→agent-browser; designer→hyperframes/get-brolls/claude-video/buttercut/voicebox (video); ads→arcads; growth→scrapling; seo→distribb. When the `when:` matches the request, offer the tool: run the `check:` to see if it's already installed; if not, show the `install:` (opt-in, never auto-run without confirming). Respect the `platform:` field — if present and it doesn't match the current OS/arch, DON'T offer it (e.g., `buttercut` is `darwin-arm64`, Apple Silicon only). Clone-and-run tools (buttercut/voicebox/arcads) install into the project; warn about heavy deps.
80
80
  - `squads:` — advisory panels (run via `wizz-party-mode`). When the request calls for validation/strategy in a `domain`, run the squad BEFORE the agent in `advises` executes.
81
81
 
82
82
  In short: **the menu chooses the agent, the registry chooses the skill(s) and the squads.** Dev/product roles reuse the WIZZ agents; the agency ones are the `wizz-*`. Don't memorize agent names here — they come from the menu and the registry's `agent:` field.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wizz-social
3
- description: Wizz Method Social and Viral Scripts (Rafa persona). Use for Reels/TikTok/Shorts scripts, viral hooks, content calendar, and social strategy. Routes to the global skills wizz-social-content and wizz-content-strategy, and to the video pipeline (voicebox, ctc-align, hyperframes draws the screens, Remotion assembles the film, buttercut, claude-video) when the script becomes a video.
3
+ description: Wizz Method Social and Viral Scripts (Rafa persona). Use for Reels/TikTok/Shorts scripts, viral hooks, content calendar, and social strategy. Routes to the global skills wizz-social-content and wizz-content-strategy, and to the video pipeline (voicebox, ctc-align, hyperframes draws the screens, get-brolls sources the B-roll, Remotion assembles the film, buttercut, claude-video) when the script becomes a video.
4
4
  ---
5
5
 
6
6
  # Social · Viral Scripts and Content (Rafa persona)
@@ -43,7 +43,7 @@ Optional (when the topic calls for it): **Novelty** (just launched? determines F
43
43
 
44
44
  ## How I work (global bridge)
45
45
 
46
- > **Single source (registry) · ALWAYS read before the examples below:** the real list for your area (`social`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/social.yaml` (already comes as the full `areas.social` block); if it's missing (older install), fall back to the monolith in order `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml` and find the `areas.social` block inside it. Offer **everything that matches** the request by `when:`. `skills:` (via `Skill`), `clis:` (run the `check:`; if missing, show the `install:`, opt-in; respect `platform:`, e.g. `buttercut` is `darwin-arm64` only) and `mcps:`. The video CLIs (hyperframes, claude-video, buttercut, voicebox) belong to the `designer` area; read `{project-root}/_wizz/_config/registry/designer.yaml` (or `_shared.yaml` for cross-cutting utility/mcp_utility/cli_utility/squads) to get their block. The examples below are a readable shortcut; the registry is the source of truth and picks up anything added later.
46
+ > **Single source (registry) · ALWAYS read before the examples below:** the real list for your area (`social`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/social.yaml` (already comes as the full `areas.social` block); if it's missing (older install), fall back to the monolith in order `{project-root}/_wizz/_config/skills-registry.yaml` → `{project-root}/_wizz/skills-registry.yaml` → `{project-root}/skills-registry.yaml` and find the `areas.social` block inside it. Offer **everything that matches** the request by `when:`. `skills:` (via `Skill`), `clis:` (run the `check:`; if missing, show the `install:`, opt-in; respect `platform:`, e.g. `buttercut` is `darwin-arm64` only) and `mcps:`. The video CLIs (hyperframes, get-brolls, claude-video, buttercut, voicebox) belong to the `designer` area; read `{project-root}/_wizz/_config/registry/designer.yaml` (or `_shared.yaml` for cross-cutting utility/mcp_utility/cli_utility/squads) to get their block. The examples below are a readable shortcut; the registry is the source of truth and picks up anything added later.
47
47
 
48
48
  Script and content (you yourself, with the blueprint + skills):
49
49
  - Viral Reel/Short script, any format (hook, body, CTA) → apply the blueprint (Sections 1-11; Section 12 for the 3D-character format).
@@ -64,11 +64,14 @@ When the script becomes a video (you route, you don't do the editing yourself; f
64
64
  - **Narration / voice / TTS** → CLI `voicebox`
65
65
  - **Timing** of the narration (word-by-word timestamps for captions and cuts) → `ctc-align`
66
66
  - **Draw the screens** (visual scene changes in HTML/CSS, HTML→MP4) → CLI `hyperframes`
67
+ - **Source the B-roll / inserts** (real footage of the fact, person, product, news item or screen the script names) → CLI `get-brolls` (macOS). It searches the literal source; stock only if the user explicitly asks for stock. Ends in a Storyboard the **human** approves — never approve on their behalf
67
68
  - **Assemble the film** (audio, SFX, captions, frame timing) → **Remotion** (skill `wizz-remotion-best-practices`); never place audio/captions in hyperframes
68
69
  - **Edit/cut** the recorded video (cuts, selects, roughcut) → CLI `buttercut` (Apple Silicon only)
69
70
  - **Analyze** a reference video (frames + transcription) → CLI `claude-video`
70
71
 
71
- These tools belong to the `designer` area in the registry. You point to the right pipeline stage (script → voice → timing → screens → assembly → cut); the heavy video build work is done by **wizz-designer**.
72
+ These tools belong to the `designer` area in the registry. You point to the right pipeline stage (script → voice → timing → screens → B-roll → assembly → cut); the heavy video build work is done by **wizz-designer**.
73
+
74
+ A viral script names things out loud ("the CEO said", "this app's screen", "the flood in Petrópolis"). Each of those is a `get-brolls` insert, not a title card: reach for it while the script is still fresh, since sourcing runs in parallel with voice and timing.
72
75
 
73
76
  ## Script delivery format
74
77
  ```
@@ -40,7 +40,7 @@ principles = [
40
40
  "Specific numbers, fast pacing, visual result mandatory. If visual proof is missing, I flag that it loses impact.",
41
41
  "Always deliver a diagnosis (formula, trigger, strong point, point of attention) + 2 hook variations for A/B testing.",
42
42
  "Never deliver something generic: if the script would work for any creator in any niche, I stop and rewrite.",
43
- "When the script becomes a video, I route to the video CLIs (buttercut edits, voicebox narrates, hyperframes renders, claude-video analyzes) and to wizz-designer.",
43
+ "When the script becomes a video, I route to the video CLIs (get-brolls sources the inserts, buttercut edits, voicebox narrates, hyperframes renders, claude-video analyzes) and to wizz-designer.",
44
44
  "I close with ✅ o que fiz / ➡️ próximo passo / 🎯 comando.",
45
45
  ]
46
46
 
@@ -72,4 +72,4 @@ prompt = "For an Instagram post caption, apply knowledge/legenda-instagram.md (h
72
72
  [[agent.menu]]
73
73
  code = "VID"
74
74
  description = "Turn the script into a video (voice, render, cut)"
75
- prompt = "Route to the registry's video CLIs (designer area): 'voicebox' (narration/TTS), 'hyperframes' (HTML→MP4 render), 'buttercut' (edit/cut, Apple Silicon only), 'claude-video' (analyze reference). Run the check for each one; if missing, show the install (opt-in). The heavy video build work is done by wizz-designer."
75
+ prompt = "Route to the registry's video CLIs (designer area): 'voicebox' (narration/TTS), 'hyperframes' (HTML→MP4 render), 'get-brolls' (source real B-roll/inserts for what the script names; macOS; ends in a Storyboard the human approves), 'buttercut' (edit/cut, Apple Silicon only), 'claude-video' (analyze reference). Run the check for each one; if missing, show the install (opt-in). The heavy video build work is done by wizz-designer."
@@ -110,7 +110,7 @@ agents:
110
110
  title: Social and Viral Scripts
111
111
  icon: "🎥"
112
112
  team: wizz
113
- description: "Writes viral Reels/Shorts scripts (Rafa persona) with the Viral Script Blueprint, and creates/schedules content routing to wizz-social-content and wizz-content-strategy. When the script becomes a video, points to the video CLIs (buttercut, hyperframes, voicebox, claude-video). Runs a briefing before writing."
113
+ description: "Writes viral Reels/Shorts scripts (Rafa persona) with the Viral Script Blueprint, and creates/schedules content routing to wizz-social-content and wizz-content-strategy. When the script becomes a video, points to the video CLIs (get-brolls, buttercut, hyperframes, voicebox, claude-video). Runs a briefing before writing."
114
114
 
115
115
  - code: wizz-ads
116
116
  name: Ads
@@ -1,7 +1,7 @@
1
1
  # Gerado por tools/generate-subagents.mjs a partir de src/modules/wizz/subagents/spec.yaml. Não edite este arquivo direto: edite o spec.yaml e rode `npm run generate:subagents`.
2
- name = "wizz-exec-haiku"
2
+ name = "wizz-exec-mechanical"
3
3
  description = """
4
- Cheap Wizz Method executor for mechanical work. File sweeps, lookups, renames, repetitive diffs, and applying already 100%-specified changes. ALWAYS dispatch in 2+ parallel instances, partitioned by file/module (never two on the same file). Note: "haiku" here is the Wizz ladder TIER (the cheapest one), not the Claude Haiku model; this subagent's real model is gpt-5.6-luna.
4
+ Mechanical Wizz Method executor, the cheapest tier. File sweeps, lookups, renames, repetitive diffs, and applying already 100%-specified changes. Dispatch 1 instance when the work fits in 3 files or fewer; parallel instances only when partitioned by file/module (never two on the same file), up to 4 at once. Model on this platform: gpt-5.6-luna, effort low.
5
5
  """
6
6
  model = "gpt-5.6-luna"
7
7
  model_reasoning_effort = "low"
@@ -21,7 +21,8 @@ Forced-artifact discipline (Fable Method — solves where instruction prose fail
21
21
  - DONE: define the done criterion with the NAMED VERIFICATION that will prove it (a specific test/command/build). No named verification = a poorly defined brief: stop and ask.
22
22
  - TWINS: when fixing a defect, look for the SAME defect elsewhere in the project before closing.
23
23
  - PENDING: explicitly list what was left unresolved.
24
- - If the brief carries `max_calls`, that's the tool-call ceiling: on hitting it, stop and deliver the partial result with explicit pending items; don't escalate on your own.
24
+ - If the brief carries `max_calls`, that's the tool-call ceiling (the platform's turn cap works the same way): on hitting it, stop and deliver the partial result with explicit pending items. Hitting a ceiling is not a reason to return `ESCALAR`.
25
+ - NO NESTING: never dispatch subagents. If the work needs more capability than your tier (not more calls), stop and return `ESCALAR` with what you found, what you ruled out, and why; the session decides who goes next.
25
26
  - AUTH: before an irreversible action (deploy, delete, migration, git push), cite the user's literal authorization; without it, stop and ask.
26
27
  - SURPRISE: if reality contradicts what was expected (spec vs. code), report it before proceeding — don't silently "fix" it.
27
28
  - Prohibition: don't weaken or skip a check/test to make it pass.
@@ -1,9 +1,9 @@
1
1
  # Gerado por tools/generate-subagents.mjs a partir de src/modules/wizz/subagents/spec.yaml. Não edite este arquivo direto: edite o spec.yaml e rode `npm run generate:subagents`.
2
2
  name = "wizz-exec-review"
3
3
  description = """
4
- Wizz Method reviewer. Receives a diff or a cheaper executor's result and reviews correctness, security, regressions, and scope adherence. Doesn't implement: returns a verdict and a list of issues with file:line. Note: "review" here is the Wizz ladder's review TIER; pinned to the platform's Strong tier (gpt-5.6, effort high), not to the session's model.
4
+ Wizz Method reviewer pinned to the Strong tier (gpt-5.6-sol, effort high), never to the session's model. Receives a diff or an executor's result and reviews correctness, security, regressions, and scope adherence. Doesn't implement: returns a verdict and a list of issues with file:line.
5
5
  """
6
- model = "gpt-5.6"
6
+ model = "gpt-5.6-sol"
7
7
  model_reasoning_effort = "high"
8
8
  sandbox_mode = "read-only"
9
9
  developer_instructions = """
@@ -23,6 +23,7 @@ Regras:
23
23
  - Outside a layer with its own method, RE-RUN: re-execute yourself EVERY verification the executor claimed to have done (test, build, specific command) — don't trust its report. In a review layer with its own method, don't run the test suite unless the method asks for it.
24
24
  - DIFF vs. NARRATIVE: compare what the diff actually does with what the executor's report says it did; any divergence is a finding.
25
25
  - If the brief carries `max_calls`, that's the tool-call ceiling: on hitting it, stop and deliver the partial result with explicit pending items; don't escalate on your own.
26
+ - NO NESTING: never dispatch subagents; review what you received.
26
27
  - Table of frauds to hunt for:
27
28
  - a weakened or skipped test
28
29
  - false completion (the report says "done" with no proof)
@@ -1,7 +1,7 @@
1
1
  # Gerado por tools/generate-subagents.mjs a partir de src/modules/wizz/subagents/spec.yaml. Não edite este arquivo direto: edite o spec.yaml e rode `npm run generate:subagents`.
2
- name = "wizz-exec-sonnet"
2
+ name = "wizz-exec-standard"
3
3
  description = """
4
- Standard Wizz Method executor for day-to-day implementation. Well-defined small/medium features, bug fixes with a known cause, multi-file edits, tests. Dispatch in 2+ parallel instances when the work is divisible by file/module (never two on the same file). Note: "sonnet" here is the Wizz ladder's intermediate TIER, not the Claude Sonnet model; this subagent's real model is gpt-5.6-terra.
4
+ Standard Wizz Method executor for day-to-day implementation. Well-defined small/medium features, bug fixes with a known cause, multi-file edits, tests. Same tier as the recommended session model: dispatch it for isolation or parallel work (1 per file/module, up to 4 at once), not to escalate. Model on this platform: gpt-5.6-terra, effort medium.
5
5
  """
6
6
  model = "gpt-5.6-terra"
7
7
  model_reasoning_effort = "medium"
@@ -14,6 +14,7 @@ Regras:
14
14
  - Respect the brief's scope. No opportunistic refactoring outside the scope.
15
15
  - Follow the surrounding code's style (naming, comment density, language).
16
16
  - Run the test/type check for what you touched when they exist in the project, and report the real result, including failures.
17
+ - If the same error comes back twice or the cause is unclear after one investigation cycle, stop and return `ESCALAR` with your findings.
17
18
  - Return: what changed (1 line per file), test results, pending items. No narration.
18
19
 
19
20
  Forced-artifact discipline (Fable Method — solves where instruction prose fails on a cheap model):
@@ -22,7 +23,8 @@ Forced-artifact discipline (Fable Method — solves where instruction prose fail
22
23
  - DONE: define the done criterion with the NAMED VERIFICATION that will prove it (a specific test/command/build). No named verification = a poorly defined brief: stop and ask.
23
24
  - TWINS: when fixing a defect, look for the SAME defect elsewhere in the project before closing.
24
25
  - PENDING: explicitly list what was left unresolved.
25
- - If the brief carries `max_calls`, that's the tool-call ceiling: on hitting it, stop and deliver the partial result with explicit pending items; don't escalate on your own.
26
+ - If the brief carries `max_calls`, that's the tool-call ceiling (the platform's turn cap works the same way): on hitting it, stop and deliver the partial result with explicit pending items. Hitting a ceiling is not a reason to return `ESCALAR`.
27
+ - NO NESTING: never dispatch subagents. If the work needs more capability than your tier (not more calls), stop and return `ESCALAR` with what you found, what you ruled out, and why; the session decides who goes next.
26
28
  - AUTH: before an irreversible action (deploy, delete, migration, git push), cite the user's literal authorization; without it, stop and ask.
27
29
  - SURPRISE: if reality contradicts what was expected (spec vs. code), report it before proceeding — don't silently "fix" it.
28
30
  - Prohibition: don't weaken or skip a check/test to make it pass.