wizz-method 1.15.0 → 1.16.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 (116) hide show
  1. package/package.json +3 -2
  2. package/skills-registry.yaml +4 -0
  3. package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/__pycache__/lint_spine.cpython-313.pyc +0 -0
  4. package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/tests/__pycache__/test_lint_spine.cpython-313-pytest-9.1.1.pyc +0 -0
  5. package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +3 -5
  6. package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +71 -0
  7. package/src/bmm-skills/4-implementation/wizz-code-review/references/claims-check.md +14 -0
  8. package/src/bmm-skills/4-implementation/wizz-code-review/references/deletion-check.md +14 -0
  9. package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/edge-case-hunter.md +110 -0
  10. package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/verification-gap.md +113 -0
  11. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-01-gather-context.md +32 -23
  12. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-02-review.md +10 -13
  13. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-03-triage.md +16 -22
  14. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-04-present.md +4 -2
  15. package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +76 -0
  16. package/src/bmm-skills/4-implementation/wizz-quick-dev/references/claims-check.md +14 -0
  17. package/src/bmm-skills/4-implementation/wizz-quick-dev/references/deletion-check.md +14 -0
  18. package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/edge-case-hunter.md +110 -0
  19. package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/verification-gap.md +113 -0
  20. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-04-review.md +38 -16
  21. package/src/bmm-skills/4-implementation/wizz-retrospective/SKILL.md +56 -1488
  22. package/src/bmm-skills/4-implementation/wizz-retrospective/customize.toml +3 -5
  23. package/src/bmm-skills/4-implementation/wizz-retrospective/references/acceptance-verdict.md +55 -0
  24. package/src/bmm-skills/4-implementation/wizz-retrospective/references/aggregate-views.md +17 -0
  25. package/src/bmm-skills/4-implementation/wizz-retrospective/references/evidence-gathering.md +30 -0
  26. package/src/bmm-skills/4-implementation/wizz-retrospective/references/retro-document.md +84 -0
  27. package/src/bmm-skills/4-implementation/wizz-retrospective/references/team-discussion.md +22 -0
  28. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/__pycache__/sprint_status.cpython-313.pyc +0 -0
  29. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/git_evidence.py +304 -0
  30. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/sprint_status.py +746 -0
  31. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-313-pytest-9.1.1.pyc +0 -0
  32. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-313-pytest-9.1.1.pyc +0 -0
  33. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
  34. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_git_evidence.py +750 -0
  35. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_sprint_status.py +1579 -0
  36. package/src/bmm-skills/4-implementation/wizz-sprint-planning/SKILL.md +39 -296
  37. package/src/bmm-skills/4-implementation/wizz-sprint-planning/customize.toml +1 -3
  38. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/fix-sprint-status.md +30 -0
  39. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/generate-tracking.md +25 -0
  40. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/readiness-gate.md +20 -0
  41. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/status-view.md +14 -0
  42. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/validate.md +10 -0
  43. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/__pycache__/sprint_plan.cpython-313.pyc +0 -0
  44. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/sprint_plan.py +697 -0
  45. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-313-pytest-9.1.1.pyc +0 -0
  46. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
  47. package/src/bmm-skills/4-implementation/wizz-sprint-planning/sprint-status-template.yaml +9 -7
  48. package/src/bmm-skills/module-help.csv +3 -3
  49. package/src/core-skills/module-help.csv +1 -0
  50. package/src/core-skills/wizz-advanced-elicitation/SKILL.md +36 -114
  51. package/src/core-skills/wizz-advanced-elicitation/{methods.csv → assets/methods.csv} +29 -27
  52. package/src/core-skills/wizz-advanced-elicitation/customize.toml +54 -0
  53. package/src/core-skills/wizz-advanced-elicitation/scripts/__pycache__/pick_methods.cpython-313.pyc +0 -0
  54. package/src/core-skills/wizz-advanced-elicitation/scripts/pick_methods.py +233 -0
  55. package/src/core-skills/wizz-advanced-elicitation/scripts/tests/__pycache__/test_pick_methods.cpython-313-pytest-9.1.1.pyc +0 -0
  56. package/src/core-skills/wizz-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
  57. package/src/core-skills/wizz-brainstorming/SKILL.md +2 -2
  58. package/src/core-skills/wizz-brainstorming/assets/brain-selector.html +2 -0
  59. package/src/core-skills/wizz-brainstorming/references/converge.md +1 -1
  60. package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
  61. package/src/core-skills/wizz-brainstorming/references/headless.md +1 -1
  62. package/src/core-skills/wizz-brainstorming/references/mode-autonomous.md +1 -1
  63. package/src/core-skills/wizz-brainstorming/scripts/__pycache__/brain.cpython-313.pyc +0 -0
  64. package/src/core-skills/wizz-brainstorming/scripts/brain.py +36 -6
  65. package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-313-pytest-9.1.1.pyc +0 -0
  66. package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-314.pyc +0 -0
  67. package/src/core-skills/wizz-brainstorming/scripts/tests/test_brain.py +24 -2
  68. package/src/core-skills/wizz-customize/scripts/__pycache__/list_customizable_skills.cpython-313.pyc +0 -0
  69. package/src/core-skills/wizz-customize/scripts/tests/__pycache__/test_list_customizable_skills.cpython-313-pytest-9.1.1.pyc +0 -0
  70. package/src/core-skills/wizz-forge-idea/SKILL.md +107 -0
  71. package/src/core-skills/wizz-forge-idea/customize.toml +41 -0
  72. package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-313.pyc +0 -0
  73. package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-314.pyc +0 -0
  74. package/src/core-skills/wizz-forge-idea/scripts/resolve_personas.py +275 -0
  75. package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-313-pytest-9.1.1.pyc +0 -0
  76. package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-314.pyc +0 -0
  77. package/src/core-skills/wizz-forge-idea/scripts/tests/test_resolve_personas.py +138 -0
  78. package/src/core-skills/wizz-party-mode/SKILL.md +37 -54
  79. package/src/core-skills/wizz-party-mode/customize.toml +61 -2
  80. package/src/core-skills/wizz-party-mode/references/create-party.md +8 -3
  81. package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +3 -1
  82. package/src/core-skills/wizz-party-mode/references/mode-subagent.md +16 -4
  83. package/src/core-skills/wizz-party-mode/references/party-memory.md +51 -0
  84. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-313.pyc +0 -0
  85. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  86. package/src/core-skills/wizz-party-mode/scripts/resolve_party.py +22 -7
  87. package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-313-pytest-9.1.1.pyc +0 -0
  88. package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-314.pyc +0 -0
  89. package/src/core-skills/wizz-party-mode/scripts/tests/{test-resolve_party.py → test_resolve_party.py} +8 -0
  90. package/src/core-skills/wizz-review-edge-case-hunter/SKILL.md +17 -3
  91. package/src/modules/wizz/agents/wizz-growth/customize.toml +10 -0
  92. package/src/scripts/__pycache__/memlog.cpython-313.pyc +0 -0
  93. package/src/scripts/tests/__pycache__/test_memlog.cpython-313-pytest-9.1.1.pyc +0 -0
  94. package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-313-pytest-9.1.1.pyc +0 -0
  95. package/src/skills-lib/pesquisa-de-publico-do-piva/README.md +83 -0
  96. package/src/skills-lib/pesquisa-de-publico-do-piva/SKILL.md +65 -0
  97. package/src/skills-lib/pesquisa-de-publico-do-piva/assets/template.html +414 -0
  98. package/src/skills-lib/pesquisa-de-publico-do-piva/prompts.md +131 -0
  99. package/src/skills-lib/wizz-offer-forge/README.md +13 -0
  100. package/src/skills-lib/wizz-offer-forge/SKILL.md +74 -0
  101. package/src/skills-lib/wizz-offer-forge/references/empilhamento-valor.md +25 -0
  102. package/src/skills-lib/wizz-offer-forge/references/garantia-reversa.md +22 -0
  103. package/src/skills-lib/wizz-offer-forge/references/mecanismo-unico.md +28 -0
  104. package/src/skills-lib/wizz-offer-forge/references/ponte-trafego.md +21 -0
  105. package/src/skills-lib/wizz-router/references/routing-table-flat.md +2 -0
  106. package/tools/installer/core/installer.js +57 -0
  107. package/tools/installer/ide/_config-driven.js +3 -3
  108. package/tools/installer/ide/platform-codes.yaml +28 -0
  109. package/tools/installer/modules/external-manager.js +140 -2
  110. package/tools/installer/modules/official-modules.js +68 -21
  111. package/tools/installer/prompts.js +45 -103
  112. package/tools/installer/ui.js +64 -7
  113. package/wizz-modules.yaml +65 -11
  114. package/src/bmm-skills/4-implementation/wizz-sprint-planning/checklist.md +0 -34
  115. package/src/core-skills/wizz-brainstorming/scripts/memlog.py +0 -202
  116. package/src/core-skills/wizz-brainstorming/scripts/tests/test_memlog.py +0 -265
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: wizz-offer-forge
3
+ description: Forja ofertas irresistíveis de resposta direta e infoprodutos integrando mecanismo único, tese da oferta, empilhamento de valor, garantia reversa, ancoragem de preço e matriz de criativos para tráfego pago. Use quando o usuário quiser criar uma nova oferta do zero, reestruturar oferta existente que não converte, empilhar bônus de alta percepção, definir garantia agressiva ou traduzir pesquisa de público (Piva/VoC) em uma máquina de vendas. NÃO use para pesquisa bruta de público (use pesquisa-de-publico-do-piva) nem redação final de copy de página (use copywriting).
4
+ ---
5
+
6
+ # Wizz Offer Forge
7
+
8
+ Sistema de engenharia e forja de ofertas irresistíveis para tráfego direto e infoprodutos. Converte dados brutos de mercado e dores latentes em uma arquitetura de oferta de alta conversão, blindada contra objeções e pronta para escala em mídia paga.
9
+
10
+ ## O que esta skill entrega
11
+
12
+ Um artefato mestre `OFFER-SPEC.md` contendo:
13
+ 1. **Tese da Oferta & Promessa Central** (O Grande Gancho e o Resultado Tangível no Tempo).
14
+ 2. **Mecanismo Único Duplo** (Mecanismo da Causa + Mecanismo da Solução).
15
+ 3. **Core Deliverable + Empilhamento de Valor** (Produto Principal + Bônus Anti-Objeção).
16
+ 4. **Ancoragem de Preço, Modelagem de Planos & Order Bumps / Upsells**.
17
+ 5. **Garantia Reversa / Inversão de Risco** (Risco Zero ou Ganho Duplo).
18
+ 6. **Ponte de Tráfego: Matriz de Hooks e Ângulos de Criativos**.
19
+
20
+ ## Princípios de Forja de Oferta
21
+
22
+ - **Clareza vence criatividade vazia:** Se o prospecto precisa pensar para entender o que ganha, a oferta morreu.
23
+ - **Mecanismo Único dá esperança nova:** O público já tentou e falhou. A razão do fracasso anterior não foi incompetência dele, foi a falta do seu Mecanismo.
24
+ - **Bônus que matam a próxima dor:** Cada bônus da pilha deve resolver o obstáculo imediato que surge quando o cliente compra o produto principal.
25
+ - **Risco invertido:** O custo da inação deve parecer infinitamente maior do que o risco financeiro de comprar.
26
+
27
+ ## Fluxo de Trabalho
28
+
29
+ ### Passo 0 — Coleta de Insumos & Ambição
30
+
31
+ Consulte o contexto existente ou pergunte ao usuário:
32
+ 1. **Pesquisa de Público Prévia:** Existe um relatório da skill `pesquisa-de-publico-do-piva` ou notas de VoC? Se sim, importe como insumo primário. Se não, defina Avatar, Dor Latente e Nível de Consciência inicial.
33
+ 2. **Modelo de Negócio:** Low-ticket (R$ 10 a R$ 97), Front-end médio (R$ 197 a R$ 497) ou High-ticket / Mentoria (R$ 1.000 a R$ 10.000+)?
34
+ 3. **Veículo de Entrega:** Curso gravado, comunidade, templates/ferramentas, mentoria ao vivo, SaaS ou híbrido?
35
+
36
+ ### Passo 1 — Destilação do Mecanismo Único
37
+
38
+ Consulte `references/mecanismo-unico.md`:
39
+ - **Mecanismo da Causa (O Vilão Oculto):** O motivo real e não-óbvio pelo qual o cliente não teve resultado até hoje com os métodos tradicionais.
40
+ - **Mecanismo da Solução (O Veículo Proprietário):** O processo, método ou framework nomeado que torna o resultado previsível e simples.
41
+
42
+ ### Passo 2 — A Grande Promessa & Posicionamento
43
+
44
+ Formule a Promessa Primária em 1 frase de alto impacto:
45
+ `[Resultado Específico Desejado] em [Prazo Crível] sem [Principal Dor / Sacrifício Odiado].`
46
+
47
+ ### Passo 3 — Empilhamento de Valor & Matriz de Bônus
48
+
49
+ Consulte `references/empilhamento-valor.md`:
50
+ - **Produto Principal:** O caminho mais rápido e direto ao resultado.
51
+ - **Bônus 1 (Velocidade):** Templates, atalhos, checklists prontos que encurtam a execução.
52
+ - **Bônus 2 (Segurança):** Como evitar o erro mais comum ou o que fazer em caso de dúvida.
53
+ - **Bônus 3 (Próximo Passo):** O que fazer depois de atingir o primeiro marco.
54
+ - **Order Bump Estratégico:** Complemento impulsivo de alta margem (30-50% de take rate).
55
+
56
+ ### Passo 4 — Ancoragem de Preço & Garantia Reversa
57
+
58
+ Consulte `references/garantia-reversa.md`:
59
+ - Preço total empilhado vs Preço de ancoragem vs Preço real de lançamento/escala.
60
+ - **Garantia Incondicional:** 7, 15 ou 30 dias sem atrito.
61
+ - **Garantia Condicional Agressiva (Inversão de Risco):** "Se você aplicar o método X por Y dias e não atingir Z, devolvo 100% do seu dinheiro + R$ 100 do meu bolso pelo seu tempo perdido."
62
+
63
+ ### Passo 5 — Ponte de Tráfego & Ângulos de Anúncios
64
+
65
+ Consulte `references/ponte-trafego.md`:
66
+ - Mapeie 3 a 5 ganchos diretos para alimentar `ad-creative` e `paid-ads` no `traffic-masters` (Pedro Sobral / Molly Pittman / Ad Midas):
67
+ 1. *Gancho da Quebra de Padrão / Vilão Revelado*
68
+ 2. *Gancho do Erro Comum / Teste Rápido*
69
+ 3. *Gancho da Demonstração do Mecanismo*
70
+ 4. *Gancho da História de Transformação / Case*
71
+
72
+ ### Passo 6 — Compilação e Entrega
73
+
74
+ Grave o artefato final em `{output_folder}/offers/OFFER-[NOME_SLUG].md` e apresente um resumo executivo com os 4 pontos de decisão para validação imediata do usuário.
@@ -0,0 +1,25 @@
1
+ # Empilhamento de Valor & Matriz de Bônus
2
+
3
+ O valor percebido de uma oferta segue a Equação de Valor (Alex Hormozi):
4
+ `Valor = (Sonho / Resultado Desejado × Certeza Percebida de Alcance) / (Tempo até o Resultado × Esforço e Sacrifício)`
5
+
6
+ Para maximizar o valor e justificar o preço com facilidade:
7
+
8
+ ## 1. Produto Principal (The Core)
9
+ - Foco em simplicidade e entrega rápida do resultado primário.
10
+ - Menos aulas teóricas, mais implementação passo a passo.
11
+
12
+ ## 2. A Matriz de 4 Bônus Estratégicos
13
+
14
+ Cada bônus deve ter um propósito psicológico específico:
15
+
16
+ | Tipo de Bônus | Objetivo | Exemplos |
17
+ |---|---|---|
18
+ | **Bônus 1: Velocidade** | Reduz o tempo até a primeira vitória | Templates prontos, planilhas automáticas, scripts copiar-e-colar |
19
+ | **Bônus 2: Quebra de Objeção** | Elimina a maior desculpa para não comprar | "Guia para quem não entende nada de tecnologia", "Como fazer sem equipe" |
20
+ | **Bônus 3: Blindagem / Segurança** | Dá suporte contra imprevistos | Checklist de auditoria, guia anti-bloqueio, playbook de emergência |
21
+ | **Bônus 4: Próximo Nível** | Mostra o que fazer após a vitória inicial | Treinamento avançado de escala, automação de processos |
22
+
23
+ ## 3. Order Bump (Take Rate 30-50%)
24
+ - Um complemento impulsivo com preço entre 20% a 40% do valor do produto principal.
25
+ - Não deve ser essencial para o funcionamento do core (para não parecer chantagem), mas deve ser irresistivelmente conveniente (ex: *Pack de 100 Criativos Editáveis*, *Acesso Vitalício*, *Templates Canva Prontos*).
@@ -0,0 +1,22 @@
1
+ # Garantia Reversa & Inversão Total de Risco
2
+
3
+ A garantia não é apenas uma formalidade legal; ela é a principal alavanca de conversão na etapa final de decisão de compra.
4
+
5
+ ## 1. Níveis de Garantia
6
+
7
+ ### Nível 1: Incondicional (Padrão)
8
+ - 7 a 30 dias.
9
+ - Devolução integral sem perguntas nem atrito.
10
+ - Elimina o medo inicial de comprar de um desconhecido.
11
+
12
+ ### Nível 2: Condicional de Alta Performance
13
+ - Exige que o cliente mostre que implementou os passos (assistiu as aulas, preencheu as planilhas, subiu a campanha).
14
+ - Se implementou e não teve resultado em 30 a 90 dias, recebe suporte individual ou 100% de reembolso.
15
+
16
+ ### Nível 3: Garantia Reversa / Risco Positivo (The Hormozi Guarantee)
17
+ - O criador assume um risco maior do que o cliente.
18
+ - *Exemplo:* "Se você aplicar o método durante 60 dias e não dobrar o seu retorno em tráfego, devolvemos 100% do valor pago + R$ 200 via PIX pelo seu tempo investido."
19
+
20
+ ## 2. Regras de Segurança e Viabilidade
21
+ - Só use a Garantia Reversa Nível 3 se o seu produto tiver um método comprovadamente eficaz e critérios claros de verificação de execução.
22
+ - A clareza dos termos protege o produtor de fraudes e gera extrema autoridade no mercado.
@@ -0,0 +1,28 @@
1
+ # Mecanismo Único (Causa e Solução)
2
+
3
+ O Mecanismo Único é a peça central que separa uma oferta genérica de uma máquina de conversão.
4
+
5
+ ## 1. Mecanismo da Causa (Por que falharam antes)
6
+
7
+ O prospecto já tentou soluções concorrentes e não alcançou o resultado. Se dissermos que ele falhou por falta de esforço ou incompetência, ele rejeitará a mensagem.
8
+
9
+ O Mecanismo da Causa identifica o **vilão oculto**:
10
+ - A falha estrutural dos métodos tradicionais.
11
+ - A armadilha que o mercado ensina que sabota os resultados.
12
+ - O fator biológico, algorítmico, econômico ou psicológico que ninguém explicou para ele.
13
+
14
+ *Exemplo:* "Você não consegue manter a dieta porque métodos tradicionais cortam calorias e disparam o hormônio grelina, forçando seu cérebro a sabotar você em nível biológico."
15
+
16
+ ## 2. Mecanismo da Solução (O Veículo Proprietário)
17
+
18
+ É o nome próprio, método, ferramenta ou tecnologia que resolve a causa raiz de forma elegante:
19
+ - Deve ter um nome memorável (ex: *Protocolo 3-Fases*, *Fórmula da Oferta Invertida*, *Método Turbo-Sync*).
20
+ - Deve ser explicável em 3 passos lógicos e sequenciais.
21
+ - Deve tornar o resultado inevitável se os passos forem seguidos.
22
+
23
+ ## 3. Checklist do Mecanismo Único
24
+
25
+ - [ ] O mecanismo tem um nome proprietário e sonoro?
26
+ - [ ] Ele isenta o cliente de culpas passadas?
27
+ - [ ] Ele explica por que a concorrência falha?
28
+ - [ ] Ele cria uma categoria própria onde sua oferta não tem concorrente direto?
@@ -0,0 +1,21 @@
1
+ # Ponte de Tráfego: Da Oferta ao Criativo
2
+
3
+ Uma oferta excelente sem uma ponte direta para a mídia paga não escala. A ponte de tráfego traduz a tese da oferta em ganchos e ângulos de anúncios.
4
+
5
+ ## 1. Os 4 Formatos de Anúncios de Entrada
6
+
7
+ 1. **O Gancho da Quebra de Padrão (Pattern Interrupt):**
8
+ - Ataca a crença tradicional do mercado.
9
+ - *Estrutura:* "Por que [Conselho Popular] é o motivo exato de você estar [Falhando]."
10
+ 2. **O Gancho do Erro Comum / Quiz:**
11
+ - Desafia o espectador a checar se está cometendo um erro crítico.
12
+ - *Estrutura:* "Se você está fazendo [Ação X], pare agora antes que aconteça [Consequência Ruim]."
13
+ 3. **O Gancho da Demonstração do Mecanismo (Show, Don't Tell):**
14
+ - Mostra o processo ou o resultado visual imediato em tela.
15
+ - *Estrutura:* "Como esta ferramenta / método de 3 passos gerou [Resultado] em apenas [Tempo]."
16
+ 4. **O Gancho do Relato / Não Consegue Dizer (Can't Tell):**
17
+ - Toca na ferida emocional profunda que o cliente sente mas tem vergonha de admitir.
18
+ - *Estrutura:* "A sensação silenciosa de trabalhar 12 horas por dia e ver o saldo da conta estagnado..."
19
+
20
+ ## 2. Handoff para o `traffic-masters` e `copy-squad`
21
+ A matriz de criativos gerada pela skill `wizz-offer-forge` serve como o brief exato para os agentes de mídia paga (`wizz-ads`, `pedro-sobral`, `molly-pittman`, `ad-midas`) e de copy (`wizz-copy`, `hormozi-copy`).
@@ -75,6 +75,8 @@ Use esta tabela **só fora de projeto Wizz** (sem `_wizz/`), quando o router map
75
75
  | Ferramenta grátis de captação de leads | `free-tool-strategy` | 2 |
76
76
  | A/B test, variações, experimentos de conversão | `ab-test-setup` + `analytics-tracking` | 2 |
77
77
  | Copywriting, copy, persuasão, texto de venda | `copywriting` + `humanizer` | 1 |
78
+ | Pesquisa de público de oferta, VoC, matriz de ângulos, léxico de infoproduto | `pesquisa-de-publico-do-piva` | 1 |
79
+ | Forjar oferta, criar oferta irresistível, mecanismo único, bônus, garantia | `wizz-offer-forge` + `pricing-strategy` | 1 |
78
80
  | Pesquisa de mercado, inteligência competitiva | `deep-research` | 2 |
79
81
 
80
82
  ## Contexto e Memória
@@ -137,6 +137,12 @@ class Installer {
137
137
 
138
138
  const restoreResult = await this._restoreUserFiles(paths, updateState);
139
139
 
140
+ // Mostra as mensagens de pós-instalação de "ação necessária" dos módulos
141
+ // instalados (ex.: rodar uma skill de setup) e deixa o usuário confirmar
142
+ // antes do resumo final, para "Wizz Method is ready to use!" continuar
143
+ // sendo a última coisa exibida.
144
+ await this._displayPostInstallMessages(config, officialModules);
145
+
140
146
  // Render consolidated summary
141
147
  await this.renderInstallSummary(results, {
142
148
  wizzDir: paths.wizzDir,
@@ -1207,6 +1213,57 @@ class Installer {
1207
1213
  });
1208
1214
  }
1209
1215
 
1216
+ /**
1217
+ * Exibe as mensagens de pós-instalação definidas no registry para os módulos
1218
+ * instalados nesta execução. São avisos de "ação necessária" (ex.: "rode a
1219
+ * skill wizz-loop-setup") que o usuário precisa ver para concluir o setup.
1220
+ * São definidas pela propriedade `post-install-message` na entrada do módulo
1221
+ * em `wizz-modules.yaml`.
1222
+ *
1223
+ * Instalações interativas exigem que o usuário confirme cada mensagem
1224
+ * (Enter); instalações não-interativas (--yes / skipPrompts) imprimem a
1225
+ * mensagem e seguem sem bloquear, para CI e scripts não travarem.
1226
+ *
1227
+ * @param {Object} config - Config da instalação (config.modules, config.skipPrompts)
1228
+ * @param {Object} officialModules - Instância de OfficialModules (carrega o registry)
1229
+ */
1230
+ async _displayPostInstallMessages(config, officialModules) {
1231
+ const moduleCodes = config.modules || [];
1232
+ if (moduleCodes.length === 0) return;
1233
+
1234
+ const externalManager = officialModules && officialModules.externalModuleManager;
1235
+ if (!externalManager) return;
1236
+
1237
+ const color = await prompts.getColor();
1238
+
1239
+ for (const code of moduleCodes) {
1240
+ let moduleInfo;
1241
+ try {
1242
+ moduleInfo = await externalManager.getModuleByCode(code);
1243
+ } catch {
1244
+ continue; // Módulos embutidos (core/bmm/wizz) não estão no registry — pular.
1245
+ }
1246
+
1247
+ const message = moduleInfo && moduleInfo.postInstallMessage;
1248
+ if (!message) continue;
1249
+
1250
+ await prompts.box(String(message).trim(), `⚑ Action needed — ${moduleInfo.name || code}`, {
1251
+ rounded: true,
1252
+ formatBorder: color.yellow,
1253
+ });
1254
+
1255
+ // Interativo: exige confirmação antes de seguir. Pula o prompt bloqueante
1256
+ // em instalações não-interativas (a mensagem continua sendo mostrada).
1257
+ if (!config.skipPrompts) {
1258
+ await prompts.text({
1259
+ message: 'Press Enter to acknowledge',
1260
+ placeholder: '',
1261
+ default: '',
1262
+ });
1263
+ }
1264
+ }
1265
+ }
1266
+
1210
1267
  /**
1211
1268
  * Quick update method - preserves all settings and only prompts for new config fields
1212
1269
  * @param {Object} config - Configuration with directory
@@ -455,9 +455,9 @@ class ConfigDrivenIdeSetup {
455
455
  await fs.ensureDir(skillDir);
456
456
  this.skillWriteTracker?.add(canonicalId);
457
457
 
458
- // Copy all skill files, filtering OS/editor artifacts recursively
459
- const skipPatterns = new Set(['.DS_Store', 'Thumbs.db', 'desktop.ini']);
460
- const skipSuffixes = ['~', '.swp', '.swo', '.bak'];
458
+ // Copy all skill files, filtering OS/editor artifacts and Python caches recursively
459
+ const skipPatterns = new Set(['.DS_Store', 'Thumbs.db', 'desktop.ini', '__pycache__']);
460
+ const skipSuffixes = ['~', '.swp', '.swo', '.bak', '.pyc', '.pyo'];
461
461
  const filter = (src) => {
462
462
  const name = path.basename(src);
463
463
  if (src === sourceDir) return true;
@@ -52,6 +52,13 @@ platforms:
52
52
  target_dir: .agent/skills
53
53
  global_target_dir: ~/.gemini/antigravity/skills
54
54
 
55
+ antigravity-cli:
56
+ name: "Antigravity CLI (AGY)"
57
+ preferred: false
58
+ installer:
59
+ target_dir: .agents/skills
60
+ global_target_dir: ~/.gemini/antigravity-cli/skills
61
+
55
62
  auggie:
56
63
  name: "Auggie"
57
64
  preferred: false
@@ -184,6 +191,20 @@ platforms:
184
191
  target_dir: .agents/skills
185
192
  global_target_dir: ~/.config/agents/skills
186
193
 
194
+ grok:
195
+ name: "Grok"
196
+ preferred: false
197
+ installer:
198
+ target_dir: .agents/skills
199
+ global_target_dir: ~/.grok/skills
200
+
201
+ hermes:
202
+ name: "Hermes Agent"
203
+ preferred: false
204
+ installer:
205
+ target_dir: .agents/skills
206
+ global_target_dir: ~/.hermes/skills
207
+
187
208
  iflow:
188
209
  name: "iFlow"
189
210
  preferred: false
@@ -345,6 +366,13 @@ platforms:
345
366
  target_dir: .agents/skills
346
367
  global_target_dir: ~/.agents/skills
347
368
 
369
+ zcode:
370
+ name: "ZCode"
371
+ preferred: false
372
+ installer:
373
+ target_dir: .zcode/skills
374
+ global_target_dir: ~/.zcode/skills
375
+
348
376
  zencoder:
349
377
  name: "Zencoder"
350
378
  preferred: false
@@ -94,6 +94,13 @@ class ExternalModuleManager {
94
94
  // ExternalModuleManager) sees resolutions made during install.
95
95
  static _resolutions = new Map();
96
96
 
97
+ // moduleCode → ResolvedModule (do PluginResolver). Preenchido para módulos do
98
+ // registry marcados com `marketplace-plugin: true`, cujas skills instaláveis
99
+ // vivem fora de um único diretório de module.yaml e precisam ser resolvidas a
100
+ // partir de .claude-plugin/marketplace.json. Compartilhado entre instâncias
101
+ // para o install() aproveitar a resolução feita no findModuleSource.
102
+ static _pluginResolutions = new Map();
103
+
97
104
  constructor() {}
98
105
 
99
106
  /**
@@ -105,6 +112,15 @@ class ExternalModuleManager {
105
112
  return ExternalModuleManager._resolutions.get(moduleCode) || null;
106
113
  }
107
114
 
115
+ /**
116
+ * Resolução marketplace-plugin em cache para um módulo (se houver).
117
+ * @param {string} moduleCode
118
+ * @returns {Object|null} ResolvedModule do PluginResolver, ou null
119
+ */
120
+ getPluginResolution(moduleCode) {
121
+ return ExternalModuleManager._pluginResolutions.get(moduleCode) || null;
122
+ }
123
+
108
124
  /**
109
125
  * Load the official modules registry from the bundled YAML file.
110
126
  * @returns {Object} Parsed YAML content with modules array
@@ -147,8 +163,16 @@ class ExternalModuleManager {
147
163
  npmPackage: mod.npm_package || mod.npmPackage || null,
148
164
  pluginName: mod.plugin_name || mod.pluginName || null,
149
165
  defaultChannel: normalizeChannelName(mod.default_channel || mod.defaultChannel) || 'stable',
166
+ deprecated: mod.deprecated === true,
167
+ deprecationMessage: mod.deprecation_message || mod['deprecation-message'] || mod.deprecationMessage || null,
168
+ marketplacePlugin: mod.marketplace_plugin === true || mod['marketplace-plugin'] === true || mod.marketplacePlugin === true,
169
+ postInstallMessage: mod.post_install_message || mod['post-install-message'] || mod.postInstallMessage || null,
150
170
  builtIn: mod.built_in === true,
151
171
  isExternal: mod.built_in !== true,
172
+ // Códigos anteriores sob os quais este módulo foi registrado (ex.: `bmad-loop`
173
+ // era `bauto`). Deixa um módulo renomeado continuar resolvendo instalações
174
+ // existentes em vez de órfã-las — ver getModuleByCode().
175
+ aliases: Array.isArray(mod.aliases) ? mod.aliases : [],
152
176
  };
153
177
  }
154
178
 
@@ -173,13 +197,27 @@ class ExternalModuleManager {
173
197
  }
174
198
 
175
199
  /**
176
- * Get module info by code
200
+ * Get module info by code. Cai no `aliases` da entrada do registry, de modo
201
+ * que um módulo renomeado (com `code` alterado) ainda resolve para instalações
202
+ * gravadas sob o código anterior.
177
203
  * @param {string} code - The module code (e.g., 'cis')
178
204
  * @returns {Object|null} Module info or null if not found
179
205
  */
180
206
  async getModuleByCode(code) {
181
207
  const modules = await this.listAvailable();
182
- return modules.find((m) => m.code === code) || null;
208
+ return modules.find((m) => m.code === code) || modules.find((m) => m.aliases.includes(code)) || null;
209
+ }
210
+
211
+ /**
212
+ * Resolve a possibly-legacy module code to its current canonical code.
213
+ * Returns the input unchanged if it doesn't match any registry entry or
214
+ * alias (e.g. a custom/unknown module).
215
+ * @param {string} code
216
+ * @returns {Promise<string>}
217
+ */
218
+ async resolveCanonicalCode(code) {
219
+ const info = await this.getModuleByCode(code);
220
+ return info ? info.code : code;
183
221
  }
184
222
 
185
223
  /**
@@ -502,6 +540,24 @@ class ExternalModuleManager {
502
540
  return null;
503
541
  }
504
542
 
543
+ // Normaliza para o código canônico — um install gravado sob um alias
544
+ // (ex.: `bauto`) precisa resolver para a entrada atual do registry.
545
+ moduleCode = moduleInfo.code;
546
+
547
+ // Módulos marketplace-plugin (entradas do registry marcadas com
548
+ // `marketplace-plugin`) trazem um .claude-plugin/marketplace.json e mantêm o
549
+ // module.yaml dentro do assets/ de uma skill, e não num diretório único ao
550
+ // lado das skills. Resolve pelo PluginResolver (a mesma máquina que os
551
+ // installs por URL custom usam) e devolve o diretório que contém o
552
+ // module.yaml, para os chamadores de config/versão/diretório funcionarem;
553
+ // o install() copia os diretórios de skill resolvidos.
554
+ if (moduleInfo.marketplacePlugin) {
555
+ const pluginMod = await this.resolvePluginModule(moduleCode, options);
556
+ if (pluginMod && pluginMod.moduleYamlPath) {
557
+ return path.dirname(pluginMod.moduleYamlPath);
558
+ }
559
+ }
560
+
505
561
  // Clone the external module repo
506
562
  const cloneDir = await this.cloneExternalModule(moduleCode, options);
507
563
 
@@ -555,6 +611,88 @@ class ExternalModuleManager {
555
611
  `The repository may have been restructured after this release was tagged.${channelHint}`,
556
612
  );
557
613
  }
614
+ /**
615
+ * Resolve um módulo marketplace-plugin do registry para uma definição de
616
+ * plugin instalável. Clona o repo (respeitando o plano de canal), lê o
617
+ * .claude-plugin/marketplace.json e roda o PluginResolver contra o plugin que
618
+ * corresponde a este módulo. O resultado (skillPaths + module.yaml +
619
+ * module-help.csv) fica em cache para o install() copiar os diretórios de
620
+ * skill resolvidos.
621
+ *
622
+ * @param {string} moduleCode - Código do módulo externo
623
+ * @param {Object} options - Opções repassadas a cloneExternalModule
624
+ * @returns {Promise<Object|null>} ResolvedModule do PluginResolver, ou null
625
+ * quando o módulo não é marketplace plugin ou não pode ser resolvido.
626
+ */
627
+ async resolvePluginModule(moduleCode, options = {}) {
628
+ const moduleInfo = await this.getModuleByCode(moduleCode);
629
+ if (!moduleInfo || moduleInfo.builtIn || !moduleInfo.marketplacePlugin) {
630
+ return null;
631
+ }
632
+
633
+ // Normaliza para o código canônico — ver cloneExternalModule.
634
+ moduleCode = moduleInfo.code;
635
+
636
+ const cloneDir = await this.cloneExternalModule(moduleCode, options);
637
+
638
+ const marketplacePath = path.join(cloneDir, '.claude-plugin', 'marketplace.json');
639
+ if (!(await fs.pathExists(marketplacePath))) {
640
+ return null;
641
+ }
642
+
643
+ let marketplace;
644
+ try {
645
+ marketplace = JSON.parse(await fs.readFile(marketplacePath, 'utf8'));
646
+ } catch {
647
+ return null;
648
+ }
649
+
650
+ const plugins = Array.isArray(marketplace.plugins) ? marketplace.plugins : [];
651
+ if (plugins.length === 0) {
652
+ return null;
653
+ }
654
+
655
+ // Prefere o plugin cujo nome bate com o plugin_name do registry (ou o code),
656
+ // caindo para qualquer plugin que declare skills.
657
+ const preferredName = moduleInfo.pluginName || moduleInfo.code;
658
+ const ordered = [...plugins].sort((a, b) => {
659
+ const am = a?.name === preferredName ? 0 : 1;
660
+ const bm = b?.name === preferredName ? 0 : 1;
661
+ return am - bm;
662
+ });
663
+
664
+ const { PluginResolver } = require('./plugin-resolver');
665
+ const resolver = new PluginResolver();
666
+
667
+ for (const plugin of ordered) {
668
+ if (!plugin || !Array.isArray(plugin.skills) || plugin.skills.length === 0) {
669
+ continue;
670
+ }
671
+ let resolvedMods;
672
+ try {
673
+ resolvedMods = await resolver.resolve(cloneDir, plugin);
674
+ } catch {
675
+ continue;
676
+ }
677
+ if (!resolvedMods || resolvedMods.length === 0) {
678
+ continue;
679
+ }
680
+ // Casa pelo código do registry, depois pelo nome preferido do plugin,
681
+ // depois aceita um único módulo resolvido.
682
+ const match =
683
+ resolvedMods.find((mod) => mod.code === moduleCode) ||
684
+ resolvedMods.find((mod) => mod.code === preferredName) ||
685
+ (resolvedMods.length === 1 ? resolvedMods[0] : null);
686
+ if (match) {
687
+ match.repoUrl = moduleInfo.url;
688
+ ExternalModuleManager._pluginResolutions.set(moduleCode, match);
689
+ return match;
690
+ }
691
+ }
692
+
693
+ return null;
694
+ }
695
+
558
696
  cachedModules = null;
559
697
  }
560
698
 
@@ -316,7 +316,29 @@ class OfficialModules {
316
316
  await fs.remove(targetPath);
317
317
  }
318
318
 
319
- await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig);
319
+ // Módulos marketplace-plugin do registry mantêm as skills instaláveis fora do
320
+ // diretório que contém o module.yaml (sourcePath aponta para o assets/ da
321
+ // skill -setup), então não dá para instalá-los copiando o sourcePath. Copia
322
+ // os diretórios de skill resolvidos, do mesmo jeito que um install custom de
323
+ // marketplace monta um módulo. Todo o resto (manifest, versão) segue pelo
324
+ // caminho padrão de módulo externo abaixo.
325
+ const marketplaceInfo = await this.externalModuleManager.getModuleByCode(moduleName);
326
+ if (marketplaceInfo && marketplaceInfo.marketplacePlugin) {
327
+ const pluginResolution = this.externalModuleManager.getPluginResolution(moduleName);
328
+ // Falha alto: copiar o sourcePath aqui instalaria só o assets/ da skill
329
+ // -setup (module.yaml + module-help.csv) e nenhuma skill — um install
330
+ // parcial e silenciosamente quebrado. Aborta em vez disso.
331
+ if (!pluginResolution || !Array.isArray(pluginResolution.skillPaths) || pluginResolution.skillPaths.length === 0) {
332
+ throw new Error(
333
+ `Module '${moduleName}' is registered as a marketplace plugin but its skills could not be resolved ` +
334
+ `from .claude-plugin/marketplace.json (missing or malformed on the selected channel). ` +
335
+ `Aborting to avoid a partial install with no skills.`,
336
+ );
337
+ }
338
+ await this._copyResolvedSkills(pluginResolution, targetPath, fileTrackingCallback, options.moduleConfig);
339
+ } else {
340
+ await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig);
341
+ }
320
342
 
321
343
  if (!options.skipModuleInstaller) {
322
344
  await this.createModuleDirectories(moduleName, wizzDir, options);
@@ -343,41 +365,66 @@ class OfficialModules {
343
365
  }
344
366
 
345
367
  /**
346
- * Install a module from a PluginResolver resolution result.
347
- * Copies specific skill directories and places module-help.csv at the target root.
348
- * @param {Object} resolved - ResolvedModule from PluginResolver
349
- * @param {string} wizzDir - Target wizz directory
350
- * @param {Function} fileTrackingCallback - Optional callback to track installed files
351
- * @param {Object} options - Installation options
368
+ * Assenta em disco uma resolução do PluginResolver: copia cada diretório de
369
+ * skill resolvido (achatado pelo nome da folha) para targetPath e coloca o
370
+ * module-help.csv na raiz do módulo. Compartilhado pelos installs custom de
371
+ * marketplace (installFromResolution) e pelos installs oficiais de módulo
372
+ * marketplace-plugin (install), para os dois caminhos não divergirem.
373
+ * @param {Object} resolved - ResolvedModule do PluginResolver
374
+ * @param {string} targetPath - Diretório de destino do módulo (ex.: wizzDir/<code>)
375
+ * @param {Function} fileTrackingCallback - Callback opcional de rastreio de arquivos
376
+ * @param {Object} moduleConfig - Configuração do módulo repassada ao filtro de cópia
352
377
  */
353
- async installFromResolution(resolved, wizzDir, fileTrackingCallback = null, options = {}) {
354
- const targetPath = path.join(wizzDir, resolved.code);
355
-
356
- if (await fs.pathExists(targetPath)) {
357
- await fs.remove(targetPath);
358
- }
359
-
378
+ async _copyResolvedSkills(resolved, targetPath, fileTrackingCallback = null, moduleConfig = {}) {
360
379
  await fs.ensureDir(targetPath);
361
380
 
362
- // Copy each skill directory, flattened by leaf name
381
+ // Copia cada diretório de skill, achatado pelo nome da folha. Os nomes de
382
+ // folha precisam ser únicos — duas skills que achatam para o mesmo diretório
383
+ // se sobrescreveriam em silêncio, então falha alto em vez disso.
384
+ const seenLeaves = new Map();
363
385
  for (const skillPath of resolved.skillPaths) {
364
386
  const skillDirName = path.basename(skillPath);
387
+ if (seenLeaves.has(skillDirName)) {
388
+ throw new Error(
389
+ `Cannot install module '${resolved.code}': skill directories '${seenLeaves.get(skillDirName)}' and ` +
390
+ `'${skillPath}' share the leaf name '${skillDirName}' and would overwrite each other. ` +
391
+ `Skill directory names must be unique.`,
392
+ );
393
+ }
394
+ seenLeaves.set(skillDirName, skillPath);
365
395
  const skillTarget = path.join(targetPath, skillDirName);
366
- await this.copyModuleWithFiltering(skillPath, skillTarget, fileTrackingCallback, options.moduleConfig);
396
+ await this.copyModuleWithFiltering(skillPath, skillTarget, fileTrackingCallback, moduleConfig);
367
397
  }
368
398
 
369
- // Place module-help.csv at the module root
399
+ // Coloca o module-help.csv na raiz do módulo.
400
+ const helpTarget = path.join(targetPath, 'module-help.csv');
370
401
  if (resolved.moduleHelpCsvPath) {
371
- // Strategies 1-4: copy the existing file
372
- const helpTarget = path.join(targetPath, 'module-help.csv');
402
+ // Estratégias 1-4: copia o arquivo existente.
373
403
  await fs.copy(resolved.moduleHelpCsvPath, helpTarget, { overwrite: true });
374
404
  if (fileTrackingCallback) fileTrackingCallback(helpTarget);
375
405
  } else if (resolved.synthesizedHelpCsv) {
376
- // Strategy 5: write synthesized content
377
- const helpTarget = path.join(targetPath, 'module-help.csv');
406
+ // Estratégia 5: escreve o conteúdo sintetizado.
378
407
  await fs.writeFile(helpTarget, resolved.synthesizedHelpCsv, 'utf8');
379
408
  if (fileTrackingCallback) fileTrackingCallback(helpTarget);
380
409
  }
410
+ }
411
+
412
+ /**
413
+ * Install a module from a PluginResolver resolution result.
414
+ * Copies specific skill directories and places module-help.csv at the target root.
415
+ * @param {Object} resolved - ResolvedModule from PluginResolver
416
+ * @param {string} wizzDir - Target wizz directory
417
+ * @param {Function} fileTrackingCallback - Optional callback to track installed files
418
+ * @param {Object} options - Installation options
419
+ */
420
+ async installFromResolution(resolved, wizzDir, fileTrackingCallback = null, options = {}) {
421
+ const targetPath = path.join(wizzDir, resolved.code);
422
+
423
+ if (await fs.pathExists(targetPath)) {
424
+ await fs.remove(targetPath);
425
+ }
426
+
427
+ await this._copyResolvedSkills(resolved, targetPath, fileTrackingCallback, options.moduleConfig);
381
428
 
382
429
  // Create directories declared in module.yaml (strategies 1-4 may have these)
383
430
  if (!options.skipModuleInstaller) {