wizz-method 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/skills-registry.yaml +318 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +7 -0
- package/src/core-skills/wizz-editorial-review-prose/SKILL.md +20 -45
- package/src/core-skills/wizz-party-mode/customize.toml +894 -0
- package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +23 -12
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +47 -23
- package/src/skills-lib/ab-test-setup/SKILL.md +266 -0
- package/src/skills-lib/ab-test-setup/evals/evals.json +105 -0
- package/src/skills-lib/ab-test-setup/references/sample-size-guide.md +263 -0
- package/src/skills-lib/ab-test-setup/references/test-templates.md +277 -0
- package/src/skills-lib/ad-creative/SKILL.md +362 -0
- package/src/skills-lib/ad-creative/evals/evals.json +90 -0
- package/src/skills-lib/ad-creative/references/generative-tools.md +637 -0
- package/src/skills-lib/ad-creative/references/platform-specs.md +213 -0
- package/src/skills-lib/adversarial-reviewer/SKILL.md +122 -0
- package/src/skills-lib/agent-browser/SKILL.md +139 -0
- package/src/skills-lib/ai-seo/SKILL.md +398 -0
- package/src/skills-lib/ai-seo/evals/evals.json +90 -0
- package/src/skills-lib/ai-seo/references/content-patterns.md +285 -0
- package/src/skills-lib/ai-seo/references/platform-ranking-factors.md +152 -0
- package/src/skills-lib/analytics-tracking/SKILL.md +309 -0
- package/src/skills-lib/analytics-tracking/evals/evals.json +90 -0
- package/src/skills-lib/analytics-tracking/references/event-library.md +260 -0
- package/src/skills-lib/analytics-tracking/references/ga4-implementation.md +300 -0
- package/src/skills-lib/analytics-tracking/references/gtm-implementation.md +390 -0
- package/src/skills-lib/auth-and-secrets/SKILL.md +82 -0
- package/src/skills-lib/caching-and-queues/SKILL.md +58 -0
- package/src/skills-lib/cerebro/SKILL.md +368 -0
- package/src/skills-lib/churn-prevention/SKILL.md +424 -0
- package/src/skills-lib/churn-prevention/evals/evals.json +93 -0
- package/src/skills-lib/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/src/skills-lib/churn-prevention/references/dunning-playbook.md +408 -0
- package/src/skills-lib/cloud-and-infra/SKILL.md +36 -0
- package/src/skills-lib/cold-email/SKILL.md +158 -0
- package/src/skills-lib/cold-email/evals/evals.json +94 -0
- package/src/skills-lib/cold-email/references/benchmarks.md +83 -0
- package/src/skills-lib/cold-email/references/follow-up-sequences.md +81 -0
- package/src/skills-lib/cold-email/references/frameworks.md +90 -0
- package/src/skills-lib/cold-email/references/personalization.md +79 -0
- package/src/skills-lib/cold-email/references/subject-lines.md +53 -0
- package/src/skills-lib/competitor-alternatives/SKILL.md +256 -0
- package/src/skills-lib/competitor-alternatives/evals/evals.json +93 -0
- package/src/skills-lib/competitor-alternatives/references/content-architecture.md +271 -0
- package/src/skills-lib/competitor-alternatives/references/templates.md +223 -0
- package/src/skills-lib/content-strategy/SKILL.md +359 -0
- package/src/skills-lib/content-strategy/evals/evals.json +90 -0
- package/src/skills-lib/copy-editing/SKILL.md +447 -0
- package/src/skills-lib/copy-editing/evals/evals.json +89 -0
- package/src/skills-lib/copy-editing/references/plain-english-alternatives.md +394 -0
- package/src/skills-lib/copywriting/SKILL.md +252 -0
- package/src/skills-lib/copywriting/evals/evals.json +111 -0
- package/src/skills-lib/copywriting/references/copy-frameworks.md +344 -0
- package/src/skills-lib/copywriting/references/natural-transitions.md +272 -0
- package/src/skills-lib/database-and-deps/SKILL.md +80 -0
- package/src/skills-lib/database-scaling/SKILL.md +44 -0
- package/src/skills-lib/decision-maker/SKILL.md +534 -0
- package/src/skills-lib/desktop-security/SKILL.md +43 -0
- package/src/skills-lib/email-sequence/SKILL.md +309 -0
- package/src/skills-lib/email-sequence/evals/evals.json +93 -0
- package/src/skills-lib/email-sequence/references/copy-guidelines.md +113 -0
- package/src/skills-lib/email-sequence/references/email-types.md +515 -0
- package/src/skills-lib/email-sequence/references/sequence-templates.md +168 -0
- package/src/skills-lib/enhance-prompt/README.md +34 -0
- package/src/skills-lib/enhance-prompt/SKILL.md +204 -0
- package/src/skills-lib/enhance-prompt/references/KEYWORDS.md +114 -0
- package/src/skills-lib/find-skills/SKILL.md +181 -0
- package/src/skills-lib/form-cro/SKILL.md +429 -0
- package/src/skills-lib/form-cro/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/SKILL.md +178 -0
- package/src/skills-lib/free-tool-strategy/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/references/tool-types.md +217 -0
- package/src/skills-lib/graphify/.graphify_version +1 -0
- package/src/skills-lib/graphify/SKILL.md +1217 -0
- package/src/skills-lib/huashu-design/LICENSE +21 -0
- package/src/skills-lib/huashu-design/README.en.md +309 -0
- package/src/skills-lib/huashu-design/README.md +348 -0
- package/src/skills-lib/huashu-design/SKILL.md +631 -0
- package/src/skills-lib/huashu-design/assets/android_frame.jsx +175 -0
- package/src/skills-lib/huashu-design/assets/animations.jsx +348 -0
- package/src/skills-lib/huashu-design/assets/banner.svg +198 -0
- package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/browser_window.jsx +166 -0
- package/src/skills-lib/huashu-design/assets/deck_index.html +348 -0
- package/src/skills-lib/huashu-design/assets/deck_stage.js +420 -0
- package/src/skills-lib/huashu-design/assets/design_canvas.jsx +205 -0
- package/src/skills-lib/huashu-design/assets/director-notes-samples/launch-film-30s-sample.md +1713 -0
- package/src/skills-lib/huashu-design/assets/ios_frame.jsx +192 -0
- package/src/skills-lib/huashu-design/assets/macos_window.jsx +96 -0
- package/src/skills-lib/huashu-design/assets/narration_stage.jsx +476 -0
- package/src/skills-lib/huashu-design/assets/personal-asset-index.example.json +71 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/INDEX.md +115 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.html +235 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.html +229 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.html +288 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.html +503 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.html +600 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.html +670 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.html +382 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.html +536 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.html +497 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.html +385 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +422 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +499 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +562 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +548 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +696 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.html +372 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +460 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +494 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.html +367 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +368 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.html +459 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.html +493 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.html +556 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.html +604 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype-en.html +1145 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype.html +1142 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx-en.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design-en.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks-en.html +989 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks.html +989 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic-en.html +816 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic.html +813 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review-en.html +885 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review.html +894 -0
- package/src/skills-lib/huashu-design/demos/hero-animation-v10-en.html +1498 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/md-html-demo.html +615 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/script.md +69 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo/script.md +17 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo//344/273/200/344/271/210/346/230/257token.html +201 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol-en.html +684 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol.html +696 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer-en.html +983 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer.html +994 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor-en.html +647 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor.html +704 -0
- package/src/skills-lib/huashu-design/package-lock.json +846 -0
- package/src/skills-lib/huashu-design/package.json +8 -0
- package/src/skills-lib/huashu-design/references/animation-best-practices.md +506 -0
- package/src/skills-lib/huashu-design/references/animation-pitfalls.md +402 -0
- package/src/skills-lib/huashu-design/references/animations.md +249 -0
- package/src/skills-lib/huashu-design/references/apple-gallery-showcase.md +338 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +260 -0
- package/src/skills-lib/huashu-design/references/brand-asset-protocol.md +250 -0
- package/src/skills-lib/huashu-design/references/cinematic-patterns.md +264 -0
- package/src/skills-lib/huashu-design/references/content-guidelines.md +260 -0
- package/src/skills-lib/huashu-design/references/critique-guide.md +199 -0
- package/src/skills-lib/huashu-design/references/design-context.md +213 -0
- package/src/skills-lib/huashu-design/references/design-styles.md +370 -0
- package/src/skills-lib/huashu-design/references/editable-pptx.md +334 -0
- package/src/skills-lib/huashu-design/references/hero-animation-case-study.md +250 -0
- package/src/skills-lib/huashu-design/references/launch-film-director-notes.md +293 -0
- package/src/skills-lib/huashu-design/references/multi-perspective-parallel-case-study.md +267 -0
- package/src/skills-lib/huashu-design/references/react-setup.md +276 -0
- package/src/skills-lib/huashu-design/references/scene-templates.md +262 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +226 -0
- package/src/skills-lib/huashu-design/references/slide-decks.md +745 -0
- package/src/skills-lib/huashu-design/references/tweaks-system.md +313 -0
- package/src/skills-lib/huashu-design/references/verification.md +183 -0
- package/src/skills-lib/huashu-design/references/video-export.md +232 -0
- package/src/skills-lib/huashu-design/references/voiceover-pipeline.md +397 -0
- package/src/skills-lib/huashu-design/references/workflow.md +216 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +108 -0
- package/src/skills-lib/huashu-design/scripts/convert-formats.sh +83 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pdf.mjs +98 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pptx.mjs +107 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_stage_pdf.mjs +130 -0
- package/src/skills-lib/huashu-design/scripts/fetch_images.py +94 -0
- package/src/skills-lib/huashu-design/scripts/gen_deck_thumbs.mjs +55 -0
- package/src/skills-lib/huashu-design/scripts/html2pptx.js +1178 -0
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +127 -0
- package/src/skills-lib/huashu-design/scripts/narrate-pipeline.mjs +315 -0
- package/src/skills-lib/huashu-design/scripts/render-narration.sh +151 -0
- package/src/skills-lib/huashu-design/scripts/render-video-seek.js +238 -0
- package/src/skills-lib/huashu-design/scripts/render-video.js +289 -0
- package/src/skills-lib/huashu-design/scripts/tts-doubao.mjs +184 -0
- package/src/skills-lib/huashu-design/scripts/verify.py +154 -0
- package/src/skills-lib/huashu-design/test-prompts.json +38 -0
- package/src/skills-lib/humanizer/LICENSE +21 -0
- package/src/skills-lib/humanizer/README.md +145 -0
- package/src/skills-lib/humanizer/SKILL.md +474 -0
- package/src/skills-lib/humanizer/WARP.md +53 -0
- package/src/skills-lib/impeccable/SKILL.md +186 -0
- package/src/skills-lib/implementation-planner/SKILL.md +630 -0
- package/src/skills-lib/infrastructure/SKILL.md +34 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +313 -0
- package/src/skills-lib/launch-strategy/SKILL.md +353 -0
- package/src/skills-lib/launch-strategy/evals/evals.json +91 -0
- package/src/skills-lib/marketing-ideas/SKILL.md +167 -0
- package/src/skills-lib/marketing-ideas/evals/evals.json +90 -0
- package/src/skills-lib/marketing-ideas/references/ideas-by-category.md +366 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +455 -0
- package/src/skills-lib/marketing-psychology/evals/evals.json +88 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +485 -0
- package/src/skills-lib/onboarding-cro/SKILL.md +220 -0
- package/src/skills-lib/onboarding-cro/evals/evals.json +92 -0
- package/src/skills-lib/onboarding-cro/references/experiments.md +258 -0
- package/src/skills-lib/page-cro/SKILL.md +182 -0
- package/src/skills-lib/page-cro/evals/evals.json +111 -0
- package/src/skills-lib/page-cro/references/experiments.md +248 -0
- package/src/skills-lib/paid-ads/SKILL.md +315 -0
- package/src/skills-lib/paid-ads/evals/evals.json +90 -0
- package/src/skills-lib/paid-ads/references/ad-copy-templates.md +207 -0
- package/src/skills-lib/paid-ads/references/audience-targeting.md +243 -0
- package/src/skills-lib/paid-ads/references/platform-setup-checklists.md +277 -0
- package/src/skills-lib/paywall-upgrade-cro/SKILL.md +227 -0
- package/src/skills-lib/paywall-upgrade-cro/evals/evals.json +93 -0
- package/src/skills-lib/paywall-upgrade-cro/references/experiments.md +164 -0
- package/src/skills-lib/popup-cro/SKILL.md +453 -0
- package/src/skills-lib/popup-cro/evals/evals.json +94 -0
- package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +2090 -0
- package/src/skills-lib/pricing-strategy/SKILL.md +231 -0
- package/src/skills-lib/pricing-strategy/evals/evals.json +90 -0
- package/src/skills-lib/pricing-strategy/references/research-methods.md +152 -0
- package/src/skills-lib/pricing-strategy/references/tier-structure.md +232 -0
- package/src/skills-lib/product-marketing-context/SKILL.md +241 -0
- package/src/skills-lib/product-marketing-context/evals/evals.json +85 -0
- package/src/skills-lib/programmatic-seo/SKILL.md +238 -0
- package/src/skills-lib/programmatic-seo/evals/evals.json +94 -0
- package/src/skills-lib/programmatic-seo/references/playbooks.md +308 -0
- package/src/skills-lib/react-components/README.md +36 -0
- package/src/skills-lib/react-components/SKILL.md +51 -0
- package/src/skills-lib/react-components/examples/gold-standard-card.tsx +80 -0
- package/src/skills-lib/react-components/package-lock.json +231 -0
- package/src/skills-lib/react-components/package.json +16 -0
- package/src/skills-lib/react-components/resources/architecture-checklist.md +15 -0
- package/src/skills-lib/react-components/resources/component-template.tsx +37 -0
- package/src/skills-lib/react-components/resources/stitch-api-reference.md +14 -0
- package/src/skills-lib/react-components/resources/style-guide.json +27 -0
- package/src/skills-lib/react-components/scripts/fetch-stitch.sh +30 -0
- package/src/skills-lib/react-components/scripts/validate.js +70 -0
- package/src/skills-lib/references/premium-agency-rules.md +79 -0
- package/src/skills-lib/referral-program/SKILL.md +255 -0
- package/src/skills-lib/referral-program/evals/evals.json +89 -0
- package/src/skills-lib/referral-program/references/affiliate-programs.md +164 -0
- package/src/skills-lib/referral-program/references/program-examples.md +143 -0
- package/src/skills-lib/remotion-best-practices/SKILL.md +61 -0
- package/src/skills-lib/remotion-best-practices/rules/3d.md +86 -0
- package/src/skills-lib/remotion-best-practices/rules/animations.md +27 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/src/skills-lib/remotion-best-practices/rules/assets.md +78 -0
- package/src/skills-lib/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/src/skills-lib/remotion-best-practices/rules/audio.md +169 -0
- package/src/skills-lib/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/can-decode.md +75 -0
- package/src/skills-lib/remotion-best-practices/rules/charts.md +120 -0
- package/src/skills-lib/remotion-best-practices/rules/compositions.md +154 -0
- package/src/skills-lib/remotion-best-practices/rules/display-captions.md +184 -0
- package/src/skills-lib/remotion-best-practices/rules/extract-frames.md +229 -0
- package/src/skills-lib/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/src/skills-lib/remotion-best-practices/rules/fonts.md +152 -0
- package/src/skills-lib/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/src/skills-lib/remotion-best-practices/rules/gifs.md +141 -0
- package/src/skills-lib/remotion-best-practices/rules/images.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/src/skills-lib/remotion-best-practices/rules/light-leaks.md +73 -0
- package/src/skills-lib/remotion-best-practices/rules/lottie.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/maps.md +412 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-text.md +140 -0
- package/src/skills-lib/remotion-best-practices/rules/parameters.md +109 -0
- package/src/skills-lib/remotion-best-practices/rules/sequencing.md +118 -0
- package/src/skills-lib/remotion-best-practices/rules/sfx.md +26 -0
- package/src/skills-lib/remotion-best-practices/rules/subtitles.md +36 -0
- package/src/skills-lib/remotion-best-practices/rules/tailwind.md +11 -0
- package/src/skills-lib/remotion-best-practices/rules/text-animations.md +20 -0
- package/src/skills-lib/remotion-best-practices/rules/timing.md +179 -0
- package/src/skills-lib/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/transitions.md +197 -0
- package/src/skills-lib/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/src/skills-lib/remotion-best-practices/rules/trimming.md +51 -0
- package/src/skills-lib/remotion-best-practices/rules/videos.md +171 -0
- package/src/skills-lib/remotion-best-practices/rules/voiceover.md +99 -0
- package/src/skills-lib/revops/SKILL.md +343 -0
- package/src/skills-lib/revops/evals/evals.json +91 -0
- package/src/skills-lib/revops/references/automation-playbooks.md +290 -0
- package/src/skills-lib/revops/references/lifecycle-definitions.md +278 -0
- package/src/skills-lib/revops/references/routing-rules.md +203 -0
- package/src/skills-lib/revops/references/scoring-models.md +247 -0
- package/src/skills-lib/sales-enablement/SKILL.md +349 -0
- package/src/skills-lib/sales-enablement/evals/evals.json +91 -0
- package/src/skills-lib/sales-enablement/references/deck-frameworks.md +263 -0
- package/src/skills-lib/sales-enablement/references/demo-scripts.md +355 -0
- package/src/skills-lib/sales-enablement/references/objection-library.md +270 -0
- package/src/skills-lib/sales-enablement/references/one-pager-templates.md +208 -0
- package/src/skills-lib/schema-markup/SKILL.md +179 -0
- package/src/skills-lib/schema-markup/evals/evals.json +87 -0
- package/src/skills-lib/schema-markup/references/schema-examples.md +398 -0
- package/src/skills-lib/seo-audit/SKILL.md +412 -0
- package/src/skills-lib/seo-audit/evals/evals.json +136 -0
- package/src/skills-lib/seo-audit/references/ai-writing-detection.md +200 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +359 -0
- package/src/skills-lib/signup-flow-cro/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/SKILL.md +357 -0
- package/src/skills-lib/site-architecture/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/references/mermaid-templates.md +216 -0
- package/src/skills-lib/site-architecture/references/navigation-patterns.md +305 -0
- package/src/skills-lib/site-architecture/references/site-type-templates.md +293 -0
- package/src/skills-lib/social-content/SKILL.md +278 -0
- package/src/skills-lib/social-content/evals/evals.json +92 -0
- package/src/skills-lib/social-content/references/platforms.md +170 -0
- package/src/skills-lib/social-content/references/post-templates.md +177 -0
- package/src/skills-lib/social-content/references/reverse-engineering.md +195 -0
- package/src/skills-lib/supabase-postgres-best-practices/AGENTS.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/CLAUDE.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/README.md +116 -0
- package/src/skills-lib/supabase-postgres-best-practices/SKILL.md +64 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_contributing.md +171 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_template.md +34 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/src/skills-lib/taste-redesign/SKILL.md +178 -0
- package/src/skills-lib/taste-skill/SKILL.md +1206 -0
- package/src/skills-lib/ui-component-curator/SKILL.md +102 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +377 -0
- package/src/skills-lib/ui-ux-pro-max/data/charts.csv +26 -0
- package/src/skills-lib/ui-ux-pro-max/data/colors.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/icons.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/landing.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/data/products.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/src/skills-lib/ui-ux-pro-max/data/styles.csv +68 -0
- package/src/skills-lib/ui-ux-pro-max/data/typography.csv +58 -0
- package/src/skills-lib/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/src/skills-lib/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/core.py +253 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/search.py +114 -0
- package/src/skills-lib/web-security/SKILL.md +147 -0
- package/src/skills-lib/wizz-router/SKILL.md +257 -0
- package/src/squads/README.md +39 -0
- package/src/squads/advisory-board/README.md +34 -0
- package/src/squads/advisory-board/agents/board-chair.md +161 -0
- package/src/squads/advisory-board/agents/brene-brown.md +296 -0
- package/src/squads/advisory-board/agents/charlie-munger.md +590 -0
- package/src/squads/advisory-board/agents/derek-sivers.md +268 -0
- package/src/squads/advisory-board/agents/naval-ravikant.md +251 -0
- package/src/squads/advisory-board/agents/patrick-lencioni.md +394 -0
- package/src/squads/advisory-board/agents/peter-thiel.md +269 -0
- package/src/squads/advisory-board/agents/ray-dalio.md +587 -0
- package/src/squads/advisory-board/agents/reid-hoffman.md +278 -0
- package/src/squads/advisory-board/agents/simon-sinek.md +291 -0
- package/src/squads/advisory-board/agents/yvon-chouinard.md +275 -0
- package/src/squads/advisory-board/squad.yaml +50 -0
- package/src/squads/brand-squad/README.md +60 -0
- package/src/squads/brand-squad/agents/al-ries.md +175 -0
- package/src/squads/brand-squad/agents/alina-wheeler.md +184 -0
- package/src/squads/brand-squad/agents/archetype-consultant.md +215 -0
- package/src/squads/brand-squad/agents/brand-chief.md +158 -0
- package/src/squads/brand-squad/agents/byron-sharp.md +169 -0
- package/src/squads/brand-squad/agents/david-aaker.md +166 -0
- package/src/squads/brand-squad/agents/denise-yohn.md +172 -0
- package/src/squads/brand-squad/agents/domain-scout.md +135 -0
- package/src/squads/brand-squad/agents/donald-miller.md +179 -0
- package/src/squads/brand-squad/agents/emily-heyward.md +147 -0
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +189 -0
- package/src/squads/brand-squad/agents/kevin-keller.md +199 -0
- package/src/squads/brand-squad/agents/marty-neumeier.md +170 -0
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +180 -0
- package/src/squads/brand-squad/agents/naming-strategist.md +171 -0
- package/src/squads/brand-squad/squad.yaml +117 -0
- package/src/squads/c-level-squad/README.md +29 -0
- package/src/squads/c-level-squad/agents/caio-architect.md +235 -0
- package/src/squads/c-level-squad/agents/cio-engineer.md +209 -0
- package/src/squads/c-level-squad/agents/cmo-architect.md +208 -0
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +193 -0
- package/src/squads/c-level-squad/agents/cto-architect.md +194 -0
- package/src/squads/c-level-squad/agents/vision-chief.md +201 -0
- package/src/squads/c-level-squad/squad.yaml +45 -0
- package/src/squads/claude-code-mastery/README.md +146 -0
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +554 -0
- package/src/squads/claude-code-mastery/agents/config-engineer.md +865 -0
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +1013 -0
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +791 -0
- package/src/squads/claude-code-mastery/agents/project-integrator.md +1196 -0
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +931 -0
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +1250 -0
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +1008 -0
- package/src/squads/copy-squad/README.md +65 -0
- package/src/squads/copy-squad/agents/andre-chaperon.md +206 -0
- package/src/squads/copy-squad/agents/ben-settle.md +194 -0
- package/src/squads/copy-squad/agents/claude-hopkins.md +182 -0
- package/src/squads/copy-squad/agents/clayton-makepeace.md +225 -0
- package/src/squads/copy-squad/agents/copy-chief.md +166 -0
- package/src/squads/copy-squad/agents/dan-kennedy.md +202 -0
- package/src/squads/copy-squad/agents/dan-koe.md +223 -0
- package/src/squads/copy-squad/agents/david-deutsch.md +197 -0
- package/src/squads/copy-squad/agents/david-ogilvy.md +198 -0
- package/src/squads/copy-squad/agents/eugene-schwartz.md +238 -0
- package/src/squads/copy-squad/agents/frank-kern.md +195 -0
- package/src/squads/copy-squad/agents/gary-bencivenga.md +197 -0
- package/src/squads/copy-squad/agents/gary-halbert.md +219 -0
- package/src/squads/copy-squad/agents/jim-rutz.md +193 -0
- package/src/squads/copy-squad/agents/joe-sugarman.md +234 -0
- package/src/squads/copy-squad/agents/john-carlton.md +203 -0
- package/src/squads/copy-squad/agents/jon-benson.md +196 -0
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +188 -0
- package/src/squads/copy-squad/agents/robert-collier.md +183 -0
- package/src/squads/copy-squad/agents/russell-brunson.md +229 -0
- package/src/squads/copy-squad/agents/ry-schwartz.md +185 -0
- package/src/squads/copy-squad/agents/stefan-georgi.md +188 -0
- package/src/squads/copy-squad/agents/todd-brown.md +171 -0
- package/src/squads/copy-squad/squad.yaml +87 -0
- package/src/squads/cybersecurity/README.md +38 -0
- package/src/squads/cybersecurity/agents/busterer.md +108 -0
- package/src/squads/cybersecurity/agents/cartographer.md +114 -0
- package/src/squads/cybersecurity/agents/chris-sanders.md +205 -0
- package/src/squads/cybersecurity/agents/command-generator.md +121 -0
- package/src/squads/cybersecurity/agents/cyber-chief.md +120 -0
- package/src/squads/cybersecurity/agents/dirber.md +111 -0
- package/src/squads/cybersecurity/agents/fuzzer.md +121 -0
- package/src/squads/cybersecurity/agents/georgia-weidman.md +178 -0
- package/src/squads/cybersecurity/agents/jim-manico.md +182 -0
- package/src/squads/cybersecurity/agents/marcus-carey.md +200 -0
- package/src/squads/cybersecurity/agents/omar-santos.md +206 -0
- package/src/squads/cybersecurity/agents/peter-kim.md +179 -0
- package/src/squads/cybersecurity/agents/ripper.md +121 -0
- package/src/squads/cybersecurity/agents/rogue.md +116 -0
- package/src/squads/cybersecurity/agents/shannon-runner.md +108 -0
- package/src/squads/cybersecurity/squad.yaml +56 -0
- package/src/squads/data-squad/README.md +30 -0
- package/src/squads/data-squad/agents/avinash-kaushik.md +268 -0
- package/src/squads/data-squad/agents/data-chief.md +167 -0
- package/src/squads/data-squad/agents/david-spinks.md +277 -0
- package/src/squads/data-squad/agents/nick-mehta.md +294 -0
- package/src/squads/data-squad/agents/peter-fader.md +246 -0
- package/src/squads/data-squad/agents/sean-ellis.md +303 -0
- package/src/squads/data-squad/agents/wes-kao.md +268 -0
- package/src/squads/data-squad/squad.yaml +46 -0
- package/src/squads/design-squad/README.md +31 -0
- package/src/squads/design-squad/agents/brad-frost.md +185 -0
- package/src/squads/design-squad/agents/dan-mall.md +178 -0
- package/src/squads/design-squad/agents/dave-malouf.md +198 -0
- package/src/squads/design-squad/agents/design-chief.md +109 -0
- package/src/squads/design-squad/agents/design-system-architect.md +109 -0
- package/src/squads/design-squad/agents/ui-engineer.md +102 -0
- package/src/squads/design-squad/agents/ux-designer.md +105 -0
- package/src/squads/design-squad/agents/visual-generator.md +108 -0
- package/src/squads/design-squad/squad.yaml +48 -0
- package/src/squads/hormozi-squad/README.md +39 -0
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +159 -0
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +111 -0
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +179 -0
- package/src/squads/hormozi-squad/agents/hormozi-content.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +152 -0
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +177 -0
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +160 -0
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +198 -0
- package/src/squads/hormozi-squad/agents/hormozi-models.md +191 -0
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +197 -0
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +151 -0
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +175 -0
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +160 -0
- package/src/squads/hormozi-squad/squad.yaml +60 -0
- package/src/squads/movement/README.md +29 -0
- package/src/squads/movement/agents/analista-de-impacto.md +350 -0
- package/src/squads/movement/agents/estrategista-de-ciclo.md +301 -0
- package/src/squads/movement/agents/fenomenologo.md +169 -0
- package/src/squads/movement/agents/identitario.md +265 -0
- package/src/squads/movement/agents/manifestador.md +279 -0
- package/src/squads/movement/agents/movement-architect.md +210 -0
- package/src/squads/movement/agents/movement-chief.md +135 -0
- package/src/squads/movement/squad.yaml +45 -0
- package/src/squads/storytelling/README.md +35 -0
- package/src/squads/storytelling/agents/blake-snyder.md +225 -0
- package/src/squads/storytelling/agents/dan-harmon.md +167 -0
- package/src/squads/storytelling/agents/joseph-campbell.md +184 -0
- package/src/squads/storytelling/agents/keith-johnstone.md +157 -0
- package/src/squads/storytelling/agents/kindra-hall.md +162 -0
- package/src/squads/storytelling/agents/marshall-ganz.md +167 -0
- package/src/squads/storytelling/agents/matthew-dicks.md +152 -0
- package/src/squads/storytelling/agents/nancy-duarte.md +154 -0
- package/src/squads/storytelling/agents/oren-klaff.md +166 -0
- package/src/squads/storytelling/agents/park-howell.md +152 -0
- package/src/squads/storytelling/agents/shawn-coyne.md +208 -0
- package/src/squads/storytelling/agents/story-chief.md +155 -0
- package/src/squads/storytelling/squad.yaml +52 -0
- package/src/squads/traffic-masters/README.md +39 -0
- package/src/squads/traffic-masters/agents/ad-midas.md +149 -0
- package/src/squads/traffic-masters/agents/ads-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/creative-analyst.md +142 -0
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +174 -0
- package/src/squads/traffic-masters/agents/fiscal.md +144 -0
- package/src/squads/traffic-masters/agents/kasim-aslam.md +158 -0
- package/src/squads/traffic-masters/agents/media-buyer.md +159 -0
- package/src/squads/traffic-masters/agents/molly-pittman.md +185 -0
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +157 -0
- package/src/squads/traffic-masters/agents/pedro-sobral.md +158 -0
- package/src/squads/traffic-masters/agents/performance-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/pixel-specialist.md +144 -0
- package/src/squads/traffic-masters/agents/ralph-burns.md +163 -0
- package/src/squads/traffic-masters/agents/scale-optimizer.md +144 -0
- package/src/squads/traffic-masters/agents/tom-breeze.md +175 -0
- package/src/squads/traffic-masters/agents/traffic-chief.md +97 -0
- package/src/squads/traffic-masters/squad.yaml +59 -0
- package/tools/installer/commands/install.js +12 -0
- package/tools/installer/core/config.js +20 -0
- package/tools/installer/core/installer.js +100 -0
- package/tools/installer/core/manifest-generator.js +14 -3
- package/tools/installer/modules/cli-config.js +145 -0
- package/tools/installer/modules/mcp-config.js +137 -0
- package/tools/installer/modules/skills-lib.js +135 -0
- package/tools/installer/ui.js +210 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Traffic Chief
|
|
2
|
+
|
|
3
|
+
> ACTIVATION-NOTICE: You are the Traffic Chief — orchestrator of the Traffic Masters Squad. You do NOT buy media or write ads. You DIAGNOSE traffic problems, ROUTE them to the correct specialist, and REVIEW their output. You think in platforms, funnels, metrics, and creative. Every traffic problem maps to a platform expert or functional specialist.
|
|
4
|
+
|
|
5
|
+
## COMPLETE AGENT DEFINITION
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
agent:
|
|
9
|
+
name: "Traffic Chief"
|
|
10
|
+
id: traffic-chief
|
|
11
|
+
title: "Traffic Masters Orchestrator"
|
|
12
|
+
icon: "🎯"
|
|
13
|
+
tier: 0
|
|
14
|
+
squad: traffic-masters
|
|
15
|
+
role: orchestrator
|
|
16
|
+
|
|
17
|
+
persona:
|
|
18
|
+
role: "Traffic Problem Diagnostician & Squad Router"
|
|
19
|
+
identity: "The central nervous system of the Traffic Masters Squad. Fluent in all major ad platforms and traffic strategies. Diagnoses whether a traffic problem is platform-specific, creative-related, targeting-based, budget-driven, or funnel-connected. Routes to the right expert or specialist."
|
|
20
|
+
style: "Analytical, metric-driven, diagnostic. Gets to the root cause fast. Speaks in ROAS, CPA, CTR, and funnel stages."
|
|
21
|
+
|
|
22
|
+
core_diagnostic:
|
|
23
|
+
step_1: "What's the ACTUAL problem? (Not enough traffic? Wrong traffic? Traffic that doesn't convert?)"
|
|
24
|
+
step_2: "Which platform(s)? (Facebook, Google, YouTube, TikTok, LinkedIn, multi-platform)"
|
|
25
|
+
step_3: "Where in the funnel? (Top = awareness/reach, Middle = consideration/clicks, Bottom = conversion)"
|
|
26
|
+
step_4: "What's the budget level? (<$1K/mo, $1K-$10K, $10K-$100K, $100K+)"
|
|
27
|
+
step_5: "Route to the right specialist."
|
|
28
|
+
|
|
29
|
+
routing_logic:
|
|
30
|
+
platform_specific:
|
|
31
|
+
facebook_meta:
|
|
32
|
+
signals: ["Facebook ads", "Meta ads", "Instagram ads", "Reels ads"]
|
|
33
|
+
route_to: [molly-pittman, depesh-mandalia, ralph-burns]
|
|
34
|
+
youtube:
|
|
35
|
+
signals: ["YouTube ads", "pre-roll", "TrueView", "video ads on YouTube"]
|
|
36
|
+
route_to: tom-breeze
|
|
37
|
+
google:
|
|
38
|
+
signals: ["Google Ads", "Search ads", "Performance Max", "Shopping ads"]
|
|
39
|
+
route_to: kasim-aslam
|
|
40
|
+
brazil_latam:
|
|
41
|
+
signals: ["Brazilian market", "LATAM", "Portuguese-speaking", "gestor de trafego"]
|
|
42
|
+
route_to: pedro-sobral
|
|
43
|
+
|
|
44
|
+
function_specific:
|
|
45
|
+
creative_problem:
|
|
46
|
+
signals: ["ads not getting clicks", "creative fatigue", "need better ad creative", "low CTR"]
|
|
47
|
+
route_to: [ad-midas, creative-analyst]
|
|
48
|
+
scaling_problem:
|
|
49
|
+
signals: ["can't scale spend", "CPA increases with budget", "diminishing returns"]
|
|
50
|
+
route_to: [scale-optimizer, depesh-mandalia]
|
|
51
|
+
tracking_problem:
|
|
52
|
+
signals: ["attribution issues", "pixel not firing", "iOS tracking", "conversion tracking broken"]
|
|
53
|
+
route_to: pixel-specialist
|
|
54
|
+
analysis_problem:
|
|
55
|
+
signals: ["don't know what's working", "need audit", "can't read the data"]
|
|
56
|
+
route_to: [performance-analyst, ads-analyst]
|
|
57
|
+
budget_problem:
|
|
58
|
+
signals: ["budget allocation", "cashflow for ads", "ROAS targets", "profitability"]
|
|
59
|
+
route_to: fiscal
|
|
60
|
+
execution_problem:
|
|
61
|
+
signals: ["need someone to set up campaigns", "campaign structure", "media buying"]
|
|
62
|
+
route_to: media-buyer
|
|
63
|
+
|
|
64
|
+
quality_review:
|
|
65
|
+
checks:
|
|
66
|
+
- "Is the offer validated before spending on ads?"
|
|
67
|
+
- "Is tracking properly set up?"
|
|
68
|
+
- "Are we testing creatives systematically?"
|
|
69
|
+
- "Is the CPA sustainable relative to LTV?"
|
|
70
|
+
- "Are we scaling profitably, not just spending more?"
|
|
71
|
+
- "Is there a clear funnel from click to conversion?"
|
|
72
|
+
|
|
73
|
+
commands:
|
|
74
|
+
- name: diagnose
|
|
75
|
+
description: "Diagnose the traffic problem and recommend the right specialist"
|
|
76
|
+
- name: route
|
|
77
|
+
description: "Route a specific request to the correct traffic agent"
|
|
78
|
+
- name: review
|
|
79
|
+
description: "Review any traffic strategy for completeness"
|
|
80
|
+
- name: roster
|
|
81
|
+
description: "Show all 16 Traffic Masters agents and their specialties"
|
|
82
|
+
- name: metrics
|
|
83
|
+
description: "Quick metrics health check on any campaign"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## How the Traffic Chief Routes
|
|
89
|
+
|
|
90
|
+
1. **Listen to the problem.** What's actually happening with their traffic/ads?
|
|
91
|
+
2. **Identify the platform.** Facebook? Google? YouTube? Multi-platform?
|
|
92
|
+
3. **Identify the function.** Creative? Targeting? Scaling? Tracking? Budget?
|
|
93
|
+
4. **Check the budget level.** Strategy differs at $1K/mo vs. $100K/mo.
|
|
94
|
+
5. **Route to specialist.** Platform expert for strategy, functional agent for execution.
|
|
95
|
+
6. **Review output.** Does it meet ROAS targets? Is it scalable?
|
|
96
|
+
|
|
97
|
+
The Chief NEVER writes ads, buys media, or sets up campaigns. The Chief DIAGNOSES and ROUTES.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: traffic-masters
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
short-title: "Traffic Masters"
|
|
4
|
+
description: "Squad de 16 agentes especialistas em trafego pago. Facebook, YouTube, Google Ads, media buying, creative analysis, scaling, tracking."
|
|
5
|
+
author: "Synkra AIOS"
|
|
6
|
+
license: MIT
|
|
7
|
+
slashPrefix: "traffic-masters"
|
|
8
|
+
|
|
9
|
+
aios:
|
|
10
|
+
minVersion: "4.0.0"
|
|
11
|
+
type: squad
|
|
12
|
+
|
|
13
|
+
tags:
|
|
14
|
+
- traffic
|
|
15
|
+
- ads
|
|
16
|
+
- facebook
|
|
17
|
+
- google
|
|
18
|
+
- youtube
|
|
19
|
+
- media-buying
|
|
20
|
+
- creative
|
|
21
|
+
- scaling
|
|
22
|
+
- tracking
|
|
23
|
+
|
|
24
|
+
components:
|
|
25
|
+
agents:
|
|
26
|
+
- traffic-chief.md
|
|
27
|
+
- molly-pittman.md
|
|
28
|
+
- ralph-burns.md
|
|
29
|
+
- depesh-mandalia.md
|
|
30
|
+
- nicholas-kusmich.md
|
|
31
|
+
- tom-breeze.md
|
|
32
|
+
- kasim-aslam.md
|
|
33
|
+
- pedro-sobral.md
|
|
34
|
+
- ad-midas.md
|
|
35
|
+
- media-buyer.md
|
|
36
|
+
- performance-analyst.md
|
|
37
|
+
- creative-analyst.md
|
|
38
|
+
- scale-optimizer.md
|
|
39
|
+
- pixel-specialist.md
|
|
40
|
+
- ads-analyst.md
|
|
41
|
+
- fiscal.md
|
|
42
|
+
tasks:
|
|
43
|
+
- analyze-performance.md
|
|
44
|
+
- audit-ad-account.md
|
|
45
|
+
- create-ad-creative.md
|
|
46
|
+
- create-ad-strategy.md
|
|
47
|
+
- diagnose.md
|
|
48
|
+
- manage-budget.md
|
|
49
|
+
- review.md
|
|
50
|
+
- scale-campaign.md
|
|
51
|
+
- setup-tracking.md
|
|
52
|
+
workflows:
|
|
53
|
+
- wf-account-audit.yaml
|
|
54
|
+
- wf-campaign-launch.yaml
|
|
55
|
+
checklists:
|
|
56
|
+
- output-quality.md
|
|
57
|
+
|
|
58
|
+
config:
|
|
59
|
+
extends: extend
|
|
@@ -18,6 +18,18 @@ module.exports = {
|
|
|
18
18
|
'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Required for fresh non-interactive (--yes) installs. Run with --list-tools to see all valid IDs.',
|
|
19
19
|
],
|
|
20
20
|
['--list-tools', 'Print all supported tool/IDE IDs (with target directories) and exit.'],
|
|
21
|
+
[
|
|
22
|
+
'--areas <areas>',
|
|
23
|
+
'Comma-separated global-skill areas to install (e.g. "designer,copy,ads"), or "all". Only applies when the wizz module is selected. Default interactive prompt.',
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
'--mcps <mcps>',
|
|
27
|
+
'Comma-separated MCP ids to write to .mcp.json for the chosen areas, "all", or "none". Unlisted ones are recommended as `claude mcp add` commands. Only with the wizz module.',
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
'--clis <clis>',
|
|
31
|
+
'Comma-separated CLI ids to install for the chosen areas (e.g. "agent-browser,rtk"), "all", or "none". Already-installed ones are skipped; unlisted ones are recommended. Only with the wizz module.',
|
|
32
|
+
],
|
|
21
33
|
[
|
|
22
34
|
'--set <spec>',
|
|
23
35
|
'Set a module config option non-interactively. Spec format: <module>.<key>=<value> (e.g. bmm.project_knowledge=research). Repeatable. Run --list-options to see available keys.',
|
|
@@ -7,6 +7,9 @@ class Config {
|
|
|
7
7
|
directory,
|
|
8
8
|
modules,
|
|
9
9
|
ides,
|
|
10
|
+
selectedAreas,
|
|
11
|
+
mcpPlan,
|
|
12
|
+
cliPlan,
|
|
10
13
|
skipPrompts,
|
|
11
14
|
verbose,
|
|
12
15
|
actionType,
|
|
@@ -19,6 +22,20 @@ class Config {
|
|
|
19
22
|
this.directory = directory;
|
|
20
23
|
this.modules = Object.freeze([...modules]);
|
|
21
24
|
this.ides = Object.freeze([...ides]);
|
|
25
|
+
// Global-skills areas the user chose to install (from skills-registry.yaml).
|
|
26
|
+
// Empty means "all areas" when skills-lib is installed; see installSkillsLib.
|
|
27
|
+
this.selectedAreas = Object.freeze([...(selectedAreas || [])]);
|
|
28
|
+
// MCP plan resolved from the registry for the chosen areas:
|
|
29
|
+
// toWrite — merged into the project .mcp.json (placeholder secrets)
|
|
30
|
+
// toRecommend — printed as `claude mcp add ...` for the user to run later
|
|
31
|
+
// Empty/absent on quick-update or non-wizz installs. See modules/mcp-config.js.
|
|
32
|
+
this.mcpPlan = mcpPlan || { toWrite: [], toRecommend: [] };
|
|
33
|
+
// CLI plan resolved from the registry for the chosen areas:
|
|
34
|
+
// toInstall — `install` command run during the install (opt-in)
|
|
35
|
+
// toRecommend — printed for the user to run later
|
|
36
|
+
// alreadyInstalled — detected on PATH, reported and skipped
|
|
37
|
+
// Empty/absent on quick-update or non-wizz installs. See modules/cli-config.js.
|
|
38
|
+
this.cliPlan = cliPlan || { toInstall: [], toRecommend: [], alreadyInstalled: [] };
|
|
22
39
|
this.skipPrompts = skipPrompts;
|
|
23
40
|
this.verbose = verbose;
|
|
24
41
|
this.actionType = actionType;
|
|
@@ -50,6 +67,9 @@ class Config {
|
|
|
50
67
|
directory: userInput.directory,
|
|
51
68
|
modules,
|
|
52
69
|
ides: userInput.skipIde ? [] : [...(userInput.ides || [])],
|
|
70
|
+
selectedAreas: userInput.selectedAreas || [],
|
|
71
|
+
mcpPlan: userInput.mcpPlan || { toWrite: [], toRecommend: [] },
|
|
72
|
+
cliPlan: userInput.cliPlan || { toInstall: [], toRecommend: [], alreadyInstalled: [] },
|
|
53
73
|
skipPrompts: userInput.skipPrompts || false,
|
|
54
74
|
verbose: userInput.verbose || false,
|
|
55
75
|
actionType: userInput.actionType,
|
|
@@ -2,6 +2,9 @@ const path = require('node:path');
|
|
|
2
2
|
const fs = require('../fs-native');
|
|
3
3
|
const { Manifest } = require('./manifest');
|
|
4
4
|
const { OfficialModules } = require('../modules/official-modules');
|
|
5
|
+
const { installSkillsLib } = require('../modules/skills-lib');
|
|
6
|
+
const { writeMcpConfig, renderAddCommand } = require('../modules/mcp-config');
|
|
7
|
+
const { installClis, renderInstallCommand } = require('../modules/cli-config');
|
|
5
8
|
const { IdeManager } = require('../ide/manager');
|
|
6
9
|
const { FileOps } = require('../file-ops');
|
|
7
10
|
const { Config } = require('./config');
|
|
@@ -297,6 +300,103 @@ class Installer {
|
|
|
297
300
|
this.installedFiles.add(paths.centralConfig());
|
|
298
301
|
this.installedFiles.add(paths.centralUserConfig());
|
|
299
302
|
|
|
303
|
+
// Install the global skills library (area-filtered) BEFORE manifests, so
|
|
304
|
+
// collectSkills discovers `_wizz/skills-lib/<id>` and the verbatim pipeline
|
|
305
|
+
// carries them into each IDE. Gated on the `wizz` module; additive, so a
|
|
306
|
+
// failure here warns and never aborts the install.
|
|
307
|
+
if (!config.isQuickUpdate() && (config.modules || []).includes('wizz')) {
|
|
308
|
+
message('Installing global skills...');
|
|
309
|
+
try {
|
|
310
|
+
const result = await installSkillsLib({
|
|
311
|
+
wizzDir: paths.wizzDir,
|
|
312
|
+
selectedAreas: config.selectedAreas || [],
|
|
313
|
+
trackFile: (p) => this.installedFiles.add(p),
|
|
314
|
+
});
|
|
315
|
+
if (result.registry) {
|
|
316
|
+
addResult('Global skills', 'ok', `${result.copied} installed`);
|
|
317
|
+
}
|
|
318
|
+
if (result.skipped.length > 0) {
|
|
319
|
+
await prompts.log.warn(`Skills no registry sem pasta em skills-lib (ignoradas): ${result.skipped.join(', ')}`);
|
|
320
|
+
}
|
|
321
|
+
} catch (error) {
|
|
322
|
+
await prompts.log.warn(`Falha ao instalar skills globais: ${error.message}`);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Configure recommended MCP servers for the chosen areas. The user's
|
|
326
|
+
// multiselect already split them into write vs recommend; we merge the
|
|
327
|
+
// chosen ones into .mcp.json (additive) and print `claude mcp add` for
|
|
328
|
+
// the rest. Additive + placeholder-secret, so it never clobbers config
|
|
329
|
+
// or leaks tokens; a failure warns and never aborts the install.
|
|
330
|
+
const mcpPlan = config.mcpPlan || { toWrite: [], toRecommend: [] };
|
|
331
|
+
try {
|
|
332
|
+
const toWrite = mcpPlan.toWrite || [];
|
|
333
|
+
if (toWrite.length > 0) {
|
|
334
|
+
message('Configuring MCP servers...');
|
|
335
|
+
// Intentionally NOT tracked in installedFiles: .mcp.json is a
|
|
336
|
+
// shared, user-owned config we merge into (it may hold the user's
|
|
337
|
+
// own servers). Tracking it would expose it to uninstall removal
|
|
338
|
+
// and manifest hash-management, which must never touch it.
|
|
339
|
+
const mcpResult = await writeMcpConfig({
|
|
340
|
+
projectDir: paths.projectRoot,
|
|
341
|
+
mcps: toWrite,
|
|
342
|
+
});
|
|
343
|
+
if (mcpResult.added.length > 0) {
|
|
344
|
+
addResult('MCP servers', 'ok', `${mcpResult.added.join(', ')} → .mcp.json`);
|
|
345
|
+
}
|
|
346
|
+
if (mcpResult.skipped.length > 0) {
|
|
347
|
+
await prompts.log.info(`MCPs já presentes no .mcp.json (mantidos): ${mcpResult.skipped.join(', ')}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
const toRecommend = mcpPlan.toRecommend || [];
|
|
351
|
+
if (toRecommend.length > 0) {
|
|
352
|
+
const lines = toRecommend.map((m) => ` ${renderAddCommand(m)}`).join('\n');
|
|
353
|
+
await prompts.log.info(`MCPs recomendados (rode quando quiser):\n${lines}`);
|
|
354
|
+
}
|
|
355
|
+
// Remind only when a written server expects secrets the user must fill.
|
|
356
|
+
const needsSecrets = toWrite.filter((m) => m.server && m.server.env && Object.keys(m.server.env).length > 0);
|
|
357
|
+
if (needsSecrets.length > 0) {
|
|
358
|
+
const vars = [...new Set(needsSecrets.flatMap((m) => Object.values(m.server.env)))];
|
|
359
|
+
await prompts.log.warn(`Defina as variáveis de ambiente dos MCPs antes de usar: ${vars.join(', ')}`);
|
|
360
|
+
}
|
|
361
|
+
} catch (error) {
|
|
362
|
+
await prompts.log.warn(`Falha ao configurar MCPs: ${error.message}`);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Install/recommend the CLIs the agents shell out to (agent-browser,
|
|
366
|
+
// rtk). The ui already detected what's present and split the rest into
|
|
367
|
+
// install-now vs recommend; here we run the chosen install commands and
|
|
368
|
+
// print the rest. Install runs system commands (npm install -g, curl |
|
|
369
|
+
// sh) — a failure warns and never aborts the install. CLIs are not
|
|
370
|
+
// tracked in installedFiles (they live outside the project tree).
|
|
371
|
+
const cliPlan = config.cliPlan || { toInstall: [], toRecommend: [], alreadyInstalled: [] };
|
|
372
|
+
try {
|
|
373
|
+
const alreadyInstalled = cliPlan.alreadyInstalled || [];
|
|
374
|
+
if (alreadyInstalled.length > 0) {
|
|
375
|
+
await prompts.log.info(`CLIs já instalados (mantidos): ${alreadyInstalled.map((c) => c.id).join(', ')}`);
|
|
376
|
+
}
|
|
377
|
+
const toInstall = cliPlan.toInstall || [];
|
|
378
|
+
if (toInstall.length > 0) {
|
|
379
|
+
message('Installing CLIs...');
|
|
380
|
+
const cliResult = await installClis({ clis: toInstall });
|
|
381
|
+
if (cliResult.installed.length > 0) {
|
|
382
|
+
addResult('CLIs', 'ok', `instalados: ${cliResult.installed.join(', ')}`);
|
|
383
|
+
}
|
|
384
|
+
for (const f of cliResult.failed) {
|
|
385
|
+
await prompts.log.warn(
|
|
386
|
+
`Falha ao instalar CLI ${f.id}: ${f.error}. Rode manualmente: ${renderInstallCommand(toInstall.find((c) => c.id === f.id) || {})}`,
|
|
387
|
+
);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const toRecommend = cliPlan.toRecommend || [];
|
|
391
|
+
if (toRecommend.length > 0) {
|
|
392
|
+
const lines = toRecommend.map((c) => ` ${renderInstallCommand(c)}`).join('\n');
|
|
393
|
+
await prompts.log.info(`CLIs recomendados (rode quando quiser):\n${lines}`);
|
|
394
|
+
}
|
|
395
|
+
} catch (error) {
|
|
396
|
+
await prompts.log.warn(`Falha ao configurar CLIs: ${error.message}`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
300
400
|
message('Generating manifests...');
|
|
301
401
|
const manifestGen = new ManifestGenerator();
|
|
302
402
|
const preservedModules = originalConfig._preserveModules || [];
|
|
@@ -112,7 +112,15 @@ class ManifestGenerator {
|
|
|
112
112
|
this.skillClaimedDirs = new Set();
|
|
113
113
|
const debug = process.env.WIZZ_DEBUG_MANIFEST === 'true';
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
// Walk every module, plus the global skills pool (`skills-lib`) when present.
|
|
116
|
+
// skills-lib is intentionally excluded from this.modules (no versioning), so
|
|
117
|
+
// we append it here as a scan target only.
|
|
118
|
+
const scanTargets = [...this.updatedModules];
|
|
119
|
+
if (await fs.pathExists(path.join(this.wizzDir, 'skills-lib'))) {
|
|
120
|
+
scanTargets.push('skills-lib');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const moduleName of scanTargets) {
|
|
116
124
|
const modulePath = path.join(this.wizzDir, moduleName);
|
|
117
125
|
if (!(await fs.pathExists(modulePath))) continue;
|
|
118
126
|
|
|
@@ -752,8 +760,11 @@ class ManifestGenerator {
|
|
|
752
760
|
const entries = await fs.readdir(wizzDir, { withFileTypes: true });
|
|
753
761
|
|
|
754
762
|
for (const entry of entries) {
|
|
755
|
-
// Skip if not a directory or is a special directory
|
|
756
|
-
|
|
763
|
+
// Skip if not a directory or is a special directory.
|
|
764
|
+
// `skills-lib` is the global skills pool (no module.yaml, not versioned);
|
|
765
|
+
// it is walked explicitly by collectSkills, but must NOT be treated as a
|
|
766
|
+
// module here or writeMainManifest/writeCentralConfig would try to version it.
|
|
767
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === '_config' || entry.name === 'skills-lib') {
|
|
757
768
|
continue;
|
|
758
769
|
}
|
|
759
770
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Resolves + installs the command-line tools the agents shell out to.
|
|
2
|
+
//
|
|
3
|
+
// Sibling of modules/mcp-config.js. Where MCPs are *servers* merged into the
|
|
4
|
+
// project's .mcp.json, CLIs are *binaries* the agents call directly (e.g.
|
|
5
|
+
// `agent-browser` for browser verification, `rtk` for token economy). The
|
|
6
|
+
// skills-registry.yaml is the single source of truth for both: each AREA may
|
|
7
|
+
// declare a `clis:` list, plus a top-level `cli_utility:` for cross-cutting
|
|
8
|
+
// tools. Each entry has:
|
|
9
|
+
// id — the command name (used to detect + label)
|
|
10
|
+
// when — when this CLI helps (same disambiguation role as skills' `when`)
|
|
11
|
+
// check — command run to detect if it is ALREADY installed (e.g. `x --version`)
|
|
12
|
+
// install — command run to install it (e.g. `npm install -g x`, `curl … | sh`)
|
|
13
|
+
//
|
|
14
|
+
// Design rules (deliberately conservative, mirroring mcp-config):
|
|
15
|
+
// - DETECT FIRST: never reinstall something already on PATH. `check` decides.
|
|
16
|
+
// - INSTALL IS OPT-IN: the caller (the interactive multiselect / --clis flag)
|
|
17
|
+
// decides what to actually install; everything else is merely recommended
|
|
18
|
+
// by printing its `install` command. Nothing runs without an explicit choice.
|
|
19
|
+
// - NO-OP WHEN ABSENT: missing registry / no CLIs => empty, runs nothing.
|
|
20
|
+
// - FAILURE NEVER THROWS UPSTREAM: installClis collects failures and returns
|
|
21
|
+
// them so a bad network / EACCES never aborts the whole install.
|
|
22
|
+
//
|
|
23
|
+
// The install/check commands come from our own registry (not user input), and
|
|
24
|
+
// running them (npm install -g, curl | sh) is inherently a trust-the-source
|
|
25
|
+
// operation — hence install is opt-in and recommend-only by default.
|
|
26
|
+
|
|
27
|
+
const { exec } = require('node:child_process');
|
|
28
|
+
const { promisify } = require('node:util');
|
|
29
|
+
|
|
30
|
+
const execAsync = promisify(exec);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Default command runner: runs a shell command, never throws. A non-zero exit
|
|
34
|
+
* resolves to `{ ok: false, ... }` so callers branch on `ok`, not exceptions.
|
|
35
|
+
* Uses a shell so registry commands with pipes (`curl … | sh`) work as written.
|
|
36
|
+
* @param {string} command - Full shell command to run
|
|
37
|
+
* @param {{timeoutMs?: number}} [opts]
|
|
38
|
+
* @returns {Promise<{ok: boolean, stdout: string, stderr: string}>}
|
|
39
|
+
*/
|
|
40
|
+
async function defaultExec(command, { timeoutMs = 300_000 } = {}) {
|
|
41
|
+
try {
|
|
42
|
+
const { stdout, stderr } = await execAsync(command, { timeout: timeoutMs });
|
|
43
|
+
return { ok: true, stdout: stdout || '', stderr: stderr || '' };
|
|
44
|
+
} catch (error) {
|
|
45
|
+
return { ok: false, stdout: error.stdout || '', stderr: error.stderr || error.message || '' };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the recommended CLI entries for the chosen areas, deduped by id.
|
|
51
|
+
* Empty / undefined / containing 'all' means every area. The cross-cutting
|
|
52
|
+
* `cli_utility:` tools are always included. Entries missing `id` or `install`
|
|
53
|
+
* are dropped — a CLI we cannot install is not actionable.
|
|
54
|
+
*
|
|
55
|
+
* @param {Object} registry - Parsed skills-registry.yaml
|
|
56
|
+
* @param {string[]} [selectedAreas] - Area keys to resolve
|
|
57
|
+
* @returns {Array<{id: string, when: string, check: string, install: string, areas: string[]}>}
|
|
58
|
+
*/
|
|
59
|
+
function resolveClis(registry, selectedAreas) {
|
|
60
|
+
const byId = new Map();
|
|
61
|
+
const areas = (registry && registry.areas) || {};
|
|
62
|
+
const wantAll = !selectedAreas || selectedAreas.length === 0 || selectedAreas.includes('all');
|
|
63
|
+
const chosen = wantAll ? Object.keys(areas) : selectedAreas;
|
|
64
|
+
|
|
65
|
+
const add = (cli, areaKey) => {
|
|
66
|
+
if (!cli || !cli.id || !cli.install) return; // not actionable without an install command
|
|
67
|
+
const existing = byId.get(cli.id);
|
|
68
|
+
if (existing) {
|
|
69
|
+
if (areaKey && !existing.areas.includes(areaKey)) existing.areas.push(areaKey);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
byId.set(cli.id, {
|
|
73
|
+
id: cli.id,
|
|
74
|
+
when: cli.when || '',
|
|
75
|
+
check: cli.check || '',
|
|
76
|
+
install: cli.install,
|
|
77
|
+
areas: areaKey ? [areaKey] : [],
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
for (const area of chosen) {
|
|
82
|
+
for (const cli of (areas[area] && areas[area].clis) || []) add(cli, area);
|
|
83
|
+
}
|
|
84
|
+
// Cross-cutting tools are offered regardless of area selection.
|
|
85
|
+
for (const cli of (registry && registry.cli_utility) || []) add(cli, null);
|
|
86
|
+
|
|
87
|
+
return [...byId.values()];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The copy-pasteable install command for a CLI entry — used to recommend the
|
|
92
|
+
* tools the user chose NOT to install (nothing is lost; they run it later).
|
|
93
|
+
* @param {{install?: string}} cli - Resolved CLI entry
|
|
94
|
+
* @returns {string} The install command, or '' if none.
|
|
95
|
+
*/
|
|
96
|
+
function renderInstallCommand(cli) {
|
|
97
|
+
return (cli && cli.install) || '';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Annotate each CLI with `installed: boolean` by running its `check` command.
|
|
102
|
+
* Immutable: returns new objects, never mutates the input. An entry without a
|
|
103
|
+
* `check` cannot be verified, so it is reported as not installed (we offer it
|
|
104
|
+
* rather than silently assume it is present).
|
|
105
|
+
*
|
|
106
|
+
* @param {Array<Object>} clis - Resolved CLI entries
|
|
107
|
+
* @param {Function} [exec] - Injected runner (command, opts) => {ok,...}
|
|
108
|
+
* @returns {Promise<Array<Object>>} Copies with an added `installed` flag.
|
|
109
|
+
*/
|
|
110
|
+
async function detectClis(clis, exec = defaultExec) {
|
|
111
|
+
return Promise.all(
|
|
112
|
+
(clis || []).map(async (cli) => {
|
|
113
|
+
if (!cli.check) return { ...cli, installed: false };
|
|
114
|
+
const res = await exec(cli.check, { timeoutMs: 5000 });
|
|
115
|
+
return { ...cli, installed: !!res.ok };
|
|
116
|
+
}),
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Run the install command for each CLI, collecting outcomes. Never throws:
|
|
122
|
+
* a failed install (network, EACCES, missing command) lands in `failed` with
|
|
123
|
+
* its error so the caller can warn and continue the broader install.
|
|
124
|
+
*
|
|
125
|
+
* @param {Object} args
|
|
126
|
+
* @param {Array<{id: string, install?: string}>} args.clis - Entries to install
|
|
127
|
+
* @param {Function} [args.exec] - Injected runner (command, opts) => {ok,...}
|
|
128
|
+
* @returns {Promise<{installed: string[], failed: Array<{id: string, error: string}>}>}
|
|
129
|
+
*/
|
|
130
|
+
async function installClis({ clis, exec = defaultExec }) {
|
|
131
|
+
const installed = [];
|
|
132
|
+
const failed = [];
|
|
133
|
+
for (const cli of clis || []) {
|
|
134
|
+
if (!cli.install) {
|
|
135
|
+
failed.push({ id: cli.id, error: 'sem comando de instalação no registry' });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const res = await exec(cli.install, { timeoutMs: 300_000 });
|
|
139
|
+
if (res.ok) installed.push(cli.id);
|
|
140
|
+
else failed.push({ id: cli.id, error: (res.stderr || 'falha desconhecida').trim() });
|
|
141
|
+
}
|
|
142
|
+
return { installed, failed };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
module.exports = { resolveClis, renderInstallCommand, detectClis, installClis, defaultExec };
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Configures the recommended MCP servers for the chosen skill areas.
|
|
2
|
+
//
|
|
3
|
+
// The skills-registry.yaml is the single source of truth: besides mapping each
|
|
4
|
+
// AREA to its skills, it declares an `mcps:` list per area (plus a top-level
|
|
5
|
+
// `mcp_utility:` for cross-cutting servers like context7). This module reads
|
|
6
|
+
// that registry, resolves the user's chosen areas to a deduped set of MCP
|
|
7
|
+
// entries, and MERGES the selected ones into the project's `.mcp.json`.
|
|
8
|
+
//
|
|
9
|
+
// Design rules (kept deliberately conservative):
|
|
10
|
+
// - ADDITIVE: an existing server with the same id is never overwritten. The
|
|
11
|
+
// user's hand-tuned config always wins; we only ADD what is missing.
|
|
12
|
+
// - SECRETS STAY PLACEHOLDERS: `env` values come straight from the registry
|
|
13
|
+
// as `${VAR}` placeholders. We never read, infer, or write a real token.
|
|
14
|
+
// - NO-OP WHEN ABSENT: missing registry / no MCPs => returns empty, writes
|
|
15
|
+
// nothing. Always safe to call.
|
|
16
|
+
//
|
|
17
|
+
// The caller decides WHICH ids to write (the interactive multiselect) and which
|
|
18
|
+
// to merely recommend; this module exposes the resolution + merge primitives and
|
|
19
|
+
// a `claude mcp add` command renderer for the recommend path.
|
|
20
|
+
|
|
21
|
+
const path = require('node:path');
|
|
22
|
+
const fs = require('../fs-native');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the recommended MCP entries for the chosen areas, deduped by id.
|
|
26
|
+
* Empty / undefined / containing 'all' means every area. The cross-cutting
|
|
27
|
+
* `mcp_utility:` servers are always included.
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} registry - Parsed skills-registry.yaml
|
|
30
|
+
* @param {string[]} [selectedAreas] - Area keys to resolve
|
|
31
|
+
* @returns {Array<{id: string, when: string, server: Object, areas: string[]}>}
|
|
32
|
+
* One entry per unique MCP id, carrying which area(s) recommended it.
|
|
33
|
+
*/
|
|
34
|
+
function resolveMcps(registry, selectedAreas) {
|
|
35
|
+
const byId = new Map();
|
|
36
|
+
const areas = (registry && registry.areas) || {};
|
|
37
|
+
const wantAll = !selectedAreas || selectedAreas.length === 0 || selectedAreas.includes('all');
|
|
38
|
+
const chosen = wantAll ? Object.keys(areas) : selectedAreas;
|
|
39
|
+
|
|
40
|
+
const add = (mcp, areaKey) => {
|
|
41
|
+
if (!mcp || !mcp.id || !mcp.server) return;
|
|
42
|
+
const existing = byId.get(mcp.id);
|
|
43
|
+
if (existing) {
|
|
44
|
+
if (areaKey && !existing.areas.includes(areaKey)) existing.areas.push(areaKey);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
byId.set(mcp.id, {
|
|
48
|
+
id: mcp.id,
|
|
49
|
+
when: mcp.when || '',
|
|
50
|
+
server: mcp.server,
|
|
51
|
+
areas: areaKey ? [areaKey] : [],
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
for (const area of chosen) {
|
|
56
|
+
for (const mcp of (areas[area] && areas[area].mcps) || []) add(mcp, area);
|
|
57
|
+
}
|
|
58
|
+
// Cross-cutting servers are offered regardless of area selection.
|
|
59
|
+
for (const mcp of (registry && registry.mcp_utility) || []) add(mcp, null);
|
|
60
|
+
|
|
61
|
+
return [...byId.values()];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Normalize a registry `server` block into the shape written to `.mcp.json`.
|
|
66
|
+
* Drops empty `args`/`env` so the output stays minimal and diff-friendly.
|
|
67
|
+
* @param {Object} server - { command, args?, env? } from the registry
|
|
68
|
+
* @returns {Object} Sanitized server config
|
|
69
|
+
*/
|
|
70
|
+
function toServerConfig(server) {
|
|
71
|
+
const out = { command: server.command };
|
|
72
|
+
if (Array.isArray(server.args) && server.args.length > 0) out.args = [...server.args];
|
|
73
|
+
if (server.env && Object.keys(server.env).length > 0) out.env = { ...server.env };
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Render the `claude mcp add` command for an MCP entry — used to recommend
|
|
79
|
+
* servers the user chose NOT to write (nothing is lost; they can add later).
|
|
80
|
+
* @param {{id: string, server: Object}} mcp - Resolved MCP entry
|
|
81
|
+
* @returns {string} A copy-pasteable shell command
|
|
82
|
+
*/
|
|
83
|
+
function renderAddCommand({ id, server }) {
|
|
84
|
+
const envFlags = Object.entries(server.env || {})
|
|
85
|
+
.map(([k, v]) => `-e ${k}=${v}`)
|
|
86
|
+
.join(' ');
|
|
87
|
+
const args = (server.args || []).join(' ');
|
|
88
|
+
const cmd = `${server.command}${args ? ` ${args}` : ''}`;
|
|
89
|
+
return `claude mcp add ${id}${envFlags ? ` ${envFlags}` : ''} -- ${cmd}`.replaceAll(/\s+/g, ' ').trim();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Merge the chosen MCP entries into `<projectDir>/.mcp.json`, additively.
|
|
94
|
+
* Reads any existing file (preserving unknown keys and existing servers),
|
|
95
|
+
* adds only ids not already present, and writes back pretty-printed JSON.
|
|
96
|
+
*
|
|
97
|
+
* @param {Object} args
|
|
98
|
+
* @param {string} args.projectDir - Project root where `.mcp.json` lives
|
|
99
|
+
* @param {Array<{id: string, server: Object}>} args.mcps - Entries to write
|
|
100
|
+
* @param {(absPath: string) => void} [args.trackFile] - Record the written file
|
|
101
|
+
* @returns {Promise<{added: string[], skipped: string[], file: string|null}>}
|
|
102
|
+
* `added` = ids newly written, `skipped` = ids already present (left intact).
|
|
103
|
+
*/
|
|
104
|
+
async function writeMcpConfig({ projectDir, mcps, trackFile = () => {} }) {
|
|
105
|
+
if (!mcps || mcps.length === 0) return { added: [], skipped: [], file: null };
|
|
106
|
+
|
|
107
|
+
const file = path.join(projectDir, '.mcp.json');
|
|
108
|
+
let config = {};
|
|
109
|
+
if (await fs.pathExists(file)) {
|
|
110
|
+
try {
|
|
111
|
+
config = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
112
|
+
} catch (error) {
|
|
113
|
+
throw new Error(`.mcp.json existe mas não é JSON válido: ${error.message}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (!config || typeof config !== 'object') config = {};
|
|
117
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') config.mcpServers = {};
|
|
118
|
+
|
|
119
|
+
const added = [];
|
|
120
|
+
const skipped = [];
|
|
121
|
+
for (const mcp of mcps) {
|
|
122
|
+
if (Object.prototype.hasOwnProperty.call(config.mcpServers, mcp.id)) {
|
|
123
|
+
skipped.push(mcp.id); // never clobber the user's existing server
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
config.mcpServers[mcp.id] = toServerConfig(mcp.server);
|
|
127
|
+
added.push(mcp.id);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (added.length === 0) return { added, skipped, file };
|
|
131
|
+
|
|
132
|
+
await fs.writeJson(file, config, { spaces: 2 });
|
|
133
|
+
trackFile(file);
|
|
134
|
+
return { added, skipped, file };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
module.exports = { resolveMcps, toServerConfig, renderAddCommand, writeMcpConfig };
|