wizz-method 2.7.0 → 2.8.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/package.json +2 -1
- package/skills-registry.yaml +274 -28
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +1 -0
- package/src/modules/wizz/_shared/rel-protocol.md +17 -0
- package/src/modules/wizz/_shared/video-pipeline.md +1 -1
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +14 -1
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-social/SKILL.md +1 -1
- package/src/skills-lib/_shared/complexity-signal.md +39 -12
- package/src/skills-lib/wizz-router/SKILL.md +26 -0
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +13 -1
- package/tools/hooks/wizz-router-enforce.js +3 -2
- package/tools/installer/modules/skills-lib.js +27 -2
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.
|
|
4
|
+
"version": "2.8.0",
|
|
5
5
|
"description": "Wizz Method: método de agência orientado por IA em PT-BR",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agile",
|
|
@@ -101,6 +101,7 @@
|
|
|
101
101
|
"test:registry-lib-parity": "node test/test-registry-lib-parity.js",
|
|
102
102
|
"test:registry-schema": "node test/test-registry-schema.js",
|
|
103
103
|
"test:rehype-plugins": "node test/test-rehype-plugins.mjs",
|
|
104
|
+
"test:rel-protocol": "node test/test-rel-protocol-consistency.js",
|
|
104
105
|
"test:resolve-command": "node test/test-resolve-command.js",
|
|
105
106
|
"test:resolved-config": "node test/test-resolved-config.js",
|
|
106
107
|
"test:resolver": "node test/test-resolve-customization.js",
|
package/skills-registry.yaml
CHANGED
|
@@ -88,57 +88,89 @@ areas:
|
|
|
88
88
|
door: direcao
|
|
89
89
|
when: "PORTA de direção: todo trabalho de decidir ANTES de construir. Brief visual inicial (6 decisões de estética + 3 lógicas) no kickoff. Puxa: wizz-taste-skill (direção anti-slop de brief novo) e wizz-motion-3d-director (decidir caminho motion/3D/vídeo)."
|
|
90
90
|
rel:
|
|
91
|
-
|
|
91
|
+
before: [wizz-ui-ux-pro-max]
|
|
92
|
+
pairs_with: [wizz-motion-3d-director, wizz-taste-skill]
|
|
92
93
|
- id: wizz-taste-skill
|
|
93
94
|
door: direcao
|
|
94
95
|
when: "Anti-slop em briefs NOVOS: lê o brief, define a direção e audita contra defaults de AI. Também cobre projeto EXISTENTE: audita o código atual, lista problemas, prioriza fixes (protocolo de redesign)."
|
|
96
|
+
rel:
|
|
97
|
+
pairs_with: [apple-design, wizz-decision-maker]
|
|
95
98
|
- id: wizz-motion-3d-director
|
|
96
99
|
door: direcao
|
|
97
100
|
when: "Direção de motion/animação, 3D, WebGL, scroll cinematográfico, image-to-video. Decide o caminho ANTES de implementar."
|
|
101
|
+
rel:
|
|
102
|
+
before: [wizz-remotion-best-practices]
|
|
103
|
+
pairs_with: [wizz-decision-maker]
|
|
98
104
|
|
|
99
105
|
# ── Porta 2: CONSTRUÇÃO E POLISH DE UI ──
|
|
100
106
|
- id: wizz-ui-ux-pro-max
|
|
101
107
|
entry: true
|
|
102
108
|
door: construcao
|
|
103
109
|
when: "PORTA de construção: criar/melhorar UI (design system, paleta, tipografia, componente, página). Puxa: wizz-premium-landing-ui-researcher (landing premium greenfield), wizz-ui-component-curator (1 componente em projeto existente), wizz-impeccable (gate de polish/acessibilidade), wizz-taste-skill (anti-slop em código existente, protocolo de redesign), wizz-huashu-design (protótipo HTML hi-fi/variantes/review) e wizz-react-components (Stitch→React)."
|
|
110
|
+
rel:
|
|
111
|
+
after: [wizz-decision-maker]
|
|
112
|
+
before: [wizz-impeccable]
|
|
113
|
+
pairs_with: [wizz-huashu-design, wizz-premium-landing-ui-researcher, wizz-ui-component-curator]
|
|
104
114
|
- id: wizz-premium-landing-ui-researcher
|
|
105
115
|
door: construcao
|
|
106
116
|
when: "Projeto NOVO (greenfield): cria landing premium do zero, hero, 3D high-end. Estratégia source-first."
|
|
117
|
+
rel:
|
|
118
|
+
pairs_with: [wizz-ui-ux-pro-max]
|
|
107
119
|
- id: wizz-ui-component-curator
|
|
108
120
|
door: construcao
|
|
109
121
|
when: "Projeto EXISTENTE: qual componente/efeito adicionar que combina com o estilo atual."
|
|
122
|
+
rel:
|
|
123
|
+
pairs_with: [wizz-ui-ux-pro-max]
|
|
110
124
|
- id: wizz-impeccable
|
|
111
125
|
door: construcao
|
|
112
126
|
when: "Gate de polish/qualidade de frontend: hardening de UI, acessibilidade, anti-padrões. Refina o que já existe."
|
|
127
|
+
rel:
|
|
128
|
+
after: [wizz-ui-ux-pro-max]
|
|
113
129
|
- id: wizz-huashu-design
|
|
114
130
|
door: construcao
|
|
115
131
|
when: "Direção visual + protótipo HTML hi-fi, exploração de variantes, review 5-dim, export MP4/GIF."
|
|
132
|
+
rel:
|
|
133
|
+
before: [wizz-react-components]
|
|
134
|
+
pairs_with: [wizz-ui-ux-pro-max]
|
|
116
135
|
- id: wizz-react-components
|
|
117
136
|
door: construcao
|
|
118
137
|
when: "Converter design (Stitch MCP) em componentes React/Vite."
|
|
138
|
+
rel:
|
|
139
|
+
after: [wizz-huashu-design]
|
|
119
140
|
|
|
120
141
|
# ── Porta 3: MOTION E ASSETS (executar animação e gerar mídia) ──
|
|
121
142
|
- id: wizz-animate
|
|
122
143
|
entry: true
|
|
123
144
|
door: motion
|
|
124
145
|
when: "PORTA de motion/assets: executar animação e gerar mídia. Craft de micro-interação (regras do Emil Kowalski: saída > entrada, só transform/opacity, reduced-motion). Puxa: wizz-design-motion-principles (auditar animação existente), wizz-remotion-best-practices (vídeo em React), wizz-canvas-design (PNG/PDF por código) e wizz-algorithmic-art (visual generativo)."
|
|
146
|
+
rel:
|
|
147
|
+
pairs_with: [wizz-design-motion-principles]
|
|
125
148
|
- id: wizz-design-motion-principles
|
|
126
149
|
door: motion
|
|
127
150
|
when: "Auditor de movimento: revisa animação existente e aponta scale(0) no início, easing cru, reduced-motion faltando; pesa contenção/polimento/diversão pelo contexto."
|
|
151
|
+
rel:
|
|
152
|
+
pairs_with: [wizz-animate]
|
|
128
153
|
- id: wizz-remotion-best-practices
|
|
129
154
|
door: motion
|
|
130
155
|
when: "MONTAR o filme: vídeo em React (Remotion) com áudio, SFX, legenda e timing com precisão de frame. No pipeline de vídeo é o Remotion que faz a montagem final; o hyperframes só desenha as telas mudas (regra: HyperFrames desenha, Remotion monta — ver _shared/video-pipeline.md do módulo wizz)."
|
|
131
156
|
rel:
|
|
132
|
-
after: [hyperframes]
|
|
157
|
+
after: [buttercut, ctc-align, get-brolls, hyperframes, wizz-motion-3d-director]
|
|
133
158
|
- id: wizz-canvas-design
|
|
134
159
|
door: motion
|
|
135
160
|
when: "Gerar PNG/PDF editável por código (carrossel, quote card, infográfico) com fonte/cor/logo sempre certos. Traz canvas-fonts."
|
|
161
|
+
rel:
|
|
162
|
+
pairs_with: [wizz-algorithmic-art, wizz-social-content]
|
|
136
163
|
- id: wizz-algorithmic-art
|
|
137
164
|
door: motion
|
|
138
165
|
when: "Visual generativo por código (flow fields, ruído, partículas) para fundo/textura de hero, único a cada render, sem cara de banco de imagem."
|
|
166
|
+
rel:
|
|
167
|
+
pairs_with: [wizz-canvas-design]
|
|
139
168
|
- id: ctc-align
|
|
140
169
|
door: motion
|
|
141
170
|
when: "Timing por forced alignment: timestamps palavra a palavra de narração TTS para sincronizar legenda, corte de cena e animação com a fala. Fonte única de timing no pipeline de vídeo; substitui Whisper e estimativa manual."
|
|
171
|
+
rel:
|
|
172
|
+
after: [voicebox]
|
|
173
|
+
before: [wizz-remotion-best-practices]
|
|
142
174
|
clis:
|
|
143
175
|
- id: hyperframes
|
|
144
176
|
when: "DESENHAR telas de vídeo em HTML/CSS (HTML→MP4, agent-native, 20+ skills): cena isolada e MUDA — maqueta de WhatsApp/ChatGPT, gráfico animado, título, loop. NÃO usar para montagem com áudio/SFX/legenda sincronizada (posicionador de áudio falhou em produção, ~2,76s de drift; CSS vaza entre telas): a montagem final é do Remotion (regra: HyperFrames desenha, Remotion monta — ver _shared/video-pipeline.md do módulo wizz). Precisa ffmpeg + Node 22 + Chrome headless."
|
|
@@ -157,6 +189,8 @@ areas:
|
|
|
157
189
|
install: 'd="$(mktemp -d)" && git clone https://github.com/heygen-com/hyperframes.git "$d" && git -C "$d" checkout 59a69a145bfbd0f10dee72246b68ee5d9bd71063 && npx skills add "$d" -g -y --copy && printf "%s\\n" 59a69a145bfbd0f10dee72246b68ee5d9bd71063 > "$HOME/.claude/skills/hyperframes/.wizz-pin" && rm -rf "$d" && rm -rf "$HOME/.claude/skills/remotion-to-hyperframes"'
|
|
158
190
|
- id: claude-video
|
|
159
191
|
when: "Analisar/entender vídeo EXISTENTE: baixa, extrai frames e transcreve para resumir, achar momentos ou diagnosticar footage. NÃO cria vídeo. Precisa ffmpeg + yt-dlp (+ Groq/OpenAI p/ transcrição sem legenda)."
|
|
192
|
+
rel:
|
|
193
|
+
pairs_with: [get-brolls]
|
|
160
194
|
platform: [darwin, linux]
|
|
161
195
|
# O check confere o SHA fixado, não só a existência da pasta: o bundle é
|
|
162
196
|
# copiado (não clonado), então o pin é gravado num marcador no install.
|
|
@@ -169,7 +203,7 @@ areas:
|
|
|
169
203
|
# última tag publicada lá é a v2.3.7; o 2.3.8 só existe como HEAD.
|
|
170
204
|
metadata:
|
|
171
205
|
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."
|
|
206
|
+
when: "CAPTAR B-roll/insert — em português: 'imagens de apoio', 'cenas de apoio', 'imagem de corte' para Reel, TikTok ou vídeo: 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
207
|
not_when:
|
|
174
208
|
- "Analisar/resumir um vídeo que já se tem em mãos: é claude-video."
|
|
175
209
|
- "Cortar/montar footage já captado: é buttercut (corte fino) ou wizz-remotion-best-practices (montagem final)."
|
|
@@ -177,6 +211,7 @@ areas:
|
|
|
177
211
|
- "Desenhar uma tela/cena em HTML: é hyperframes."
|
|
178
212
|
- "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
213
|
rel:
|
|
214
|
+
after: [wizz-social-content]
|
|
180
215
|
before: [buttercut, wizz-remotion-best-practices]
|
|
181
216
|
pairs_with: [claude-video]
|
|
182
217
|
# macOS apenas: o upstream declara macOS/Windows (Linux não é testado lá)
|
|
@@ -203,6 +238,9 @@ areas:
|
|
|
203
238
|
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"'
|
|
204
239
|
- id: buttercut
|
|
205
240
|
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."
|
|
241
|
+
rel:
|
|
242
|
+
after: [get-brolls]
|
|
243
|
+
before: [wizz-remotion-best-practices]
|
|
206
244
|
platform: darwin-arm64
|
|
207
245
|
# Clone-and-run: o próprio repo responde o SHA, então o check compara com o
|
|
208
246
|
# pin. O install repara um clone existente em vez de falhar no git clone.
|
|
@@ -212,6 +250,8 @@ areas:
|
|
|
212
250
|
verify: "command -v ffmpeg >/dev/null 2>&1 && command -v ruby >/dev/null 2>&1 && command -v python3 >/dev/null 2>&1"
|
|
213
251
|
- id: voicebox
|
|
214
252
|
when: "Voz/TTS/clonagem de voz local para narração/VO de vídeo (7 engines TTS + Whisper STT). App desktop que expõe endpoint MCP local em runtime. Clone-and-run no projeto."
|
|
253
|
+
rel:
|
|
254
|
+
before: [ctc-align]
|
|
215
255
|
platform: [darwin, linux]
|
|
216
256
|
# Clone-and-run: o próprio repo responde o SHA, então o check compara com o
|
|
217
257
|
# pin. O install repara um clone existente em vez de falhar no git clone.
|
|
@@ -220,12 +260,17 @@ areas:
|
|
|
220
260
|
install: "{ [ -d voicebox/.git ] || git clone https://github.com/jamiepine/voicebox.git voicebox; } && git -C voicebox fetch --tags origin && git -C voicebox checkout 2bcb98d1a8b6fe05e15fbc1559e3085669e4035d"
|
|
221
261
|
- id: ctc-align
|
|
222
262
|
when: "Timestamps palavra a palavra CONFIÁVEIS de narração TTS (texto conhecido): sincronizar legenda, corte de cena, animação e elemento gráfico com a fala. Fonte única de timing em vídeo — substitui timestamps do Whisper e estimativa manual. Skill da lib: ctc-align (instalação + helper align.py + regras de âncora monotônica e duração mínima). Roda em CPU, sem CUDA."
|
|
263
|
+
rel:
|
|
264
|
+
after: [voicebox]
|
|
265
|
+
before: [wizz-remotion-best-practices]
|
|
223
266
|
platform: [darwin, linux]
|
|
224
267
|
check: "test -x ./tools/ctc-align/.venv/bin/ctc-forced-aligner"
|
|
225
268
|
install: 'mkdir -p tools/ctc-align && uv venv --python 3.12 tools/ctc-align/.venv && uv pip install --python tools/ctc-align/.venv/bin/python "git+https://github.com/MahmoudAshraf97/ctc-forced-aligner.git"'
|
|
226
269
|
verify: "command -v ffmpeg >/dev/null 2>&1 && command -v uv >/dev/null 2>&1"
|
|
227
270
|
- id: fal-video
|
|
228
271
|
when: "GERAR vídeo/imagem por IA (Veo/Kling/Wan e outros modelos via API da fal.ai), estilo UGC/ad-ready. Substitui o arcads: mesmo caso de uso (vídeo gerado por IA), custo 50-95% menor por vídeo, sem clone-and-run pesado. Precisa FAL_KEY em .env. Sem CLI binária oficial: usa o client Node oficial @fal-ai/client como dependência do projeto."
|
|
272
|
+
rel:
|
|
273
|
+
pairs_with: [wizz-ad-creative]
|
|
229
274
|
platform: [darwin, linux]
|
|
230
275
|
check: "test -f node_modules/@fal-ai/client/package.json"
|
|
231
276
|
# Pin de supply chain (2026-08-25): versão fixa (client oficial fal.ai); atualizar conscientemente.
|
|
@@ -234,7 +279,7 @@ areas:
|
|
|
234
279
|
when: "Revisar/auditar UI NATIVA (iOS/macOS: SwiftUI, Flutter, React Native, Tauri, Electron) contra o Apple HIG e o Liquid Glass — compliance com o HIG, acessibilidade, dark mode, navegação. Cobre o gap que o wizz-taste-skill declara fora de escopo ('native mobile: use Apple HIG directly')."
|
|
235
280
|
not_when: "UI web: aí é wizz-ui-ux-pro-max / wizz-impeccable."
|
|
236
281
|
rel:
|
|
237
|
-
pairs_with: [wizz-taste-skill]
|
|
282
|
+
pairs_with: [wizz-desktop-security, wizz-taste-skill]
|
|
238
283
|
platform: [darwin, linux]
|
|
239
284
|
# Upstream sem licença declarada e reproduz texto do Apple HIG (122
|
|
240
285
|
# páginas): o Wizz só instala a partir do upstream, no opt-in do
|
|
@@ -250,28 +295,48 @@ areas:
|
|
|
250
295
|
agent: wizz-copy
|
|
251
296
|
summary: "Copywriting: texto de venda, headlines, páginas, e-mails, sequências."
|
|
252
297
|
skills:
|
|
253
|
-
# Módulo lowticket
|
|
254
|
-
#
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
module: lowticket
|
|
260
|
-
when: "Copy de low ticket BR/PT (página, VSL, roteiro de criativo, headline): ler o shard antes de escrever. 12c página, 18 copy, 04b §4.7-A VSL (9 vendas), 04c roteiro de criativo. O shard vence a skill genérica."
|
|
261
|
-
not_when:
|
|
262
|
-
- "SaaS, B2B, site de cliente, high ticket ou mentoria: os números não transferem."
|
|
298
|
+
# Módulo lowticket: as skills dele moram SÓ na área growth desde
|
|
299
|
+
# 2026-09-18 (decisão do dono: um dono por skill). A copy chega nelas
|
|
300
|
+
# pelo `rel` de wizz-copywriting — que é o caminho que o método usa pra
|
|
301
|
+
# tudo mais. Antes a mesma skill existia em copy, growth e ads, e o
|
|
302
|
+
# eval mostrava o custo: "qual prazo de garantia?" respondia copy,
|
|
303
|
+
# growth ou ads em amostras diferentes, porque as três estavam certas.
|
|
263
304
|
- id: wizz-copywriting
|
|
264
305
|
when: "Escrever copy de venda/página/headline do zero ou reescrever."
|
|
306
|
+
rel:
|
|
307
|
+
after: [pesquisa-de-publico-do-piva, wizz-offer-forge]
|
|
308
|
+
before: [wizz-copy-editing]
|
|
309
|
+
pairs_with:
|
|
310
|
+
[
|
|
311
|
+
wizz-ad-creative,
|
|
312
|
+
wizz-cold-email,
|
|
313
|
+
wizz-email-sequence,
|
|
314
|
+
wizz-humanizer,
|
|
315
|
+
wizz-lowticket-metodologia,
|
|
316
|
+
wizz-marketing-psychology,
|
|
317
|
+
wizz-page-cro,
|
|
318
|
+
]
|
|
265
319
|
- id: wizz-copy-editing
|
|
266
320
|
when: "Editar/melhorar copy existente (framework Seven Sweeps). Review editorial geral."
|
|
321
|
+
rel:
|
|
322
|
+
after: [wizz-copywriting]
|
|
323
|
+
pairs_with: [wizz-social-content]
|
|
267
324
|
- id: wizz-humanizer
|
|
268
325
|
when: "Texto soa AI: remover padrões de escrita de máquina, dar naturalidade."
|
|
326
|
+
rel:
|
|
327
|
+
pairs_with: [wizz-copywriting]
|
|
269
328
|
- id: wizz-email-sequence
|
|
270
329
|
when: "Sequências de e-mail (onboarding, nurture, lançamento)."
|
|
330
|
+
rel:
|
|
331
|
+
pairs_with: [wizz-copywriting, wizz-launch-strategy, wizz-referral-program]
|
|
271
332
|
- id: wizz-cold-email
|
|
272
333
|
when: "Cold email / outbound B2B / prospecção."
|
|
334
|
+
rel:
|
|
335
|
+
pairs_with: [wizz-copywriting]
|
|
273
336
|
- id: wizz-sales-enablement
|
|
274
337
|
when: "Material de vendas: deck, one-pager, objeções, demo script, playbook."
|
|
338
|
+
rel:
|
|
339
|
+
pairs_with: [wizz-competitor-alternatives]
|
|
275
340
|
|
|
276
341
|
seo:
|
|
277
342
|
agent: wizz-seo
|
|
@@ -279,17 +344,33 @@ areas:
|
|
|
279
344
|
skills:
|
|
280
345
|
- id: wizz-seo-audit
|
|
281
346
|
when: "Ponto de partida: auditar/diagnosticar SEO, queda de tráfego, ranking, core web vitals."
|
|
347
|
+
rel:
|
|
348
|
+
before: [distribb, wizz-ai-seo, wizz-programmatic-seo, wizz-schema-markup, wizz-site-architecture]
|
|
282
349
|
- id: wizz-ai-seo
|
|
283
350
|
when: "Otimizar pra ser citado por LLMs/AI search (AEO/GEO/LLMO, AI Overviews)."
|
|
351
|
+
rel:
|
|
352
|
+
after: [wizz-seo-audit]
|
|
353
|
+
pairs_with: [wizz-schema-markup]
|
|
284
354
|
- id: wizz-schema-markup
|
|
285
355
|
when: "Implementar dados estruturados / structured data."
|
|
356
|
+
rel:
|
|
357
|
+
after: [wizz-seo-audit]
|
|
358
|
+
pairs_with: [site-launch-kit, wizz-ai-seo]
|
|
286
359
|
- id: wizz-programmatic-seo
|
|
287
360
|
when: "Gerar páginas em escala pra atacar muitas keywords."
|
|
361
|
+
rel:
|
|
362
|
+
after: [wizz-seo-audit]
|
|
363
|
+
pairs_with: [wizz-free-tool-strategy, wizz-site-architecture]
|
|
288
364
|
- id: wizz-site-architecture
|
|
289
365
|
when: "Arquitetura de site / topic clusters / estrutura de URLs."
|
|
366
|
+
rel:
|
|
367
|
+
after: [wizz-seo-audit]
|
|
368
|
+
pairs_with: [wizz-programmatic-seo]
|
|
290
369
|
clis:
|
|
291
370
|
- id: distribb
|
|
292
371
|
when: "EXECUTAR distribuição de SEO: publicar artigos + construir backlinks pela rede da Distribb, conectar Google Search Console, autopublicar notícias. Complementa (não duplica) as skills de SEO que só geram/auditam. Requer Distribb API + GSC (+ DataForSEO/Ahrefs no plano free)."
|
|
372
|
+
rel:
|
|
373
|
+
after: [wizz-seo-audit]
|
|
293
374
|
platform: [darwin, linux]
|
|
294
375
|
# O check confere o SHA fixado, não só a existência da pasta: o bundle é
|
|
295
376
|
# copiado (não clonado), então o pin é gravado num marcador no install.
|
|
@@ -303,74 +384,143 @@ areas:
|
|
|
303
384
|
skills:
|
|
304
385
|
- id: wizz-marketing-ideas
|
|
305
386
|
when: "Travou / quer inspiração ampla de marketing. Ponto de partida quando não sabe o canal."
|
|
387
|
+
rel:
|
|
388
|
+
pairs_with: [wizz-marketing-psychology, wizz-product-marketing-context]
|
|
306
389
|
- id: wizz-marketing-psychology
|
|
307
390
|
when: "Aplicar gatilhos/vieses/modelos mentais à persuasão."
|
|
391
|
+
rel:
|
|
392
|
+
pairs_with: [wizz-copywriting, wizz-marketing-ideas]
|
|
308
393
|
- id: wizz-product-marketing-context
|
|
309
394
|
when: "Posicionamento de produto e contexto de marketing do produto."
|
|
395
|
+
rel:
|
|
396
|
+
pairs_with: [wizz-marketing-ideas]
|
|
310
397
|
- id: wizz-launch-strategy
|
|
311
398
|
when: "Lançar produto/feature: Product Hunt, GTM, waitlist, beta."
|
|
399
|
+
rel:
|
|
400
|
+
pairs_with: [wizz-email-sequence, wizz-social-content]
|
|
312
401
|
- id: wizz-pricing-strategy
|
|
313
402
|
when: "Preço, planos, freemium, packaging, willingness to pay."
|
|
403
|
+
rel:
|
|
404
|
+
pairs_with: [wizz-offer-forge, wizz-paywall-upgrade-cro]
|
|
314
405
|
- id: wizz-paywall-upgrade-cro
|
|
315
406
|
when: "Tela de upgrade in-app / paywall."
|
|
407
|
+
rel:
|
|
408
|
+
pairs_with: [wizz-pricing-strategy]
|
|
316
409
|
- id: wizz-churn-prevention
|
|
317
410
|
when: "Churn, retenção, cancelamento, NPS."
|
|
411
|
+
rel:
|
|
412
|
+
pairs_with: [wizz-revops]
|
|
318
413
|
- id: wizz-revops
|
|
319
414
|
when: "Operações de receita: pipeline, métricas, processo de revenue."
|
|
415
|
+
rel:
|
|
416
|
+
pairs_with: [wizz-churn-prevention]
|
|
320
417
|
- id: wizz-page-cro
|
|
321
418
|
when: "Otimizar conversão de página (home, landing, pricing, feature)."
|
|
419
|
+
rel:
|
|
420
|
+
after: [wizz-tracking-audit]
|
|
421
|
+
pairs_with: [wizz-copywriting, wizz-form-cro, wizz-popup-cro]
|
|
322
422
|
- id: wizz-form-cro
|
|
323
423
|
when: "Otimizar formulários (fora de signup)."
|
|
424
|
+
rel:
|
|
425
|
+
pairs_with: [wizz-page-cro]
|
|
324
426
|
- id: wizz-popup-cro
|
|
325
427
|
when: "Otimizar popups/modais."
|
|
428
|
+
rel:
|
|
429
|
+
pairs_with: [wizz-page-cro]
|
|
326
430
|
- id: wizz-onboarding-cro
|
|
327
431
|
when: "Ativação pós-signup / onboarding de usuário."
|
|
432
|
+
rel:
|
|
433
|
+
pairs_with: [wizz-signup-flow-cro]
|
|
328
434
|
- id: wizz-signup-flow-cro
|
|
329
435
|
when: "Fluxo de signup/registro."
|
|
436
|
+
rel:
|
|
437
|
+
pairs_with: [wizz-onboarding-cro]
|
|
330
438
|
- id: wizz-competitor-alternatives
|
|
331
439
|
when: "Página de comparação vs concorrente / alternatives / battle card."
|
|
440
|
+
rel:
|
|
441
|
+
pairs_with: [scrapling, wizz-sales-enablement]
|
|
332
442
|
- id: wizz-referral-program
|
|
333
443
|
when: "Programa de indicação/afiliados."
|
|
444
|
+
rel:
|
|
445
|
+
pairs_with: [wizz-analytics-tracking, wizz-email-sequence]
|
|
334
446
|
- id: wizz-free-tool-strategy
|
|
335
447
|
when: "Ferramenta grátis pra captação de leads."
|
|
448
|
+
rel:
|
|
449
|
+
pairs_with: [wizz-programmatic-seo]
|
|
336
450
|
- id: wizz-ab-test-setup
|
|
337
451
|
when: "Montar A/B test / experimento de conversão."
|
|
452
|
+
rel:
|
|
453
|
+
pairs_with: [wizz-analytics-tracking]
|
|
338
454
|
- id: wizz-analytics-tracking
|
|
339
455
|
when: "Setar/auditar tracking e medição (GA4, GTM, eventos, UTM, atribuição)."
|
|
456
|
+
rel:
|
|
457
|
+
pairs_with: [wizz-ab-test-setup, wizz-referral-program, wizz-tracking-audit]
|
|
340
458
|
- id: site-launch-kit
|
|
341
459
|
when: "Site pronto ou quase pronto pra ir ao ar: revisão de pré-lançamento em 15 rodadas corretivas (CTA acima da dobra, barra fixa mobile, tempo de resposta, prova social real, FAQ+FAQPage, imagens reais, endereço, titles, Open Graph, breadcrumbs, alt text, schema local, robots/sitemap, LGPD, medição), com regra anti-invenção e PENDÊNCIAS. Gatilhos: 'vamos subir o site', 'checklist de lançamento', 'revisa antes do deploy', pré-go-live, ou um item isolado (og:image, FAQ com schema, robots.txt). Roda DEPOIS do site construído, ANTES do deploy."
|
|
460
|
+
rel:
|
|
461
|
+
pairs_with: [wizz-launch-readiness, wizz-schema-markup]
|
|
342
462
|
- id: pesquisa-de-publico-do-piva
|
|
343
463
|
when: "Pesquisa profunda de público, VoC, níveis de consciência, matriz de ângulos e léxico nativo de oferta compilados em HTML (metodologia @soupiva)."
|
|
464
|
+
rel:
|
|
465
|
+
before: [wizz-copywriting, wizz-offer-forge]
|
|
344
466
|
- id: wizz-offer-forge
|
|
345
467
|
when: "Forjar oferta irresistível de resposta direta/infoproduto (mecanismo único, empilhamento de valor, garantia reversa, ponte de tráfego)."
|
|
346
|
-
|
|
468
|
+
rel:
|
|
469
|
+
after: [pesquisa-de-publico-do-piva, wizz-lowticket-minerador]
|
|
470
|
+
before: [wizz-copywriting]
|
|
471
|
+
pairs_with: [wizz-pricing-strategy]
|
|
472
|
+
# Módulo lowticket (src/modules/lowticket) — ver nota em ads.skills. Desde
|
|
473
|
+
# 2026-09-18 o módulo inteiro mora aqui (um dono por skill): copy e ads
|
|
474
|
+
# chegam nele pelo `rel`. Isto é comentário de propósito — escrever "vale
|
|
475
|
+
# para as três áreas" dentro do `when:` da porta de entrada a deixou
|
|
476
|
+
# gulosa na medição seguinte (passou a engolir pedido de tarefa nomeada,
|
|
477
|
+
# que é exatamente a trava que a 2.7.0 tinha acabado de pôr nela).
|
|
347
478
|
- id: wizz-lowticket-guia
|
|
348
479
|
module: lowticket
|
|
349
|
-
when: "Porta de entrada low ticket para
|
|
480
|
+
when: "Porta de entrada low ticket para quem não sabe o que pedir: 'quero vender um produto barato', 'por onde começo', 'ninguém compra', 'não estou vendendo', 'anúncio não funciona'. Situa na jornada de 7 etapas e despacha."
|
|
481
|
+
not_when:
|
|
482
|
+
- "O pedido já nomeia uma tarefa concreta com seus insumos (escrever uma copy, diagnosticar uma página, ler um print de campanha): vá direto na skill daquela etapa."
|
|
483
|
+
rel:
|
|
484
|
+
before:
|
|
485
|
+
[wizz-lowticket-funil, wizz-lowticket-metodologia, wizz-lowticket-minerador, wizz-lowticket-pagina, wizz-lowticket-trafego]
|
|
350
486
|
- id: wizz-lowticket-metodologia
|
|
351
487
|
module: lowticket
|
|
352
|
-
when: "Roteador da base low ticket BR/PT: gatilho → um shard. Régua de preço, garantia, copy e rastreamento que tem precedência sobre a skill genérica."
|
|
488
|
+
when: "Roteador da base low ticket BR/PT: gatilho → um shard (diagnóstico de funil, bid cap, criativo, oferta, página, Instagram, player de VSL, upsell, copy, rastreamento, mineração). Régua de preço, garantia, copy e rastreamento que tem precedência sobre a skill genérica — inclusive a copy de low ticket (página, VSL, roteiro de criativo, headline): ler o shard ANTES de escrever. Carrega guardrails junto. A precedência vale QUANDO o contexto do projeto ou o próprio pedido estabelecer que a operação é low ticket (faixa de preço, produto barato, tráfego direto). Se nenhum dos dois disser, a skill genérica vence: não presuma low ticket por a página ser de vendas, o produto ser um curso ou haver campanha rodando."
|
|
353
489
|
not_when:
|
|
354
490
|
- "SaaS, B2B, site de cliente, high ticket ou mentoria: os números não transferem."
|
|
491
|
+
rel:
|
|
492
|
+
after: [wizz-lowticket-guia]
|
|
493
|
+
pairs_with: [wizz-copywriting, wizz-lowticket-pagina, wizz-lowticket-trafego]
|
|
355
494
|
- id: wizz-lowticket-funil
|
|
356
495
|
module: lowticket
|
|
357
496
|
when: "Escada pós-checkout de low ticket: upsell 1, upsell 2, downsell, oferta final, régua de preço por degrau e copy das páginas."
|
|
358
497
|
not_when:
|
|
359
498
|
- "Antes de existir um front-end que converte: estender funil sobre front que não vende multiplica zero."
|
|
499
|
+
rel:
|
|
500
|
+
after: [wizz-lowticket-guia, wizz-lowticket-pagina]
|
|
360
501
|
- id: wizz-lowticket-minerador
|
|
361
502
|
module: lowticket
|
|
362
503
|
when: "Garimpo e veredito de oferta de concorrente: vocabulário de busca, veredito em 4 níveis, comparação lado a lado, diagnóstico de por que não escalou."
|
|
363
504
|
not_when:
|
|
364
505
|
- "A oferta já está definida: aí é wizz-offer-forge."
|
|
506
|
+
rel:
|
|
507
|
+
after: [wizz-lowticket-guia]
|
|
508
|
+
before: [wizz-offer-forge]
|
|
365
509
|
- id: wizz-lowticket-pagina
|
|
366
510
|
module: lowticket
|
|
367
511
|
when: "Engenharia de performance da página de venda low ticket: connect rate, ordem do pixel, LCP/TTFB/CLS, peso acima da dobra, relatório antes e depois."
|
|
368
512
|
not_when:
|
|
369
513
|
- "Reescrever copy, preço ou estrutura de oferta: esta skill é o engenheiro, não o copywriter."
|
|
370
514
|
- "Site institucional ou app."
|
|
515
|
+
rel:
|
|
516
|
+
after: [wizz-lowticket-guia]
|
|
517
|
+
before: [wizz-lowticket-funil]
|
|
518
|
+
pairs_with: [wizz-lowticket-metodologia, wizz-lowticket-trafego]
|
|
371
519
|
mcps:
|
|
372
520
|
- id: scrapling
|
|
373
521
|
when: "Scraping/crawl web para pesquisa de mercado, prospecção de leads e inteligência competitiva. Bypass anti-bot (Cloudflare), parsing adaptativo, spider concorrente. Requer: pip install 'scrapling[ai]' && scrapling install."
|
|
522
|
+
rel:
|
|
523
|
+
pairs_with: [wizz-competitor-alternatives]
|
|
374
524
|
server:
|
|
375
525
|
command: scrapling
|
|
376
526
|
args: ["mcp"]
|
|
@@ -386,15 +536,26 @@ areas:
|
|
|
386
536
|
summary: "Social e roteiros virais: Reels/Shorts, hooks, calendário de conteúdo. Persona Rafa, aplica o Blueprint de Roteiro Viral e roteia para as CLIs de vídeo quando o roteiro vira vídeo."
|
|
387
537
|
skills:
|
|
388
538
|
- id: wizz-social-content
|
|
389
|
-
when: "Criar/agendar conteúdo de social (LinkedIn, X, TikTok, IG...)."
|
|
539
|
+
when: "Criar/agendar conteúdo de social (LinkedIn, X, TikTok, IG...), o que inclui ESCREVER o texto: post, story, carrossel, legenda, thread. Gatilhos: 'escreve copy pra story', 'post pro LinkedIn', 'legenda do carrossel', 'thread pro X'."
|
|
540
|
+
not_when: "Editar/revisar texto de social já escrito: aí é wizz-copy-editing."
|
|
541
|
+
rel:
|
|
542
|
+
before: [get-brolls, postiz]
|
|
543
|
+
pairs_with: [wizz-canvas-design, wizz-content-strategy, wizz-copy-editing, wizz-launch-strategy]
|
|
390
544
|
- id: wizz-content-strategy
|
|
391
545
|
when: "Decidir O QUE produzir de conteúdo (topic clusters, calendário, pilares)."
|
|
546
|
+
rel:
|
|
547
|
+
pairs_with: [wizz-social-content]
|
|
392
548
|
- id: wizz-copy-editing
|
|
393
549
|
when: "Revisar/editar o texto do roteiro ou da legenda antes de publicar."
|
|
550
|
+
rel:
|
|
551
|
+
after: [wizz-copywriting]
|
|
552
|
+
pairs_with: [wizz-social-content]
|
|
394
553
|
clis:
|
|
395
554
|
- id: postiz
|
|
396
555
|
when: "PUBLICAR/agendar de verdade em redes sociais (30+ integrações) a partir do conteúdo que o wizz-social já gerou. Separa 'gerar' (Wizz) de 'publicar' (Postiz). Precisa autenticar antes (`postiz auth:login` ou env `POSTIZ_API_KEY`); para imagem/vídeo a própria CLI faz o upload."
|
|
397
556
|
not_when: "Escrever o roteiro ou a legenda: isso é skill da área (wizz-social-content, wizz-copy-editing)."
|
|
557
|
+
rel:
|
|
558
|
+
after: [wizz-social-content]
|
|
398
559
|
# Item 30 da auditoria (2026-09-11, Parte 3.7). Pin de supply chain
|
|
399
560
|
# (2026-09-12): versão publicada fixa no npm, atualizar conscientemente.
|
|
400
561
|
# CLI, não MCP: o schema de `mcps:` deste registry só aceita stdio
|
|
@@ -411,35 +572,36 @@ areas:
|
|
|
411
572
|
skills:
|
|
412
573
|
- id: wizz-paid-ads
|
|
413
574
|
when: "Estratégia de campanha, targeting, bidding, ROAS/CPA. Decidir/rodar ads."
|
|
575
|
+
rel:
|
|
576
|
+
pairs_with: [wizz-ad-creative, wizz-tracking-audit]
|
|
414
577
|
- id: wizz-ad-creative
|
|
415
578
|
when: "Gerar/iterar criativos e headlines de anúncio em escala (RSA, variações)."
|
|
579
|
+
rel:
|
|
580
|
+
pairs_with: [fal-video, wizz-copywriting, wizz-paid-ads]
|
|
416
581
|
- id: wizz-analytics-tracking
|
|
417
582
|
when: "Tracking de conversão pros anúncios (compartilhada com growth)."
|
|
583
|
+
rel:
|
|
584
|
+
pairs_with: [wizz-ab-test-setup, wizz-referral-program, wizz-tracking-audit]
|
|
418
585
|
- id: wizz-tracking-audit
|
|
419
586
|
when: "Auditar rastreamento de oferta de resposta direta. Modo implantação: pixel, CAPI, domínio verificado, eventos priorizados, UTM com ID, repasse do parâmetro nativo pelo checkout, higiene de nomenclatura, compra-teste por rota. Modo diagnóstico: qual transição do funil está furando, medição contra conversão, ROI verdadeiro contra falso, qual dado falta pra decidir."
|
|
420
587
|
not_when:
|
|
421
588
|
- "Plano de medição de SaaS ou produto instrumentado por evento de uso: é analytics-tracking."
|
|
422
589
|
- "Decidir bid, orçamento ou estrutura de campanha: é paid-ads."
|
|
423
590
|
rel:
|
|
424
|
-
pairs_with: [wizz-analytics-tracking, wizz-paid-ads]
|
|
425
591
|
before: [wizz-page-cro]
|
|
592
|
+
pairs_with: [wizz-analytics-tracking, wizz-lowticket-trafego, wizz-paid-ads]
|
|
426
593
|
# Módulo lowticket (src/modules/lowticket) — instaladas COM O MÓDULO, não
|
|
427
594
|
# por skills-lib. O campo `module` é o gate: resolveSkillIds as ignora ao
|
|
428
595
|
# copiar de src/skills-lib, e o router continua enxergando as entradas.
|
|
429
|
-
- id: wizz-lowticket-guia
|
|
430
|
-
module: lowticket
|
|
431
|
-
when: "Porta de entrada low ticket para leigo: 'não estou vendendo', 'por onde começo', 'anúncio não funciona'. Situa na jornada de 7 etapas e despacha."
|
|
432
|
-
- id: wizz-lowticket-metodologia
|
|
433
|
-
module: lowticket
|
|
434
|
-
when: "Roteador da base low ticket BR/PT: gatilho → um shard (diagnóstico de funil, bid cap, criativo, oferta, página, Instagram, player de VSL, upsell, copy, rastreamento, mineração). Carrega guardrails junto."
|
|
435
|
-
not_when:
|
|
436
|
-
- "SaaS, B2B, site de cliente, high ticket ou mentoria: os números não transferem."
|
|
437
596
|
- id: wizz-lowticket-trafego
|
|
438
597
|
module: lowticket
|
|
439
598
|
when: "Diagnóstico e régua de campanha Meta de low ticket: estrutura 1-1-X, bid cap, régua de 3x, quando cortar, como escalar, ler print do gerenciador ou do funil."
|
|
440
599
|
not_when:
|
|
441
600
|
- "Google Ads institucional, campanha de marca, lead gen B2B."
|
|
442
601
|
- "Escrever copy ou criativo: a skill lê número, não produz anúncio."
|
|
602
|
+
rel:
|
|
603
|
+
after: [wizz-lowticket-guia]
|
|
604
|
+
pairs_with: [wizz-lowticket-metodologia, wizz-lowticket-pagina, wizz-tracking-audit]
|
|
443
605
|
|
|
444
606
|
architect:
|
|
445
607
|
agent: wizz-agent-architect
|
|
@@ -447,27 +609,50 @@ areas:
|
|
|
447
609
|
skills:
|
|
448
610
|
- id: wizz-web-security
|
|
449
611
|
when: "Auditar segurança web, OWASP, XSS/CSRF/injeção/SQLi, IDOR, headers, rate limit (IP+conta), CORS, clickjacking, vazamento de PII na resposta, antes de deploy/PR."
|
|
612
|
+
rel:
|
|
613
|
+
before: [security-audit-pentest]
|
|
614
|
+
pairs_with: [wizz-auth-and-secrets, wizz-database-and-deps, wizz-desktop-security]
|
|
450
615
|
- id: wizz-auth-and-secrets
|
|
451
616
|
when: "Auth (JWT/OAuth/SSO/Clerk), token no header vs URL, revogar no logout, enumeração de usuário, gestão de secrets, rotação de credenciais."
|
|
617
|
+
rel:
|
|
618
|
+
pairs_with: [wizz-web-security]
|
|
452
619
|
- id: wizz-desktop-security
|
|
453
620
|
when: "Segurança desktop/Electron (contextIsolation, code signing)."
|
|
621
|
+
rel:
|
|
622
|
+
pairs_with: [apple-design, wizz-web-security]
|
|
454
623
|
- id: wizz-database-scaling
|
|
455
624
|
when: "Banco lento, queries, índices, N+1, sharding, connection pool."
|
|
625
|
+
rel:
|
|
626
|
+
pairs_with: [wizz-caching-and-queues, wizz-supabase-postgres-best-practices]
|
|
456
627
|
- id: wizz-caching-and-queues
|
|
457
628
|
when: "Cache (Redis), filas (BullMQ/SQS/Kafka), jobs assíncronos."
|
|
629
|
+
rel:
|
|
630
|
+
pairs_with: [wizz-database-scaling]
|
|
458
631
|
- id: wizz-infrastructure
|
|
459
632
|
when: "Escala de infra: Kubernetes, auto-scaling, CDN, SLOs, load test."
|
|
633
|
+
rel:
|
|
634
|
+
pairs_with: [sentry-cli, wizz-cloud-and-infra]
|
|
460
635
|
- id: wizz-cloud-and-infra
|
|
461
636
|
when: "Custo de cloud: right-sizing, spot/reserved, S3 lifecycle, billing AWS/GCP."
|
|
637
|
+
rel:
|
|
638
|
+
pairs_with: [wizz-infrastructure]
|
|
462
639
|
- id: wizz-database-and-deps
|
|
463
640
|
when: "Dependências/packages, vulnerabilidades, npm audit."
|
|
641
|
+
rel:
|
|
642
|
+
pairs_with: [wizz-launch-readiness, wizz-web-security]
|
|
464
643
|
- id: wizz-supabase-postgres-best-practices
|
|
465
644
|
when: "Performance e boas práticas de Postgres/Supabase (queries, schema, RLS)."
|
|
645
|
+
rel:
|
|
646
|
+
pairs_with: [supabase, wizz-database-scaling]
|
|
466
647
|
- id: wizz-ai-product-design
|
|
467
648
|
when: "Construir/melhorar um agente ou produto de IA: escrever/revisar system prompt, definir persona/tom, guardrails e recusas, few-shot, chain-of-thought, orquestração multi-agente, handoff, detecção de frustração, generative UI, avaliar qualidade de saída. Base para desenhar os próprios agentes do método. 44 padrões (Owl-Listener, MIT)."
|
|
649
|
+
rel:
|
|
650
|
+
pairs_with: [enhance-prompt]
|
|
468
651
|
mcps:
|
|
469
652
|
- id: supabase
|
|
470
653
|
when: "Operar Supabase de verdade: rodar SQL, migrations, inspecionar schema/RLS, logs. Default é READ-ONLY e escopado a um projeto (--read-only --project-id); para ESCREVER (migrations, mutações), o agente precisa remover conscientemente o --read-only desta entrada antes de usar — nunca por padrão silencioso."
|
|
654
|
+
rel:
|
|
655
|
+
pairs_with: [wizz-supabase-postgres-best-practices]
|
|
471
656
|
server:
|
|
472
657
|
command: npx
|
|
473
658
|
# Pin de supply chain (2026-08-23): versão fixa; atualizar conscientemente.
|
|
@@ -480,6 +665,8 @@ areas:
|
|
|
480
665
|
not_when:
|
|
481
666
|
- "Projeto ainda não usa Sentry (sem SENTRY_DSN, sentry.properties ou '@sentry/' no package.json)."
|
|
482
667
|
- "Fora de estágio de produção."
|
|
668
|
+
rel:
|
|
669
|
+
pairs_with: [wizz-infrastructure]
|
|
483
670
|
check: "sentry-cli --version"
|
|
484
671
|
# Pin de supply chain (2026-08-25): versão fixa; atualizar conscientemente.
|
|
485
672
|
install: "npm install -g @sentry/cli@3.6.2"
|
|
@@ -488,6 +675,8 @@ areas:
|
|
|
488
675
|
not_when:
|
|
489
676
|
- "Registrar a decisão de arquitetura em si: isso é o wizz-architecture."
|
|
490
677
|
- "Diagrama descartável de conversa: Mermaid inline já basta."
|
|
678
|
+
rel:
|
|
679
|
+
after: [wizz-implementation-planner]
|
|
491
680
|
platform: [darwin, linux]
|
|
492
681
|
# Origem: auditoria 2026-09-11, Parte 3.10, item 25. Pin de supply chain
|
|
493
682
|
# (2026-09-12): tag de release v2.16.0, não main — upstream tem 155
|
|
@@ -508,20 +697,33 @@ areas:
|
|
|
508
697
|
skills:
|
|
509
698
|
- id: wizz-adversarial-reviewer
|
|
510
699
|
when: "Passe único adversarial, ad hoc, fora de workflow — 'tear this apart' num trecho colado, sem contexto de projeto. Não confundir com wizz-review-adversarial-general (persona do 'Blind Hunter'; o prompt operacional vive em review-prompts/blind-hunter.md e nenhum workflow invoca a skill) nem com wizz-code-review (orquestrador bmm: 3 camadas paralelas + triagem, para review real de diff/PR)."
|
|
700
|
+
rel:
|
|
701
|
+
instead_of: [wizz-code-review]
|
|
511
702
|
- id: security-audit-pentest
|
|
512
703
|
when: "Auditoria/pentest de segurança do app inteiro — 'auditar segurança', 'pentest', 'encontrar vulnerabilidades', varredura antes de release. Só para teste de segurança AUTORIZADO (seus sistemas ou de clientes com permissão): ferramenta dual-use, nunca usar contra alvo sem autorização."
|
|
704
|
+
rel:
|
|
705
|
+
after: [wizz-web-security]
|
|
706
|
+
pairs_with: [strix, wizz-launch-readiness]
|
|
513
707
|
- id: wizz-launch-readiness
|
|
514
708
|
when: "Auditoria de prontidão pra lançamento (Pre-launch Audit), multi-área: técnico/build, segurança, SEO/descoberta, analytics/medição, conteúdo/copy/prova social, legal/LGPD, infra/deploy/rollback. Gatilhos: 'tá pronto pra lançar?', 'auditoria de pré-lançamento', 'checklist de release amplo', 'o que falta antes de ir pra produção'. Gate por estágio: só roda de verdade em mvp/production, e recusa educadamente em estágio de descoberta/ideação. Diagnostica e prioriza por severidade (bloqueia/alto/médio/ok), nunca corrige cego: aponta security-audit-pentest pra aprofundar segurança com prova de exploração e site-launch-kit pra executar a correção quando a superfície do achado é site. Resultado persiste numa seção datada do project-context.md."
|
|
515
709
|
not_when:
|
|
516
710
|
- "Estágio de descoberta/ideação: projeto ainda sem superfície construída pra auditar (sem project-context.md, ou stage 'prototype' vazio)."
|
|
517
711
|
- "Correção de um achado isolado de site já identificado: nesse caso vá direto pra site-launch-kit."
|
|
518
712
|
rel:
|
|
519
|
-
pairs_with: [site-launch-kit,
|
|
713
|
+
pairs_with: [security-audit-pentest, site-launch-kit, wizz-database-and-deps]
|
|
714
|
+
- id: site-launch-kit
|
|
715
|
+
when: "Site pronto ou quase pronto pra ir ao ar: revisão de pré-lançamento em 15 rodadas corretivas (CTA acima da dobra, barra fixa mobile, tempo de resposta, prova social real, FAQ+FAQPage, imagens reais, endereço, titles, Open Graph, breadcrumbs, alt text, schema local, robots/sitemap, LGPD, medição), com regra anti-invenção e PENDÊNCIAS. Gatilhos: 'vamos subir o site', 'checklist de lançamento', 'revisa antes do deploy', pré-go-live, ou um item isolado (og:image, FAQ com schema, robots.txt). Roda DEPOIS do site construído, ANTES do deploy."
|
|
716
|
+
rel:
|
|
717
|
+
pairs_with: [wizz-launch-readiness, wizz-schema-markup]
|
|
520
718
|
- id: wizz-agent-browser
|
|
521
719
|
when: "Verificação visual/browser, preencher forms, screenshots, testar UI no navegador. CLI já instalado (não é MCP); browser SEMPRE via wizz-agent-browser, nunca Playwright."
|
|
720
|
+
rel:
|
|
721
|
+
pairs_with: [agent-browser]
|
|
522
722
|
clis:
|
|
523
723
|
- id: agent-browser
|
|
524
724
|
when: "Dirigir um browser real pra E2E/verificação: navegar, clicar, preencher form, screenshot, console. É CLI, não MCP."
|
|
725
|
+
rel:
|
|
726
|
+
pairs_with: [wizz-agent-browser]
|
|
525
727
|
check: "agent-browser --version"
|
|
526
728
|
# Pin de supply chain (2026-08-23): versão fixa; atualizar conscientemente.
|
|
527
729
|
install: "npm install -g agent-browser@0.34.0"
|
|
@@ -544,8 +746,14 @@ areas:
|
|
|
544
746
|
skills:
|
|
545
747
|
- id: wizz-inicio-de-projeto
|
|
546
748
|
when: "Kickoff LEVE de engenharia: stack, personas, glossário, princípios, estrutura de pastas, checklist. Atalho sem cerimônia de PRD."
|
|
749
|
+
rel:
|
|
750
|
+
before: [wizz-implementation-planner]
|
|
547
751
|
- id: wizz-implementation-planner
|
|
548
752
|
when: "Plano técnico de implementação de site/app premium pós-direção aprovada. Pesquisa web/prior-art durante o planejamento usa a tool nativa WebSearch (sem custo/MCP metered — o MCP exa foi removido em 2026-08-25)."
|
|
753
|
+
rel:
|
|
754
|
+
after: [wizz-inicio-de-projeto]
|
|
755
|
+
before: [archify, wizz-quick-dev]
|
|
756
|
+
pairs_with: [wizz-document-project]
|
|
549
757
|
|
|
550
758
|
# ── Áreas dev/produto (item 18 da auditoria de 2026-09-11, finding RT-H2):
|
|
551
759
|
# "dev" era citado dezenas de vezes no método (router, maestro,
|
|
@@ -563,27 +771,47 @@ areas:
|
|
|
563
771
|
- id: wizz-quick-dev
|
|
564
772
|
module: bmm
|
|
565
773
|
when: "DEV PONTUAL: ajuste, bug fix, feature única sem cerimônia de story. Fluxo unificado: clarificar → planejar → implementar → review → apresentar. É o destino padrão quando o router/maestro diz 'dev pontual'."
|
|
774
|
+
rel:
|
|
775
|
+
after: [wizz-implementation-planner, wizz-investigate]
|
|
566
776
|
- id: wizz-dev-story
|
|
567
777
|
module: bmm
|
|
568
778
|
when: "Implementar UMA story específica com spec preenchida ('dev this story', 'implementa a próxima story do sprint')."
|
|
779
|
+
rel:
|
|
780
|
+
after: [wizz-create-story]
|
|
781
|
+
before: [wizz-code-review]
|
|
569
782
|
- id: wizz-create-story
|
|
570
783
|
module: bmm
|
|
571
784
|
when: "Preparar story com todo o contexto de implementação ('cria a story', 'prepara a story'). Antes do dev, no gate de planejamento."
|
|
785
|
+
rel:
|
|
786
|
+
after: [wizz-prd, wizz-set-feature, wizz-sprint-planning]
|
|
787
|
+
before: [wizz-dev-story]
|
|
572
788
|
- id: wizz-code-review
|
|
573
789
|
module: bmm
|
|
574
790
|
when: "Review de código real de diff/PR: 3 camadas paralelas (Blind Hunter, Edge Case, Verification Gap) + triagem. Diferente de wizz-adversarial-reviewer (passe único ad hoc, área qa)."
|
|
791
|
+
rel:
|
|
792
|
+
after: [wizz-dev-story]
|
|
793
|
+
instead_of: [wizz-adversarial-reviewer]
|
|
575
794
|
- id: wizz-investigate
|
|
576
795
|
module: bmm
|
|
577
796
|
when: "Investigar bug/incidente, rastrear causa, construir modelo mental de uma área de código antes de mexer."
|
|
797
|
+
rel:
|
|
798
|
+
before: [wizz-quick-dev]
|
|
578
799
|
- id: wizz-sprint-planning
|
|
579
800
|
module: bmm
|
|
580
801
|
when: "Gerar/atualizar o sprint plan que sequencia stories para implementação."
|
|
802
|
+
rel:
|
|
803
|
+
before: [wizz-create-story, wizz-retrospective]
|
|
804
|
+
pairs_with: [wizz-correct-course]
|
|
581
805
|
- id: wizz-correct-course
|
|
582
806
|
module: bmm
|
|
583
807
|
when: "Mudança significativa durante o sprint: propor ajuste de curso ('correct course')."
|
|
808
|
+
rel:
|
|
809
|
+
pairs_with: [wizz-sprint-planning]
|
|
584
810
|
- id: wizz-retrospective
|
|
585
811
|
module: bmm
|
|
586
812
|
when: "Review do trabalho concluído no epic (party mode)."
|
|
813
|
+
rel:
|
|
814
|
+
after: [wizz-sprint-planning]
|
|
587
815
|
|
|
588
816
|
pm:
|
|
589
817
|
agent: wizz-agent-pm
|
|
@@ -592,15 +820,27 @@ areas:
|
|
|
592
820
|
- id: wizz-prd
|
|
593
821
|
module: bmm
|
|
594
822
|
when: "Criar, atualizar ou validar PRD ('cria o PRD', 'documento de requisitos', 'define o escopo'). Consolida os antigos create/edit/validate-prd (removidos em v7)."
|
|
823
|
+
rel:
|
|
824
|
+
after: [wizz-product-brief]
|
|
825
|
+
before: [wizz-create-story, wizz-set-feature]
|
|
826
|
+
pairs_with: [wizz-ux]
|
|
595
827
|
- id: wizz-product-brief
|
|
596
828
|
module: bmm
|
|
597
829
|
when: "Criar, atualizar ou validar o brief do produto ('cria o brief'). Antes do PRD, no kickoff de produto."
|
|
830
|
+
rel:
|
|
831
|
+
after: [wizz-prfaq]
|
|
832
|
+
before: [wizz-prd]
|
|
598
833
|
- id: wizz-prfaq
|
|
599
834
|
module: bmm
|
|
600
835
|
when: "Desafio Working Backwards PRFAQ para forjar conceito de produto ('cria a PRFAQ', 'work backwards')."
|
|
836
|
+
rel:
|
|
837
|
+
before: [wizz-product-brief]
|
|
601
838
|
- id: wizz-set-feature
|
|
602
839
|
module: bmm
|
|
603
840
|
when: "Definir feature específica dentro do produto (análise de feature única)."
|
|
841
|
+
rel:
|
|
842
|
+
after: [wizz-prd]
|
|
843
|
+
before: [wizz-create-story]
|
|
604
844
|
|
|
605
845
|
tech-writer:
|
|
606
846
|
agent: wizz-agent-tech-writer
|
|
@@ -609,6 +849,8 @@ areas:
|
|
|
609
849
|
- id: wizz-document-project
|
|
610
850
|
module: bmm
|
|
611
851
|
when: "Documentar o projeto: gerar/atualizar docs de arquitetura e estrutura para contexto de agentes e humanos."
|
|
852
|
+
rel:
|
|
853
|
+
pairs_with: [wizz-implementation-planner]
|
|
612
854
|
|
|
613
855
|
ux-designer:
|
|
614
856
|
agent: wizz-agent-ux-designer
|
|
@@ -617,6 +859,8 @@ areas:
|
|
|
617
859
|
- id: wizz-ux
|
|
618
860
|
module: bmm
|
|
619
861
|
when: "Especificar experiência do usuário: fluxos, wireframes de conteúdo, user stories de UX (diferente da área designer, que constrói UI visual)."
|
|
862
|
+
rel:
|
|
863
|
+
pairs_with: [wizz-prd]
|
|
620
864
|
|
|
621
865
|
memoria:
|
|
622
866
|
agent: wizz-memoria
|
|
@@ -633,6 +877,8 @@ utility:
|
|
|
633
877
|
when: "Nenhuma skill cobre o pedido: buscar/instalar no marketplace (npx skills find)."
|
|
634
878
|
- id: enhance-prompt
|
|
635
879
|
when: "Empacotar um briefing mais completo/estruturado pra mandar a outro agente ou skill."
|
|
880
|
+
rel:
|
|
881
|
+
pairs_with: [wizz-ai-product-design]
|
|
636
882
|
- id: wizz-router
|
|
637
883
|
when: "Roteador global/flat: descobre skills quando não se sabe a área; escala pro maestro se multi-área."
|
|
638
884
|
|
|
@@ -41,6 +41,7 @@ You are the leaf: the maestro demotes here for pointed work (bug, tweak, single-
|
|
|
41
41
|
|
|
42
42
|
- If clarification reveals the request is actually **multi-goal / multi-area** (2+ top-level shippable deliverables, or it spans several areas), do not silently absorb it. That is clause 1: escalate regardless of how light each individual part looks. Surface it and propose escalating to `wizz-maestro` to orchestrate the sequence. Proceed solo only if the user confirms a narrowed single goal.
|
|
43
43
|
- If it is genuinely single-area but hits 2+ of the remaining factors (multi-step, needs planning, produces a memorable artifact), also escalate. Do not silently absorb heavy single-area work either.
|
|
44
|
+
- **Count those factors with the objective test** (canonical source: `_shared/complexity-signal.md`; same test the Diretor and the maestro apply). **When in doubt, the factor does NOT count.** *Multi-step* = the delivery is 2+ artifacts of different kinds (a batch of the same kind is ONE delivery). *Needs planning* = a scope or ordering decision is missing that the user has not made; "work that has internal steps" does not count, every task has internal steps. *Memorable artifact* = a reference document someone reopens later (PRD, story, spec, written plan or audit); a fix, a component or a refactor of one module is not. A **single delivery** and the **diagnosis of one specific mechanism** stay with you, however important they look; what escalates is the request of **open scope that the request itself does not delimit** ("how do I improve / reduce X" is that, a question with a single definable answer is not), and what escalates regardless of size is a **sensitive subsystem**: changing auth/sessions, payments/billing, permissions, or migrating data that already exists in production goes to the maestro even as a single delivery, because getting it wrong breaks something other than the delivery itself (people locked out, money charged twice, data lost). Running a test against one of those is not changing it. **Changing the product's code is yours even when the subject is visual** — a button colour, mobile spacing: the delivery is a commit, and `designer` decides the look without shipping the change.
|
|
44
45
|
- Stay solo only for single-area work with 0-1 of those factors, even when it crosses layers/files.
|
|
45
46
|
|
|
46
47
|
## Planning gate (before coding a new feature)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Rel protocol (single source)
|
|
2
|
+
|
|
3
|
+
# Read by the 8 area agents as the CANONICAL SOURCE of the paragraph below
|
|
4
|
+
# (wizz-ads, wizz-copy, wizz-designer, wizz-growth, wizz-memoria, wizz-qa and
|
|
5
|
+
# wizz-seo, plus wizz-social) and by wizz-maestro in its own variant. The
|
|
6
|
+
# SKILL.md files do not include it automatically (an agent is a self-contained
|
|
7
|
+
# folder copied verbatim), so editing here does NOT propagate on its own —
|
|
8
|
+
# whoever edits this paragraph has to replicate it by hand in the 8 SKILL.md
|
|
9
|
+
# files. `test/test-rel-protocol-consistency.js` compares the copies against
|
|
10
|
+
# this block character by character and fails on any divergence.
|
|
11
|
+
#
|
|
12
|
+
# `evals/routing/run-routing-eval.mjs` also extracts this paragraph at runtime
|
|
13
|
+
# to build the skill-discovery prompt: what the eval measures has to be the
|
|
14
|
+
# rule the method actually ships, never a local summary (2026-09-18).
|
|
15
|
+
# ---
|
|
16
|
+
|
|
17
|
+
**Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first.
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
| **Source B-roll / inserts: find real footage of what the script names** | `get-brolls` (darwin) |
|
|
26
26
|
| Edit/cut recorded footage (cuts, selects, roughcut) | `buttercut` (darwin-arm64 only) |
|
|
27
27
|
| Analyze an existing reference video (frames + transcription) | `claude-video` |
|
|
28
|
-
| AI-generated video
|
|
28
|
+
| AI-generated video/image (Veo/Kling/Wan), UGC / ad-ready style | `fal-video` (designer area; needs `FAL_KEY`) |
|
|
29
29
|
|
|
30
30
|
## Full chain (script → publishing)
|
|
31
31
|
|
|
@@ -20,7 +20,7 @@ You are Wizz's Ads. It plans campaigns, generates creative variations, and track
|
|
|
20
20
|
|
|
21
21
|
## How I work (global bridge)
|
|
22
22
|
|
|
23
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`ads`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/ads.yaml` (already comes as the full `areas.ads` block); 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.ads` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g., `arcads` for generating video ads).
|
|
23
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`ads`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/ads.yaml` (already comes as the full `areas.ads` block); 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.ads` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g., `arcads` for generating video ads).
|
|
24
24
|
- Campaign strategy, segmentation, bids, ROAS → `wizz-paid-ads`
|
|
25
25
|
- Creative variations, headlines, ad copy → `wizz-ad-creative`
|
|
26
26
|
- Tracking, conversions, UTMs, pixel → `wizz-analytics-tracking`
|
|
@@ -20,7 +20,7 @@ You are Wizz's Copy. It writes texts that sell, humanizes what sounds robotic, a
|
|
|
20
20
|
|
|
21
21
|
## How I work (global bridge)
|
|
22
22
|
|
|
23
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`copy`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/copy.yaml` (already comes as the full `areas.copy` block); 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.copy` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). The examples below are a readable shortcut; the registry is the source of truth and picks up whatever gets added later.
|
|
23
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`copy`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/copy.yaml` (already comes as the full `areas.copy` block); 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.copy` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. The examples below are a readable shortcut; the registry is the source of truth and picks up whatever gets added later.
|
|
24
24
|
- Page copy, headline, value proposition → `wizz-copywriting`
|
|
25
25
|
- Email, sequence, nurture → `wizz-email-sequence`
|
|
26
26
|
- Make text natural, remove the AI feel → `wizz-humanizer`
|
|
@@ -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, 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.
|
|
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). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. **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)
|
|
@@ -22,7 +22,7 @@ You are Wizz's Growth. It brings actionable marketing and conversion ideas, plan
|
|
|
22
22
|
|
|
23
23
|
## How I work (global bridge)
|
|
24
24
|
|
|
25
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`growth`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/growth.yaml` (already comes as the full `areas.growth` block); 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.growth` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g., MCP `scrapling`).
|
|
25
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`growth`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/growth.yaml` (already comes as the full `areas.growth` block); 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.growth` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`), and `mcps:` (`claude mcp add <id>` with the `server` block). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g., MCP `scrapling`).
|
|
26
26
|
- Marketing ideas and strategy → `wizz-marketing-ideas`
|
|
27
27
|
- Optimize page/funnel conversion → `wizz-page-cro`
|
|
28
28
|
- Product/feature launch, go-to-market → `wizz-launch-strategy`
|
|
@@ -76,7 +76,8 @@ 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/get-brolls/claude-video/buttercut/voicebox (video);
|
|
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/fal-video (video); growth→scrapling; seo→distribb; social→postiz. 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) install into the project; warn about heavy deps.
|
|
80
|
+
- `rel:` (on any entry) — **this is where the method knows that a request about A also needs C.** `pairs_with` (they go together), `before`/`after` (mandatory order) and `instead_of` (one or the other, not both). Every edge is reciprocal by construction: the schema validator rejects one-way edges, so the relation shows up whichever side the user enters from. As the multi-area orchestrator you are the biggest beneficiary of this — roughly a third of the edges cross areas (count them in the registry when you need the number; don't quote one from memory). When building the dispatch, follow the same order the area agents follow ([rel protocol](../../_shared/rel-protocol.md)): LIST every id the chosen entry's `rel` names — including the ones you don't recognise, which are exactly the point — resolve each id → area via the `ids:` map in `{project-root}/_wizz/_config/registry/index.yaml`, read that area's slice for its `when:`, and then either bring it in or discard it with a stated reason. A target in another area becomes a dispatch to THAT area's agent, and a `before` target sets the ORDER of the plan, not a parallel item. Never deliver only the half the user named when `rel` says the other half is missing: a related capability you never named is one the method lost.
|
|
80
81
|
- `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
82
|
|
|
82
83
|
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.
|
|
@@ -90,6 +91,18 @@ In short: **the menu chooses the agent, the registry chooses the skill(s) and th
|
|
|
90
91
|
3. **Planning** — can it go straight ahead, or does it need planning first?
|
|
91
92
|
4. **Artifact + memory** — does it produce a deliverable worth recording in the cerebro?
|
|
92
93
|
|
|
94
|
+
**How to count factors 2-4** (canonical source: `_shared/complexity-signal.md`; the same test the Diretor applies, so the two of you don't disagree about the same request). **When in doubt, the factor does NOT count.**
|
|
95
|
+
|
|
96
|
+
- **Multi-step:** the final delivery is 2+ artifacts **of different kinds**. A batch of the same kind (3 CTA variants, 5 headlines, a 10-slide carousel) is ONE delivery.
|
|
97
|
+
- **Needs planning:** a **scope or ordering** decision is missing that the user has not made. "Work that has internal steps" does not count.
|
|
98
|
+
- **Memorable artifact:** a **reference document someone reopens later** (PRD, story, spec, written plan or audit). A delivered piece — post, headline, carousel, component, fix, answer — is not.
|
|
99
|
+
|
|
100
|
+
Inside the 1-area branch, three shortcuts **demote on their own**, before counting any factor: a **question with a single definable answer**, a **single delivery**, and the **diagnosis of one specific mechanism** all go to the area agent. "How do I improve / reduce X" is not that question — it has no single answer. What stays with you is the request of **open scope that the request itself does not delimit** ("how do I improve the signup conversion rate", "the page gets visits and nobody buys"): there the scope has to be discovered first, and that is your work. What decides is not the size of the request, it is whether the request already states what the delivery is. **Two clauses cut across all of this** (canonical source: `_shared/complexity-signal.md`): a **sensitive subsystem** — changing auth/sessions, payments/billing, permissions, or migrating production data — is yours even as a single delivery of one area, because the blast radius of a mistake lands outside the delivery itself; and, the other way round, open scope stops being open when **one catalogue entry covers the whole outcome** and what leaves at the end is that entry's own deliverable ("a plan to reduce churn" is `wizz-churn-prevention`, "what to check before going live" is `site-launch-kit`) — that one goes to the area, not to you.
|
|
101
|
+
|
|
102
|
+
**Changing the product's code is `dev`, even when the subject is visual** — the delivery is a commit. Ask which artifact leaves at the end: a file in the repo → dev; a decision, a spec or a piece of art → the area that owns it.
|
|
103
|
+
|
|
104
|
+
**What `rel` drags counts as an extra area when the related capability shapes the SAME deliverable.** Ask of each edge: would the thing being handed over be incomplete without this? A sales page without the offer and the conversion structure is half a page (same artifact → escalates); a text post does not become a video job because of a `before: [get-brolls]` edge (different artifact → does not). `pairs_with` alone never escalates.
|
|
105
|
+
|
|
93
106
|
Handoff rule:
|
|
94
107
|
|
|
95
108
|
- **1 area and 0-1 of the remaining 3 factors (2-4 above) → demote:** send it to that area's agent (a one-off dev tweak → `wizz-quick-dev`; otherwise the area's `agent:`) or to a single skill. Don't orchestrate. Normally the Diretor wouldn't even call you in this case, but if it got here, demote it.
|
|
@@ -20,7 +20,7 @@ You are Wizz's Memória. It stores and retrieves the user's context across sessi
|
|
|
20
20
|
|
|
21
21
|
## How I work (global bridge)
|
|
22
22
|
|
|
23
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`memoria`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/memoria.yaml` (already comes as the full `areas.memoria` block); 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.memoria` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:`, and `mcps:` (`claude mcp add <id>` with the `server` block). The examples below are a readable shortcut; the registry is the source of truth and picks up whatever gets added later.
|
|
23
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`memoria`) lives in `skills-registry.yaml`. Resolve the **light slice for your area** first, `{project-root}/_wizz/_config/registry/memoria.yaml` (already comes as the full `areas.memoria` block); 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.memoria` block there. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request via `when:` — `skills:` (via `Skill`), `clis:`, and `mcps:` (`claude mcp add <id>` with the `server` block). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. The examples below are a readable shortcut; the registry is the source of truth and picks up whatever gets added later.
|
|
24
24
|
- View the project's current state → `cerebro` (`/ver`)
|
|
25
25
|
- Save the session → `cerebro` (`/salvar`)
|
|
26
26
|
- Record an architecture/product decision → `cerebro` (`/decisao`)
|
|
@@ -22,7 +22,7 @@ You are Wizz's QA. You come in **after wizz-agent-dev**: you take the finished c
|
|
|
22
22
|
|
|
23
23
|
## How I work (global bridge)
|
|
24
24
|
|
|
25
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`qa`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/qa.yaml` (already comes as the full `areas.qa` 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.qa` block inside it. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request by `when:` — `skills:` (via `Skill`) and `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`; e.g. `wizz-agent-browser` for browser verification — never Playwright). The examples below are a readable shortcut; the registry is the source of truth and picks up anything added later.
|
|
25
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`qa`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/qa.yaml` (already comes as the full `areas.qa` 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.qa` block inside it. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request by `when:` — `skills:` (via `Skill`) and `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`; e.g. `wizz-agent-browser` for browser verification — never Playwright). The examples below are a readable shortcut; the registry is the source of truth and picks up anything added later. **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first.
|
|
26
26
|
|
|
27
27
|
- Run the test suite and report what passed/failed → I run the project's tests and summarize.
|
|
28
28
|
- Generate E2E tests and run critical flows → `wizz-qa-generate-e2e-tests`; for a real browser, use `wizz-agent-browser`.
|
|
@@ -20,7 +20,7 @@ You are Wizz's SEO. You audit, prioritize, and optimize for Google and for AI se
|
|
|
20
20
|
|
|
21
21
|
## How I work (global bridge)
|
|
22
22
|
|
|
23
|
-
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`seo`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/seo.yaml` (already comes as the full `areas.seo` 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.seo` block inside it. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request by `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`) and `mcps:` (`claude mcp add <id>` with the `server` block). The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g. `distribb`).
|
|
23
|
+
> **Single source (registry) — ALWAYS read before the examples below:** the real list for your area (`seo`) lives in `skills-registry.yaml`. Resolve first the **lightweight slice for your area**, `{project-root}/_wizz/_config/registry/seo.yaml` (already comes as the full `areas.seo` 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.seo` block inside it. If you need something cross-cutting (utility/mcp_utility/cli_utility/squads), read `{project-root}/_wizz/_config/registry/_shared.yaml`. Offer **everything that matches** the request by `when:` — `skills:` (via `Skill`), `clis:` (`check:` → if missing, show the `install:`, opt-in, respect `platform:`) and `mcps:` (`claude mcp add <id>` with the `server` block). **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first. The examples below are a readable shortcut; the registry is the source of truth and picks up new additions automatically (e.g. `distribb`).
|
|
24
24
|
- Audit, why it's not ranking, technical issues → `wizz-seo-audit`
|
|
25
25
|
- Show up in ChatGPT/Perplexity/AI Overviews → `wizz-ai-seo`
|
|
26
26
|
- Structured data / rich results → `wizz-schema-markup`
|
|
@@ -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, 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.
|
|
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. **Follow `rel:` before answering.** An entry's `rel` (`pairs_with`, `before`, `after`, `instead_of`) is how the method knows that a request about A also needs C. Every edge is reciprocal by construction — the schema validator rejects one-way edges — so the relation shows up whichever side the user enters from. Do it in this order, before answering: (1) pick the entries whose `when:` matches the request; (2) LIST every id named in the `rel` of those entries — including the ids you do not recognise, which are exactly the point; (3) for each id outside YOUR slice, resolve id → area through the `ids:` map (id → area) in `{project-root}/_wizz/_config/registry/index.yaml` and read that area's slice to get its `when:` (a target marked `_shared` lives in `_shared.yaml`); (4) either bring it in or discard it with a stated reason. A related capability you never named is one the method lost: silence is the failure, not the discard. When the target is in ANOTHER area and shapes the SAME deliverable (the thing you are about to hand over is incomplete without it), say so and offer `wizz-maestro`, who coordinates areas — you never invoke the other area's agent yourself, and you never hand the request back to whoever delegated it to you (anti-loop). Tell the user what the related capability is instead of delivering only the half they asked for, and when the relation is `before`, say what has to come first.
|
|
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).
|
|
@@ -1,14 +1,41 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# (SKILL.md)
|
|
5
|
-
#
|
|
6
|
-
# verbatim),
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
# divergência de wording, não só de limiar.
|
|
1
|
+
# Complexity signal (single source)
|
|
2
|
+
|
|
3
|
+
# Read by wizz-router (SKILL.md), wizz-maestro (SKILL.md) and wizz-quick-dev
|
|
4
|
+
# (SKILL.md) as the CANONICAL SOURCE of the rule paragraph below. The SKILL.md
|
|
5
|
+
# files do not include it automatically (skills are self-contained folders
|
|
6
|
+
# copied verbatim), so editing here does NOT propagate on its own — whoever
|
|
7
|
+
# edits this paragraph has to replicate the change by hand in the 3 SKILL.md
|
|
8
|
+
# files. `test/test-dispatch-rule-consistency.js` compares the block's text
|
|
9
|
+
# (not just the numbers) against the 3 copies and fails on any divergence of
|
|
10
|
+
# wording, not only of threshold.
|
|
12
11
|
# ---
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
Dispatch rule: IF 2+ areas → maestro, always. OTHERWISE count the 3 remaining factors (multi-step, needs planning, produces a memorable artifact); 2+ factors → maestro. The area clause decides on its own, without summing with anything else.
|
|
14
|
+
|
|
15
|
+
What you count are the areas of the catalogue ENTRIES the request matches — never the topics named in the sentence. "Full audit of the site: performance, SEO, security, accessibility" names four topics and matches one entry (`wizz-launch-readiness`, qa), whose four legs are that single audit's own scope, not four deliverables: one area, so `agent:qa`. Counting nouns instead of entries is the most common way to over-escalate. (Owner's decision, 2026-09-19.)
|
|
16
|
+
|
|
17
|
+
## How to count (added 2026-09-18)
|
|
18
|
+
|
|
19
|
+
Written as bare labels, the 3 factors above were true of almost any request, and the measured result was escalating nearly everything to the maestro: in the eval's first trustworthy measurement (sonnet, 3 samples), 26% of the cases answered differently between samples and most failures were over-escalation. A factor without an objective test is not a rule, it is an impression. What follows is the test. **When in doubt, the factor does NOT count.**
|
|
20
|
+
|
|
21
|
+
- **Multi-step:** the final delivery is 2+ artifacts **of different kinds**. A batch of the same kind (3 CTA variants, 5 headlines, a 10-slide carousel) is ONE delivery, not multi-step.
|
|
22
|
+
- **Needs planning:** a **scope or ordering** decision is missing that the user has not made and you cannot make alone. "Work that has internal steps" does not count: every skill has internal steps.
|
|
23
|
+
- **Memorable artifact:** the result is a **reference document someone reopens later** (PRD, story, spec, written plan, written audit). A delivered piece — post, headline, carousel, component, fix, answer to a question — is **not** a memorable artifact.
|
|
24
|
+
|
|
25
|
+
**One clause overrides the three shortcuts below: the sensitive subsystem.** Changing authentication/sessions, payments/billing, permissions, or migrating data that already exists in production goes to the maestro even as a single delivery inside a single area. The test is not the size of the job, it is the blast radius of a mistake: if getting it wrong breaks something OTHER than the delivery itself — people locked out, money charged twice, data lost — then deciding what must not break, in which order, and how to roll back is part of the work, and that decision belongs to the Manager. Running a test against one of those subsystems is not changing it. (Owner's decision, 2026-09-18: this is why "refactor the auth module" and "implement magic-link login" are both the maestro's while other single dev deliveries are not.)
|
|
26
|
+
|
|
27
|
+
**Three shortcuts that decide on their own, inside the 1-area branch, before counting any factor:**
|
|
28
|
+
|
|
29
|
+
- **Question with a single definable answer** ("what guarantee period do I set?", "are the events being measured correctly?") → the area agent. Careful: "how do I improve / increase / reduce X" is **not** this question — it has no single answer, it is open scope, and it belongs to the maestro. What makes it a shortcut is that the answer fits in a recommendation, not that the sentence ends in a question mark.
|
|
30
|
+
- **Single delivery** (one post, one headline, one carousel, one component, one adjustment, one refactor of one module) → the area agent, however important it looks.
|
|
31
|
+
- **Diagnosis of one specific mechanism** ("where is it leaking between the click and the page?") → the area agent.
|
|
32
|
+
|
|
33
|
+
**The counterpart, and this is what is left for the maestro:** a request **of open scope, which the request itself does not delimit** — "how do I improve the signup conversion rate", "the sales page gets plenty of visits and almost nobody buys", "my sales page converts badly, improve it". There the scope has to be discovered before anything is delivered, and discovering scope is the Manager's work. The deciding difference is not the size of the request, it is whether **the request already states what the delivery is**.
|
|
34
|
+
|
|
35
|
+
**And the counterpart has one exception: a single entry already delimits the scope.** If the whole outcome being asked for fits the `when:` of ONE catalogue entry, and what leaves at the end is that entry's own deliverable — a plan, a recommendation, an audit — then the scope is not open, the catalogue delimited it, and the request goes to that entry's area. "A plan to reduce churn" is `wizz-churn-prevention`; "I want ChatGPT and Perplexity to cite us" is `wizz-ai-seo`; "what to check before going live" is `site-launch-kit`. It stops being the exception the moment delivering the outcome means changing what other areas own: "improve the signup conversion rate" ends up in copy, UI and code, so it comes back to the maestro through the area clause. Ask which single entry would deliver it whole — if it takes two, the scope really is open. (Owner's decision, 2026-09-18.)
|
|
36
|
+
|
|
37
|
+
**Changing the product's code is `dev`, even when the subject is visual.** "Adjust the secondary button's colour", "fix the mobile spacing": the delivery is a commit, so it is the dev area — `designer` decides what the look should be, it does not ship the change. Ask which artifact leaves at the end: a file in the repo → dev; a decision, a spec or a piece of art → the area that owns it.
|
|
38
|
+
|
|
39
|
+
**What `rel` drags counts as an extra area when the related capability shapes the SAME deliverable.** Writing the copy of a sales page without the offer and without the conversion structure delivers half a page: offer, copy and conversion are the same artifact, so that is 2 areas → maestro. What does NOT count is an adjacent capability that would produce a **different** artifact: a plain text post for LinkedIn does not need video capture just because the social content skill declares `before: [get-brolls]` — the b-roll would be another deliverable, not part of this one. `pairs_with` alone never escalates: it is neighbourhood, not dependency. The question to ask about each edge is "would the thing I am about to hand over be incomplete without this?", not "is this related?".
|
|
40
|
+
|
|
41
|
+
**The counter-example that looks like the sales page and is not:** "I want to set up a referral programme" is `agent:growth`. The invitation is another deliverable (an e-mail sequence ships on its own) and attribution cannot escalate at all, because `wizz-analytics-tracking` already lives in growth next to `wizz-referral-program`. So check where a dragged capability actually lives before counting it: **an id that also exists in the dragging entry's own area never adds an area**, even when it exists elsewhere too. It adds one only when it exists solely elsewhere. (Owner's decision, 2026-09-19.)
|
|
@@ -40,12 +40,38 @@ Assess the **Area**: how many areas does the request touch? The canonical area l
|
|
|
40
40
|
|
|
41
41
|
**Dispatch rule:** IF 2+ areas → `wizz-maestro`, always. OTHERWISE count the 3 remaining factors (multi-step, needs planning, produces a memorable artifact); 2+ factors → `wizz-maestro`. The area clause decides on its own, without combining with anything else.
|
|
42
42
|
|
|
43
|
+
**What you count are the areas of the catalogue ENTRIES the request matches — never the topics named in the sentence.** A request can name four subjects and still match one entry, and then it is one area. "Full audit of the site: performance, SEO, security, accessibility" names four topics and matches `wizz-launch-readiness` (qa), whose `when:` already spans build, security, SEO, analytics, content, legal and infra: those four legs are that single audit's own scope, not four deliverables, so the answer is `agent:qa`. Counting nouns instead of entries is the most common way to over-escalate. (Owner's decision, 2026-09-19.)
|
|
44
|
+
|
|
43
45
|
- **2+ areas → `wizz-maestro`, always.** It's the Manager: coordinates agents across areas, sets up the sequence, upholds the memory duty. Invoke via `Skill` and **stop here**.
|
|
44
46
|
- **1 area and 0-1 of the 3 factors → the AGENT for that area.** Find the area in `skills-registry.yaml` and invoke the block's `agent:` (e.g.: `designer → wizz-designer`, `seo → wizz-seo`, one-off dev → `wizz-quick-dev`). **Stop here**: the agent pulls in the skills/clis/mcps. You do **not** fire standalone skills.
|
|
45
47
|
- **1 area and 2+ of the 3 factors → `wizz-maestro` too.** Multi-step + needs planning + memorable artifact combined indicate that even within 1 area the work requires coordination.
|
|
46
48
|
|
|
47
49
|
> An area agent only covers its own area. 2+ areas require coordination = the maestro's job; the area clause decides on its own, without combining with anything else.
|
|
48
50
|
|
|
51
|
+
**How to count the 3 factors** (canonical source: `_shared/complexity-signal.md`). Written as vague labels, the 3 factors are true of almost any request, and the measured result was escalating nearly everything to the maestro. A factor without an objective test is not a rule, it is an impression. **When in doubt, the factor does NOT count.**
|
|
52
|
+
|
|
53
|
+
- **Multi-step:** the final delivery is 2+ artifacts **of different kinds**. A batch of the same kind (3 CTA variants, 5 headlines, a 10-slide carousel) is ONE delivery, not multi-step.
|
|
54
|
+
- **Needs planning:** a **scope or ordering** decision is missing that the user has not made and you cannot make alone. "Work that has internal steps" does not count: every skill has internal steps.
|
|
55
|
+
- **Memorable artifact:** the result is a **reference document someone reopens later** (PRD, story, spec, written plan, written audit). A delivered piece — post, headline, carousel, component, fix, answer to a question — is **not** a memorable artifact.
|
|
56
|
+
|
|
57
|
+
**One clause overrides the three shortcuts below: the sensitive subsystem.** Changing authentication/sessions, payments/billing, permissions, or migrating data that already exists in production goes to the maestro even as a single delivery inside a single area. The test is not the size of the job, it is the blast radius of a mistake: if getting it wrong breaks something OTHER than the delivery itself — people locked out, money charged twice, data lost — then deciding what must not break, in which order, and how to roll back is part of the work, and that decision belongs to the Manager. Running a test against one of those subsystems is not changing it. (Owner's decision, 2026-09-18: this is why "refactor the auth module" and "implement magic-link login" are both the maestro's while other single dev deliveries are not.)
|
|
58
|
+
|
|
59
|
+
**Three shortcuts that decide on their own, inside the 1-area branch, before counting any factor:**
|
|
60
|
+
|
|
61
|
+
- **Question with a single definable answer** ("what guarantee period do I set?", "are the events being measured correctly?") → the area agent. Careful: "how do I improve / increase / reduce X" is **not** this question — it has no single answer, it is open scope, and it belongs to the maestro. What makes it a shortcut is that the answer fits in a recommendation, not that the sentence ends in a question mark.
|
|
62
|
+
- **Single delivery** (one post, one headline, one carousel, one component, one adjustment, one refactor of one module) → the area agent, however important it looks.
|
|
63
|
+
- **Diagnosis of one specific mechanism** ("where is it leaking between the click and the page?") → the area agent.
|
|
64
|
+
|
|
65
|
+
**The counterpart, and this is what is left for the maestro:** a request **of open scope, which the request itself does not delimit** — "how do I improve the signup conversion rate", "the sales page gets plenty of visits and almost nobody buys", "my sales page converts badly, improve it". There the scope has to be discovered before anything is delivered, and discovering scope is the Manager's work. The deciding difference is not the size of the request, it is whether **the request already states what the delivery is**.
|
|
66
|
+
|
|
67
|
+
**And the counterpart has one exception: a single entry already delimits the scope.** If the whole outcome being asked for fits the `when:` of ONE catalogue entry, and what leaves at the end is that entry's own deliverable — a plan, a recommendation, an audit — then the scope is not open, the catalogue delimited it, and the request goes to that entry's area. "A plan to reduce churn" is `wizz-churn-prevention`; "I want ChatGPT and Perplexity to cite us" is `wizz-ai-seo`; "what to check before going live" is `site-launch-kit`. It stops being the exception the moment delivering the outcome means changing what other areas own: "improve the signup conversion rate" ends up in copy, UI and code, so it comes back to the maestro through the area clause. Ask which single entry would deliver it whole — if it takes two, the scope really is open. (Owner's decision, 2026-09-18.)
|
|
68
|
+
|
|
69
|
+
**Changing the product's code is `dev`, even when the subject is visual.** "Adjust the secondary button's colour", "fix the mobile spacing": the delivery is a commit, so it is the dev area — `designer` decides what the look should be, it does not ship the change. Ask which artifact leaves at the end: a file in the repo → dev; a decision, a spec or a piece of art → the area that owns it.
|
|
70
|
+
|
|
71
|
+
**The area count includes what `rel` drags, when the related capability shapes the SAME deliverable.** Before deciding "1 area", look at the `rel` of the entry that matched, and ask of each edge: **would the thing I am about to hand over be incomplete without this?** — not "is this related?". Writing the copy of a sales page without the offer and without the conversion structure delivers half a page: offer, copy and conversion are the same artifact, so that is 2 areas, hence maestro. What does NOT count is an adjacent capability that would produce a **different** artifact: a plain text post for LinkedIn does not need video capture just because `wizz-social-content` declares `before: [get-brolls]` — the b-roll would be another deliverable, not part of this one. `pairs_with` alone never escalates: it is neighbourhood, not dependency. Every edge is reciprocal by construction (the schema validator rejects one-way edges), so the relation shows up whichever side the user enters from. Resolve id → area via the `ids:` map in `{project-root}/_wizz/_config/registry/index.yaml`; outside a Wizz project, via `skills-registry.yaml` itself.
|
|
72
|
+
|
|
73
|
+
**A referral programme is the counter-example, and it earns its place here because it looks like the sales page and is not.** "I want to set up a referral programme" is `agent:growth`, not the maestro. The invitation is another deliverable — an e-mail sequence is written, reviewed and shipped on its own — and attribution cannot escalate at all, because `wizz-analytics-tracking` already lives in growth, alongside `wizz-referral-program`. So before counting a dragged capability as a second area, check where it actually lives: **an id that also exists in the dragging entry's own area never adds an area**, even when it exists in another one too (`wizz-analytics-tracking` is in growth AND in ads; dragged from growth it stays growth). It adds an area only when it exists solely elsewhere. (Owner's decision, 2026-09-19, after the measurement showed the model applying this correctly while the written example claimed the opposite.)
|
|
74
|
+
|
|
49
75
|
**Capability discovery (index, not a delegation shortcut):** the [flat routing table](references/routing-table-flat.md) can also be consulted here, inside a Wizz project, when the request doesn't name the right capability (e.g. "I want a carousel" → the index points to `wizz-canvas-design`). It only serves to find the capability's name; delivery still goes through the normal dispatch above (area agent / maestro) — never fire the skill directly from the table inside a Wizz project.
|
|
50
76
|
|
|
51
77
|
**Calibrated edge examples** (from the evals dataset, `evals/routing/dataset.json`):
|
|
@@ -16,6 +16,8 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
16
16
|
| Dependencies, packages, vulnerabilities, npm audit | `wizz-database-and-deps` | 2 |
|
|
17
17
|
| Security, XSS, CSRF, SQLi, IDOR, OWASP, rate limit, CORS, clickjacking, PII in the response, user enumeration, headers | `wizz-web-security` + `wizz-auth-and-secrets` | 1 |
|
|
18
18
|
| Full-app security audit/pentest, "audit security", "pentest", "find vulnerabilities", pre-release scan | `security-audit-pentest` | 1 |
|
|
19
|
+
| **Autonomous, offensive** pentest that actually runs the app and proves each finding with a real PoC | CLI `strix` (qa registry). CONDITIONAL, never the default: only on an app the user owns/is authorized to test, and only when they ask for validated exploitation rather than a review. Start from `security-audit-pentest` | 2 |
|
|
20
|
+
| Error monitoring, crash/exception triage, releases and source maps in Sentry | CLI `sentry-cli` (architect registry). CONDITIONAL: only if the project ALREADY uses Sentry (`SENTRY_DSN` in env, `sentry.properties`, or `@sentry/` in package.json) and it's at production stage — never propose adopting Sentry from this row | 2 |
|
|
19
21
|
| Launch-readiness audit, "is it ready to launch?", broad release checklist (technical, security, SEO, analytics, content, legal, infra), "what's missing before going to production" | `wizz-launch-readiness` | 1 |
|
|
20
22
|
| Desktop, Electron, contextIsolation, code signing | `wizz-desktop-security` | 2 |
|
|
21
23
|
|
|
@@ -27,6 +29,7 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
27
29
|
| New feature, bug fix, TDD, tests, coverage | direct execution with TDD (global rules) and end-to-end verification at the end | 1 |
|
|
28
30
|
| Broken build, TypeScript errors, lint, CI | direct execution (minimal fix until the build is green) | 2 |
|
|
29
31
|
| Architecture, system design, technical decision, technical plan, breakdown, handoff | `wizz-implementation-planner` | 1 |
|
|
32
|
+
| DRAW the architecture/workflow/sequence/dataflow/state as a navigable validated diagram (HTML+SVG, accepts Mermaid) | CLI `archify` (architect registry) — the rendering step, after the decision is made with `wizz-implementation-planner` | 2 |
|
|
30
33
|
| Critical flow, E2E, visual browser verification | `wizz-agent-browser` | 2 |
|
|
31
34
|
| SQL, schema, migrations, Supabase, RLS, query performance | `wizz-supabase-postgres-best-practices` + `wizz-database-scaling` | 1 |
|
|
32
35
|
| Dead code, cleanup, refactoring | direct execution + `wizz-adversarial-reviewer` on review | 2 |
|
|
@@ -37,7 +40,10 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
37
40
|
|
|
38
41
|
| Intent / keywords | Skills to offer | Priority |
|
|
39
42
|
|---|---|---|
|
|
43
|
+
| Visual brief at kickoff, "what should this look like", deciding direction BEFORE building | `wizz-decision-maker` (designer's direction door: 6 aesthetic decisions + 3 logical ones) + `wizz-taste-skill` | 1 |
|
|
40
44
|
| Design, UI, visual, component, style, palette, typography, design system | `wizz-ui-ux-pro-max` + `wizz-ui-component-curator` | 1 |
|
|
45
|
+
| Turn a design into React/Vite components (Stitch MCP output) | `wizz-react-components` | 2 |
|
|
46
|
+
| Review/audit NATIVE UI (iOS/macOS: SwiftUI, Flutter, React Native, Tauri, Electron) against the Apple HIG and Liquid Glass | CLI `apple-design` (designer registry) — covers what `wizz-taste-skill` declares out of scope; for web UI it's `wizz-ui-ux-pro-max` instead | 2 |
|
|
41
47
|
| Landing page, hero, motion, 3D animation, conversion, visual CRO | `wizz-premium-landing-ui-researcher` | 1 |
|
|
42
48
|
| Design quality, anti-slop, visual taste, aesthetics, critical eye | `wizz-taste-skill` (if installed) | 1 |
|
|
43
49
|
| Frontend rules, deterministic UI code, 44 rules, frontend audit | `wizz-impeccable` (if installed) | 2 |
|
|
@@ -50,7 +56,7 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
50
56
|
| Word-by-word timestamps for TTS narration (sync captions/cuts/animation with speech) | `ctc-align` (designer registry; single source of timing, replaces Whisper) | 2 |
|
|
51
57
|
| **Find B-roll / inserts / cutaways / supporting footage** for a video or Reel (real footage of the fact, person, product, news item or screen the script names; YouTube/Instagram/TikTok/Pexels/Pixabay/Commons/NASA) | CLI `get-brolls` (designer registry; **macOS**, global `skills add` + its own `install.sh`; needs ffmpeg with drawtext, Node 22+, Python 3.11+). Ends in a Storyboard the HUMAN approves — the agent never self-approves. Stock only when the user explicitly asks for stock | 1 |
|
|
52
58
|
| **Edit/cut video** (cuts, selects, roughcut) | CLI `buttercut` (designer registry; **Apple Silicon only**, clone-and-run in the project, heavy deps) | 1 |
|
|
53
|
-
| Generate an AI video
|
|
59
|
+
| Generate an AI video/image (Veo/Kling/Wan), UGC / ad-ready style | CLI `fal-video` (designer registry; official `@fal-ai/client`, needs `FAL_KEY` in `.env`). Replaced the old arcads entry: same use case, 50-95% cheaper per video, no heavy clone-and-run | 1 |
|
|
54
60
|
| Analyze/understand an existing video (frames + transcription) | CLI `claude-video` (designer registry; `npx skills add bradautomates/claude-video`) | 2 |
|
|
55
61
|
| Narration / voice / TTS / voice cloning for video | CLI `voicebox` (designer registry; local app with MCP endpoint) | 2 |
|
|
56
62
|
| Research components compatible with the project | `wizz-ui-component-curator` (demos, code, and public registries with evidence) | 1 |
|
|
@@ -67,10 +73,15 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
67
73
|
| Price, plans, pricing, monetization | `wizz-pricing-strategy` + `wizz-paywall-upgrade-cro` | 1 |
|
|
68
74
|
| Churn, retention, cancellation, NPS | `wizz-churn-prevention` + `wizz-revops` | 1 |
|
|
69
75
|
| Page conversion, CRO, funnel optimization | `wizz-page-cro` + `wizz-copywriting` + `wizz-form-cro` | 1 |
|
|
76
|
+
| Popup, modal, exit intent, interstitial | `wizz-popup-cro` | 2 |
|
|
77
|
+
| **LOW TICKET (BR/PT), beginner selling a cheap product:** "I'm not selling", "where do I start", "my ad doesn't work", "how much do I charge" | `wizz-lowticket-guia` (entry door — places them on the 7-step journey and dispatches) | 1 |
|
|
78
|
+
| Low ticket specifics once the area is known: Meta campaign ruler, 1-1-X, bid cap, when to cut/scale (`wizz-lowticket-trafego`); page, VSL, creative script, headline (`wizz-lowticket-metodologia`); post-checkout upsell/downsell ladder (`wizz-lowticket-funil`); sales-page speed, connect rate, pixel order, LCP/TTFB/CLS (`wizz-lowticket-pagina`); mining and judging a competitor's offer (`wizz-lowticket-minerador`) | the shard above; enter through `wizz-lowticket-guia` when unsure. **Not for SaaS, B2B, client sites, high ticket or coaching — the numbers don't transfer** | 1 |
|
|
70
79
|
| Signup, onboarding, user activation | `wizz-signup-flow-cro` + `wizz-onboarding-cro` | 1 |
|
|
71
80
|
| SEO, Google, search, AI search, LLM SEO | `wizz-seo-audit` + `wizz-ai-seo` + `wizz-schema-markup` + `wizz-programmatic-seo` + `wizz-site-architecture` | 1 |
|
|
81
|
+
| EXECUTE the SEO distribution: publish articles, build backlinks through the Distribb network, connect Search Console, autopublish news | CLI `distribb` (seo registry) — the doing half; the strategy half is the SEO row above | 2 |
|
|
72
82
|
| Competitor comparison, alternatives page, war room | `wizz-competitor-alternatives` | 2 |
|
|
73
83
|
| Content, social media, newsletter, threads | `wizz-content-strategy` + `wizz-social-content` + `wizz-copy-editing` | 2 |
|
|
84
|
+
| Actually PUBLISH/schedule to social networks (30+ integrations), not write it | CLI `postiz` (social registry; needs auth). Separates "generate" (Wizz skills above) from "publish" | 2 |
|
|
74
85
|
| Cold email, B2B outbound, prospecting | `wizz-cold-email` | 2 |
|
|
75
86
|
| Referral, referrals, affiliate program | `wizz-referral-program` | 2 |
|
|
76
87
|
| Sales material, pitch, deck, proposal | `wizz-sales-enablement` | 2 |
|
|
@@ -80,6 +91,7 @@ Use this table to map skills/CLIs/MCPs directly **outside a Wizz project** (no `
|
|
|
80
91
|
| Offer audience research, VoC, angle matrix, info-product lexicon | `pesquisa-de-publico-do-piva` | 1 |
|
|
81
92
|
| Forge an offer, create an irresistible offer, unique mechanism, bonus, guarantee | `wizz-offer-forge` + `wizz-pricing-strategy` | 1 |
|
|
82
93
|
| Market research, competitive intelligence | `deep-research` (external plugin — only if installed) | 2 |
|
|
94
|
+
| Scrape/crawl the web for market research, lead prospecting or competitive intel (anti-bot bypass, adaptive parsing) | MCP `scrapling` (growth registry) — the collection layer under the research rows above | 2 |
|
|
83
95
|
|
|
84
96
|
## Context and Memory
|
|
85
97
|
|
|
@@ -123,9 +123,10 @@ function findWizzRoot(startDir) {
|
|
|
123
123
|
function buildContext(isWizzProject) {
|
|
124
124
|
if (isWizzProject) {
|
|
125
125
|
return (
|
|
126
|
-
'🎛️ Projeto Wizz: NÃO invoque wizz-router. 2+ áreas →
|
|
126
|
+
'🎛️ Projeto Wizz: NÃO invoque wizz-router. 2+ áreas → `wizz-maestro`. ' +
|
|
127
127
|
'1 área: 2+ fatores (multi-passo, planejar, artefato memorável) → `wizz-maestro`; ' +
|
|
128
|
-
'senão → Skill
|
|
128
|
+
'senão → Skill da área (wizz-designer, wizz-quick-dev). ' +
|
|
129
|
+
'Auth/pagamento/permissão/migração → maestro. ' +
|
|
129
130
|
'Personas são skills, não subagent_type; Agent usa tipos disponíveis wizz-exec-*' +
|
|
130
131
|
'; difícil → wizz-exec-strong (ESCALAR → ultra). Trivial → direto.'
|
|
131
132
|
);
|
|
@@ -92,7 +92,9 @@ const SLICE_HEADER =
|
|
|
92
92
|
/**
|
|
93
93
|
* Slice the parsed registry into `_wizz/_config/registry/`:
|
|
94
94
|
* - index.yaml: version + areas (only `agent`/`summary`) — a lightweight
|
|
95
|
-
* area→agent map for the maestro to route without loading full skill lists
|
|
95
|
+
* area→agent map for the maestro to route without loading full skill lists
|
|
96
|
+
* — plus `ids:`, the INVERSE map (id → area) that makes a cross-area `rel`
|
|
97
|
+
* edge dereferenceable in one hop instead of scanning every slice.
|
|
96
98
|
* - <area>.yaml: the full block for that area (skills/mcps/clis/references),
|
|
97
99
|
* wrapped as `area: <name>` + the area's own fields, for the area agent
|
|
98
100
|
* that owns it to read directly instead of the monolith.
|
|
@@ -116,8 +118,31 @@ async function generateRegistrySlices(registry, registryDir, trackFile) {
|
|
|
116
118
|
for (const [name, area] of Object.entries(areas)) {
|
|
117
119
|
indexAreas[name] = { agent: area && area.agent, summary: area && area.summary };
|
|
118
120
|
}
|
|
121
|
+
|
|
122
|
+
// id → área, o índice INVERSO. Sem ele uma aresta `rel` cross-área é
|
|
123
|
+
// indereferenciável em runtime: o agente lê a fatia da própria área, vê
|
|
124
|
+
// `pairs_with: [wizz-copywriting]` e não tem como saber que isso mora em
|
|
125
|
+
// `copy.yaml` sem abrir as 15 fatias até achar. Com o mapa é um hop.
|
|
126
|
+
// As skills do módulo lowticket existem em mais de uma área; a primeira
|
|
127
|
+
// ocorrência ganha, e qualquer fatia serve porque o `when` é o que muda,
|
|
128
|
+
// não a skill.
|
|
129
|
+
const idToArea = {};
|
|
130
|
+
for (const [name, area] of Object.entries(areas)) {
|
|
131
|
+
if (!area) continue;
|
|
132
|
+
for (const key of ['skills', 'mcps', 'clis']) {
|
|
133
|
+
for (const entry of area[key] || []) {
|
|
134
|
+
if (entry && entry.id && !(entry.id in idToArea)) idToArea[entry.id] = name;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
for (const key of ['utility', 'mcp_utility', 'cli_utility']) {
|
|
139
|
+
for (const entry of (registry && registry[key]) || []) {
|
|
140
|
+
if (entry && entry.id && !(entry.id in idToArea)) idToArea[entry.id] = '_shared';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
119
144
|
const indexPath = path.join(registryDir, 'index.yaml');
|
|
120
|
-
await fs.writeFile(indexPath, SLICE_HEADER + yaml.stringify({ version: registry && registry.version, areas: indexAreas }));
|
|
145
|
+
await fs.writeFile(indexPath, SLICE_HEADER + yaml.stringify({ version: registry && registry.version, areas: indexAreas, ids: idToArea }));
|
|
121
146
|
trackFile(indexPath);
|
|
122
147
|
|
|
123
148
|
for (const [name, area] of Object.entries(areas)) {
|