wizz-method 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +1 -1
  2. package/package.json +5 -2
  3. package/removals.txt +3 -0
  4. package/skills-registry.yaml +65 -13
  5. package/src/bmm-skills/1-analysis/wizz-agent-analyst/customize.toml +1 -1
  6. package/src/bmm-skills/1-analysis/wizz-set-feature/SKILL.md +41 -37
  7. package/src/bmm-skills/2-plan-workflows/wizz-agent-pm/customize.toml +1 -1
  8. package/src/bmm-skills/2-plan-workflows/wizz-agent-ux-designer/customize.toml +1 -1
  9. package/src/bmm-skills/3-solutioning/wizz-agent-architect/customize.toml +1 -1
  10. package/src/bmm-skills/4-implementation/wizz-agent-dev/customize.toml +1 -1
  11. package/src/modules/lowticket/README.md +55 -0
  12. package/src/modules/lowticket/module.yaml +31 -0
  13. package/src/modules/lowticket/skills/lowticket-funil/SKILL.md +112 -0
  14. package/src/modules/lowticket/skills/lowticket-funil/references/copy-das-paginas.md +75 -0
  15. package/src/modules/lowticket/skills/lowticket-funil/references/mapa-do-funil.md +71 -0
  16. package/src/modules/lowticket/skills/lowticket-metodologia/CATALOGO.md +352 -0
  17. package/src/modules/lowticket/skills/lowticket-metodologia/SKILL.md +62 -0
  18. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/01-principios.md +12 -0
  19. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/02-diagnostico-funil.md +83 -0
  20. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/03-campanha-bidcap.md +95 -0
  21. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/04-criativos.md +66 -0
  22. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/04a-criativos-ia.md +79 -0
  23. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/04b-criativos-formatos.md +152 -0
  24. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/05-oferta.md +51 -0
  25. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/06-pagina-vendas.md +175 -0
  26. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/06a-instagram.md +138 -0
  27. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/07-funil-upsell.md +73 -0
  28. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/08-pesquisa-publico.md +14 -0
  29. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/09-especialista-coproducao.md +41 -0
  30. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/10-levantar-caixa.md +49 -0
  31. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/11-checklist-roi.md +36 -0
  32. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/12-mineracao-ofertas.md +63 -0
  33. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/12a-mineracao-veredito.md +78 -0
  34. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/12b-fabrica-de-ofertas.md +178 -0
  35. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/13-benchmarks-vsl.md +10 -0
  36. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/14-vocabulario.md +55 -0
  37. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/15-como-estender.md +35 -0
  38. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/INDEX.md +45 -0
  39. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/guardrails.md +33 -0
  40. package/src/modules/lowticket/skills/lowticket-metodologia/knowledge/pontos-em-aberto.md +42 -0
  41. package/src/modules/lowticket/skills/lowticket-metodologia/references/swipe-file.md +38 -0
  42. package/src/modules/lowticket/skills/lowticket-minerador/SKILL.md +115 -0
  43. package/src/modules/lowticket/skills/lowticket-minerador/references/rubrica.md +75 -0
  44. package/src/modules/lowticket/skills/lowticket-pagina/SKILL.md +106 -0
  45. package/src/modules/lowticket/skills/lowticket-pagina/references/metas-e-medicao.md +70 -0
  46. package/src/modules/lowticket/skills/lowticket-pagina/references/padroes-de-codigo.md +148 -0
  47. package/src/modules/lowticket/skills/lowticket-trafego/SKILL.md +88 -0
  48. package/src/modules/lowticket/skills/lowticket-trafego/references/formato-do-diagnostico.md +56 -0
  49. package/src/modules/lowticket/skills/lowticket-trafego/references/reguas.md +72 -0
  50. package/src/modules/wizz/README.md +1 -1
  51. package/src/modules/wizz/_shared/cerebro.md +35 -1
  52. package/src/modules/wizz/_shared/communication-rules.md +8 -1
  53. package/src/modules/wizz/_shared/token-economy.md +7 -10
  54. package/src/modules/wizz/agents/wizz-ads/customize.toml +1 -1
  55. package/src/modules/wizz/agents/wizz-copy/customize.toml +1 -1
  56. package/src/modules/wizz/agents/wizz-designer/customize.toml +1 -1
  57. package/src/modules/wizz/agents/wizz-growth/customize.toml +1 -1
  58. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +1 -1
  59. package/src/modules/wizz/agents/wizz-maestro/customize.toml +1 -1
  60. package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
  61. package/src/modules/wizz/agents/wizz-qa/customize.toml +1 -1
  62. package/src/modules/wizz/agents/wizz-seo/customize.toml +1 -1
  63. package/src/modules/wizz/agents/wizz-social/customize.toml +1 -1
  64. package/src/modules/wizz/overrides/wizz-agent-analyst.toml +2 -2
  65. package/src/modules/wizz/overrides/wizz-agent-architect.toml +2 -2
  66. package/src/modules/wizz/overrides/wizz-agent-dev.toml +1 -1
  67. package/src/modules/wizz/overrides/wizz-agent-pm.toml +1 -1
  68. package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +1 -1
  69. package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +1 -1
  70. package/src/skills-lib/analytics-tracking/SKILL.md +2 -0
  71. package/src/skills-lib/analytics-tracking/references/utm-taxonomy.md +92 -0
  72. package/src/skills-lib/cerebro/SKILL.md +20 -17
  73. package/src/skills-lib/cerebro/references/comandos-pesquisa-e-memoria.md +96 -0
  74. package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +25 -6
  75. package/src/skills-lib/cerebro/references/comandos-sessao.md +61 -37
  76. package/src/skills-lib/premium-landing-ui-researcher/references/source-first-protocol.md +1 -1
  77. package/src/skills-lib/tracking-audit/SKILL.md +78 -0
  78. package/src/skills-lib/tracking-audit/references/modo-diagnostico.md +72 -0
  79. package/src/skills-lib/tracking-audit/references/modo-implantacao.md +89 -0
  80. package/src/skills-lib/tracking-audit/references/utm-e-atribuicao.md +75 -0
  81. package/src/skills-lib/wizz-offer-forge/SKILL.md +27 -2
  82. package/src/skills-lib/wizz-offer-forge/references/plano-de-medicao.md +74 -0
  83. package/src/skills-lib/wizz-router/SKILL.md +1 -1
  84. package/src/skills-lib/wizz-router/references/routing-table-flat.md +1 -1
  85. package/tools/installer/commands/trace-report.js +1 -1
  86. package/tools/installer/modules/skills-lib.js +7 -1
  87. package/wizz-modules.yaml +17 -0
  88. package/src/skills-lib/cerebro/references/comandos-pesquisa-e-sync.md +0 -44
  89. package/src/skills-lib/graphify/.graphify_version +0 -1
  90. package/src/skills-lib/graphify/SKILL.md +0 -1199
package/README.md CHANGED
@@ -26,7 +26,7 @@ O ponto de entrada técnico é o `wizz-router`: ele faz a triagem e manda pedido
26
26
 
27
27
  Os papéis de dev e produto reusam os agentes WIZZ (Mary, John, Winston, Amelia, Sally, Paige), personalizados em PT-BR pelos overrides em `src/modules/wizz/overrides/`.
28
28
 
29
- A camada Wizz vale para todos os agentes: encerramento padrão (✅/➡️/🎯), economia de token (graphify, depois cérebro, depois grep antes de abrir arquivos), auto-load leve do cérebro na ativação e idioma à sua escolha. Detalhes em [src/modules/wizz/README.md](src/modules/wizz/README.md).
29
+ A camada Wizz vale para todos os agentes: encerramento padrão (✅/➡️/🎯), economia de token (cérebro, depois grep antes de abrir arquivos), auto-load leve do cérebro na ativação e idioma à sua escolha. Detalhes em [src/modules/wizz/README.md](src/modules/wizz/README.md).
30
30
 
31
31
  ## Quick Start
32
32
 
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": "1.17.0",
4
+ "version": "1.18.0",
5
5
  "description": "Wizz Method — método de agência orientado por IA em PT-BR (fork independente do BMad Method)",
6
6
  "keywords": [
7
7
  "agile",
@@ -61,18 +61,21 @@
61
61
  "rebundle": "node tools/installer/bundlers/bundle-web.js rebundle",
62
62
  "sync:check": "node tools/sync-check.mjs",
63
63
  "sync:global": "node tools/sync-global.mjs",
64
- "test": "npm run test:refs && npm run test:install && npm run test:urls && npm run test:channels && npm run test:mcp && npm run test:env-vars && npm run test:cli && npm run test:deps && npm run test:dispatch-rule && npm run test:hooks && npm run test:decision-trace && npm run test:quickupdate && npm run test:registry-schema && npm run test:registry-lib-parity && npm run test:module-registry && npm run test:method-refs-allowlist && npm run test:rtk-hook && npm run test:network-retry && npm run test:sync-check && npm run test:resolver && npm run test:fetch-assets && npm run test:install-smoke && npm run test:trace-report && npm run test:rehype-plugins && npm run test:workflow-path-regex && npm run test:preflight-tools-check && npm run lint && npm run lint:md && npm run format:check && npm run sync:check",
64
+ "test": "npm run test:refs && npm run test:install && npm run test:urls && npm run test:channels && npm run test:mcp && npm run test:env-vars && npm run test:cli && npm run test:cli-pin-consistency && npm run test:deps && npm run test:dispatch-rule && npm run test:hooks && npm run test:feature-context && npm run test:decision-trace && npm run test:quickupdate && npm run test:registry-schema && npm run test:registry-lib-parity && npm run test:lowticket-third-party && npm run test:module-registry && npm run test:method-refs-allowlist && npm run test:rtk-hook && npm run test:network-retry && npm run test:sync-check && npm run test:resolver && npm run test:fetch-assets && npm run test:install-smoke && npm run test:trace-report && npm run test:rehype-plugins && npm run test:workflow-path-regex && npm run test:preflight-tools-check && npm run lint && npm run lint:md && npm run format:check && npm run sync:check",
65
65
  "test:channels": "node test/test-installer-channels.js",
66
66
  "test:cli": "node test/test-cli-config.js",
67
+ "test:cli-pin-consistency": "node test/test-cli-pin-consistency.js",
67
68
  "test:decision-trace": "node test/test-decision-trace.js",
68
69
  "test:deps": "node test/test-deps-cache.js",
69
70
  "test:dispatch-rule": "node test/test-dispatch-rule-consistency.js",
70
71
  "test:env-vars": "node test/test-env-vars.js",
72
+ "test:feature-context": "node test/test-feature-context.js",
71
73
  "test:fetch-assets": "node test/test-fetch-assets.js",
72
74
  "test:hooks": "node test/test-router-hook.js",
73
75
  "test:install": "node test/test-installation-components.js",
74
76
  "test:install-smoke": "node test/test-install-smoke.js",
75
77
  "test:install-smoke-mcp": "node test/test-install-smoke-mcp.js",
78
+ "test:lowticket-third-party": "node test/test-lowticket-third-party.js",
76
79
  "test:mcp": "node test/test-mcp-config.js",
77
80
  "test:method-refs-allowlist": "node test/test-method-refs-allowlist.js",
78
81
  "test:module-registry": "node test/test-module-registry-fields.js",
package/removals.txt CHANGED
@@ -66,3 +66,6 @@ wizz-create-ux-design
66
66
  # taste-skill; taste-skill's description and redesign-protocol.md cover
67
67
  # the same existing-project audit ground taste-redesign used to own.
68
68
  taste-redesign
69
+
70
+ # Removida na auditoria de contexto (2026-08-28): knowledge graph descontinuado.
71
+ graphify
@@ -154,33 +154,41 @@ areas:
154
154
  rel:
155
155
  before: [remotion-best-practices]
156
156
  platform: [darwin, linux]
157
- check: "test -d $HOME/.claude/skills/hyperframes"
157
+ # O check confere o SHA fixado, não só a existência da pasta: o bundle é
158
+ # copiado (não clonado), então o pin é gravado num marcador no install.
159
+ check: 'grep -qx 59a69a145bfbd0f10dee72246b68ee5d9bd71063 "$HOME/.claude/skills/hyperframes/.wizz-pin" 2>/dev/null'
158
160
  # Pin de supply chain (2026-08-23): clone temporário + checkout do SHA
159
161
  # + `skills add` do path local. Atualizar conscientemente.
160
162
  # Neutraliza remotion-to-hyperframes: o bundle instala uma skill de
161
163
  # migração Remotion→HyperFrames proibida pela regra do pipeline
162
164
  # (_shared/video-pipeline.md: HyperFrames desenha, Remotion monta).
163
- 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 && rm -rf "$d" && rm -rf "$HOME/.claude/skills/remotion-to-hyperframes"'
165
+ 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"'
164
166
  - id: claude-video
165
167
  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)."
166
168
  platform: [darwin, linux]
167
- check: "test -d $HOME/.claude/skills/watch"
169
+ # O check confere o SHA fixado, não só a existência da pasta: o bundle é
170
+ # copiado (não clonado), então o pin é gravado num marcador no install.
171
+ check: 'grep -qx 83da59fa78c3eee9e20f515fe75c438bb5166efd "$HOME/.claude/skills/watch/.wizz-pin" 2>/dev/null'
168
172
  # Pin de supply chain (2026-08-23): clone temporário + checkout do SHA
169
173
  # + `skills add` local. Atualizar conscientemente.
170
- install: 'd="$(mktemp -d)" && git clone https://github.com/bradautomates/claude-video.git "$d" && git -C "$d" checkout 83da59fa78c3eee9e20f515fe75c438bb5166efd && npx skills add "$d" -g -y --copy && rm -rf "$d"'
174
+ install: 'd="$(mktemp -d)" && git clone https://github.com/bradautomates/claude-video.git "$d" && git -C "$d" checkout 83da59fa78c3eee9e20f515fe75c438bb5166efd && npx skills add "$d" -g -y --copy && printf "%s\\n" 83da59fa78c3eee9e20f515fe75c438bb5166efd > "$HOME/.claude/skills/watch/.wizz-pin" && rm -rf "$d"'
171
175
  - id: buttercut
172
176
  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."
173
177
  platform: darwin-arm64
174
- check: "test -d ./buttercut"
178
+ # Clone-and-run: o próprio repo responde o SHA, então o check compara com o
179
+ # pin. O install repara um clone existente em vez de falhar no git clone.
180
+ check: 'test "$(git -C ./buttercut rev-parse HEAD 2>/dev/null)" = f71d9537e2c22c3c4c1c659c4bdfb11e90ccd961'
175
181
  # Pin de supply chain (2026-08-23): checkout de SHA fixo; atualizar conscientemente.
176
- install: "git clone https://github.com/barefootford/buttercut.git buttercut && git -C buttercut checkout f71d9537e2c22c3c4c1c659c4bdfb11e90ccd961"
182
+ install: "{ [ -d buttercut/.git ] || git clone https://github.com/barefootford/buttercut.git buttercut; } && git -C buttercut fetch --tags origin && git -C buttercut checkout f71d9537e2c22c3c4c1c659c4bdfb11e90ccd961"
177
183
  verify: "command -v ffmpeg >/dev/null 2>&1 && command -v ruby >/dev/null 2>&1 && command -v python3 >/dev/null 2>&1"
178
184
  - id: voicebox
179
185
  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."
180
186
  platform: [darwin, linux]
181
- check: "test -d ./voicebox"
187
+ # Clone-and-run: o próprio repo responde o SHA, então o check compara com o
188
+ # pin. O install repara um clone existente em vez de falhar no git clone.
189
+ check: 'test "$(git -C ./voicebox rev-parse HEAD 2>/dev/null)" = 2bcb98d1a8b6fe05e15fbc1559e3085669e4035d'
182
190
  # Pin de supply chain (2026-08-23): checkout de SHA fixo; atualizar conscientemente.
183
- install: "git clone https://github.com/jamiepine/voicebox.git voicebox && git -C voicebox checkout 2bcb98d1a8b6fe05e15fbc1559e3085669e4035d"
191
+ install: "{ [ -d voicebox/.git ] || git clone https://github.com/jamiepine/voicebox.git voicebox; } && git -C voicebox fetch --tags origin && git -C voicebox checkout 2bcb98d1a8b6fe05e15fbc1559e3085669e4035d"
184
192
  - id: ctc-align
185
193
  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."
186
194
  platform: [darwin, linux]
@@ -231,9 +239,11 @@ areas:
231
239
  - id: distribb
232
240
  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)."
233
241
  platform: [darwin, linux]
234
- check: "ls $HOME/.claude/skills 2>/dev/null | grep -qi distribb"
242
+ # O check confere o SHA fixado, não a existência da pasta: o bundle é
243
+ # copiado (não clonado), então o pin é gravado num marcador no install.
244
+ check: 'grep -qx 061a055768e13cf09108932a90aeb2e957183858 "$HOME/.claude/skills/distribb/.wizz-pin" 2>/dev/null'
235
245
  # Pin de supply chain (2026-08-23): clone temporário + checkout do SHA. Atualizar conscientemente.
236
- install: 'd="$(mktemp -d)" && git clone https://github.com/Bomx/distribb-skill.git "$d" && git -C "$d" checkout 061a055768e13cf09108932a90aeb2e957183858 && npx skills add "$d" -g -y --copy && rm -rf "$d"'
246
+ install: 'd="$(mktemp -d)" && git clone https://github.com/Bomx/distribb-skill.git "$d" && git -C "$d" checkout 061a055768e13cf09108932a90aeb2e957183858 && npx skills add "$d" -g -y --copy && printf "%s\\n" 061a055768e13cf09108932a90aeb2e957183858 > "$HOME/.claude/skills/distribb/.wizz-pin" && rm -rf "$d"'
237
247
 
238
248
  growth:
239
249
  agent: wizz-growth
@@ -281,6 +291,28 @@ areas:
281
291
  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)."
282
292
  - id: wizz-offer-forge
283
293
  when: "Forjar oferta irresistível de resposta direta/infoproduto (mecanismo único, empilhamento de valor, garantia reversa, ponte de tráfego)."
294
+ # Módulo lowticket (src/modules/lowticket) — ver nota em ads.skills.
295
+ - id: lowticket-metodologia
296
+ module: lowticket
297
+ when: "Roteador da base low ticket BR/PT: gatilho → um shard. Régua de preço, garantia e oferta que tem precedência sobre a skill genérica."
298
+ not_when:
299
+ - "SaaS, B2B, site de cliente, high ticket ou mentoria: os números não transferem."
300
+ - id: lowticket-funil
301
+ module: lowticket
302
+ 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."
303
+ not_when:
304
+ - "Antes de existir um front-end que converte: estender funil sobre front que não vende multiplica zero."
305
+ - id: lowticket-minerador
306
+ module: lowticket
307
+ 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."
308
+ not_when:
309
+ - "A oferta já está definida: aí é wizz-offer-forge."
310
+ - id: lowticket-pagina
311
+ module: lowticket
312
+ 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."
313
+ not_when:
314
+ - "Reescrever copy, preço ou estrutura de oferta: esta skill é o engenheiro, não o copywriter."
315
+ - "Site institucional ou app."
284
316
  mcps:
285
317
  - id: scrapling
286
318
  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."
@@ -315,6 +347,28 @@ areas:
315
347
  when: "Gerar/iterar criativos e headlines de anúncio em escala (RSA, variações)."
316
348
  - id: analytics-tracking
317
349
  when: "Tracking de conversão pros anúncios (compartilhada com growth)."
350
+ - id: tracking-audit
351
+ 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."
352
+ not_when:
353
+ - "Plano de medição de SaaS ou produto instrumentado por evento de uso: é analytics-tracking."
354
+ - "Decidir bid, orçamento ou estrutura de campanha: é paid-ads."
355
+ rel:
356
+ pairs_with: [analytics-tracking, paid-ads]
357
+ before: [page-cro]
358
+ # Módulo lowticket (src/modules/lowticket) — instaladas COM O MÓDULO, não
359
+ # por skills-lib. O campo `module` é o gate: resolveSkillIds as ignora ao
360
+ # copiar de src/skills-lib, e o router continua enxergando as entradas.
361
+ - id: lowticket-metodologia
362
+ module: lowticket
363
+ when: "Roteador da base low ticket BR/PT: gatilho → um shard (diagnóstico de funil, bid cap, criativo, oferta, página, Instagram, upsell, mineração). Carrega guardrails junto."
364
+ not_when:
365
+ - "SaaS, B2B, site de cliente, high ticket ou mentoria: os números não transferem."
366
+ - id: lowticket-trafego
367
+ module: lowticket
368
+ 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."
369
+ not_when:
370
+ - "Google Ads institucional, campanha de marca, lead gen B2B."
371
+ - "Escrever copy ou criativo: a skill lê número, não produz anúncio."
318
372
  mcps:
319
373
  - id: meta-ads
320
374
  when: "Gestão real de campanha Meta/Facebook/Instagram via API (criar/editar/medir ads)."
@@ -418,14 +472,12 @@ areas:
418
472
  summary: "Memória do projeto: o que foi decidido, salvar, ver estado."
419
473
  skills:
420
474
  - id: cerebro
421
- when: "Recuperar/salvar decisões, contexto, aprendizados; ver estado do projeto (/ver, /salvar, /decisao, /dump)."
475
+ when: "Recuperar/salvar decisões, contexto, aprendizados; ver estado do projeto (/ver, /salvar, /decisao, /dump); ler a auto-memória fora do Claude Code (/memoria)."
422
476
 
423
477
  # ─────────────────────────────────────────────────────────────────────────────
424
478
  # UTILITÁRIOS — cross-cutting, não pertencem a uma área só.
425
479
  # ─────────────────────────────────────────────────────────────────────────────
426
480
  utility:
427
- - id: graphify
428
- when: "Transformar código/docs em knowledge graph; navegar estrutura antes de ler arquivos crus."
429
481
  - id: find-skills
430
482
  when: "Nenhuma skill cobre o pedido: buscar/instalar no marketplace (npx skills find)."
431
483
  - id: enhance-prompt
@@ -37,7 +37,7 @@ activation_steps_append = []
37
37
 
38
38
  persistent_facts = [
39
39
  "file:{project-root}/**/project-context.md",
40
- "If active_feature is set in {project-root}/_wizz/bmm/config.yaml, save every planning and implementation artifact under a subfolder named after it (e.g. {planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/). If it is empty or unset, write to the artifact roots as usual.",
40
+ "FEATURE: o hook SessionStart resolve a feature ativa a partir do branch git e injeta 'FEATURE ATIVA: <slug>'. Se ela existir, salve TODO artefato de planejamento e implementação na subpasta com esse nome ({planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/) e grave o slug em active_feature no {project-root}/_wizz/bmm/config.yaml na primeira escrita, avisando em UMA linha. Memória gravada nesta sessão leva o mesmo slug como tema. Sem feature resolvida, escreva nas raízes. NUNCA pergunte a feature ao usuário: invoque wizz-set-feature só se ele pedir para trocar, ou se houver duas features abertas e o pedido não decidir entre elas.",
41
41
  ]
42
42
 
43
43
  role = "Help the user ideate research and analyze before committing to a project in the Wizz Method analysis phase."
@@ -1,74 +1,78 @@
1
1
  ---
2
2
  name: wizz-set-feature
3
- description: 'Set or switch the active feature context so planning and implementation artifacts are organized into a named subfolder. Use when the user says "set feature", "switch feature", "new feature", or asks "what feature is active".'
3
+ description: 'Resolve, switch or clear the active feature context so planning artifacts, implementation artifacts and memory are organized under one named slug. Runs automatically from the git branch; only invoke it when the user says "set feature", "switch feature", "new feature", "clear feature", or asks "what feature is active".'
4
4
  ---
5
5
 
6
6
  # Set Feature
7
7
 
8
- **Goal:** Set or switch the `active_feature` context so all subsequent planning and implementation artifacts are saved into a named subfolder.
8
+ **Goal:** Keep `active_feature` correct so planning artifacts, implementation artifacts and memory entries all land under the same named slug.
9
+
10
+ **Default mode is automatic.** The `session-rules.js` SessionStart hook already resolves the feature from the git branch and injects it as `FEATURE ATIVA: <slug>`. In the normal case nobody invokes this skill and nobody is asked anything. Invoke it only for the three explicit cases in "When this skill runs" below.
9
11
 
10
12
  ## Conventions
11
13
 
12
14
  - `{project-root}`-prefixed paths resolve from the project working directory.
13
15
 
14
- ## On Activation
16
+ ## Resolution order (never ask before exhausting it)
15
17
 
16
- ### Step 1: Load Config
18
+ 1. **Git branch.** `feat/dashboard-financeiro` → `dashboard-financeiro`. Strip the type prefix (`feat/`, `feature/`, `fix/`, `bugfix/`, `hotfix/`, `chore/`, `refactor/`, `docs/`, `test/`, `perf/`, `ci/`, `build/`, `style/`), lowercase, kebab-case. Trunk branches (`main`, `master`, `develop`, `dev`, `staging`, `prod`, `production`, `release`) and release branches yield **no** feature, not a bad one.
19
+ 2. **`active_feature` in `{project-root}/_wizz/bmm/config.yaml`.** Used when the branch gives nothing.
20
+ 3. **The request itself.** Only when 1 and 2 are both empty AND the user is clearly starting named work ("vamos fazer o painel de assinaturas"). Derive the slug, write it, and say so in **one line**. Do not ask.
21
+ 4. **Nothing.** Artifacts go to the roots and memory carries no feature tag. This is a valid state, not a problem to fix.
17
22
 
18
- Load config from `{project-root}/_wizz/bmm/config.yaml` and resolve:
23
+ The branch wins over the config: it describes the work happening now, while the config may be stale from a feature nobody switched off.
19
24
 
20
- - `project_name`, `user_name`, `communication_language`
21
- - `planning_artifacts`, `implementation_artifacts`
22
- - `active_feature` (current value, may be empty or absent)
25
+ ## When this skill runs
23
26
 
24
- Always speak in `{communication_language}`.
27
+ - **The user asks what is active** → answer from the resolution order and stop. Do not write anything.
28
+ - **The user asks to set, switch or clear** → they already named it (or asked to clear); normalize, write, confirm in one line. Do not ask for a slug they just gave you.
29
+ - **Genuine ambiguity** → two or more features are open and the request does not decide between them. This is the only case where you ask, and you ask once, offering the open features as options.
25
30
 
26
- ### Step 2: Show Current State
31
+ ## Steps
27
32
 
28
- - If `active_feature` is set: "Active feature: **{active_feature}**".
29
- - If empty or absent: "No active feature set. Artifacts are saving to the roots."
33
+ ### Step 1: Load config
30
34
 
31
- If the user only asked which feature is active, stop here.
35
+ Load `{project-root}/_wizz/bmm/config.yaml` and resolve `project_name`, `communication_language`, `planning_artifacts`, `implementation_artifacts`, and the current `active_feature`. Always speak in `{communication_language}`.
32
36
 
33
- ### Step 3: Ask for the Feature Slug
37
+ ### Step 2: Resolve the slug
34
38
 
35
- Ask: "What is the feature name? Use a short kebab-case slug (e.g. `admin-panel`, `auth-refactor`, `dashboard-financeiro`). It becomes the subfolder name inside `planning-artifacts/` and `implementation-artifacts/`."
39
+ Apply the resolution order above. Normalize to kebab-case: lowercase, strip accents, non-alphanumerics become hyphens, no leading or trailing hyphen, 60 characters max.
36
40
 
37
- Wait for the user's answer.
41
+ Confirm with the user **only** in the ambiguity case. A slug that came from the branch, from an explicit user instruction, or from a clear request is written without a confirmation round.
38
42
 
39
- ### Step 4: Validate and Confirm
43
+ ### Step 3: Write the config
40
44
 
41
- - Reject empty input.
42
- - Normalize: lowercase and replace spaces with hyphens.
43
- - Show the normalized slug and confirm it with the user before proceeding.
45
+ Set `active_feature:` to the slug (add the key if absent). To clear it, set it to `""`.
44
46
 
45
- ### Step 5: Update Config
47
+ ### Step 4: Create the subfolders
46
48
 
47
- Edit `{project-root}/_wizz/bmm/config.yaml`:
49
+ Create if missing:
48
50
 
49
- - If an `active_feature:` key exists, set its value to the confirmed slug.
50
- - If it does not exist, add the line `active_feature: "{slug}"`.
51
- - Save the file.
51
+ - `{planning_artifacts}/{active_feature}/`
52
+ - `{implementation_artifacts}/{active_feature}/`
52
53
 
53
- ### Step 6: Create Subfolders
54
+ Skip this step when clearing.
54
55
 
55
- Create these directories if they do not already exist:
56
+ ### Step 5: Report in one line
56
57
 
57
- - `{planning_artifacts}/{active_feature}/`
58
- - `{implementation_artifacts}/{active_feature}/`
58
+ "Feature: **{active_feature}**. Artefatos em `{planning_artifacts}/{active_feature}/` e `{implementation_artifacts}/{active_feature}/`, memória desta sessão marcada com o mesmo tema."
59
59
 
60
- ### Step 7: Confirm
60
+ When clearing: "Feature limpa. Artefatos voltam para as raízes e a memória sai sem tema de feature."
61
61
 
62
- Tell the user:
62
+ ## The feature is also the memory tag
63
63
 
64
- "Feature set to **{active_feature}**. New planning and implementation artifacts will be saved under:
65
- - `{planning_artifacts}/{active_feature}/`
66
- - `{implementation_artifacts}/{active_feature}/`
64
+ The slug is the single organizing axis, not a folder rule that stops at artifacts. While a feature is active:
65
+
66
+ - A decision saved to the Cérebro carries `tema: {active_feature}` in its frontmatter.
67
+ - The project state block records which feature the work sits under.
68
+ - An auto-memory entry about this work mentions the feature in its description, so a later `grep` by slug finds artifact, decision and trap together.
67
69
 
68
- Run this skill again anytime to switch features, or clear the slug to go back to the roots."
70
+ This reuses the `tema` axis that already exists for decisions. Do not create a second, parallel `feature:` field alongside it.
69
71
 
70
72
  ## Success Criteria
71
73
 
74
+ - ✅ The slug was resolved without asking the user, except in genuine ambiguity.
72
75
  - ✅ `active_feature` updated in `_wizz/bmm/config.yaml`.
73
- - ✅ Subfolders created in planning-artifacts and implementation-artifacts.
74
- - ✅ User clearly informed of the new artifact paths.
76
+ - ✅ Subfolders exist under planning-artifacts and implementation-artifacts.
77
+ - ✅ Memory written during the session carries the same slug as `tema`.
78
+ - ✅ The user got one line, not a dialogue.
@@ -37,7 +37,7 @@ activation_steps_append = []
37
37
 
38
38
  persistent_facts = [
39
39
  "file:{project-root}/**/project-context.md",
40
- "If active_feature is set in {project-root}/_wizz/bmm/config.yaml, save every planning and implementation artifact under a subfolder named after it (e.g. {planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/). If it is empty or unset, write to the artifact roots as usual.",
40
+ "FEATURE: o hook SessionStart resolve a feature ativa a partir do branch git e injeta 'FEATURE ATIVA: <slug>'. Se ela existir, salve TODO artefato de planejamento e implementação na subpasta com esse nome ({planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/) e grave o slug em active_feature no {project-root}/_wizz/bmm/config.yaml na primeira escrita, avisando em UMA linha. Memória gravada nesta sessão leva o mesmo slug como tema. Sem feature resolvida, escreva nas raízes. NUNCA pergunte a feature ao usuário: invoque wizz-set-feature só se ele pedir para trocar, ou se houver duas features abertas e o pedido não decidir entre elas.",
41
41
  ]
42
42
 
43
43
  role = "Translate product vision into a validated PRD, epics, and stories that development can execute during the Wizz Method planning phase."
@@ -37,7 +37,7 @@ activation_steps_append = []
37
37
 
38
38
  persistent_facts = [
39
39
  "file:{project-root}/**/project-context.md",
40
- "If active_feature is set in {project-root}/_wizz/bmm/config.yaml, save every planning and implementation artifact under a subfolder named after it (e.g. {planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/). If it is empty or unset, write to the artifact roots as usual.",
40
+ "FEATURE: o hook SessionStart resolve a feature ativa a partir do branch git e injeta 'FEATURE ATIVA: <slug>'. Se ela existir, salve TODO artefato de planejamento e implementação na subpasta com esse nome ({planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/) e grave o slug em active_feature no {project-root}/_wizz/bmm/config.yaml na primeira escrita, avisando em UMA linha. Memória gravada nesta sessão leva o mesmo slug como tema. Sem feature resolvida, escreva nas raízes. NUNCA pergunte a feature ao usuário: invoque wizz-set-feature só se ele pedir para trocar, ou se houver duas features abertas e o pedido não decidir entre elas.",
41
41
  ]
42
42
 
43
43
  role = "Turn user needs and the PRD into UX design specifications that inform architecture and implementation during the Wizz Method planning phase."
@@ -37,7 +37,7 @@ activation_steps_append = []
37
37
 
38
38
  persistent_facts = [
39
39
  "file:{project-root}/**/project-context.md",
40
- "If active_feature is set in {project-root}/_wizz/bmm/config.yaml, save every planning and implementation artifact under a subfolder named after it (e.g. {planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/). If it is empty or unset, write to the artifact roots as usual.",
40
+ "FEATURE: o hook SessionStart resolve a feature ativa a partir do branch git e injeta 'FEATURE ATIVA: <slug>'. Se ela existir, salve TODO artefato de planejamento e implementação na subpasta com esse nome ({planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/) e grave o slug em active_feature no {project-root}/_wizz/bmm/config.yaml na primeira escrita, avisando em UMA linha. Memória gravada nesta sessão leva o mesmo slug como tema. Sem feature resolvida, escreva nas raízes. NUNCA pergunte a feature ao usuário: invoque wizz-set-feature só se ele pedir para trocar, ou se houver duas features abertas e o pedido não decidir entre elas.",
41
41
  ]
42
42
 
43
43
  role = "Convert the PRD and UX into technical architecture decisions that keep implementation on track during the Wizz Method solutioning phase."
@@ -37,7 +37,7 @@ activation_steps_append = []
37
37
 
38
38
  persistent_facts = [
39
39
  "file:{project-root}/**/project-context.md",
40
- "If active_feature is set in {project-root}/_wizz/bmm/config.yaml, save every planning and implementation artifact under a subfolder named after it (e.g. {planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/). If it is empty or unset, write to the artifact roots as usual.",
40
+ "FEATURE: o hook SessionStart resolve a feature ativa a partir do branch git e injeta 'FEATURE ATIVA: <slug>'. Se ela existir, salve TODO artefato de planejamento e implementação na subpasta com esse nome ({planning_artifacts}/{active_feature}/, {implementation_artifacts}/{active_feature}/) e grave o slug em active_feature no {project-root}/_wizz/bmm/config.yaml na primeira escrita, avisando em UMA linha. Memória gravada nesta sessão leva o mesmo slug como tema. Sem feature resolvida, escreva nas raízes. NUNCA pergunte a feature ao usuário: invoque wizz-set-feature só se ele pedir para trocar, ou se houver duas features abertas e o pedido não decidir entre elas.",
41
41
  "When implementing against a library or framework, consult Context7 for current docs, APIs, and version-specific syntax before relying on training data or web search: call resolve-library-id with the library name, then query-docs with the returned /org/project id and a specific question. If Context7 is unavailable, tell the user once that they can enable it with `npx ctx7 setup`, then fall back to web research.",
42
42
  ]
43
43
 
@@ -0,0 +1,55 @@
1
+ # Wizz Low Ticket
2
+
3
+ A portable knowledge base and four operating skills for **low ticket direct response** in Brazil and Portugal: offers between roughly R$19 and R$97, sold cold on Meta Ads, on a phone, mostly inside the Instagram in-app browser.
4
+
5
+ Install it and a fresh machine has the methodology and the four agents working, with no extra setup.
6
+
7
+ ## What ships
8
+
9
+ | Skill | Does | Use when | Do not use when |
10
+ |---|---|---|---|
11
+ | `lowticket-metodologia` | routes a request to the one knowledge shard that answers it, loads the guardrails alongside | any low ticket work: offer, creative, page, campaign, funnel | SaaS, B2B, client site, high ticket |
12
+ | `lowticket-trafego` | campaign diagnosis and ruler: structure, bid cap, when to cut, how to scale | reading, cutting or scaling a Meta campaign | Google Ads, brand campaigns, writing ads |
13
+ | `lowticket-funil` | the post-checkout ladder: upsell, downsell, final offer, price rules | after the front-end converts, to raise average order value | before a front-end that converts exists |
14
+ | `lowticket-minerador` | mining and judging a competitor offer, with a cut-off rubric | hunting a new offer to model | the offer is already defined (use `wizz-offer-forge`) |
15
+ | `lowticket-pagina` | page performance: connect rate, LCP, pixel order, acceptance targets | optimizing or building a low ticket sales page | institutional sites or apps |
16
+
17
+ All five read the Cérebro on activation and **none of them keeps its own memory**, the same contract as `wizz-offer-forge`. What is decided lives in the Cérebro; what is known lives in the shards.
18
+
19
+ ## The loading contract
20
+
21
+ The knowledge base is 20 shards. It is not loaded whole. Reading everything costs around 36k tokens; a typical answer needs under 5k.
22
+
23
+ | Step | Read | When |
24
+ |---|---|---|
25
+ | 0 | `knowledge/INDEX.md` + `knowledge/guardrails.md` | always |
26
+ | 1 | **one** shard named by the INDEX | the request matches a trigger |
27
+ | 2 | the raw source on the operator's machine | rare: the shard did not answer |
28
+
29
+ ## Language
30
+
31
+ The framework surface is English: this file, the module definition, the SKILL.md frontmatter, the registry entry. **The knowledge is Portuguese**: the shard bodies, their filenames, the INDEX, the guardrails, the table headers.
32
+
33
+ That split is deliberate. The market this describes is BR/PT and the vocabulary is native (`bid cap`, `connect rate`, `order bump`, `Utmify`, `Pix`); translating it would make it less precise, not more portable. Decision recorded 2026-08-28.
34
+
35
+ ## Origin
36
+
37
+ The knowledge here is a distillation: facts, benchmarks, checklists and critical analysis, written from scratch. **No third-party lesson text, transcript, PDF or prompt ships in this package.** Raw sources stay on the author's machine, outside npm and outside git.
38
+
39
+ If you extend a shard, keep it that way: write the fact, never the quote. `knowledge/15-como-estender.md` has the full process.
40
+
41
+ Three tactics present in the source material are recorded and **not adopted** in `knowledge/guardrails.md`: buying engagement, AI avatars passing as real people, and synthetic testimonials. They are loaded on every activation and stay blocked until the operation's owner decides otherwise.
42
+
43
+ ## Optional config
44
+
45
+ The creative swipe file (155 real pieces, ~2 GB of video and image) does not travel. The written analysis of it, `CATALOGO.md`, does, and it is enough to work from.
46
+
47
+ To let the agent open a specific piece, point at the folder during install, or pin it by hand:
48
+
49
+ ```toml
50
+ # _wizz/custom/config.user.toml (never overwritten by the installer)
51
+ [modules.lowticket]
52
+ swipe_file_path = "/absolute/path/to/the/swipe/file"
53
+ ```
54
+
55
+ Resolution order and the exact wording to use when the folder is absent: `skills/lowticket-metodologia/references/swipe-file.md`.
@@ -0,0 +1,31 @@
1
+ code: lowticket
2
+ name: "Wizz Low Ticket"
3
+ description: "Low ticket direct-response playbook for Meta Ads (BR/PT): funnel diagnosis, bid-cap campaigns, creatives, sales pages, upsell ladders and offer mining. Knowledge base in Portuguese, loaded one shard at a time."
4
+ default_selected: false
5
+
6
+ # --- Origin note (read this before editing the knowledge base) ---
7
+ #
8
+ # The knowledge under skills/lowticket-metodologia/knowledge/ is a distillation
9
+ # written from scratch: facts, benchmarks, checklists and critical analysis.
10
+ # No third-party lesson text, transcript, PDF or prompt ships in this package.
11
+ # The raw sources stay on the author's machine, outside npm and outside git.
12
+ # Keep it that way: when you extend a shard, write the fact, never the quote.
13
+ #
14
+ # The knowledge body, the shard filenames and the INDEX are in Portuguese on
15
+ # purpose (the market it describes is BR/PT and the vocabulary is native).
16
+ # The framework surface (this file, SKILL.md frontmatter, the registry entry,
17
+ # the README) stays in English like the rest of Wizz Method.
18
+ # Decision recorded 2026-08-28.
19
+
20
+ # --- Module-specific config ---
21
+
22
+ swipe_file_path:
23
+ prompt:
24
+ - "Absolute path to your creative swipe file (the folder holding the reference videos and images)?"
25
+ - "Optional. Leave it empty: the skills still work from the written analysis in CATALOGO.md."
26
+ scope: user
27
+ default: ""
28
+ result: "{value}"
29
+
30
+ directories:
31
+ - "{output_folder}/lowticket"
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: lowticket-funil
3
+ description: Designs the post-checkout ladder for a low ticket offer - upsell 1, upsell 2, downsell and a final offer - deciding what each step sells, which pain it answers, what it costs and why it sits in that position, then writes the pages. Use when a front-end offer already converts and the goal is to raise average order value, or when an existing upsell sequence is not converting. Do NOT use before a front-end that converts exists, and do NOT use for traffic, campaigns or the front-end offer itself.
4
+ ---
5
+
6
+ # Low Ticket Funnel Extension
7
+
8
+ Turns a single product into a post-checkout ladder. The whole discipline reduces to one question, asked at every step:
9
+
10
+ **After this person buys this, what is the next problem they inevitably hit?**
11
+
12
+ Every offer in the ladder exists because it answers that question for the step before it. An offer that does not answer it is a random product bolted onto a checkout, and it converts like one.
13
+
14
+ ## Prerequisite
15
+
16
+ **There has to be a front-end that converts.** Extending a funnel above a front that does not sell multiplies zero. If the front is not validated, say so and point to `wizz-offer-forge` (build the offer) or `lowticket-trafego` (find out why it is not selling).
17
+
18
+ ## Source of truth
19
+
20
+ Read the Cérebro state first (via the `cerebro` skill). Then, if `lowticket-metodologia` is installed, read `knowledge/INDEX.md` + `knowledge/guardrails.md` and the shard `07-funil-upsell.md`, especially §7.4 (the conversion and ticket cascade). Where a generic skill contradicts that shard, the shard wins and you say so.
21
+
22
+ This skill has **no memory of its own**. What gets decided goes to the Cérebro; the artifact goes to a file.
23
+
24
+ ## Flow, in five moves
25
+
26
+ Do not deliver the whole thing at once. Each move ends with a question, and the answer shapes the next one.
27
+
28
+ ### 1. Four questions, one message
29
+
30
+ Explain in two lines what you are about to do, then ask exactly these, together:
31
+
32
+ 1. What is the front-end product? Name and what it delivers.
33
+ 2. What does it cost today?
34
+ 3. What is the main pain it solves?
35
+ 4. Who is it for? Audience, age band or situation.
36
+
37
+ No follow-up questions at this stage unless something is missing outright.
38
+
39
+ ### 2. Diagnosis and two paths
40
+
41
+ Restate what you heard in one line: *"Seu front é [produto] para [público]. Ele resolve [dor]. O ticket é [valor]."*
42
+
43
+ Then offer **two** expansion paths, each with: the complementary pain, the product that would answer it, and why that pain shows up *after* the front-end. Explain the reasoning in plain language and ask which one fits. Develop a third only if asked.
44
+
45
+ Two paths, not five. A menu is not a recommendation.
46
+
47
+ ### 3. The map
48
+
49
+ Build the full ladder using the template in `references/mapa-do-funil.md`. Every step carries: name, price, pain, why it sits in that position, and three outcome bullets.
50
+
51
+ Then state the flow out loud:
52
+
53
+ ```
54
+ Front → Checkout → U1 → aceitou: U2 · recusou: Downsell → Oferta Final → Obrigado
55
+ ```
56
+
57
+ Ask: adjust a product first, or write the copy?
58
+
59
+ ### 4. The pages
60
+
61
+ One page per step, in the fixed 10-block order from `references/copy-das-paginas.md`. Tone shifts by step: aspirational on the front, celebratory on the upsell, empathetic on the downsell, plainly useful on the final offer.
62
+
63
+ ### 5. Implementation
64
+
65
+ Offer, in this order: ready HTML, help with one-click OTO, adaptation to the platform in use, or adjusting the offers.
66
+
67
+ ## The rules that decide the ladder
68
+
69
+ ### Product
70
+
71
+ - **An upsell is not a discount on the front.** U1 solves a *complementary* pain: the front teaches how to do X, U1 helps apply X.
72
+ - **U2 is the natural next step for whoever took U1**, a more advanced pain. It is never shown to someone who refused U1.
73
+ - **A downsell is a different, simpler product**, not the same product cheaper. "Você recusou por R$97, mas leva por R$27" is a discount, not a downsell. Reach for a checklist, a template, a condensed version, a fast-implementation kit, a tool, a script.
74
+ - **The final offer answers a broad, frequent pain of the niche**, so nearly every buyer can want it.
75
+
76
+ ### Price
77
+
78
+ | Step | Rule |
79
+ |---|---|
80
+ | Upsell 1 | 40% to 60% of the front price |
81
+ | Upsell 2 | around U1, up to ~20% above |
82
+ | Downsell | 10% to 25% **of the product that was refused**, not of the front |
83
+ | Final offer | low enough for an instant decision; in BR, roughly R$9 to R$15 as a practical floor |
84
+
85
+ Never raise the front price to make the ladder look more sophisticated. If the price was not given, ask before building the map.
86
+
87
+ ### Architecture
88
+
89
+ Three paid steps after checkout, maximum. Everyone reaches the final offer. **U2 and the downsell are never shown to the same person.** Post-checkout offers should be one-click OTO; if the platform in use does not support that, say so before promising the implementation.
90
+
91
+ If asked for five or more paid steps, say the recommendation is to consolidate. A longer ladder is not a bigger ladder.
92
+
93
+ ### Numbers, only when asked
94
+
95
+ Treat these as reference, never as a promise: U1 15-25%, U2 20-35% among U1 buyers, downsell 20-35%, final offer 18-28%, total ticket around 1.5x to 2.3x the front. The canonical version is §7.4 of shard `07`.
96
+
97
+ ## Hard limits on the copy
98
+
99
+ - **Never invent product facts.** Missing price, audience, pain, promise or mechanism: stop and ask. Do not fill the gap with something plausible.
100
+ - **Never invent social proof.** No student counts, revenue, conversion rates, testimonials or results unless the user supplied them. No proof means no proof block.
101
+ - **Never invent scarcity.** A one-time offer inside a funnel is real scarcity and can be said. A fake countdown, an invented deadline, a fictional seat count or a made-up price increase is not, and does not ship.
102
+ - **Bullets are outcomes, not contents.** "12 módulos, 8 aulas, PDF de 40 páginas" is an inventory. "Você monta a primeira campanha sem travar na tela em branco" is an outcome.
103
+
104
+ ## Voice
105
+
106
+ Portuguese (BR), spoken register, short sentences, no em-dashes. Concrete scenes instead of abstract emotion: not "você se sente inseguro", but "você abre o computador às 9h e às 11h ainda está tentando descobrir por onde começar". Repeat the product's name instead of cycling through synonyms.
107
+
108
+ The full anti-AI word list and the rhythm rules are in `references/copy-das-paginas.md`. For a deeper pass, hand the draft to the `humanizer` skill.
109
+
110
+ ## Out of scope
111
+
112
+ Traffic, campaigns, hiring, accounting, general operations. Bring it back to product, offer, price, pain, post-checkout sequence and copy, or route: `lowticket-trafego` for campaigns, `wizz-offer-forge` for the front-end offer, `lowticket-pagina` for the sales page itself.