wizz-method 2.21.0 → 2.23.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 (179) hide show
  1. package/THIRD-PARTY-NOTICES.md +24 -0
  2. package/package.json +4 -2
  3. package/removals.txt +3 -0
  4. package/skills-registry.yaml +133 -4
  5. package/src/bmm-skills/1-analysis/research/wizz-market-research/steps/step-06-research-completion.md +27 -0
  6. package/src/bmm-skills/1-analysis/wizz-set-feature/SKILL.md +1 -1
  7. package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +1 -1
  8. package/src/bmm-skills/4-implementation/wizz-create-story/SKILL.md +1 -1
  9. package/src/bmm-skills/4-implementation/wizz-dev-story/SKILL.md +8 -1
  10. package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +2 -2
  11. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-03-implement.md +2 -0
  12. package/src/bmm-skills/4-implementation/wizz-sprint-status/SKILL.md +1 -1
  13. package/src/core-skills/wizz-party-mode/customize.toml +3 -3
  14. package/src/modules/lowticket/README.md +2 -1
  15. package/src/modules/lowticket/module.yaml +1 -1
  16. package/src/modules/lowticket/skills/wizz-clone-do-expert/SKILL.md +86 -0
  17. package/src/modules/lowticket/skills/wizz-clone-do-expert/references/clone-prompt-template.md +21 -0
  18. package/src/modules/lowticket/skills/wizz-lowticket-trafego/references/reguas.md +2 -0
  19. package/src/modules/wizz/_shared/cerebro.md +1 -1
  20. package/src/modules/wizz/_shared/organizacao.md +2 -2
  21. package/src/modules/wizz/_shared/video-pipeline.md +2 -0
  22. package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -0
  23. package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -0
  24. package/src/modules/wizz/agents/wizz-copy/knowledge/playbook.md +3 -2
  25. package/src/modules/wizz/agents/wizz-growth/customize.toml +7 -2
  26. package/src/modules/wizz/agents/wizz-growth/knowledge/playbook.md +3 -2
  27. package/src/modules/wizz/agents/wizz-social/knowledge/blueprint-roteiro-viral.md +14 -0
  28. package/src/modules/wizz/agents/wizz-social/knowledge/legenda-instagram.md +12 -0
  29. package/src/skills-lib/wizz-cerebro/SKILL.md +18 -5
  30. package/src/skills-lib/wizz-design-needs/SKILL.md +7 -0
  31. package/src/skills-lib/wizz-design-needs/references/design-state.md +34 -2
  32. package/src/skills-lib/wizz-design-needs/references/gap-analysis.md +1 -1
  33. package/src/skills-lib/wizz-design-needs/scripts/design_state.py +305 -0
  34. package/src/skills-lib/wizz-design-needs/scripts/tests/test_design_state.py +143 -0
  35. package/src/skills-lib/wizz-impeccable/references/design-rules.md +18 -0
  36. package/src/skills-lib/wizz-ios-build/SKILL.md +61 -0
  37. package/src/skills-lib/wizz-motion-3d-director/references/motion-paths.md +2 -0
  38. package/src/skills-lib/wizz-offer-forge/SKILL.md +2 -2
  39. package/src/skills-lib/wizz-paid-ads/SKILL.md +2 -1
  40. package/src/skills-lib/wizz-paywall-upgrade-cro/SKILL.md +1 -0
  41. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/README.md +13 -13
  42. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/SKILL.md +11 -7
  43. package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/assets/template.html +8 -21
  44. package/src/skills-lib/wizz-pesquisa-de-publico/references/interview-mode.md +69 -0
  45. package/src/skills-lib/wizz-premium-landing-ui-researcher/SKILL.md +6 -2
  46. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/audit-protocol.md +7 -34
  47. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/component-sources.md +25 -0
  48. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/design-sources.yaml +325 -0
  49. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/mandatory-process.md +1 -1
  50. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/mining-rubric.md +123 -0
  51. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/source-first-protocol.md +10 -4
  52. package/src/skills-lib/wizz-premium-landing-ui-researcher/references/web-access-and-evidence.md +1 -1
  53. package/src/skills-lib/wizz-premium-landing-ui-researcher/scripts/design_sources.py +221 -0
  54. package/src/skills-lib/wizz-premium-landing-ui-researcher/scripts/tests/test_design_sources.py +130 -0
  55. package/src/skills-lib/wizz-router/references/routing-table-flat.md +7 -1
  56. package/src/skills-lib/wizz-seo-audit/SKILL.md +4 -0
  57. package/src/skills-lib/wizz-seo-audit/references/gsc-regex-perguntas.md +64 -0
  58. package/src/skills-lib/wizz-signup-flow-cro/SKILL.md +1 -0
  59. package/src/skills-lib/wizz-signup-flow-cro/references/trial-abuse.md +40 -0
  60. package/src/skills-lib/wizz-taste-skill/references/anti-slop-tells.md +8 -0
  61. package/src/skills-lib/wizz-ui-component-curator/SKILL.md +8 -7
  62. package/src/skills-lib/wizz-ui-ux-pro-max/SKILL.md +1 -1
  63. package/src/skills-lib/wizz-ui-ux-pro-max/references/common-rules-checklist.md +11 -0
  64. package/src/skills-lib/wizz-video-effects/LICENSE-motionmaxxing.txt +202 -0
  65. package/src/skills-lib/wizz-video-effects/SKILL.md +7 -2
  66. package/src/skills-lib/wizz-video-effects/assets/chrome/collect_layout.js +113 -0
  67. package/src/skills-lib/wizz-video-effects/assets/effects.config.template.json +45 -0
  68. package/src/skills-lib/wizz-video-effects/references/data-contract.md +32 -1
  69. package/src/skills-lib/wizz-video-effects/references/gates.md +4 -1
  70. package/src/skills-lib/wizz-video-effects/references/one-take.md +41 -0
  71. package/src/skills-lib/wizz-video-effects/scripts/check_chrome.py +376 -0
  72. package/src/skills-lib/wizz-video-effects/scripts/check_dead_frames.py +193 -0
  73. package/src/skills-lib/wizz-video-effects/scripts/check_one_take.py +159 -0
  74. package/src/skills-lib/wizz-video-effects/scripts/config.py +13 -0
  75. package/src/skills-lib/wizz-video-effects/scripts/test_chrome.py +181 -0
  76. package/src/skills-lib/wizz-video-effects/scripts/test_dead_frames.py +171 -0
  77. package/src/skills-lib/wizz-video-effects/scripts/test_one_take.py +126 -0
  78. package/src/skills-lib/wizz-video-styles/LICENSE-lemo-opuscar.txt +21 -0
  79. package/src/skills-lib/wizz-video-styles/SKILL.md +16 -7
  80. package/src/skills-lib/wizz-video-styles/assets/film-styles/dark-keynote.html +78 -0
  81. package/src/skills-lib/wizz-video-styles/assets/film-styles/remotion/Riso.tsx +63 -0
  82. package/src/skills-lib/wizz-video-styles/assets/film-styles/risograph.html +69 -0
  83. package/src/skills-lib/wizz-video-styles/assets/film-styles/swiss-motion.html +84 -0
  84. package/src/skills-lib/wizz-video-styles/references/check-ins.md +25 -0
  85. package/src/skills-lib/wizz-video-styles/references/film-styles/DIRECTOR.md +139 -0
  86. package/src/skills-lib/wizz-video-styles/references/film-styles/archive-lighttable.md +109 -0
  87. package/src/skills-lib/wizz-video-styles/references/film-styles/art-deco.md +112 -0
  88. package/src/skills-lib/wizz-video-styles/references/film-styles/ascii-crt.md +115 -0
  89. package/src/skills-lib/wizz-video-styles/references/film-styles/backrooms.md +125 -0
  90. package/src/skills-lib/wizz-video-styles/references/film-styles/blueprint.md +120 -0
  91. package/src/skills-lib/wizz-video-styles/references/film-styles/brick-toy.md +114 -0
  92. package/src/skills-lib/wizz-video-styles/references/film-styles/briefing-board.md +122 -0
  93. package/src/skills-lib/wizz-video-styles/references/film-styles/caption-news.md +137 -0
  94. package/src/skills-lib/wizz-video-styles/references/film-styles/cel-anime-80s.md +119 -0
  95. package/src/skills-lib/wizz-video-styles/references/film-styles/city-symphony.md +142 -0
  96. package/src/skills-lib/wizz-video-styles/references/film-styles/countdown.md +132 -0
  97. package/src/skills-lib/wizz-video-styles/references/film-styles/crayon-book.md +109 -0
  98. package/src/skills-lib/wizz-video-styles/references/film-styles/dark-keynote.md +117 -0
  99. package/src/skills-lib/wizz-video-styles/references/film-styles/data-physical.md +119 -0
  100. package/src/skills-lib/wizz-video-styles/references/film-styles/dataviz.md +123 -0
  101. package/src/skills-lib/wizz-video-styles/references/film-styles/engraving.md +123 -0
  102. package/src/skills-lib/wizz-video-styles/references/film-styles/game-show.md +118 -0
  103. package/src/skills-lib/wizz-video-styles/references/film-styles/glass-product.md +110 -0
  104. package/src/skills-lib/wizz-video-styles/references/film-styles/halftone-dossier.md +122 -0
  105. package/src/skills-lib/wizz-video-styles/references/film-styles/hd-2d.md +111 -0
  106. package/src/skills-lib/wizz-video-styles/references/film-styles/hologram-hud.md +129 -0
  107. package/src/skills-lib/wizz-video-styles/references/film-styles/impasto.md +124 -0
  108. package/src/skills-lib/wizz-video-styles/references/film-styles/ink-wash.md +120 -0
  109. package/src/skills-lib/wizz-video-styles/references/film-styles/iso-infographic.md +117 -0
  110. package/src/skills-lib/wizz-video-styles/references/film-styles/kino-montage.md +151 -0
  111. package/src/skills-lib/wizz-video-styles/references/film-styles/lidar-survey.md +118 -0
  112. package/src/skills-lib/wizz-video-styles/references/film-styles/living-screencast.md +124 -0
  113. package/src/skills-lib/wizz-video-styles/references/film-styles/lowpoly-island.md +112 -0
  114. package/src/skills-lib/wizz-video-styles/references/film-styles/microgame.md +122 -0
  115. package/src/skills-lib/wizz-video-styles/references/film-styles/microscope.md +108 -0
  116. package/src/skills-lib/wizz-video-styles/references/film-styles/midcentury-toon.md +124 -0
  117. package/src/skills-lib/wizz-video-styles/references/film-styles/news-package.md +158 -0
  118. package/src/skills-lib/wizz-video-styles/references/film-styles/newsreel.md +136 -0
  119. package/src/skills-lib/wizz-video-styles/references/film-styles/one-line.md +114 -0
  120. package/src/skills-lib/wizz-video-styles/references/film-styles/paper-lantern.md +116 -0
  121. package/src/skills-lib/wizz-video-styles/references/film-styles/paper-popup.md +119 -0
  122. package/src/skills-lib/wizz-video-styles/references/film-styles/papercut-red.md +110 -0
  123. package/src/skills-lib/wizz-video-styles/references/film-styles/pictogram-motion.md +119 -0
  124. package/src/skills-lib/wizz-video-styles/references/film-styles/pixel-rpg.md +117 -0
  125. package/src/skills-lib/wizz-video-styles/references/film-styles/risograph.md +125 -0
  126. package/src/skills-lib/wizz-video-styles/references/film-styles/rubber-hose.md +112 -0
  127. package/src/skills-lib/wizz-video-styles/references/film-styles/satellite-briefing.md +116 -0
  128. package/src/skills-lib/wizz-video-styles/references/film-styles/scifi-toon.md +121 -0
  129. package/src/skills-lib/wizz-video-styles/references/film-styles/shadow-puppet.md +124 -0
  130. package/src/skills-lib/wizz-video-styles/references/film-styles/silent-film.md +109 -0
  131. package/src/skills-lib/wizz-video-styles/references/film-styles/silkscreen-poster.md +140 -0
  132. package/src/skills-lib/wizz-video-styles/references/film-styles/spy-titles.md +116 -0
  133. package/src/skills-lib/wizz-video-styles/references/film-styles/stained-glass.md +123 -0
  134. package/src/skills-lib/wizz-video-styles/references/film-styles/swiss-motion.md +115 -0
  135. package/src/skills-lib/wizz-video-styles/references/film-styles/teardown.md +127 -0
  136. package/src/skills-lib/wizz-video-styles/references/film-styles/telestrator.md +137 -0
  137. package/src/skills-lib/wizz-video-styles/references/film-styles/tilt-shift.md +107 -0
  138. package/src/skills-lib/wizz-video-styles/references/film-styles/ukiyoe.md +112 -0
  139. package/src/skills-lib/wizz-video-styles/references/film-styles/urban-sketch.md +126 -0
  140. package/src/skills-lib/wizz-video-styles/references/film-styles/visual-investigation.md +140 -0
  141. package/src/skills-lib/wizz-video-styles/references/film-styles/watercolor.md +113 -0
  142. package/src/skills-lib/wizz-video-styles/references/film-styles/white-model.md +115 -0
  143. package/src/skills-lib/wizz-video-styles/references/film-styles/whiteboard.md +118 -0
  144. package/src/skills-lib/wizz-video-styles/references/film-styles/woodcut.md +122 -0
  145. package/src/skills-lib/wizz-video-styles/references/film-styles.md +140 -0
  146. package/src/skills-lib/wizz-video-styles/references/insert-recipes.md +33 -0
  147. package/src/skills-lib/wizz-video-styles/references/motion-laws.md +62 -0
  148. package/src/skills-lib/wizz-video-styles/references/styles/desafio-numero.md +1 -0
  149. package/src/skills-lib/wizz-video-styles/scripts/beat_grid.py +38 -6
  150. package/src/skills-lib/wizz-video-styles/scripts/blind_review.py +159 -0
  151. package/src/skills-lib/wizz-video-styles/scripts/taste.mjs +110 -0
  152. package/src/skills-lib/wizz-video-styles/scripts/test_blind_review.py +82 -0
  153. package/src/skills-lib/wizz-vsl/LICENSE +49 -0
  154. package/src/skills-lib/wizz-vsl/SKILL.md +122 -0
  155. package/src/skills-lib/wizz-vsl/references/assembly-qa.md +123 -0
  156. package/src/skills-lib/wizz-vsl/references/blocks-and-leads.md +149 -0
  157. package/src/skills-lib/wizz-vsl/references/diagnosis.md +95 -0
  158. package/src/skills-lib/wizz-vsl/references/intake.md +200 -0
  159. package/src/skills-lib/wizz-vsl/references/mechanisms.md +138 -0
  160. package/src/skills-lib/wizz-vsl/references/niches.md +40 -0
  161. package/src/skills-lib/wizz-vsl/references/offer.md +91 -0
  162. package/src/skills-lib/wizz-vsl/references/production.md +75 -0
  163. package/src/skills-lib/wizz-web-security/SKILL.md +2 -0
  164. package/tools/hooks/README.md +10 -9
  165. package/tools/hooks/wizz-arrumar.js +1 -0
  166. package/tools/hooks/wizz-artifact-guard.js +31 -5
  167. package/tools/hooks/wizz-cerebro-lib.js +36 -13
  168. package/tools/hooks/wizz-feature-lib.js +4 -1
  169. package/tools/hooks/wizz-feature.js +66 -76
  170. package/tools/hooks/wizz-sprint-archive-lib.js +311 -0
  171. package/tools/installer/core/hooks-settings.js +1 -0
  172. package/tools/installer/core/installer.js +6 -0
  173. package/tools/installer/guided/labels.js +16 -0
  174. package/tools/installer/install-text.js +2 -0
  175. package/tools/installer/modules/cli-config.js +3 -0
  176. package/tools/installer/modules/core-seed.js +72 -0
  177. package/tools/installer/modules/mcp-config.js +3 -0
  178. package/tools/installer/ui.js +22 -26
  179. /package/src/skills-lib/{wizz-pesquisa-de-publico-do-piva → wizz-pesquisa-de-publico}/prompts.md +0 -0
@@ -149,8 +149,32 @@ the `<Font>-OFL.txt` file in the same folder.
149
149
  - Origin: the beat-grid approach and the kinetic typography recipe follow [mexicat/pdoom-video](https://github.com/mexicat/pdoom-video) (beat, downbeat and lyric alignment driving the edit); no code was copied, and its `data/audio.json` was used only to check `beat_grid.py`. The prompt list links to [yihui-dev/awesome-opus5-5-videos](https://github.com/yihui-dev/awesome-opus5-5-videos), summarising 15 entries in our words; each prompt remains its creator's.
150
150
  - License: MIT, copyright (c) 2026 Giacomo Magnanini (pdoom-video) and copyright (c) 2026 yihui-dev (awesome-opus5-5-videos).
151
151
 
152
+ ## wizz-video-styles (film styles from lemo-opuscar)
153
+
154
+ - Path: `src/skills-lib/wizz-video-styles/references/film-styles/` (59 `STYLE.md` cards, one per style, and `DIRECTOR.md`), `src/skills-lib/wizz-video-styles/references/film-styles.md` (index, built from each style's `style.json`)
155
+ - Origin: [lemomo-ai/lemo-opuscar](https://github.com/lemomo-ai/lemo-opuscar) by LemoLab, commit `413a6bd6`. The cards are copied verbatim, with a header line naming the source and relative links pointed at the upstream repository. Its engine (`core/`, each style's `demo/`) and its demo films and stills (CC BY 4.0) are not included; the index links to them. The three compositions in `src/skills-lib/wizz-video-styles/assets/film-styles/` were written here for HyperFrames (and `remotion/Riso.tsx` for Remotion), following the cards.
156
+ - License: MIT, copyright (c) 2026 LemoLab (full text at `src/skills-lib/wizz-video-styles/LICENSE-lemo-opuscar.txt`).
157
+
158
+ ## wizz-video-effects and wizz-video-styles (motionmaxxing)
159
+
160
+ - Path: `src/skills-lib/wizz-video-effects/scripts/check_dead_frames.py`, `src/skills-lib/wizz-video-effects/scripts/check_chrome.py`, `src/skills-lib/wizz-video-effects/assets/chrome/collect_layout.js`, `src/skills-lib/wizz-video-styles/references/motion-laws.md`, `src/skills-lib/wizz-video-styles/scripts/blind_review.py` (the idea of its blind review page, written again and much smaller), `src/skills-lib/wizz-video-styles/scripts/taste.mjs` (the idea of its `taste/verdicts.md`, a per-user file of verdicts read before deciding) (measured numbers from its `references/motion.md` and `references/type.md`, summarised in our words) and the `dead_frames` and `chrome_lint` blocks of `src/skills-lib/wizz-video-effects/assets/effects.config.template.json`
161
+ - Origin: [Tejashmakwana/motionmaxxing](https://github.com/Tejashmakwana/motionmaxxing) by Tejas Makwana. Ported ideas and measured thresholds (gate G2 "no empty frame" of `look.py`; rules C1-C4, C6, C7, D1 and P1 of gate G5 in `lint.mjs`), adapted to vertical short video and written again in our own code; no file was copied.
162
+ - License: Apache License 2.0 (full text at `src/skills-lib/wizz-video-effects/LICENSE-motionmaxxing.txt`). Its NOTICE reads: "motionmaxxing: looksmaxxing for motion graphics. Made by Tejas Makwana (x.com/makwanatejas170), github.com/Tejashmakwana/motionmaxxing." Changes: thresholds moved to the effects config, analysis frame reshaped to 9:16, frozen-picture check made a warning, chrome rules sized on the short side of the frame, with exempt roles (captions, legal text, UI) and a per-style allow list, and a Remotion timeline input.
163
+
152
164
  ## wizz-hook-extractor and wizz-ig-profile-optimizer
153
165
 
154
166
  - Path: `src/skills-lib/wizz-hook-extractor/`, `src/skills-lib/wizz-ig-profile-optimizer/`
155
167
  - Origin: adapted from `skills/ig-hook-extractor/`, `references/hook-formulas.md` and `skills/ig-profile-optimizer/` of [sergebulaev/instagram-skills](https://github.com/sergebulaev/instagram-skills). Translated to Brazilian Portuguese, hooks mapped to the Viral Script Blueprint types, and extended with reading the post or profile directly (yt-dlp, local transcription, agent-browser) and a limits checker.
156
168
  - License: MIT (full text at `src/skills-lib/wizz-hook-extractor/LICENSE` and `src/skills-lib/wizz-ig-profile-optimizer/LICENSE`, copyright (c) 2026 Sergey Bulaev)
169
+
170
+ ## wizz-vsl
171
+
172
+ - Path: `src/skills-lib/wizz-vsl/`
173
+ - Origin: adapted from [yuribranco/vsl-skill](https://github.com/yuribranco/vsl-skill) (commit `fe855c50`: the 11-block interview, the two human gates, the 5x5 mechanism decision document, backwards writing, the 15-step offer, the lead angles, niche adaptation and the QA checklist) and from [bertrand-do/video-sales-letter](https://github.com/bertrand-do/video-sales-letter) (commit `f41eec5a`: the claims ledger, the script-only audit, the demo-led variant, the beat sheet, word-timed motion, player QA and the OTO/downsell sequence). Translated into the Method's English skill format, wired to `wizz-offer-forge`, the audience research (`wizz-pesquisa-de-publico`), the low ticket VSL ruler, `wizz-ctc-align` and the HyperFrames/Remotion pipeline. The method lineage declared by vsl-skill (Lucas Ramos/Veritas Club, Eugene Schwartz's *Breakthrough Advertising*, *Great Leads* by Masterson and Forde, Alex Hormozi's value equation) is credited in the skill. [mikefilsaime-groove/stickman-vsl-director](https://github.com/mikefilsaime-groove/stickman-vsl-director) (MIT, copyright (c) 2026 Mike Filsaime) is only cited as an optional reference; nothing from it is copied.
174
+ - License: MIT (full texts at `src/skills-lib/wizz-vsl/LICENSE`, copyright (c) 2026 Yuri Branco and copyright (c) 2026 Bertrand Diouly)
175
+
176
+ ## wizz-social knowledge (hook pre-check and caption fold check)
177
+
178
+ - Path: `src/modules/wizz/agents/wizz-social/knowledge/blueprint-roteiro-viral.md` (section "Hook pre-check"), `src/modules/wizz/agents/wizz-social/knowledge/legenda-instagram.md` (section "The fold check")
179
+ - Origin: ideas adapted in our own words from `skills/ig-reel/hookscore.py` and `skills/ig-caption/` of [Jakeschincariol/instagram-agent-skill](https://github.com/Jakeschincariol/instagram-agent-skill) (commit `d03c56bb`); no code was copied.
180
+ - License: MIT, copyright (c) 2026 Jake Schincariol
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "wizz-method",
4
- "version": "2.21.0",
4
+ "version": "2.23.0",
5
5
  "description": "Wizz Method: método de agência orientado por IA em PT-BR",
6
6
  "keywords": [
7
7
  "agile",
@@ -53,6 +53,8 @@
53
53
  "docs:preview": "astro preview --root website",
54
54
  "docs:validate-links": "node tools/validate-doc-links.js",
55
55
  "docs:validate-sidebar": "node tools/validate-sidebar-order.js",
56
+ "eval:design-mining": "node evals/design-mining/run-design-mining-eval.mjs",
57
+ "eval:design-mining:llm": "node evals/design-mining/run-design-mining-eval.mjs --llm",
56
58
  "eval:feature": "node evals/routing/run-feature-eval.mjs",
57
59
  "eval:feature:llm": "node evals/routing/run-feature-eval.mjs --llm",
58
60
  "eval:output": "node evals/output/run-output-eval.mjs",
@@ -69,7 +71,7 @@
69
71
  "lint:md": "markdownlint-cli2 \"**/*.md\"",
70
72
  "prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
71
73
  "quality": "npm run format:check && npm run lint && npm run lint:md && npm run docs:build && npm run quality:validate",
72
- "quality:validate": "npm test && npm run validate:refs && npm run validate:registry-schema && npm run validate:method-refs && npm run validate:model-ids && npm run validate:skills && npm run docs:validate-sidebar && npm run docs:validate-links && npm run validate:generated && npm run eval:routing && npm run eval:feature && npm run eval:output",
74
+ "quality:validate": "npm test && npm run validate:refs && npm run validate:registry-schema && npm run validate:method-refs && npm run validate:model-ids && npm run validate:skills && npm run docs:validate-sidebar && npm run docs:validate-links && npm run validate:generated && npm run eval:routing && npm run eval:feature && npm run eval:output && npm run eval:design-mining",
73
75
  "rebundle": "node tools/bundle-web-bundles.js",
74
76
  "release": "node tools/release.mjs",
75
77
  "sync:check": "node tools/sync-check.mjs",
package/removals.txt CHANGED
@@ -79,3 +79,6 @@ find-skills
79
79
  pesquisa-de-publico-do-piva
80
80
  security-audit-pentest
81
81
  site-launch-kit
82
+
83
+ # Renomeada sem o nome do autor (2026-10-25, adendo clone-persona-mercado).
84
+ wizz-pesquisa-de-publico-do-piva
@@ -216,6 +216,11 @@ areas:
216
216
  before: [wizz-ctc-align, wizz-video-effects, wizz-remotion-best-practices]
217
217
  pairs_with: [wizz-social-content, get-brolls, hyperframes, wizz-hook-extractor]
218
218
  clis:
219
+ # hypit-ai/hypit ("clonar vídeo viral" com agentes, DSL de vídeo ancorada
220
+ # em palavras), avaliado em 2026-10-22 (adendo repos-externos-rea-e-vsl):
221
+ # SÓ RECOMENDAR, nunca embutir nem virar entrada `clis:` com install. A
222
+ # licença é Apache 2.0 modificada com condições que proíbem
223
+ # redistribuição comercial; o usuário instala por conta própria se quiser.
219
224
  - id: hyperframes
220
225
  when: "DESENHAR telas de vídeo em HTML/CSS (HTML→MP4, agent-native, 20+ skills): cena isolada e MUDA — maqueta de WhatsApp/ChatGPT, gráfico animado, título, loop. NÃO usar para montagem com áudio/SFX/legenda sincronizada (posicionador de áudio falhou em produção, ~2,76s de drift; CSS vaza entre telas): a montagem final é do Remotion (regra: HyperFrames desenha, Remotion monta — ver _shared/video-pipeline.md do módulo wizz). Precisa ffmpeg + Node 22 + Chrome headless."
221
226
  not_when: "Montagem com áudio/SFX/legenda sincronizada (posicionador de áudio falhou em produção, ~2,76s de drift; CSS vaza entre telas)."
@@ -339,6 +344,57 @@ areas:
339
344
  # (2026-09-12): HEAD do upstream em 2026-09-09 (sem tags de release).
340
345
  check: "grep -qx da2da6dd03aacf06da3fecf205347601d38bb141 ./.claude/skills/apple-design/.wizz-pin 2>/dev/null"
341
346
  install: 'd="$(mktemp -d)" && git clone https://github.com/dickwu/apple-design-skill.git "$d" && git -C "$d" checkout da2da6dd03aacf06da3fecf205347601d38bb141 && npx -y skills add "$d" -y --copy && printf "%s\n" da2da6dd03aacf06da3fecf205347601d38bb141 > ./.claude/skills/apple-design/.wizz-pin && rm -rf "$d"'
347
+ # JohnHeibel/ClaudeAnimationBase (MIT), adendo salvos-instagram-ai de
348
+ # 2026-10-25, item 11. Kit de partida (p5.js + p5.brush, o personagem
349
+ # Clawd com 31 emoções e o ANIMATION_GUIDE.md), não skill: clone-and-run
350
+ # no projeto, igual buttercut. Opt-in como toda CLI. Fora de vídeo com o
351
+ # Claude, o guia de emoções atuadas vale como referência para animar
352
+ # outro personagem (ponteiro no check-ins.md do wizz-video-styles).
353
+ # Sem `rel` de propósito: a aresta pro Remotion exigiria a recíproca e
354
+ # mudaria o prompt de rota dele (mesmo motivo do wizz-vsl).
355
+ - id: claude-animation-base
356
+ when: "Desenho animado pintado à mão com o Clawd, o personagem do Claude (p5.js + p5.brush, 31 emoções atuadas, render pra MP4), para vídeo em que o Claude aparece: conteúdo sobre Claude, Claude Code ou Wizz."
357
+ not_when:
358
+ - "Vídeo sem o Claude como personagem: o estilo e a receita são do wizz-video-styles, a cena desenhada é do hyperframes."
359
+ platform: [darwin, linux]
360
+ # Clone-and-run: o próprio repo responde o SHA, então o check compara com o
361
+ # pin. O install repara um clone existente em vez de falhar no git clone.
362
+ check: 'test "$(git -C ./claude-animation-base rev-parse HEAD 2>/dev/null)" = 0ac8bf2b31942376cb6b8c4074715595d512acd2'
363
+ # Pin de supply chain (2026-10-25): HEAD de 2026-09-24 (sem tags de
364
+ # release); `npm ci` só baixa p5, p5.brush e puppeteer-core (sem Chrome
365
+ # embutido: o render.mjs pede Chrome instalado, ou --chrome=<path>/
366
+ # CHROME_PATH; o Chromium do Playwright serve). Atualizar conscientemente.
367
+ install: "{ [ -d claude-animation-base/.git ] || git clone https://github.com/JohnHeibel/ClaudeAnimationBase.git claude-animation-base; } && git -C claude-animation-base fetch origin && git -C claude-animation-base checkout 0ac8bf2b31942376cb6b8c4074715595d512acd2 && npm ci --prefix claude-animation-base"
368
+ verify: "command -v ffmpeg >/dev/null 2>&1 && command -v node >/dev/null 2>&1"
369
+ # feitangyuan/onetake (PolyForm Noncommercial 1.0.0), adendo
370
+ # salvos-instagram-ai de 2026-10-25, item 12. NUNCA vendorizar: a licença
371
+ # só cobre uso não comercial; cliente ou conteúdo que vende exige o
372
+ # onetake Pro. Por isso entra só como instalação do upstream, no opt-in,
373
+ # com o `notice` que o installer mostra antes da escolha. A técnica de
374
+ # plano-sequência está escrita do zero no wizz-video-effects (one-take.md)
375
+ # e roda no pipeline HyperFrames→Remotion sem esta skill. Escopo LOCAL:
376
+ # a description do upstream se declara o pipeline padrão de vídeo de
377
+ # produto, então só entra no projeto que escolheu usar. Sem `rel` (mesmo
378
+ # motivo do claude-animation-base).
379
+ - id: onetake
380
+ when: "Filme curto de produto, app ou skill (10 a 60 s) em plano-sequência feito com o onetake: interface real refeita em HTML, cada batida nasce da anterior, câmera que segue o assunto, som sintetizado e render 4K, em projeto pessoal ou não comercial (ou com onetake Pro)."
381
+ not_when:
382
+ - "Peça para cliente ou que vende sem onetake Pro: a técnica de plano-sequência é do wizz-video-effects (one-take.md), desenhada no hyperframes e montada no Remotion."
383
+ - "Vídeo com pessoa gravada, talking head ou corte de footage: é buttercut e wizz-remotion-best-practices."
384
+ notice: "Licença PolyForm Noncommercial: grátis só para uso pessoal ou não comercial. Para cliente ou conteúdo que vende, é preciso o onetake Pro (https://onetakemotion.com), com licença comercial."
385
+ platform: [darwin, linux]
386
+ # O check confere o SHA fixado: a skill é copiada (não clonada), então o
387
+ # pin é gravado num marcador no install. Pin de supply chain
388
+ # (2026-10-25): HEAD de 2026-10-21 (a tag v1.1.0-lite é de 2026-10-08,
389
+ # anterior). Fetch raso do SHA; antes do `skills add` saem as mp4 e os
390
+ # GIFs de exemplo (~115 MB; os README dos cases ficam, a SKILL.md os
391
+ # cita). Atualizar conscientemente.
392
+ check: "grep -qx 013a61ac8d98883c73733f59c06e49e9ba444f14 ./.claude/skills/onetake/.wizz-pin 2>/dev/null"
393
+ install: 'd="$(mktemp -d)" && git -C "$d" init -q && git -C "$d" fetch -q --depth 1 https://github.com/feitangyuan/onetake.git 013a61ac8d98883c73733f59c06e49e9ba444f14 && git -C "$d" checkout -q FETCH_HEAD && rm -rf "$d/.git" "$d/assets/cases" && find "$d/cases" -name "*.mp4" -delete && npx -y skills add "$d" -y --copy && printf "%s\n" 013a61ac8d98883c73733f59c06e49e9ba444f14 > ./.claude/skills/onetake/.wizz-pin && rm -rf "$d"'
394
+ # A SKILL.md pede python3 com playwright (chromium), numpy, scipy,
395
+ # Pillow, matplotlib e fonttools; sem eles o install passa e o render
396
+ # falha, então o verify olha os módulos, não só o binário.
397
+ verify: 'command -v ffmpeg >/dev/null 2>&1 && python3 -c "import playwright, numpy, scipy, PIL, matplotlib, fontTools" 2>/dev/null'
342
398
  references:
343
399
  - "references/premium-agency-rules.md (regras $150k-tier, importadas por impeccable/huashu no modo high-end)"
344
400
 
@@ -357,7 +413,7 @@ areas:
357
413
  - id: wizz-copywriting
358
414
  when: "Escrever copy de venda/página/headline do zero ou reescrever. Na página de vendas completa, incluir wizz-offer-forge se faltar oferta aprovada e wizz-page-cro se faltar estrutura de conversão aprovada; headline/CTA isolado ou texto sobre oferta e estrutura já aprovadas não exige refazê-las."
359
415
  rel:
360
- after: [wizz-pesquisa-de-publico-do-piva, wizz-offer-forge]
416
+ after: [wizz-pesquisa-de-publico, wizz-offer-forge]
361
417
  before: [wizz-copy-editing]
362
418
  pairs_with:
363
419
  [
@@ -390,6 +446,20 @@ areas:
390
446
  when: "Material de vendas: deck, one-pager, objeções, demo script, playbook."
391
447
  rel:
392
448
  pairs_with: [wizz-competitor-alternatives]
449
+ # Adaptada de yuribranco/vsl-skill + bertrand-do/video-sales-letter (MIT)
450
+ # em 2026-10-24 (adendo repos-externos-rea-e-vsl). Sem `rel` de propósito:
451
+ # oferta (wizz-offer-forge), pesquisa de público, régua do lowticket e a
452
+ # produção (wizz-ctc-align, hyperframes, Remotion) entram pela prosa da
453
+ # skill. Aresta aqui exigiria a recíproca nessas entradas e mudaria o
454
+ # prompt de rota/descoberta das áreas delas (ver feedback de rota
455
+ # invariante). A produção mora em designer: a copy só entrega o roteiro
456
+ # e o beat sheet.
457
+ - id: wizz-vsl
458
+ when: "Roteiro de VSL (vídeo de vendas): escrever do zero ou refazer a que não converte, da entrevista com o expert ao roteiro pronto pra gravar, com mecanismo do problema e da solução, oferta falada, leads pra testar e plano de produção. Gatilhos: 'faz a VSL do meu produto', 'roteiro do vídeo de vendas', 'a lead da VSL tá fraca', 'a retenção cai no primeiro minuto'."
459
+ not_when:
460
+ - "Copy da página de vendas, headline ou texto em volta do player: é wizz-copywriting."
461
+ - "Roteiro de criativo ou anúncio curto: é wizz-ad-creative (área ads); roteiro de Reel ou Short: é wizz-social-content (área social)."
462
+ - "Gravar, animar ou montar o vídeo em si: é da área designer."
393
463
 
394
464
  seo:
395
465
  agent: wizz-seo
@@ -512,14 +582,14 @@ areas:
512
582
  when: "Site pronto ou quase pronto pra ir ao ar: revisão de pré-lançamento em 15 rodadas corretivas (CTA acima da dobra, barra fixa mobile, tempo de resposta, prova social real, FAQ+FAQPage, imagens reais, endereço, titles, Open Graph, breadcrumbs, alt text, schema local, robots/sitemap, LGPD, medição), com regra anti-invenção e PENDÊNCIAS. Gatilhos: 'vamos subir o site', 'checklist de lançamento', 'revisa antes do deploy', pré-go-live, ou um item isolado (og:image, FAQ com schema, robots.txt). Roda DEPOIS do site construído, ANTES do deploy."
513
583
  rel:
514
584
  pairs_with: [wizz-launch-readiness, wizz-schema-markup]
515
- - id: wizz-pesquisa-de-publico-do-piva
516
- 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)."
585
+ - id: wizz-pesquisa-de-publico
586
+ when: "Pesquisa profunda de público, VoC, níveis de consciência, matriz de ângulos e léxico nativo de oferta compilados em HTML; sem dado nenhum (pré-lançamento), entrevista guiada que monta a persona ilustrativa e o que validar."
517
587
  rel:
518
588
  before: [wizz-copywriting, wizz-offer-forge]
519
589
  - id: wizz-offer-forge
520
590
  when: "Forjar oferta irresistível de resposta direta/infoproduto (mecanismo único, empilhamento de valor, garantia reversa, ponte de tráfego)."
521
591
  rel:
522
- after: [wizz-pesquisa-de-publico-do-piva, wizz-lowticket-minerador]
592
+ after: [wizz-pesquisa-de-publico, wizz-lowticket-minerador]
523
593
  before: [wizz-copywriting]
524
594
  pairs_with: [wizz-ig-profile-optimizer, wizz-pricing-strategy, wizz-lowticket-metodologia]
525
595
  # Módulo lowticket (src/modules/lowticket) — ver nota em ads.skills. Desde
@@ -569,6 +639,14 @@ areas:
569
639
  after: [wizz-lowticket-guia]
570
640
  before: [wizz-lowticket-funil]
571
641
  pairs_with: [wizz-lowticket-metodologia, wizz-lowticket-trafego]
642
+ # Adendo clone-persona-mercado (2026-10-25). Sem `rel` de propósito: oferta
643
+ # e produto entram pela prosa da skill, e aresta exigiria a recíproca.
644
+ - id: wizz-clone-do-expert
645
+ module: lowticket
646
+ when: "Clonar a voz de um expert: a partir de lives, áudios, aulas e posts dele, gerar o prompt de um GPT/Project que responde aluno como ele, com relatório de evidências e teste de fidelidade. Gatilhos: 'clonar o expert', 'um GPT que fala como eu', 'agente com a minha voz pros alunos'."
647
+ not_when:
648
+ - "Pesquisa de público ou persona de quem compra: é wizz-pesquisa-de-publico."
649
+ - "Escrever copy de venda no tom do expert: é wizz-copywriting."
572
650
  mcps:
573
651
  - id: scrapling
574
652
  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."
@@ -903,6 +981,57 @@ areas:
903
981
  when: "Review do trabalho concluído no epic (party mode)."
904
982
  rel:
905
983
  after: [wizz-sprint-planning]
984
+ # xtool (adendo salvos-instagram-ai de 2026-10-25, item 4): o method só
985
+ # auditava UI nativa (apple-design), não construía iOS. A skill é o guia
986
+ # curto do xtool; o binário é a CLI `xtool` logo abaixo.
987
+ - id: wizz-ios-build
988
+ when: "Compilar, assinar e instalar app iOS no iPhone pela linha de comando, sem abrir o Xcode (projeto SwiftPM com xtool), inclusive desenvolvendo no Linux ou no Windows (WSL)."
989
+ not_when:
990
+ - "Revisar UI nativa contra o Apple HIG: é a CLI apple-design (área designer)."
991
+ - "Publicar no TestFlight ou na App Store: fora desta skill."
992
+ rel:
993
+ pairs_with: [xtool]
994
+ mcps:
995
+ # Rea (morluto/rea, npm rea-agents, MIT), adendo repos-externos-rea-e-vsl
996
+ # de 2026-10-22. OPCIONAL: `optional: true` deixa a entrada DESMARCADA no
997
+ # multiselect do installer (só recomenda o `claude mcp add`; escreve no
998
+ # .mcp.json apenas se o usuário marcar ou passar --mcps rea). Instalar só
999
+ # do npm `rea-agents` ou de rea.tools: o próprio README avisa sobre repos
1000
+ # copiados, e o repo tinha uma contagem de estrelas desproporcional em
1001
+ # 2026-10-22. Para site comum ele sobrepõe o agent-browser; o ganho real é
1002
+ # Electron, APK, HAR e binário nativo (Hopper/Ghidra/IDA, se instalados).
1003
+ # Alternativas olhadas e piores pro caso geral: mrexodia/ida-pro-mcp e
1004
+ # LaurieWired/GhidraMCP (uma ferramenta só cada).
1005
+ - id: rea
1006
+ optional: true
1007
+ when: "Entender como uma feature de app, site, APK ou binário de TERCEIRO funciona por dentro, sem o código-fonte, pra construir uma parecida: app desktop ou Electron, APK Android, binário nativo, captura HAR."
1008
+ not_when:
1009
+ - "Código do próprio projeto, com o fonte disponível: é wizz-investigate."
1010
+ - "Só navegar, clicar ou tirar print de um site: é o agent-browser."
1011
+ server:
1012
+ command: npx
1013
+ # Pin de supply chain (2026-10-24): versão publicada fixa
1014
+ # (registry npm: 6.7.0, 2026-10-18); atualizar conscientemente.
1015
+ args: ["-y", "rea-agents@6.7.0", "mcp"]
1016
+ clis:
1017
+ # xtool-org/xtool (MIT): substitui o build do Xcode por SwiftPM, assina e
1018
+ # instala no iPhone. macOS pelo tap oficial do Homebrew (é um cask
1019
+ # `version :latest` com `sha256 :no_check`: sem pin, e põe o binário no
1020
+ # PATH, que ~/.local/bin não está no macOS); Linux pelo AppImage da release
1021
+ # fixa, em ~/.local/bin (sem sudo). Windows só via WSL, que conta como
1022
+ # Linux. No macOS o Xcode continua necessário para o SDK.
1023
+ - id: xtool
1024
+ when: "Binário que compila um pacote SwiftPM em app iOS, assina com o Apple ID e instala no iPhone conectado, sem o build do Xcode, no macOS, Linux ou WSL."
1025
+ rel:
1026
+ pairs_with: [wizz-ios-build]
1027
+ platform: [darwin, linux]
1028
+ check: "command -v xtool >/dev/null 2>&1"
1029
+ # Pin de supply chain (2026-10-25): release 1.23.0 (2026-10-22) no
1030
+ # Linux. Atualizar conscientemente.
1031
+ install: 'case "$(uname -s)" in Darwin) brew install xtool-org/tap/xtool ;; Linux) mkdir -p "$HOME/.local/bin" && curl -fL "https://github.com/xtool-org/xtool/releases/download/1.23.0/xtool-$(uname -m).AppImage" -o "$HOME/.local/bin/xtool" && chmod +x "$HOME/.local/bin/xtool" ;; esac'
1032
+ # macOS: SDK do iOS via Xcode. Linux: toolchain Swift e usbmuxd (o
1033
+ # Xcode.xip + `xtool sdk` vêm depois, com login da Apple no navegador).
1034
+ verify: 'if [ "$(uname -s)" = Darwin ]; then xcrun -sdk iphoneos --show-sdk-path >/dev/null 2>&1; else command -v swift >/dev/null 2>&1 && command -v usbmuxd >/dev/null 2>&1; fi'
906
1035
 
907
1036
  pm:
908
1037
  agent: wizz-agent-pm
@@ -150,6 +150,14 @@ _Market Dynamics: [Forces shaping market evolution]_
150
150
  _Consumer Behavior Shifts: [Changes in customer behavior and preferences]_
151
151
  _Source: [URL]_
152
152
 
153
+ ### Weak Signals
154
+
155
+ [Behaviours, channels and niches still small but accelerating: few people do it today, more do it every month]
156
+ _Signal: [what is happening, where it was seen]_
157
+ _Evidence of acceleration: [search trend, community growth, launches, with dates]_
158
+ _Why it could matter: [which part of the market it would move]_
159
+ _Source: [URL]_
160
+
153
161
  ### Pricing and Business Model Analysis
154
162
 
155
163
  [Comprehensive pricing and business model analysis]
@@ -284,6 +292,25 @@ _Medium-term Market Trends: [3-5 year expected market developments]_
284
292
  _Long-term Market Vision: [5+ year market outlook for {{research_topic}}]_
285
293
  _Source: [URL]_
286
294
 
295
+ ### Scenarios
296
+
297
+ | Scenario | What has to happen | Variables that move it | What it means for us |
298
+ |---|---|---|---|
299
+ | Base | [most likely path] | [2-3 variables] | [decision] |
300
+ | Optimistic | [what goes right] | [2-3 variables] | [decision] |
301
+ | Pessimistic | [what goes wrong] | [2-3 variables] | [decision] |
302
+
303
+ _Every number in a scenario comes from a cited source or is labelled as an assumption. Never invent a figure to fill the table._
304
+
305
+ ### Hidden Opportunity Questions
306
+
307
+ Answer each one with evidence from this research, or write "no evidence yet" and what would answer it:
308
+
309
+ - What is nobody asking about this market?
310
+ - Where would an aggressive startup attack today?
311
+ - Which emerging problem still has no good solution?
312
+ - Which behaviour is still the exception but could become the norm?
313
+
287
314
  ### Strategic Opportunities
288
315
 
289
316
  [Market opportunity analysis and recommendations]
@@ -27,7 +27,7 @@ Invoke this skill only for the explicit cases in "When this skill runs" below.
27
27
  3. **The request itself.** When 1 and 2 are both empty and the request is named work (a feature, a batch, a screen, a page, a campaign, a bug with a scope: "vamos fazer o painel de assinaturas"). Derive the slug from the subject, 2 to 4 words, and run `node _wizz/hooks/wizz-feature.js definir <slug>` BEFORE dispatching; say so in **one line**. Do not ask. This step is mandatory for the router and the maestro, not a nice-to-have: skipping it is how a project spends its whole life with an empty `active_feature`.
28
28
  4. **Nothing.** Only for work that is not named (a question, a conversation, a one-line tweak with no artifact). Artifacts go to the roots and memory carries no feature tag.
29
29
 
30
- **The open sprint rules.** The active feature is the open sprint: every request goes into it until it is closed, with no new folder. A new subject goes into it, sized by the work (a small tweak is just done, no story; a multi-step change becomes a story; a new objective becomes an epic), while it fits the sprint's goal; only if it does not fit, ask the owner once: add to this sprint or open another. `definir <other>` with a sprint open is refused unless `--novo` (the owner's choice). **Close** when the delivery closes (deploy or acceptance): `wizz-feature.js verificar` must pass, then `wizz-feature.js encerrar --cerebro [--proxima <slug>]` marks the spec `no-ar`, moves the sprint's folders (and the root `sprint-status.yaml`) to `_arquivo/<slug>/`, clears or switches `active_feature`, and writes the Cérebro (state + one Sessions line; without a vault it prints the instruction instead).
30
+ **The open sprint rules.** The active feature is the open sprint: every request goes into it until it is closed, with no new folder. A new subject goes into it, sized by the work (a small tweak is just done, no story; a multi-step change becomes a story; a new objective becomes an epic), while it fits the sprint's goal; only if it does not fit, ask the owner once: add to this sprint or open another. `definir <other>` with a sprint open is refused unless `--novo` (the owner's choice). **Close** when the delivery closes (deploy or acceptance): `wizz-feature.js verificar` must pass, then `wizz-feature.js encerrar --cerebro [--proxima <slug>]` marks the spec `no-ar`, moves the sprint's folders (and the root `sprint-status.yaml` when it belongs to the sprint) to `_arquivo/<slug>/`, rewriting or listing references from outside, clears or switches `active_feature`, and writes the Cérebro (state + one Sessions line; without a vault it prints the instruction instead).
31
31
 
32
32
  **Optional branch.** `feature_branches: auto` in `_wizz/bmm/config.yaml` makes `definir` (and the SessionStart hook) propose `git switch -c feat/<slug>` when you are on a trunk branch of a git repo. The default is `off`, for whoever works directly on `main`.
33
33
 
@@ -47,7 +47,7 @@ Load config from `{project-root}/_wizz/bmm/config.yaml` and resolve:
47
47
  - `project_name`, `planning_artifacts`, `implementation_artifacts`, `user_name`
48
48
  - `communication_language`, `document_output_language`, `user_skill_level`
49
49
  - `date` as system-generated current datetime
50
- - `sprint_status` = `{implementation_artifacts}/sprint-status.yaml`
50
+ - `sprint_status` = `{implementation_artifacts}/{active_feature}/sprint-status.yaml` when that file exists (the open sprint's own file; when `{active_feature}` is empty or a feature branch is checked out, get the open sprint from `node _wizz/hooks/wizz-feature.js resolver`), otherwise `{implementation_artifacts}/sprint-status.yaml`. Read and update the same file for the whole run
51
51
  - `project_context` = `**/project-context.md` (load if exists)
52
52
  - CLAUDE.md / memory files (load if exist)
53
53
  - YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
@@ -69,7 +69,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
69
69
 
70
70
  ## Paths
71
71
 
72
- - `sprint_status` = `{implementation_artifacts}/sprint-status.yaml`
72
+ - `sprint_status` = `{implementation_artifacts}/{active_feature}/sprint-status.yaml` when that file exists (the open sprint's own file; when `{active_feature}` is empty or a feature branch is checked out, get the open sprint from `node _wizz/hooks/wizz-feature.js resolver`), otherwise `{implementation_artifacts}/sprint-status.yaml`. Read and update the same file for the whole run
73
73
  - `epics_file` = `{planning_artifacts}/epics.md`
74
74
  - `prd_file` = `{planning_artifacts}/prd.md`
75
75
  - `architecture_file` = `{planning_artifacts}/architecture.md`
@@ -53,6 +53,7 @@ Load config from `{project-root}/_wizz/bmm/config.yaml` and resolve:
53
53
  - `communication_language`, `document_output_language`
54
54
  - `user_skill_level`
55
55
  - `implementation_artifacts`
56
+ - `output_folder` (where `design-state.yaml` lives, for the design gate in step 5)
56
57
  - `date` as system-generated current datetime
57
58
  - `project_context` = `**/project-context.md` (load if exists)
58
59
 
@@ -69,7 +70,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
69
70
  ## Paths
70
71
 
71
72
  - `story_file` = `` (explicit story path; auto-discovered if empty)
72
- - `sprint_status` = `{implementation_artifacts}/sprint-status.yaml`
73
+ - `sprint_status` = `{implementation_artifacts}/{active_feature}/sprint-status.yaml` when that file exists (the open sprint's own file; when `{active_feature}` is empty or a feature branch is checked out, get the open sprint from `node _wizz/hooks/wizz-feature.js resolver`), otherwise `{implementation_artifacts}/sprint-status.yaml`. Read and update the same file for the whole run
73
74
 
74
75
  ## Execution
75
76
 
@@ -315,6 +316,12 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
315
316
  <action>Review the current task/subtask from the story file - this is your authoritative implementation guide</action>
316
317
  <action>Plan implementation following red-green-refactor cycle</action>
317
318
 
319
+ <check if="the task builds a non-trivial UI section, component or behaviour AND {output_folder}/design-state.yaml exists">
320
+ <action>Run the design gate before writing UI code: locate the script with `find . -path '*wizz-design-needs/scripts/design_state.py' -not -path '*/node_modules/*' | head -1` and run `uv run --no-cache <script> gate {output_folder}/design-state.yaml --section <surface>/<section>`</action>
321
+ <action if="the gate exits 1">HALT: "Design gate blocked: <need ids and action from the gate JSON>" (an open need is mined first; an unplanned section goes back to wizz-design-needs)</action>
322
+ <action if="the gate passes">Build from the selected discoveries' `adaptation` plans; for `unmet` needs, cite the research in Dev Agent Record as the justification for a custom build</action>
323
+ </check>
324
+
318
325
  <!-- RED PHASE -->
319
326
  <action>Write FAILING tests first for the task/subtask functionality</action>
320
327
  <action>Confirm tests fail before implementation - this validates test correctness</action>
@@ -82,10 +82,10 @@ Treat every entry in `{workflow.persistent_facts}` as foundational context you c
82
82
 
83
83
  Load config from `{project-root}/_wizz/bmm/config.yaml` and resolve:
84
84
 
85
- - `project_name`, `planning_artifacts`, `implementation_artifacts`, `user_name`
85
+ - `project_name`, `planning_artifacts`, `implementation_artifacts`, `output_folder`, `user_name`
86
86
  - `communication_language`, `document_output_language`, `user_skill_level`
87
87
  - `date` as system-generated current datetime
88
- - `sprint_status` = `{implementation_artifacts}/sprint-status.yaml`
88
+ - `sprint_status` = `{implementation_artifacts}/{active_feature}/sprint-status.yaml` when that file exists (the open sprint's own file; when `{active_feature}` is empty or a feature branch is checked out, get the open sprint from `node _wizz/hooks/wizz-feature.js resolver`), otherwise `{implementation_artifacts}/sprint-status.yaml`. Read and update the same file for the whole run
89
89
  - `project_context` = `**/project-context.md` (load if exists)
90
90
  - CLAUDE.md / memory files (load if exist)
91
91
  - YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
@@ -28,6 +28,8 @@ Follow `./sync-sprint-status.md` with `{target_status}` = `in-progress`.
28
28
 
29
29
  If `{spec_file}` has a non-empty `context:` list in its frontmatter, load those files before implementation begins. When handing to a sub-agent, include them in the sub-agent prompt so it has access to the referenced context.
30
30
 
31
+ **Design gate.** When the spec builds a non-trivial UI section, component or behaviour and `{output_folder}/design-state.yaml` exists, run the gate before any UI code: locate the script with `find . -path '*wizz-design-needs/scripts/design_state.py' -not -path '*/node_modules/*' | head -1` and run `uv run --no-cache <script> gate {output_folder}/design-state.yaml --section <surface>/<section>`. Exit 1 is a HALT: report the need ids and the gate's action (mine the open need first; an unplanned section goes back to `wizz-design-needs`). On pass, the selected discoveries' `adaptation` plans are the build brief. When handing to a sub-agent, pass the gate result and the map path.
32
+
31
33
  Hand `{spec_file}` to a sub-agent/task and let it implement. If no sub-agents are available, implement directly.
32
34
 
33
35
  **Path formatting rule:** Any markdown links written into `{spec_file}` must use paths relative to `{spec_file}`'s directory so they are clickable in VS Code. Any file paths displayed in terminal/conversation output must use CWD-relative format with `:line` notation (e.g., `src/path/file.ts:42`) for terminal clickability. No leading `/` in either case.
@@ -60,7 +60,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
60
60
 
61
61
  ## Paths
62
62
 
63
- - `sprint_status_file` = `{implementation_artifacts}/sprint-status.yaml`
63
+ - `sprint_status_file` = `{implementation_artifacts}/{active_feature}/sprint-status.yaml` when that file exists (the open sprint's own file; when `{active_feature}` is empty or a feature branch is checked out, get the open sprint from `node _wizz/hooks/wizz-feature.js resolver`), otherwise `{implementation_artifacts}/sprint-status.yaml`. Read and update the same file for the whole run
64
64
 
65
65
  ## Input Files
66
66
 
@@ -816,7 +816,7 @@ code = "tm-pedro-sobral"
816
816
  name = "Pedro Sobral"
817
817
  icon = "🥷"
818
818
  title = "O Ninja Supremo do Tráfego — gestor de tráfego pioneer"
819
- persona = "Irreverent, execution-obsessed Brazilian practitioner-teacher who coined gestor de tráfego and managed huge spend for the LATAM market. Rallying cry is vai la e faz: Jedis execute while Padawans only consume theory, and every cent of ad spend is a test. Argues from three essential campaign types, the passo anterior strategy of targeting one step before conversion, isolated one-variable testing, and creative as the new audience. Pet peeve: becoming a mero operador de botoes who blindly trusts platform AI, because the algorithm serves platform profits, not yours."
819
+ persona = "Irreverent, execution-obsessed Brazilian practitioner-teacher who coined gestor de tráfego and managed huge spend for the LATAM market. Rallying cry is vai la e faz: Jedis execute while Padawans only consume theory, and every cent of ad spend is a test. Argues from three essential campaign types, the passo anterior strategy of targeting one step before conversion, isolated one-variable testing, and creative as the new audience. Pet peeve: becoming a mero operador de botoes who blindly trusts platform AI, because the algorithm serves platform profits, not yours. Speaks his own style, not the course methodology: when the panel needs Meta bid cap or scale numbers, he defers to shard 03-campanha-bidcap.md of wizz-lowticket-metodologia and says the numbers are the methodology's."
820
820
 
821
821
  [[workflow.party_members]]
822
822
  code = "tm-ad-midas"
@@ -830,14 +830,14 @@ code = "tm-media-buyer"
830
830
  name = "Media Buyer"
831
831
  icon = "🖥️"
832
832
  title = "Cross-platform campaign execution operator"
833
- persona = "The operational backbone who turns strategy into live campaigns across Meta, Google, YouTube, TikTok, and LinkedIn, meticulous about naming conventions and clean structure. Argues that structure determines performance, you start small and scale with data not hope, and you change only one variable at a time or you learn nothing. Runs a non-negotiable daily routine of morning check, midday adjust, evening document, letting algorithms target while feeding them clean data and good creative. Pet peeve: messy accounts, because messy accounts get messy results."
833
+ persona = "The operational backbone who turns strategy into live campaigns across Meta, Google, YouTube, TikTok, and LinkedIn, meticulous about naming conventions and clean structure. Argues that structure determines performance, you start small and scale with data not hope, and you change only one variable at a time or you learn nothing. Runs a non-negotiable daily routine of morning check, midday adjust, evening document, letting algorithms target while feeding them clean data and good creative. Reading is daily, touching is not: on Meta he pauses and scales only by the rulers of shard 03-campanha-bidcap.md of wizz-lowticket-metodologia. Pet peeve: messy accounts, because messy accounts get messy results."
834
834
 
835
835
  [[workflow.party_members]]
836
836
  code = "tm-scale-optimizer"
837
837
  name = "Scale Optimizer"
838
838
  icon = "🚀"
839
839
  title = "Campaign scaling and efficiency specialist"
840
- persona = "A methodical, cautious-but-aggressive specialist who treats scaling as the most dangerous phase where good campaigns go to die. Refuses to scale anything unproven, demanding profitability for five-plus days first, then verticals at 20-30 percent every 48-72 hours before going horizontal then platform. Argues that marginal CPA is the real metric because average CPA masks the problem, and that every audience has a ceiling to respect rather than fight. Pet peeve: scaling without a matching creative pipeline, since spend outrunning fresh creative just buys faster fatigue."
840
+ persona = "A methodical, cautious-but-aggressive specialist who treats scaling as the most dangerous phase where good campaigns go to die. Refuses to scale anything the methodology does not call validated yet, then scales Meta campaigns in its lever order: bid cap first, validated creatives second, budget last with each step sized by the ROAS ruler, reading the numbers in shard 03-campanha-bidcap.md of wizz-lowticket-metodologia instead of carrying a fixed percentage, and only then goes horizontal and to new platforms. Argues that marginal CPA is the real metric because average CPA masks the problem, and that every audience has a ceiling to respect rather than fight. Pet peeve: scaling without a matching creative pipeline, since spend outrunning fresh creative just buys faster fatigue."
841
841
 
842
842
  [[workflow.party_members]]
843
843
  code = "tm-pixel-specialist"
@@ -14,8 +14,9 @@ Install it and a fresh machine has the methodology and the six skills working, w
14
14
  | `wizz-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 |
15
15
  | `wizz-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`) |
16
16
  | `wizz-lowticket-pagina` | page performance: connect rate, LCP, pixel order, acceptance targets | optimizing or building a low ticket sales page | institutional sites or apps |
17
+ | `wizz-clone-do-expert` | turns an expert's real material (lives, audios, classes, posts) into a GPT/Project system prompt in their voice, with an evidence report and a fidelity test | the expert wants an assistant that answers students like them | audience or persona research (use `wizz-pesquisa-de-publico`), sales copy (use `wizz-copywriting`) |
17
18
 
18
- All six 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.
19
+ All seven 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.
19
20
 
20
21
  ## The loading contract
21
22
 
@@ -1,6 +1,6 @@
1
1
  code: lowticket
2
2
  name: "Wizz Low Ticket"
3
- description: "Low ticket direct-response playbook for Meta Ads (BR/PT): funnel diagnosis, bid-cap campaigns, creatives, offers, sales pages, VSL players, upsell ladders, copy diagnosis, tracking setup and offer mining, plus a front door for people who do not know where to start. Knowledge base loaded one shard at a time."
3
+ description: "Low ticket direct-response playbook for Meta Ads (BR/PT): funnel diagnosis, bid-cap campaigns, creatives, offers, sales pages, VSL players, upsell ladders, copy diagnosis, tracking setup, offer mining and an expert voice clone for students, plus a front door for people who do not know where to start. Knowledge base loaded one shard at a time."
4
4
  default_selected: false
5
5
  # Versão do contrato module.yaml <-> installer (auditoria 2026-09-11, item 25).
6
6
  # Ver tools/installer/modules/module-interface.js. Ausente = 1.
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: wizz-clone-do-expert
3
+ description: Captures an expert's real voice and turns it into a ready-to-paste system prompt for a GPT or Claude Project that answers students the way the expert would. Reads real material first (live and class transcripts, audios, videos, posts, captions), counts signature phrases and patterns instead of guessing them, separates what was observed from what is being suggested, and ships an evidence report plus a fidelity test for the expert to approve. With no material, runs a short interview asking for raw, spoken-style answers. Use when the user wants to "clonar o expert", "um GPT que fala como eu", "agente com a minha voz", "assistente pros alunos no meu tom". Do NOT use for audience or persona research (use wizz-pesquisa-de-publico), for writing sales copy in the expert's voice (use wizz-copywriting), or for the tone of an AI product in general (use wizz-ai-product-design).
4
+ ---
5
+
6
+ # Expert Clone
7
+
8
+ Builds an agent that talks like a specific expert: their vocabulary, their way of reasoning, the stories they actually tell, the limits they keep. The deliverable is a system prompt someone pastes into a GPT or a Claude Project, plus the evidence behind every trait.
9
+
10
+ The governing principle: **the clone only knows what the expert actually said.** No invented story, no exclusive method that wasn't described, no result or income figure the expert never claimed. Where the material is thin, the prompt says so and the report asks for more.
11
+
12
+ ## Source of truth
13
+
14
+ Read the Cérebro state first (via the `wizz-cerebro` skill): an earlier clone, the product, the offer. If `wizz-offer-forge` produced an approved offer (`{output_folder}/offers/OFFER-*.md`), the product block comes from there. This skill has **no memory of its own**.
15
+
16
+ ## Step 1 · Gather real material
17
+
18
+ Ask for the most spoken, least polished material that exists. Written posts are the expert performing; a live or an audio to a student is the expert talking.
19
+
20
+ | Material | How to read it |
21
+ |---|---|
22
+ | Audio or video (live, class, call, Reel) | Transcribe locally: `npx -y hyperframes transcribe <file> -d <out_dir> -l pt --json` (no API key). One file at a time. |
23
+ | Transcripts, captions, posts, emails | Read as is. Note the source and date of each. |
24
+ | Product content (modules, lessons, materials) | Feeds the product and method blocks. It's the data that most improves the clone; ask for it even when everything else is there. |
25
+
26
+ Save what you read under `{output_folder}/lowticket/clone-<slug>/fontes/` with one line per source in `fontes.md` (file, type, date, length).
27
+
28
+ **No material at all?** Run the interview (Step 1b) instead. Say upfront that a clone built from one interview is a first draft.
29
+
30
+ ### Step 1b · Interview when there is no material
31
+
32
+ One question per turn. Ask the expert to answer **as if sending an audio to a student**, without trying to write well: the raw answer is what reveals the real way of speaking. Default questions, in this order, adapting to the niche:
33
+
34
+ 1. Uma aluna te manda: "travei, não sei por onde começar". Responde como se fosse um áudio pra ela.
35
+ 2. Qual é o erro que você mais vê quem está começando cometer, e o que você fala quando vê?
36
+ 3. Conta a história que você mais repete nas aulas.
37
+ 4. Qual pergunta de aluno te irrita, e como você responde mesmo assim?
38
+ 5. O que você nunca promete pra ninguém?
39
+
40
+ After each answer, write down what it shows (a word, a structure, a reaction) before the next question. Even one answer is enough to start, as long as observed and suggested stay apart.
41
+
42
+ ## Step 2 · Extract the voice, with counts
43
+
44
+ From the material, build the evidence table before writing any prompt:
45
+
46
+ - **Signature phrases and words:** count occurrences across sources. A trait seen once is a candidate; seen in three or more sources it's a trait.
47
+ - **Reasoning structure:** how an answer is built (story first? rule first? question back to the student?).
48
+ - **Formality and rhythm:** sentence length, use of "você/tu/a gente", slang, swearing, emoji in writing.
49
+ - **Didactics:** analogies, examples, how they break a step down.
50
+ - **Stories, methods and principles:** only the ones the expert told. Name each with its source.
51
+ - **Reactions:** what they praise, what they push back on, how they handle a lazy question or a complaint.
52
+
53
+ Every row is tagged `observado` (with source and count) or `sugerido` (your proposal to complete the agent, with the reason). Never promote a `sugerido` to `observado`.
54
+
55
+ ## Step 3 · Write the clone prompt
56
+
57
+ Follow the section template in `references/clone-prompt-template.md`. The prompt is written in Portuguese (it talks to Brazilian students), in second person to the model.
58
+
59
+ Few-shot examples come **from real answers** in the material, marked as real, lightly trimmed but not rewritten. When there aren't enough real answers, write at most two suggested examples and mark them as such in the evidence report.
60
+
61
+ Limits are not optional and never get softened: the clone does not pretend to be a human or the expert in person, does not promise income or results, does not ask for or keep a student's personal data, and sends to the expert's real support channel anything it can't answer.
62
+
63
+ ## Step 4 · Fidelity test
64
+
65
+ Pick 3 typical student questions (from real comments or support messages when the material has them; otherwise the most likely ones for the niche). Answer each one **as the clone**, using only the prompt you wrote. Put the three answers at the end of the file for the expert to approve or correct.
66
+
67
+ The clone is ready to publish only after the expert approves the three answers. Each correction goes back into the prompt and the evidence table.
68
+
69
+ ## Output
70
+
71
+ One file: `{output_folder}/lowticket/clone-<slug>/clone-<slug>.md`, in Portuguese, with three parts:
72
+
73
+ 1. **Prompt do clone**: the complete system prompt, ready to paste.
74
+ 2. **Relatório de evidências**: the table from Step 2 (trait, `observado`/`sugerido`, source, count), plus what is missing.
75
+ 3. **Teste de fidelidade**: the 3 questions, the clone's answers, and a field for the expert's verdict.
76
+
77
+ Close by asking for **the one piece of material that would most improve the clone** (usually the product's real content, or more spoken material if everything so far was written).
78
+
79
+ ## Closing: always hand off
80
+
81
+ End every delivery with:
82
+
83
+ - 📍 Onde você está: clone em rascunho, aguardando aprovação do expert (ou aprovado).
84
+ - ✅ O que fizemos: quantas fontes, quantos traços observados e quantos sugeridos.
85
+ - ➡️ Próximo passo: o expert responde o teste de fidelidade; depois, colar o prompt no GPT ou Project.
86
+ - 🧰 O que ter pronto: o material que mais melhora o clone (pedido acima).
@@ -0,0 +1,21 @@
1
+ # Clone prompt template
2
+
3
+ Section order of the system prompt the skill delivers. Headings are in Portuguese because the prompt is pasted as is. Fill each section from the evidence table; a section with no evidence keeps a one-line note saying what's missing instead of invented content.
4
+
5
+ | # | Section | What goes in | Source |
6
+ |---|---|---|---|
7
+ | 1 | Identidade do agente | Who the agent is: an assistant trained on the expert's material, not the expert in person. Product and audience it serves. | offer, product content |
8
+ | 2 | Tom e formalidade | Register, "você/tu/a gente", sentence length, slang and swearing rules, emoji use. | counts from Step 2 |
9
+ | 3 | Estrutura de raciocínio | How an answer is built, in order (e.g. acolhe, devolve uma pergunta, dá a regra, fecha com um passo). | observed answers |
10
+ | 4 | Vocabulário e frases-marca | The signature phrases with how often to use them. Overusing a catchphrase is the fastest way to sound fake: say "no máximo uma por resposta". | counts |
11
+ | 5 | Didática | Analogies, examples, how a step is broken down. | observed answers |
12
+ | 6 | História | Only the stories the expert told, each in two or three lines. | sources |
13
+ | 7 | Métodos e princípios | Named methods and rules, exactly as the expert describes them. Never invent a name for a method. | sources, product content |
14
+ | 8 | Como o expert é percebido | How students describe the expert (from comments), to keep the clone consistent with that image. | comments, if any |
15
+ | 9 | Repertório de temas | Topics the clone handles, and topics it sends elsewhere. | product content |
16
+ | 10 | Comunicação do produto | What the product is, what it includes, when to mention it. No pressure selling; no price unless it's in the offer. | approved offer |
17
+ | 11 | Reações e estilo de interação | How to react to a lazy question, a complaint, a win, a student about to give up. | observed reactions |
18
+ | 12 | Exemplos de resposta | Few-shots from real answers, marked `(resposta real)`; at most two `(exemplo sugerido)`. | material |
19
+ | 13 | Limites | Not a human, not the expert in person; no income or result promise; no personal data asked or kept; medical, legal and financial questions go to a professional; what it can't answer goes to the real support channel. | fixed |
20
+ | 14 | Modo de operação | Answer length, when to ask back before answering, language. | Step 2 |
21
+ | 15 | Instruções finais | The three rules that win any conflict: limits first, then fidelity to the material, then helpfulness. | fixed |
@@ -59,6 +59,8 @@ Levers, in this order: (1) raise the bid cap, (2) add validated creatives, (3) a
59
59
 
60
60
  **Never** as the first lever: raising the daily budget. The budget grants permission to spend; the bid cap is the real acquisition ceiling.
61
61
 
62
+ Budget step, once the budget lever is reached, sized by ROAS: **ROAS ≥ 2.5 → +50%** · **2.0 to 2.5 → +30%** · **below 2.0 → +20%** (shard 03, §3.2).
63
+
62
64
  Lockout after touching it: **48 to 72h hangover** after a structural change, and the 3x rule before judging again.
63
65
 
64
66
  ## Cadence and saturation
@@ -10,7 +10,7 @@ Load context **cheaply**:
10
10
 
11
11
  1. Run `/wizz-cerebro ver` (or a light `grep` on the vault) to pull the project's current state and recent decisions.
12
12
  2. Don't read the whole vault. Get only: where things stopped, what's missing, decisions relevant to the agent's area.
13
- 3. If there's no cerebro in this project, proceed normally without blocking.
13
+ 3. If there's no cerebro in this project, proceed normally without blocking. Where the vault is looked for, and what to ask when saving with none, lives in one place only: the `wizz-cerebro` skill, section `## Vault`.
14
14
 
15
15
  ## On closing
16
16