@jairodri/huckleberry-cli 1.0.2 → 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/README.md +85 -0
- package/agents/cos.json +2 -5
- package/agents/hermes/AGENTS.md +25 -49
- package/agents/hermes/fix-kimaki/SKILL.md +19 -92
- package/agents/hermes/hermes-fixer.md +44 -74
- package/agents/hermes.json +6 -18
- package/kanban/SKILL.md +18 -18
- package/kanban/package.json +1 -1
- package/kanban/src/dispatcher.mjs +1 -1
- package/kanban/templates/blog-social-campaign.yaml +6 -2
- package/kanban/templates/social-campaign.yaml +9 -4
- package/mcp/jev-calibration.mjs +335 -0
- package/mcp/jev-client.mjs +119 -0
- package/mcp/jev-thresholds.json +27 -0
- package/package.json +13 -9
- package/scripts/doctor-watchdog.sh +73 -0
- package/scripts/install-services.sh +34 -27
- package/scripts/self-improve-weekly.sh +34 -0
- package/scripts/sync-skills.mjs +121 -0
- package/skills/ab-test-setup/SKILL.md +266 -0
- package/skills/ab-test-setup/evals/evals.json +105 -0
- package/skills/ab-test-setup/references/sample-size-guide.md +263 -0
- package/skills/ab-test-setup/references/test-templates.md +277 -0
- package/skills/agent-reach/SKILL.md +132 -0
- package/skills/agent-reach/references/career.md +29 -0
- package/skills/agent-reach/references/dev.md +62 -0
- package/skills/agent-reach/references/search.md +33 -0
- package/skills/agent-reach/references/social.md +232 -0
- package/skills/agent-reach/references/video.md +130 -0
- package/skills/agent-reach/references/web.md +50 -0
- package/skills/ai-agent-seo/SKILL.md +450 -0
- package/skills/ai-cold-email-intelligence/SKILL.md +54 -0
- package/skills/ai-cold-email-intelligence/references/prompts.md +21 -0
- package/skills/ai-consensus-builder/SKILL.md +324 -0
- package/skills/ai-seo/SKILL.md +399 -0
- package/skills/ai-seo/evals/evals.json +90 -0
- package/skills/ai-seo/references/content-patterns.md +284 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +152 -0
- package/skills/ai-visibility-audit/SKILL.md +322 -0
- package/skills/analytics-tracking/SKILL.md +309 -0
- package/skills/analytics-tracking/evals/evals.json +90 -0
- package/skills/analytics-tracking/references/event-library.md +260 -0
- package/skills/analytics-tracking/references/ga4-implementation.md +300 -0
- package/skills/analytics-tracking/references/gtm-implementation.md +390 -0
- package/skills/article-generator/SKILL.md +216 -0
- package/skills/auto-indexing/SKILL.md +179 -0
- package/skills/auto-indexing/scripts/auto-indexing.js +257 -0
- package/skills/auto-skill/SKILL.md +151 -0
- package/skills/auto-skill/correction-queue.js +102 -0
- package/skills/auto-skill/dedup.js +97 -0
- package/skills/auto-skill/skill-router.js +224 -0
- package/skills/autoresearch/SKILL.md +334 -0
- package/skills/autoresearch/autoresearch-autoresearch/SKILL.md.baseline +329 -0
- package/skills/autoresearch/autoresearch-autoresearch/changelog.md +34 -0
- package/skills/autoresearch/autoresearch-autoresearch/dashboard.html +116 -0
- package/skills/autoresearch/autoresearch-autoresearch/evals.md +39 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.json +44 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.tsv +3 -0
- package/skills/autoresearch/eval-guide.md +121 -0
- package/skills/b2b-cold-outreach/SKILL.md +322 -0
- package/skills/birdclaw/SKILL.md +82 -0
- package/skills/brainstorm/SKILL.md +168 -0
- package/skills/brand-kit-playground/SKILL.md +312 -0
- package/skills/brand-kit-playground/references/html-architecture.md +316 -0
- package/skills/brand-kit-playground/references/steal-patterns.md +88 -0
- package/skills/brand-voice/SKILL.md +223 -0
- package/skills/brand-voice/references/honesty-as-positioning.md +60 -0
- package/skills/brand-voice/references/voice-modes.md +1158 -0
- package/skills/business-advisory-council/README.md +136 -0
- package/skills/business-advisory-council/SKILL.md +94 -0
- package/skills/business-advisory-council/business-advisory-council.py +492 -0
- package/skills/business-advisory-council/discord-components-decision.json +8 -0
- package/skills/business-advisory-council/examples/steve-conley-partnership.json +6 -0
- package/skills/business-advisory-council/steve-conley-call-brief.json +6 -0
- package/skills/churn-prevention/SKILL.md +305 -0
- package/skills/churn-prevention/evals/evals.json +93 -0
- package/skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/skills/churn-prevention/references/dunning-playbook.md +408 -0
- package/skills/claw-compactor/LICENSE +21 -0
- package/skills/claw-compactor/README.md +459 -0
- package/skills/claw-compactor/SKILL.md +329 -0
- package/skills/claw-compactor/benchmark/RESULTS.md +104 -0
- package/skills/claw-compactor/benchmark/__init__.py +1 -0
- package/skills/claw-compactor/benchmark/compressors.py +520 -0
- package/skills/claw-compactor/benchmark/data/sample_01_devops.json +82 -0
- package/skills/claw-compactor/benchmark/data/sample_02_trading.json +54 -0
- package/skills/claw-compactor/benchmark/data/sample_03_ml_short.json +38 -0
- package/skills/claw-compactor/benchmark/data/sample_04_mixed_long.json +318 -0
- package/skills/claw-compactor/benchmark/data/sample_05_sysadmin.json +56 -0
- package/skills/claw-compactor/benchmark/evaluate.py +278 -0
- package/skills/claw-compactor/benchmark/report.py +241 -0
- package/skills/claw-compactor/benchmark/results/benchmark_results.json +405 -0
- package/skills/claw-compactor/benchmark/run_benchmark.py +238 -0
- package/skills/claw-compactor/engram.yaml +49 -0
- package/skills/claw-compactor/proxy/README.md +87 -0
- package/skills/claw-compactor/proxy/dashboard.html +804 -0
- package/skills/claw-compactor/proxy/event-log.mjs +213 -0
- package/skills/claw-compactor/proxy/fair-queue.mjs +288 -0
- package/skills/claw-compactor/proxy/metrics-store.mjs +425 -0
- package/skills/claw-compactor/proxy/package-lock.json +125 -0
- package/skills/claw-compactor/proxy/package.json +15 -0
- package/skills/claw-compactor/proxy/portal.html +360 -0
- package/skills/claw-compactor/proxy/process-registry.mjs +447 -0
- package/skills/claw-compactor/proxy/rate-limiter.mjs +117 -0
- package/skills/claw-compactor/proxy/redis-client.mjs +75 -0
- package/skills/claw-compactor/proxy/retry.mjs +182 -0
- package/skills/claw-compactor/proxy/server.mjs +2100 -0
- package/skills/claw-compactor/proxy/session-affinity.mjs +177 -0
- package/skills/claw-compactor/proxy/start.sh +23 -0
- package/skills/claw-compactor/proxy/test/event-log.test.mjs +237 -0
- package/skills/claw-compactor/proxy/test/helpers.mjs +103 -0
- package/skills/claw-compactor/proxy/test/integration.test.mjs +297 -0
- package/skills/claw-compactor/proxy/test/metrics-store.test.mjs +243 -0
- package/skills/claw-compactor/proxy/test/process-registry.test.mjs +390 -0
- package/skills/claw-compactor/proxy/test/rate-limiter.test.mjs +121 -0
- package/skills/claw-compactor/proxy/test/redis-client.test.mjs +62 -0
- package/skills/claw-compactor/proxy/test/token-tracker.test.mjs +200 -0
- package/skills/claw-compactor/proxy/token-tracker.mjs +482 -0
- package/skills/claw-compactor/pyproject.toml +26 -0
- package/skills/claw-compactor/references/README.md +44 -0
- package/skills/claw-compactor/references/architecture.md +197 -0
- package/skills/claw-compactor/references/benchmarks.md +94 -0
- package/skills/claw-compactor/references/compression-prompts.md +39 -0
- package/skills/claw-compactor/references/compression-techniques.md +219 -0
- package/skills/claw-compactor/references/testing.md +160 -0
- package/skills/claw-compactor/scripts/audit_memory.py +216 -0
- package/skills/claw-compactor/scripts/compress_memory.py +236 -0
- package/skills/claw-compactor/scripts/compressed_context.py +280 -0
- package/skills/claw-compactor/scripts/dedup_memory.py +147 -0
- package/skills/claw-compactor/scripts/dictionary_compress.py +170 -0
- package/skills/claw-compactor/scripts/engram-auto.sh +152 -0
- package/skills/claw-compactor/scripts/engram_auto.py +695 -0
- package/skills/claw-compactor/scripts/engram_cli.py +474 -0
- package/skills/claw-compactor/scripts/estimate_tokens.py +131 -0
- package/skills/claw-compactor/scripts/generate_summary_tiers.py +292 -0
- package/skills/claw-compactor/scripts/lib/__init__.py +34 -0
- package/skills/claw-compactor/scripts/lib/config.py +289 -0
- package/skills/claw-compactor/scripts/lib/dedup.py +119 -0
- package/skills/claw-compactor/scripts/lib/dictionary.py +281 -0
- package/skills/claw-compactor/scripts/lib/engram.py +793 -0
- package/skills/claw-compactor/scripts/lib/engram_prompts.py +175 -0
- package/skills/claw-compactor/scripts/lib/engram_storage.py +254 -0
- package/skills/claw-compactor/scripts/lib/exceptions.py +24 -0
- package/skills/claw-compactor/scripts/lib/markdown.py +312 -0
- package/skills/claw-compactor/scripts/lib/rle.py +165 -0
- package/skills/claw-compactor/scripts/lib/tokenizer_optimizer.py +188 -0
- package/skills/claw-compactor/scripts/lib/tokens.py +68 -0
- package/skills/claw-compactor/scripts/mem_compress.py +788 -0
- package/skills/claw-compactor/scripts/observation_compressor.py +346 -0
- package/skills/claw-compactor/tests/__init__.py +0 -0
- package/skills/claw-compactor/tests/conftest.py +94 -0
- package/skills/claw-compactor/tests/test_audit_comprehensive.py +123 -0
- package/skills/claw-compactor/tests/test_audit_memory.py +67 -0
- package/skills/claw-compactor/tests/test_benchmark.py +122 -0
- package/skills/claw-compactor/tests/test_cli_commands.py +228 -0
- package/skills/claw-compactor/tests/test_compress_memory.py +109 -0
- package/skills/claw-compactor/tests/test_compress_memory_comprehensive.py +191 -0
- package/skills/claw-compactor/tests/test_compressed_context.py +145 -0
- package/skills/claw-compactor/tests/test_config.py +54 -0
- package/skills/claw-compactor/tests/test_dedup_memory.py +124 -0
- package/skills/claw-compactor/tests/test_dictionary.py +327 -0
- package/skills/claw-compactor/tests/test_dictionary_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_engram.py +1091 -0
- package/skills/claw-compactor/tests/test_engram_auto.py +529 -0
- package/skills/claw-compactor/tests/test_error_handling.py +194 -0
- package/skills/claw-compactor/tests/test_estimate_tokens.py +99 -0
- package/skills/claw-compactor/tests/test_generate_summary_tiers.py +105 -0
- package/skills/claw-compactor/tests/test_integration.py +249 -0
- package/skills/claw-compactor/tests/test_lib_dedup.py +135 -0
- package/skills/claw-compactor/tests/test_lib_markdown.py +388 -0
- package/skills/claw-compactor/tests/test_lib_tokens.py +82 -0
- package/skills/claw-compactor/tests/test_main_entry.py +176 -0
- package/skills/claw-compactor/tests/test_markdown_advanced.py +284 -0
- package/skills/claw-compactor/tests/test_new_features.py +77 -0
- package/skills/claw-compactor/tests/test_observation_comprehensive.py +261 -0
- package/skills/claw-compactor/tests/test_observation_compressor.py +128 -0
- package/skills/claw-compactor/tests/test_performance.py +172 -0
- package/skills/claw-compactor/tests/test_pipeline.py +109 -0
- package/skills/claw-compactor/tests/test_real_workspace.py +161 -0
- package/skills/claw-compactor/tests/test_rle.py +114 -0
- package/skills/claw-compactor/tests/test_rle_comprehensive.py +151 -0
- package/skills/claw-compactor/tests/test_roundtrip.py +253 -0
- package/skills/claw-compactor/tests/test_roundtrip_comprehensive.py +192 -0
- package/skills/claw-compactor/tests/test_tiers_comprehensive.py +171 -0
- package/skills/claw-compactor/tests/test_token_economics.py +237 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer.py +175 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_tokens.py +27 -0
- package/skills/cmo/CHANGELOG.md +61 -0
- package/skills/cmo/SKILL.md +500 -0
- package/skills/cmo/references/ai-slop-patterns.md +56 -0
- package/skills/cmo/references/analytics-guide.md +152 -0
- package/skills/cmo/references/ideas-library.md +197 -0
- package/skills/cmo/rules/brand-file-map.md +198 -0
- package/skills/cmo/rules/brand-memory.md +158 -0
- package/skills/cmo/rules/cli-runtime-index.md +95 -0
- package/skills/cmo/rules/command-reference.md +167 -0
- package/skills/cmo/rules/communication.md +15 -0
- package/skills/cmo/rules/context-switch.md +101 -0
- package/skills/cmo/rules/ecosystem.md +125 -0
- package/skills/cmo/rules/error-recovery.md +98 -0
- package/skills/cmo/rules/learning-loop.md +170 -0
- package/skills/cmo/rules/monorepo.md +78 -0
- package/skills/cmo/rules/output-format.md +124 -0
- package/skills/cmo/rules/persona.md +15 -0
- package/skills/cmo/rules/playbooks.md +327 -0
- package/skills/cmo/rules/progressive-enhancement.md +231 -0
- package/skills/cmo/rules/publish-index.md +106 -0
- package/skills/cmo/rules/quality-gate.md +90 -0
- package/skills/cmo/rules/recency-grounding.md +124 -0
- package/skills/cmo/rules/safety.md +80 -0
- package/skills/cmo/rules/studio-api-index.md +138 -0
- package/skills/cmo/rules/studio-integration.md +147 -0
- package/skills/cmo/rules/sub-agents.md +167 -0
- package/skills/cold-email/SKILL.md +240 -0
- package/skills/cold-email/evals/evals.json +94 -0
- package/skills/cold-email/references/benchmarks.md +83 -0
- package/skills/cold-email/references/follow-up-sequences.md +81 -0
- package/skills/cold-email/references/frameworks.md +90 -0
- package/skills/cold-email/references/personalization.md +79 -0
- package/skills/cold-email/references/subject-lines.md +53 -0
- package/skills/competitive-intel/SKILL.md +433 -0
- package/skills/competitive-intel/references/competitive-frameworks.md +145 -0
- package/skills/competitor-alternatives/SKILL.md +362 -0
- package/skills/competitor-alternatives/evals/evals.json +93 -0
- package/skills/competitor-alternatives/references/content-architecture.md +271 -0
- package/skills/competitor-alternatives/references/templates.md +223 -0
- package/skills/concreteness-fixer/SKILL.md +483 -0
- package/skills/concreteness-fixer/scripts/validation/concreteness-validator.js +221 -0
- package/skills/concreteness-fixer/utils/execFileNoThrow.js +16 -0
- package/skills/content-atomizer/SKILL.md +424 -0
- package/skills/content-atomizer/references/hook-strategies.md +56 -0
- package/skills/content-atomizer/references/platform-specs.md +118 -0
- package/skills/content-atomizer/references/platforms/bluesky.md +64 -0
- package/skills/content-atomizer/references/platforms/instagram.md +77 -0
- package/skills/content-atomizer/references/platforms/linkedin.md +120 -0
- package/skills/content-atomizer/references/platforms/reddit.md +73 -0
- package/skills/content-atomizer/references/platforms/threads.md +64 -0
- package/skills/content-atomizer/references/platforms/tiktok.md +55 -0
- package/skills/content-atomizer/references/platforms/twitter.md +123 -0
- package/skills/content-atomizer/references/platforms/youtube.md +56 -0
- package/skills/content-atomizer/references/tweet-patterns.md +40 -0
- package/skills/content-repost-manager/SKILL.md +245 -0
- package/skills/content-repost-manager/scripts/content-repost-scan.py +133 -0
- package/skills/context-recovery/.clawdhub/origin.json +7 -0
- package/skills/context-recovery/SKILL.md +198 -0
- package/skills/context-recovery/_meta.json +6 -0
- package/skills/conversion-flow-cro/SKILL.md +248 -0
- package/skills/conversion-flow-cro/references/flow-benchmarks.md +158 -0
- package/skills/copy-editing/SKILL.md +474 -0
- package/skills/copy-editing/evals/evals.json +89 -0
- package/skills/copy-editing/references/plain-english-alternatives.md +394 -0
- package/skills/copywriting/SKILL.md +349 -0
- package/skills/copywriting/evals/evals.json +111 -0
- package/skills/copywriting/references/awareness-level-guide.md +227 -0
- package/skills/copywriting/references/copy-frameworks.md +389 -0
- package/skills/copywriting/references/natural-transitions.md +272 -0
- package/skills/creative/SKILL.md +365 -0
- package/skills/creative/modes/ad-creative.md +1748 -0
- package/skills/creative/modes/product-photo.md +1520 -0
- package/skills/creative/modes/product-video.md +1657 -0
- package/skills/creative/modes/social-graphics.md +1511 -0
- package/skills/creative/modes/talking-head.md +2208 -0
- package/skills/creative/references/VISUAL_INTELLIGENCE.md +1233 -0
- package/skills/deep-serp-article/SKILL.md +677 -0
- package/skills/deep-serp-article/SKILL.md.bak +530 -0
- package/skills/earned-media/SKILL.md +260 -0
- package/skills/email-sequences/SKILL.md +446 -0
- package/skills/email-sequences/references/sequence-templates.md +1217 -0
- package/skills/firecrawl/.skill-meta.json +13 -0
- package/skills/firecrawl/SKILL.md +154 -0
- package/skills/firecrawl/rules/install.md +63 -0
- package/skills/firecrawl/rules/security.md +26 -0
- package/skills/form-cro/SKILL.md +429 -0
- package/skills/form-cro/evals/evals.json +90 -0
- package/skills/free-tool-strategy/SKILL.md +325 -0
- package/skills/free-tool-strategy/evals/evals.json +90 -0
- package/skills/free-tool-strategy/references/tool-types.md +253 -0
- package/skills/frontend-slides/SKILL.md +248 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +347 -0
- package/skills/frontend-slides/animation-patterns.md +110 -0
- package/skills/frontend-slides/html-template.md +347 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/guardrail-framework/SKILL.md +319 -0
- package/skills/hook-generator/SKILL.md +438 -0
- package/skills/hook-generator/database/2026-PLATFORM-RESEARCH.md +211 -0
- package/skills/hook-generator/database/instagram-hooks.json +591 -0
- package/skills/hook-generator/database/linkedin-hooks.json +502 -0
- package/skills/hook-generator/database/medium-hooks.json +181 -0
- package/skills/hook-generator/database/tiktok-hooks.json +337 -0
- package/skills/hook-generator/database/twitter-hooks.json +567 -0
- package/skills/hook-generator/database/youtube-hooks.json +275 -0
- package/skills/hook-generator/package-lock.json +24 -0
- package/skills/hook-generator/package.json +5 -0
- package/skills/hook-generator/references/hook-generation-system.md +257 -0
- package/skills/hook-generator/references/hook-performance-analysis.json +153 -0
- package/skills/hook-generator/references/hooks-library.md +128 -0
- package/skills/hook-generator/references/platform-hook-frameworks.md +275 -0
- package/skills/hook-generator/scripts/generate-hooks-unified.js +722 -0
- package/skills/hook-generator/scripts/generate-hooks.js +225 -0
- package/skills/hook-generator/scripts/generate.sh +36 -0
- package/skills/hook-generator/scripts/ralph-hook-enhancer.js +864 -0
- package/skills/hook-generator/scripts/test-gemini-output.js +51 -0
- package/skills/humanizer/README.md +120 -0
- package/skills/humanizer/SKILL.md +699 -0
- package/skills/image-gen/SKILL.md +277 -0
- package/skills/image-gen/references/prompt-patterns.md +114 -0
- package/skills/image-gen/references/visual-metaphors.md +51 -0
- package/skills/impeccable/SKILL.md +86 -0
- package/skills/impeccable/reference/adapt.md +312 -0
- package/skills/impeccable/reference/adapt.native.md +58 -0
- package/skills/impeccable/reference/android.md +40 -0
- package/skills/impeccable/reference/animate.md +86 -0
- package/skills/impeccable/reference/audit.md +136 -0
- package/skills/impeccable/reference/audit.native.md +139 -0
- package/skills/impeccable/reference/bolder.md +31 -0
- package/skills/impeccable/reference/clarify.md +94 -0
- package/skills/impeccable/reference/colorize.md +86 -0
- package/skills/impeccable/reference/craft-floor.md +42 -0
- package/skills/impeccable/reference/craft.md +5 -0
- package/skills/impeccable/reference/critique.md +788 -0
- package/skills/impeccable/reference/degraded/asset-producer.md +90 -0
- package/skills/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/impeccable/reference/degraded/finish-reviewer.md +37 -0
- package/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/impeccable/reference/delight.md +70 -0
- package/skills/impeccable/reference/distill.md +111 -0
- package/skills/impeccable/reference/doctor.md +53 -0
- package/skills/impeccable/reference/document.md +416 -0
- package/skills/impeccable/reference/extract.md +69 -0
- package/skills/impeccable/reference/harden.md +336 -0
- package/skills/impeccable/reference/hooks.md +105 -0
- package/skills/impeccable/reference/init.md +125 -0
- package/skills/impeccable/reference/ios.md +45 -0
- package/skills/impeccable/reference/layout.md +84 -0
- package/skills/impeccable/reference/live-setup.md +102 -0
- package/skills/impeccable/reference/live.md +323 -0
- package/skills/impeccable/reference/new-work.md +110 -0
- package/skills/impeccable/reference/onboard.md +234 -0
- package/skills/impeccable/reference/operate.md +61 -0
- package/skills/impeccable/reference/optimize.md +258 -0
- package/skills/impeccable/reference/overdrive.md +127 -0
- package/skills/impeccable/reference/polish.md +97 -0
- package/skills/impeccable/reference/quieter.md +99 -0
- package/skills/impeccable/reference/routing.md +18 -0
- package/skills/impeccable/reference/shape.md +59 -0
- package/skills/impeccable/reference/typeset.md +80 -0
- package/skills/impeccable/reference/visualize.md +49 -0
- package/skills/impeccable/scripts/command-metadata.json +94 -0
- package/skills/impeccable/scripts/concept-seed.mjs +558 -0
- package/skills/impeccable/scripts/context-signals.mjs +334 -0
- package/skills/impeccable/scripts/context.mjs +1467 -0
- package/skills/impeccable/scripts/critique-storage.mjs +213 -0
- package/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/skills/impeccable/scripts/detect.mjs +21 -0
- package/skills/impeccable/scripts/detector/browser/injected/index.mjs +2023 -0
- package/skills/impeccable/scripts/detector/cli/main.mjs +438 -0
- package/skills/impeccable/scripts/detector/design-system.mjs +1046 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +8283 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +372 -0
- package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +1168 -0
- package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1186 -0
- package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +264 -0
- package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/skills/impeccable/scripts/detector/findings.mjs +18 -0
- package/skills/impeccable/scripts/detector/node/file-system.mjs +203 -0
- package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +617 -0
- package/skills/impeccable/scripts/detector/rules/checks.mjs +5580 -0
- package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/skills/impeccable/scripts/detector/shared/constants.mjs +112 -0
- package/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/skills/impeccable/scripts/doctor.mjs +336 -0
- package/skills/impeccable/scripts/embed-prompt.mjs +133 -0
- package/skills/impeccable/scripts/generate-image.mjs +240 -0
- package/skills/impeccable/scripts/hook-admin.mjs +801 -0
- package/skills/impeccable/scripts/hook-before-edit.mjs +508 -0
- package/skills/impeccable/scripts/hook-lib.mjs +2153 -0
- package/skills/impeccable/scripts/hook.mjs +78 -0
- package/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
- package/skills/impeccable/scripts/lib/composition-catalog.mjs +200 -0
- package/skills/impeccable/scripts/lib/concept-catalog.mjs +384 -0
- package/skills/impeccable/scripts/lib/design-parser.mjs +925 -0
- package/skills/impeccable/scripts/lib/impeccable-config.mjs +658 -0
- package/skills/impeccable/scripts/lib/impeccable-paths.mjs +137 -0
- package/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/skills/impeccable/scripts/lib/provider.mjs +5 -0
- package/skills/impeccable/scripts/lib/roll-selection.mjs +362 -0
- package/skills/impeccable/scripts/lib/staleness-deep.mjs +478 -0
- package/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
- package/skills/impeccable/scripts/lib/staleness.mjs +457 -0
- package/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
- package/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
- package/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
- package/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/skills/impeccable/scripts/live/accept-verify.mjs +60 -0
- package/skills/impeccable/scripts/live/browser-script-parts.mjs +55 -0
- package/skills/impeccable/scripts/live/completion.mjs +28 -0
- package/skills/impeccable/scripts/live/event-validation.mjs +199 -0
- package/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +73 -0
- package/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/skills/impeccable/scripts/live/frameworks/journal.mjs +197 -0
- package/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/skills/impeccable/scripts/live/frameworks/nuxt.mjs +161 -0
- package/skills/impeccable/scripts/live/frameworks/script-src.mjs +17 -0
- package/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
- package/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/skills/impeccable/scripts/live/instructions.mjs +142 -0
- package/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
- package/skills/impeccable/scripts/live/roots.mjs +508 -0
- package/skills/impeccable/scripts/live/session-store.mjs +563 -0
- package/skills/impeccable/scripts/live/source-lock.mjs +105 -0
- package/skills/impeccable/scripts/live/source-search.mjs +105 -0
- package/skills/impeccable/scripts/live/svelte-ast.mjs +961 -0
- package/skills/impeccable/scripts/live/svelte-component.mjs +1342 -0
- package/skills/impeccable/scripts/live/sveltekit-adapter.mjs +316 -0
- package/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
- package/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/skills/impeccable/scripts/live/vocabulary.mjs +171 -0
- package/skills/impeccable/scripts/live-accept.mjs +954 -0
- package/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/skills/impeccable/scripts/live-browser.js +12520 -0
- package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1244 -0
- package/skills/impeccable/scripts/live-complete.mjs +107 -0
- package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/skills/impeccable/scripts/live-inject.mjs +503 -0
- package/skills/impeccable/scripts/live-insert.mjs +292 -0
- package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +368 -0
- package/skills/impeccable/scripts/live-poll.mjs +429 -0
- package/skills/impeccable/scripts/live-resume.mjs +123 -0
- package/skills/impeccable/scripts/live-server.mjs +1669 -0
- package/skills/impeccable/scripts/live-status.mjs +71 -0
- package/skills/impeccable/scripts/live-target.mjs +30 -0
- package/skills/impeccable/scripts/live-wrap.mjs +927 -0
- package/skills/impeccable/scripts/live.mjs +359 -0
- package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/impeccable/scripts/palette.mjs +628 -0
- package/skills/impeccable/scripts/pin.mjs +221 -0
- package/skills/impeccable/scripts/serve-question.mjs +932 -0
- package/skills/impeccable/scripts/surface-brief.mjs +74 -0
- package/skills/inkstone-admin/SKILL.md +66 -0
- package/skills/jev-hook-gate/SKILL.md +111 -0
- package/skills/keyword-research/SKILL.md +503 -0
- package/skills/keyword-research/references/dr-cap-and-confidence.md +62 -0
- package/skills/keyword-research/references/keyword-examples.md +769 -0
- package/skills/landing-page-architect/SKILL.md +585 -0
- package/skills/landing-page-architect/references/architecture-reference.md +32 -0
- package/skills/launch-strategy/SKILL.md +384 -0
- package/skills/launch-strategy/evals/evals.json +91 -0
- package/skills/launch-strategy/references/launch-checklist.md +209 -0
- package/skills/launch-strategy/references/launch-timeline.md +159 -0
- package/skills/lead-email-craft/SKILL.md +522 -0
- package/skills/lead-magnets/SKILL.md +310 -0
- package/skills/lead-magnets/references/benchmarks.md +129 -0
- package/skills/lead-magnets/references/format-guide.md +196 -0
- package/skills/link-building-seo/SKILL.md +210 -0
- package/skills/lint-report.txt +1 -0
- package/skills/manifest.json +129 -0
- package/skills/marketing-demo/SKILL.md +249 -0
- package/skills/marketing-demo/references/remotion-examples.md +281 -0
- package/skills/marketing-ideas/SKILL.md +167 -0
- package/skills/marketing-ideas/evals/evals.json +90 -0
- package/skills/marketing-ideas/references/ideas-by-category.md +366 -0
- package/skills/marketing-psychology/SKILL.md +374 -0
- package/skills/marketing-psychology/evals/evals.json +88 -0
- package/skills/marketing-psychology/references/case-studies.md +148 -0
- package/skills/narrative-research-article/SKILL.md +469 -0
- package/skills/narrative-research-article/references/lanusse-patterns.md +166 -0
- package/skills/notebooklm/SKILL.md +674 -0
- package/skills/off-page-seo/SKILL.md +219 -0
- package/skills/onboarding-cro/SKILL.md +220 -0
- package/skills/onboarding-cro/evals/evals.json +92 -0
- package/skills/onboarding-cro/references/experiments.md +258 -0
- package/skills/original-research/SKILL.md +388 -0
- package/skills/page-cro/SKILL.md +269 -0
- package/skills/page-cro/references/cro-benchmarks.md +140 -0
- package/skills/paper-marketing/SKILL.md +448 -0
- package/skills/paper-marketing/references/agent-quality-rubric.md +68 -0
- package/skills/paper-marketing/references/brand-system-template.md +120 -0
- package/skills/paper-marketing/references/paper-mcp-rules.md +71 -0
- package/skills/paper-marketing/references/platform-conventions.md +43 -0
- package/skills/paywall-upgrade-cro/SKILL.md +227 -0
- package/skills/paywall-upgrade-cro/evals/evals.json +93 -0
- package/skills/paywall-upgrade-cro/references/experiments.md +164 -0
- package/skills/platform-formatting/SKILL.md +51 -0
- package/skills/popup-cro/SKILL.md +454 -0
- package/skills/popup-cro/evals/evals.json +94 -0
- package/skills/positioning-angles/SKILL.md +524 -0
- package/skills/positioning-angles/references/ad-matrix-and-examples.md +176 -0
- package/skills/positioning-angles/references/angle-frameworks.md +187 -0
- package/skills/positioning-angles/references/dunford-positioning.md +135 -0
- package/skills/positioning-angles/references/hormozi-offer.md +247 -0
- package/skills/positioning-angles/references/schwartz-sophistication.md +166 -0
- package/skills/positioning-angles/references/unique-mechanism.md +162 -0
- package/skills/pricing-strategy/SKILL.md +346 -0
- package/skills/pricing-strategy/evals/evals.json +90 -0
- package/skills/pricing-strategy/references/research-methods.md +152 -0
- package/skills/pricing-strategy/references/tier-structure.md +307 -0
- package/skills/programmatic-seo/SKILL.md +238 -0
- package/skills/programmatic-seo/evals/evals.json +94 -0
- package/skills/programmatic-seo/references/playbooks.md +308 -0
- package/skills/project-rag/SKILL.md +127 -0
- package/skills/quality-gate/SKILL.md +519 -0
- package/skills/quality-gate/judge-personas/buyer.md +47 -0
- package/skills/quality-gate/judge-personas/expert.md +47 -0
- package/skills/quality-gate/judge-personas/outsider.md +47 -0
- package/skills/quality-gate/judge-personas/scanner.md +41 -0
- package/skills/quality-gate/judge-personas/skeptic.md +40 -0
- package/skills/referral-program/SKILL.md +290 -0
- package/skills/referral-program/evals/evals.json +89 -0
- package/skills/referral-program/references/affiliate-programs.md +163 -0
- package/skills/referral-program/references/program-examples.md +143 -0
- package/skills/review-sites/SKILL.md +279 -0
- package/skills/revops/SKILL.md +343 -0
- package/skills/revops/evals/evals.json +91 -0
- package/skills/revops/references/automation-playbooks.md +290 -0
- package/skills/revops/references/lifecycle-definitions.md +278 -0
- package/skills/revops/references/routing-rules.md +203 -0
- package/skills/revops/references/scoring-models.md +247 -0
- package/skills/saas-product-seo/SKILL.md +324 -0
- package/skills/sales-enablement/SKILL.md +349 -0
- package/skills/sales-enablement/evals/evals.json +91 -0
- package/skills/sales-enablement/references/deck-frameworks.md +263 -0
- package/skills/sales-enablement/references/demo-scripts.md +355 -0
- package/skills/sales-enablement/references/objection-library.md +270 -0
- package/skills/sales-enablement/references/one-pager-templates.md +208 -0
- package/skills/schema-markup/SKILL.md +179 -0
- package/skills/schema-markup/evals/evals.json +87 -0
- package/skills/schema-markup/references/schema-examples.md +398 -0
- package/skills/self-improve/SKILL.md +166 -0
- package/skills/self-improving-agent/README.md +243 -0
- package/skills/self-improving-agent/SKILL.md +437 -0
- package/skills/self-improving-agent/scripts/__init__.py +16 -0
- package/skills/self-improving-agent/scripts/__pycache__/auto_detect.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/nlm_curation.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/self_improving_agent.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/auto_detect.py +270 -0
- package/skills/self-improving-agent/scripts/init_expertise_registry.py +89 -0
- package/skills/self-improving-agent/scripts/nlm_curation.py +259 -0
- package/skills/self-improving-agent/scripts/self-improving-agent +113 -0
- package/skills/self-improving-agent/scripts/self_improving_agent.py +603 -0
- package/skills/self-improving-agent/scripts/test_curation_scorer.py +20 -0
- package/skills/self-improving-agent/scripts/test_self_improving.py +184 -0
- package/skills/send-email/SKILL.md +426 -0
- package/skills/send-email/references/batch-email-examples.md +807 -0
- package/skills/send-email/references/best-practices.md +453 -0
- package/skills/send-email/references/installation.md +123 -0
- package/skills/send-email/references/single-email-examples.md +470 -0
- package/skills/send-email/references/webhooks.md +221 -0
- package/skills/seo-audit/SKILL.md +362 -0
- package/skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/skills/seo-audit/references/architecture-patterns.md +271 -0
- package/skills/seo-audit/references/schema-templates.md +427 -0
- package/skills/seo-content/SKILL.md +510 -0
- package/skills/seo-content/references/anti-ai-detection.md +184 -0
- package/skills/seo-content/references/content-structures.md +148 -0
- package/skills/seo-content/references/eeat-examples.md +235 -0
- package/skills/seo-content/references/on-page-seo.md +261 -0
- package/skills/seo-content/references/pseo-playbooks.md +226 -0
- package/skills/seo-content/references/schema-templates.md +104 -0
- package/skills/seo-content/references/serp-analysis-format.md +151 -0
- package/skills/seo-machine/SKILL.md +331 -0
- package/skills/seo-machine/assets/brand-template.md +73 -0
- package/skills/seo-machine/assets/link-inventory-template.md +74 -0
- package/skills/seo-machine/assets/roadmap-template.md +184 -0
- package/skills/seo-machine/references/api-stack-recipes.md +230 -0
- package/skills/seo-machine/references/exa-recipes.md +260 -0
- package/skills/seo-machine/references/manual-research.md +73 -0
- package/skills/seo-machine/references/methodology.md +87 -0
- package/skills/seo-machine/references/off-page.md +123 -0
- package/skills/seo-machine/references/patterns/alternatives.md +176 -0
- package/skills/seo-machine/references/patterns/compare.md +105 -0
- package/skills/seo-machine/references/patterns/playbooks.md +106 -0
- package/skills/seo-machine/references/patterns/use-case.md +109 -0
- package/skills/seo-machine/references/quality-bars.md +99 -0
- package/skills/seo-machine/references/stacks/astro.md +156 -0
- package/skills/seo-machine/references/stacks/detection.md +61 -0
- package/skills/seo-machine/references/stacks/markdown-fallback.md +181 -0
- package/skills/seo-machine/references/stacks/nextjs.md +108 -0
- package/skills/seo-machine/references/stacks/rails-inertia.md +99 -0
- package/skills/seo-machine/references/striking-distance.md +116 -0
- package/skills/seo-machine/references/technical-audit.md +153 -0
- package/skills/seo-machine/scripts/link_audit.py +265 -0
- package/skills/seo-machine/scripts/tech_audit.py +221 -0
- package/skills/seo-machine/scripts/word_count.py +154 -0
- package/skills/sharp-thesis-validator/SKILL.md +393 -0
- package/skills/sharp-thesis-validator/examples.md +186 -0
- package/skills/signup-flow-cro/SKILL.md +359 -0
- package/skills/signup-flow-cro/evals/evals.json +88 -0
- package/skills/site-architecture/SKILL.md +357 -0
- package/skills/site-architecture/evals/evals.json +88 -0
- package/skills/site-architecture/references/mermaid-templates.md +216 -0
- package/skills/site-architecture/references/navigation-patterns.md +305 -0
- package/skills/site-architecture/references/site-type-templates.md +293 -0
- package/skills/skill-self-improvement/SKILL.md +151 -0
- package/skills/slideshow-script/SKILL.md +274 -0
- package/skills/slideshow-script/references/content-spec-schema.md +77 -0
- package/skills/slideshow-script/references/frameworks.md +84 -0
- package/skills/slideshow-script/references/paips-framework.md +37 -0
- package/skills/social-campaign/SKILL.md +419 -0
- package/skills/social-campaign/references/paper-mcp-workflow.md +48 -0
- package/skills/social-content/SKILL.md +359 -0
- package/skills/social-content/evals/evals.json +92 -0
- package/skills/social-content/references/platforms.md +170 -0
- package/skills/social-content/references/post-templates.md +177 -0
- package/skills/social-content/references/reverse-engineering.md +195 -0
- package/skills/social-worker/SKILL.md +204 -0
- package/skills/startup-launcher/SKILL.md +252 -0
- package/skills/startup-launcher/references/file-router.md +64 -0
- package/skills/startup-launcher/references/platform-matrix.md +65 -0
- package/skills/startup-launcher/references/platforms/alternativeto.md +283 -0
- package/skills/startup-launcher/references/platforms/appsumo.md +495 -0
- package/skills/startup-launcher/references/platforms/auraplusplus.md +736 -0
- package/skills/startup-launcher/references/platforms/betalist.md +98 -0
- package/skills/startup-launcher/references/platforms/capterra.md +276 -0
- package/skills/startup-launcher/references/platforms/crunchbase.md +514 -0
- package/skills/startup-launcher/references/platforms/dealify.md +291 -0
- package/skills/startup-launcher/references/platforms/dealmirror.md +313 -0
- package/skills/startup-launcher/references/platforms/desifounder.md +490 -0
- package/skills/startup-launcher/references/platforms/devhunt.md +210 -0
- package/skills/startup-launcher/references/platforms/devpost.md +448 -0
- package/skills/startup-launcher/references/platforms/fazier.md +56 -0
- package/skills/startup-launcher/references/platforms/firsto.md +489 -0
- package/skills/startup-launcher/references/platforms/g2.md +226 -0
- package/skills/startup-launcher/references/platforms/hackernews.md +99 -0
- package/skills/startup-launcher/references/platforms/hackernoon.md +385 -0
- package/skills/startup-launcher/references/platforms/indiedeals.md +367 -0
- package/skills/startup-launcher/references/platforms/indiehackers.md +80 -0
- package/skills/startup-launcher/references/platforms/kenmoo.md +231 -0
- package/skills/startup-launcher/references/platforms/labstartups.md +618 -0
- package/skills/startup-launcher/references/platforms/launchboard.md +307 -0
- package/skills/startup-launcher/references/platforms/launchfast.md +560 -0
- package/skills/startup-launcher/references/platforms/launchigniter.md +56 -0
- package/skills/startup-launcher/references/platforms/launchingnext.md +674 -0
- package/skills/startup-launcher/references/platforms/launchit.md +574 -0
- package/skills/startup-launcher/references/platforms/launchyourapp.md +677 -0
- package/skills/startup-launcher/references/platforms/libhunt.md +220 -0
- package/skills/startup-launcher/references/platforms/ltdhunt.md +221 -0
- package/skills/startup-launcher/references/platforms/microlaunch.md +45 -0
- package/skills/startup-launcher/references/platforms/openalternative.md +195 -0
- package/skills/startup-launcher/references/platforms/peerlist.md +56 -0
- package/skills/startup-launcher/references/platforms/peerpush.md +64 -0
- package/skills/startup-launcher/references/platforms/primeclub.md +282 -0
- package/skills/startup-launcher/references/platforms/productcanyon.md +190 -0
- package/skills/startup-launcher/references/platforms/producthunt.md +98 -0
- package/skills/startup-launcher/references/platforms/rankinpublic.md +315 -0
- package/skills/startup-launcher/references/platforms/rockethub.md +374 -0
- package/skills/startup-launcher/references/platforms/saasgenius.md +175 -0
- package/skills/startup-launcher/references/platforms/saashub.md +205 -0
- package/skills/startup-launcher/references/platforms/saasmantra.md +221 -0
- package/skills/startup-launcher/references/platforms/saaspirate.md +287 -0
- package/skills/startup-launcher/references/platforms/saaswarrior.md +190 -0
- package/skills/startup-launcher/references/platforms/saaszilla.md +194 -0
- package/skills/startup-launcher/references/platforms/selected.md +925 -0
- package/skills/startup-launcher/references/platforms/sideprojectors.md +86 -0
- package/skills/startup-launcher/references/platforms/softonic.md +240 -0
- package/skills/startup-launcher/references/platforms/sourceforge.md +251 -0
- package/skills/startup-launcher/references/platforms/stacksocial.md +244 -0
- package/skills/startup-launcher/references/platforms/startupstash.md +326 -0
- package/skills/startup-launcher/references/platforms/theresanaiforthat.md +253 -0
- package/skills/startup-launcher/references/platforms/tinylaunch.md +70 -0
- package/skills/startup-launcher/references/platforms/tinystartups.md +72 -0
- package/skills/startup-launcher/references/platforms/toolfolio.md +291 -0
- package/skills/startup-launcher/references/platforms/trustmrr.md +194 -0
- package/skills/startup-launcher/references/platforms/trylaunch.md +531 -0
- package/skills/startup-launcher/references/platforms/uneed.md +57 -0
- package/skills/startup-launcher/references/templates/asset-checklist.md +218 -0
- package/skills/startup-launcher/references/templates/launch-tracker.md +195 -0
- package/skills/startup-launcher/references/templates/product-brief.md +98 -0
- package/skills/summarize/.skill-meta.json +13 -0
- package/skills/summarize/SKILL.md +170 -0
- package/skills/summarize/rules/install.md +157 -0
- package/skills/summarize/rules/usage.md +207 -0
- package/skills/topical-authority/SKILL.md +307 -0
- package/skills/topical-authority/references/jake-ward-framework.md +201 -0
- package/skills/topical-authority/references/serp-clustering-algorithm.md +325 -0
- package/skills/topical-authority/scripts/orchestrator.js +367 -0
- package/skills/topical-authority/scripts/seo/analyze-competitor-coverage.js +3 -0
- package/skills/topical-authority/scripts/seo/audit-internal-links.js +3 -0
- package/skills/topical-authority/scripts/seo/build-clusters-from-serp.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-keywords-from-forums.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-paa-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/fetch-serp-urls.js +3 -0
- package/skills/topical-authority/scripts/seo/gemini-serp-clustering.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-content-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-research-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-quora-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-reddit-pain-points.js +3 -0
- package/skills/topical-authority/scripts/seo/weave-internal-links.js +3 -0
- package/skills/visual-style/SKILL.md +199 -0
- package/skills/voice-brand-alignment/SKILL.md +70 -0
- package/skills/voice-brand-alignment/references/ai-slop-patterns.md +405 -0
- package/skills/voice-brand-alignment/scripts/validation/gemini-voice-validator.js +96 -0
- package/skills/voice-extraction/SKILL.md +234 -0
- package/skills/voice-extraction/references/extraction-prompt.md +155 -0
- package/skills/voice-extraction/references/voice-dna-template.md +168 -0
- package/skills/voice-extraction/references/voice-elements.md +259 -0
- package/skills/voice-extraction/scripts/build-corpus.js +120 -0
- package/skills/voice-extraction/scripts/collect-sources.sh +168 -0
- package/skills/warm-outbound/SKILL.md +299 -0
- package/skills/warm-outbound/templates/warm-message.md +39 -0
- package/skills/weekly-newsletter-digest/SKILL.md +78 -0
- package/skills/x-playwriter/SKILL.md +428 -0
- package/skills/x-playwriter/scripts/x-browser.js +185 -0
- package/skills/x-post-generator-openclaw/SKILL.md +138 -0
- package/skills/x-post-generator-openclaw/scripts/generate-x-post.js +537 -0
- package/skills/x-posting-playwriter/SKILL.md +203 -0
- package/skills/x-research/SKILL.md +129 -0
- package/skills/x-research/x-research.sh +85 -0
- package/skills/youtube-summarize/SKILL.md +90 -0
- package/skills/youtube-summarize/scripts/youtube-summarize.sh +143 -0
- package/src/cli.js +347 -172
- package/src/harness/deepseek-adapter.js +102 -0
- package/src/harness/deepseek.js +225 -0
- package/src/harness/opencode-adapter.js +174 -0
- package/src/harness/pi-adapter.js +172 -0
- package/src/harness/registry.js +121 -0
- package/src/harness/telemetry.js +102 -0
- package/src/harness/types.js +165 -0
- package/src/interview.js +36 -4
- package/src/postinstall.js +10 -12
- package/templates/AGENTS.md +17 -17
- package/templates/ORG.md +1 -1
- package/templates/TOOLS.md +7 -2
- package/templates/opencode.json +26 -29
- package/wiki/doctor.md +54 -0
- package/wiki/inkstone.md +4 -4
- package/wiki/opencode.md +3 -3
- package/skills/curated.txt +0 -68
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cmo-brand-memory
|
|
3
|
+
description: |
|
|
4
|
+
Brand memory protocol for reading and writing persistent brand context.
|
|
5
|
+
How skills interact with the brand/ directory.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Brand Memory Protocol
|
|
9
|
+
|
|
10
|
+
Brand memory lives in `./brand/` at the project root. It accumulates as skills run and persists across sessions.
|
|
11
|
+
|
|
12
|
+
## Directory Structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
./brand/
|
|
16
|
+
voice-profile.md ← Written by brand-voice
|
|
17
|
+
positioning.md ← Written by positioning-angles
|
|
18
|
+
audience.md ← Written by audience-research
|
|
19
|
+
competitors.md ← Written by competitive-intel
|
|
20
|
+
landscape.md ← Written by landscape-scan
|
|
21
|
+
creative-kit.md ← Written by creative (setup mode)
|
|
22
|
+
stack.md ← Written by mktg init
|
|
23
|
+
keyword-plan.md ← Written by keyword-research
|
|
24
|
+
assets.md ← Append-only (all skills)
|
|
25
|
+
learnings.md ← Append-only (all skills)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## File Ownership
|
|
29
|
+
|
|
30
|
+
Each file has a primary owner — the skill that creates and maintains it. Other skills may read any file but never overwrite a file they do not own.
|
|
31
|
+
|
|
32
|
+
**Profile files** (create-or-overwrite): voice-profile, positioning, audience, competitors, landscape, creative-kit, stack, keyword-plan.
|
|
33
|
+
**Append-only files** (never overwrite): assets.md, learnings.md.
|
|
34
|
+
|
|
35
|
+
## Reading Protocol
|
|
36
|
+
|
|
37
|
+
### 1. Check for the directory
|
|
38
|
+
|
|
39
|
+
On every skill invocation, check whether `./brand/` exists.
|
|
40
|
+
|
|
41
|
+
- **Exists**: Load relevant files (step 2).
|
|
42
|
+
- **Does not exist**: Skip brand loading. Do not error. Note: "No brand profile yet. Run /cmo or mktg init to set one up, or I'll work without it."
|
|
43
|
+
|
|
44
|
+
### 2. Load only what you need
|
|
45
|
+
|
|
46
|
+
Each skill declares which brand files it reads. Do not load everything.
|
|
47
|
+
|
|
48
|
+
| Skill | Reads |
|
|
49
|
+
|-------|-------|
|
|
50
|
+
| brand-voice | positioning.md, audience.md |
|
|
51
|
+
| positioning-angles | audience.md, competitors.md |
|
|
52
|
+
| direct-response-copy | voice-profile.md, positioning.md, audience.md, landscape.md |
|
|
53
|
+
| seo-content | voice-profile.md, keyword-plan.md, audience.md, landscape.md |
|
|
54
|
+
| email-sequences | voice-profile.md, positioning.md, audience.md, landscape.md |
|
|
55
|
+
| content-atomizer | voice-profile.md, creative-kit.md, landscape.md |
|
|
56
|
+
| keyword-research | positioning.md, audience.md, competitors.md |
|
|
57
|
+
| lead-magnet | voice-profile.md, positioning.md, audience.md |
|
|
58
|
+
| newsletter | voice-profile.md, audience.md, learnings.md |
|
|
59
|
+
| creative | voice-profile.md, positioning.md, creative-kit.md |
|
|
60
|
+
|
|
61
|
+
### 3. Handle missing files gracefully
|
|
62
|
+
|
|
63
|
+
If a file does not exist, do not error. Instead:
|
|
64
|
+
|
|
65
|
+
- Note what is missing internally.
|
|
66
|
+
- Consolidate into a single status line: "Brand profile partial (loaded voice-profile.md; positioning and audience not yet created)."
|
|
67
|
+
- Proceed with reasonable defaults or ask the user the questions that file would have answered.
|
|
68
|
+
- Suggest one high-impact next step: "Running brand-voice would give me your tone profile."
|
|
69
|
+
|
|
70
|
+
### 4. Show context use visibly
|
|
71
|
+
|
|
72
|
+
When loading brand context, show the user:
|
|
73
|
+
|
|
74
|
+
- "Using your brand voice: conversational-but-sharp, short sentences."
|
|
75
|
+
- "Your positioning is 'The Anti-Course Course' — building this around that angle."
|
|
76
|
+
- "Found 3 competitor profiles. Differentiating against them."
|
|
77
|
+
|
|
78
|
+
### 5. Detect stale data
|
|
79
|
+
|
|
80
|
+
If a file seems outdated or conflicts with what the user is saying:
|
|
81
|
+
|
|
82
|
+
- Flag it: "Your voice profile says you avoid humor, but your brief is playful. Update the voice profile?"
|
|
83
|
+
- Never silently override brand memory with session context. Always confirm.
|
|
84
|
+
|
|
85
|
+
## Writing Protocol
|
|
86
|
+
|
|
87
|
+
### Profile files (create-or-overwrite)
|
|
88
|
+
|
|
89
|
+
1. Generate content through the skill's workflow.
|
|
90
|
+
2. If file exists: read it first, show what will change, ask for confirmation.
|
|
91
|
+
3. Write to `./brand/{filename}.md`.
|
|
92
|
+
4. Include a `## Last Updated` line with date and skill name.
|
|
93
|
+
5. Confirm: "Created brand/voice-profile.md."
|
|
94
|
+
|
|
95
|
+
### Append-only files (assets.md, learnings.md)
|
|
96
|
+
|
|
97
|
+
1. Read existing file to understand current entries.
|
|
98
|
+
2. Append new entries at the bottom of the appropriate section.
|
|
99
|
+
3. Never overwrite or truncate.
|
|
100
|
+
4. Confirm: "Added 3 new entries to brand/assets.md."
|
|
101
|
+
|
|
102
|
+
## Respect the Claims Blacklist
|
|
103
|
+
|
|
104
|
+
`brand/landscape.md` contains a **Claims Blacklist** — a table of ecosystem claims that are factually wrong, outdated, or unverifiable. This is a hard gate:
|
|
105
|
+
|
|
106
|
+
1. Before any content skill makes a claim about the market, ecosystem, competitors, or industry trends, check the Claims Blacklist in `brand/landscape.md`.
|
|
107
|
+
2. If a claim appears in the blacklist, **DO NOT make it.** Use the "What To Say Instead" column for the approved alternative.
|
|
108
|
+
3. If `landscape.md` does not exist or is stale (>14 days), warn the user before making ecosystem claims: "I don't have a current ecosystem snapshot. Any market claims I make may be outdated. Run /landscape-scan to ground my output in current reality."
|
|
109
|
+
4. The blacklist is append-only within a landscape scan cycle. Skills never remove entries — only `/landscape-scan` refreshes the full file.
|
|
110
|
+
|
|
111
|
+
This prevents the most common marketing failure mode: confidently stating things about the market that are no longer true.
|
|
112
|
+
|
|
113
|
+
## Use the Visual Brand Style
|
|
114
|
+
|
|
115
|
+
`brand/creative-kit.md` may contain a `## Visual Brand Style` section — the visual identity for image generation. When routing to `/image-gen`:
|
|
116
|
+
|
|
117
|
+
1. If the Visual Brand Style section exists and is populated, image-gen will use it automatically (L3 enhancement).
|
|
118
|
+
2. If it doesn't exist, suggest: "You don't have a visual brand style defined yet. Run `/visual-style` first for consistent on-brand images, or I can generate without it."
|
|
119
|
+
3. If `creative-kit.md` doesn't exist at all, image-gen still works at L0 (generic) — it will ask the user directly.
|
|
120
|
+
|
|
121
|
+
## Progressive Enhancement Levels
|
|
122
|
+
|
|
123
|
+
- **L0**: Zero context. Skill works by asking the user 3-5 key questions.
|
|
124
|
+
- **L1**: Voice profile only. Output matches brand tone.
|
|
125
|
+
- **L2**: Voice + positioning + audience. Output is targeted and differentiated.
|
|
126
|
+
- **L3**: Full brand + keyword plan + landscape — output strategic, data-informed, and grounded in current ecosystem reality.
|
|
127
|
+
- **L4**: Full brand + learnings + campaign history. Output compounds on past results.
|
|
128
|
+
|
|
129
|
+
Every skill must work at L0. Brand memory enhances output — it never gates it.
|
|
130
|
+
|
|
131
|
+
## Learnings Journal Format
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
## What Works
|
|
135
|
+
- [YYYY-MM-DD] [/skill-name] Specific, actionable finding with numbers
|
|
136
|
+
|
|
137
|
+
## What Doesn't Work
|
|
138
|
+
- [YYYY-MM-DD] [/skill-name] Specific finding with numbers
|
|
139
|
+
|
|
140
|
+
## Audience Insights
|
|
141
|
+
- [YYYY-MM-DD] [/skill-name] Behavioral or preference insight
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Always include date, skill name, and specific numbers. Not "emails worked well" but "subject lines under 40 chars had 15% higher open rates."
|
|
145
|
+
|
|
146
|
+
## Feedback Collection
|
|
147
|
+
|
|
148
|
+
After any major deliverable, collect feedback:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
How did this perform?
|
|
152
|
+
a) Great — shipped as-is
|
|
153
|
+
b) Good — made minor edits
|
|
154
|
+
c) Rewrote significantly
|
|
155
|
+
d) Haven't used yet
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Log (a) and (b) to learnings.md. For (c), ask what changed and log the diff. For (d), remind next session.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# CLI Runtime Index
|
|
2
|
+
|
|
3
|
+
This is the /cmo operator index for the `mktg` CLI. Runtime schema wins:
|
|
4
|
+
if this file conflicts with `mktg schema --json`, trust the live schema and
|
|
5
|
+
update this file.
|
|
6
|
+
|
|
7
|
+
## Refresh Commands
|
|
8
|
+
|
|
9
|
+
Use these at the start of any deep CLI wiring task:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
mktg schema --json --fields commands.name,commands.flags,commands.subcommands
|
|
13
|
+
mktg status --json --fields health,brandSummary,integrations,nextActions
|
|
14
|
+
mktg doctor --json --fields passed,checks
|
|
15
|
+
mktg list --routing --json --fields skills.name,skills.triggers,skills.requires,skills.unlocks
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use command-specific schema before constructing a new payload:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mktg schema publish --json
|
|
22
|
+
mktg schema studio --json
|
|
23
|
+
mktg schema verify --json
|
|
24
|
+
mktg schema ship-check --json
|
|
25
|
+
mktg schema cmo --json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
For Studio startup, prefer the CMO-aware launcher:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
mktg studio --dry-run --json --intent cmo --session <id>
|
|
32
|
+
mktg studio --open --intent cmo --session <id>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The launcher resolves the sibling Studio checkout first, then
|
|
36
|
+
`MKTG_STUDIO_BIN`, then PATH. The dry-run response's `urls.dashboard` is the
|
|
37
|
+
canonical URL to show or open.
|
|
38
|
+
|
|
39
|
+
## Top-Level Commands
|
|
40
|
+
|
|
41
|
+
Current runtime command set:
|
|
42
|
+
|
|
43
|
+
| Command | /cmo use |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `schema` | Discover command flags, subcommands, response shapes, and examples. |
|
|
46
|
+
| `init` | Bootstrap brand files, skills, agents, and optional website import. |
|
|
47
|
+
| `doctor` | Check local tools, skills, brand state, and integrations. |
|
|
48
|
+
| `status` | Read the project marketing state and next setup actions. |
|
|
49
|
+
| `list` | Inspect installed skills and routing metadata. |
|
|
50
|
+
| `update` | Reinstall bundled skills/agents (default), check npm for newer mktg releases (`--check`), or upgrade the installed package (`--upgrade`). |
|
|
51
|
+
| `skill` | Inspect, validate, register, add, log, and analyze skills. |
|
|
52
|
+
| `brand` | Read/write/export/import/diff/reset brand memory. |
|
|
53
|
+
| `run` | Load a skill for agent consumption and record execution. |
|
|
54
|
+
| `transcribe` | Download and transcribe audio/video sources. |
|
|
55
|
+
| `context` | Compile token-budgeted brand context. |
|
|
56
|
+
| `plan` | Get or persist the prioritized execution loop. |
|
|
57
|
+
| `publish` | Route content to native, Postiz, Typefully, Resend, or file adapters. |
|
|
58
|
+
| `compete` | Watch, scan, list, and diff competitor pages. |
|
|
59
|
+
| `dashboard` | Read typed dashboard contracts for local command-center views. |
|
|
60
|
+
| `catalog` | Inspect and sync upstream service catalogs such as Postiz. |
|
|
61
|
+
| `studio` | Launch or preview the companion local Studio, including CMO startup sessions. |
|
|
62
|
+
| `verify` | Run ecosystem verification suites. |
|
|
63
|
+
| `ship-check` | Aggregate go/no-go verdicts for release readiness. |
|
|
64
|
+
| `cmo` | Invoke headless `/cmo` through the CLI with timeout and dry-run safety. |
|
|
65
|
+
|
|
66
|
+
## Subcommand Families
|
|
67
|
+
|
|
68
|
+
| Family | Subcommands |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `skill` | `info`, `validate`, `graph`, `check`, `register`, `evaluate`, `unregister`, `add`, `history`, `log` |
|
|
71
|
+
| `brand` | `export`, `import`, `update`, `freshness`, `diff`, `append-learning`, `claims`, `kit`, `delete`, `reset` |
|
|
72
|
+
| `plan` | `next`, `complete` |
|
|
73
|
+
| `compete` | `scan`, `watch`, `list`, `diff` |
|
|
74
|
+
| `dashboard` | `snapshot`, `action`, `plan`, `outputs`, `publish`, `system`, `compete` |
|
|
75
|
+
| `catalog` | `list`, `info`, `sync`, `status`, `add` |
|
|
76
|
+
| `update` | flags: `--check` (npm version probe, read-only), `--upgrade` (run `npm i -g marketing-cli@latest`, honors `--dry-run`). Default = re-sync skills/agents. |
|
|
77
|
+
|
|
78
|
+
## Discovery Discipline
|
|
79
|
+
|
|
80
|
+
- Prefer `--json` for every command. TTY output is for humans.
|
|
81
|
+
- Prefer `--fields` when the response is only for routing decisions.
|
|
82
|
+
- Prefer `--dry-run` before every mutation.
|
|
83
|
+
- Use `--ndjson` for long list or batch operations where incremental progress matters.
|
|
84
|
+
- Never hardcode command counts, skill counts, route counts, or tab enums in agent logic.
|
|
85
|
+
- If a static rule and runtime schema disagree, treat that as doc drift and follow runtime.
|
|
86
|
+
|
|
87
|
+
## Safe Startup Sequence
|
|
88
|
+
|
|
89
|
+
1. `mktg status --json --fields health,brandSummary,integrations,nextActions`
|
|
90
|
+
2. `mktg doctor --json --fields passed,checks`
|
|
91
|
+
3. `mktg list --routing --json --fields skills.name,skills.triggers,skills.requires,skills.unlocks`
|
|
92
|
+
4. `mktg schema --json --fields commands.name,commands.flags,commands.subcommands`
|
|
93
|
+
|
|
94
|
+
This gives /cmo the project state, broken dependencies, routing map, and
|
|
95
|
+
current CLI contract before it takes action.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# `mktg` Command Reference (CMO-facing)
|
|
2
|
+
|
|
3
|
+
Full CLI surface /cmo uses to inspect state, route skills, and orchestrate catalogs. Every command supports `--json` and most support `--dry-run`, `--fields`, `--confirm` per project DX standards.
|
|
4
|
+
|
|
5
|
+
Use these commands **deliberately**. At activation, run the minimum set to know what's possible (status + doctor). During playbook execution, re-invoke per-step as needed.
|
|
6
|
+
|
|
7
|
+
Runtime schema is authoritative. If this hand-written reference differs from
|
|
8
|
+
`mktg schema --json`, trust the live schema and update this file. For the full
|
|
9
|
+
runtime command index, see `rules/cli-runtime-index.md`; for distribution
|
|
10
|
+
routing, see `rules/publish-index.md`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Core state + health
|
|
15
|
+
|
|
16
|
+
| Command | CMO uses this when… |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `mktg status --json` | Always at activation. Returns brand state, health (`ready`/`incomplete`/`needs-setup`), integrations configured. This is the first read. |
|
|
19
|
+
| `mktg status --json --fields brand.populated,brand.missing,brand.stale` | To snap to the progressive enhancement ladder (see `rules/progressive-enhancement.md`). |
|
|
20
|
+
| `mktg doctor --json` | On setup + whenever a skill fails unexpectedly (missing tools, broken integrations). |
|
|
21
|
+
| `mktg doctor --fix --dry-run --json` | Preview auto-remediations before running them. |
|
|
22
|
+
| `mktg doctor --fix --json` | Auto-create missing brand files, install missing skills, patch integrations. |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Brand memory
|
|
27
|
+
|
|
28
|
+
| Command | CMO uses this when… |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `mktg context --json` | Compile all brand files into one token-budgeted artifact before running a multi-skill chain (saves context window). |
|
|
31
|
+
| `mktg context --layer <foundation\|strategy\|execution\|distribution> --json` | Pull only the brand slice the skill needs. |
|
|
32
|
+
| `mktg context --budget <tokens> --json` | Truncate to fit a specific token ceiling. |
|
|
33
|
+
| `mktg brand freshness --json` | Before running content skills — confirm brand files aren't stale. |
|
|
34
|
+
| `mktg brand kit --json` | Structured brand tokens (colors, typography, visual style) — used by `image-gen`, `creative`, `paper-marketing`. |
|
|
35
|
+
| `mktg brand kit get <section> --json` | Addressable section — `colors`, `typography`, `visual`, `visualBrandStyle`. |
|
|
36
|
+
| `mktg brand claims --json` | Extract Claims Blacklist from `landscape.md`. **Read this before every piece of content.** |
|
|
37
|
+
| `mktg brand append-learning --input '{...}'` | Log what worked/didn't after a session — compounds future routing. |
|
|
38
|
+
| `mktg brand export --json` | Snapshot brand state for backup or hand-off. |
|
|
39
|
+
| `mktg brand diff --json` | Show brand changes since last baseline. |
|
|
40
|
+
| `mktg brand delete <file> --confirm` | Destructive — only when user explicitly asks. |
|
|
41
|
+
| `mktg brand reset --confirm` | Nuclear — wipes `.mktg/` execution state. User must explicitly request. |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Planning + execution loop
|
|
46
|
+
|
|
47
|
+
| Command | CMO uses this when… |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `mktg plan --json` | Returning user — show the prioritized task queue. |
|
|
50
|
+
| `mktg plan next --json` | Single highest-priority task. Default for "what should I do?" after session start. |
|
|
51
|
+
| `mktg plan complete <id> --json` | After a skill successfully finishes — persists progress across sessions via `.mktg/plan.json`. |
|
|
52
|
+
| `mktg plan --save --json` | Stream-persist the plan for long-running orchestration. |
|
|
53
|
+
| `mktg run <skill> --json` | Direct skill invocation (bypasses the usual Claude Code slash-command flow). Use when the orchestration layer needs programmatic control. |
|
|
54
|
+
| `mktg run <skill> --learning '{...}'` | Run a skill + record the learning atomically. |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Distribution
|
|
59
|
+
|
|
60
|
+
| Command | CMO uses this when… |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `mktg publish --list-adapters --json` | Show available adapters (`mktg-native`, `postiz`, `typefully`, `resend`, `file`) + configured status. |
|
|
63
|
+
| `mktg publish --native-account --json` | Show or auto-provision the local mktg-native workspace account. |
|
|
64
|
+
| `mktg publish --native-upsert-provider --input '{...}' --json` | Create/update an X, TikTok, Instagram, Reddit, or LinkedIn native provider. |
|
|
65
|
+
| `mktg publish --adapter mktg-native --list-integrations --json` | List local native providers before targeting them in a manifest. |
|
|
66
|
+
| `mktg publish --native-list-posts --json` | Read local native queue/history state. |
|
|
67
|
+
| `mktg publish --adapter postiz --list-integrations --json` | List connected Postiz providers before creating external drafts. |
|
|
68
|
+
| `mktg publish --adapter postiz --diagnose --json` | Verify hosted or self-hosted Postiz auth, `/api` routing, and active provider state. |
|
|
69
|
+
| `mktg publish --adapter <name> --dry-run --input '<json>' --json` | Preview before any real send. Always dry-run first. |
|
|
70
|
+
| `mktg publish --adapter <name> --confirm --input '<json>' --json` | Execute publishing. Only with user approval. |
|
|
71
|
+
| `mktg publish --ndjson` | Streaming progress for multi-item campaigns. |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Competitive intelligence
|
|
76
|
+
|
|
77
|
+
| Command | CMO uses this when… |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `mktg compete list --json` | See all tracked competitor URLs. |
|
|
80
|
+
| `mktg compete watch <url> --json` | Add a competitor to the monitoring loop. |
|
|
81
|
+
| `mktg compete scan --json` | Run the scan — detect changes since last snapshot. |
|
|
82
|
+
| `mktg compete scan --ndjson` | Streaming scan for large watchlists. |
|
|
83
|
+
| `mktg compete diff <url> --json` | Detailed change report for one competitor. |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Upstream catalogs (NEW — post-Phase B)
|
|
88
|
+
|
|
89
|
+
Catalogs extend mktg via external REST APIs (postiz = 30+ social providers; future: cal.com, listmonk, etc.). Registered in `catalogs-manifest.json`.
|
|
90
|
+
|
|
91
|
+
| Command | CMO uses this when… |
|
|
92
|
+
|---|---|
|
|
93
|
+
| `mktg catalog list --json` | Survey registered catalogs. |
|
|
94
|
+
| `mktg catalog info <name> --json --fields configured,missing_envs` | Per-catalog readiness check. Returns full `CatalogEntry` plus computed `configured`, `missing_envs`, `resolved_base`. |
|
|
95
|
+
| `mktg catalog status --json` | Fleet-wide health across all registered catalogs (`configured`, `healthy`, `detail` per catalog). |
|
|
96
|
+
| `mktg catalog sync --dry-run --json` | Check for upstream version drift (compares pinned version against GitHub releases). v1 is read-only. |
|
|
97
|
+
| `mktg catalog add <name> --confirm --json` | Register a new catalog. Destructive-guarded. |
|
|
98
|
+
|
|
99
|
+
**Routing impact:** before routing to any skill backed by a catalog (e.g., `postiz`), CMO runs `catalog info <name>` to confirm `configured: true`. If not, surface the exact fix using `missing_envs`.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Agent self-discovery
|
|
104
|
+
|
|
105
|
+
| Command | CMO uses this when… |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `mktg list --json` | Full skill registry with metadata (all 50 skills). |
|
|
108
|
+
| `mktg list --routing --json` | Just the routing fields — triggers, categories, layers. Cheap to read, used to verify routing decisions. |
|
|
109
|
+
| `mktg schema --json` | All commands with response shapes. Used when the orchestrator needs to programmatically understand the CLI surface. |
|
|
110
|
+
| `mktg schema <command> --json` | Detailed schema for one command including `responseSchema` + examples. |
|
|
111
|
+
| `mktg skill info <name> --json` | Skill metadata: dependencies, reverse dependencies, install status. |
|
|
112
|
+
| `mktg skill validate <path> --json` | Validate a SKILL.md against platform + mktg specs (used by `create-skill`). |
|
|
113
|
+
| `mktg skill graph --json` | Dependency DAG across all 50 skills. Used when planning a multi-skill chain. |
|
|
114
|
+
| `mktg skill check <name> --json` | Check if a skill's prerequisites are satisfied (brand files present, deps installed). |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Setup + lifecycle
|
|
119
|
+
|
|
120
|
+
| Command | CMO uses this when… |
|
|
121
|
+
|---|---|
|
|
122
|
+
| `mktg init --yes` | Fresh project. Creates `brand/` + installs 50 skills + 5 agents + 1 catalog. |
|
|
123
|
+
| `mktg init --from <url> --yes` | Zero-to-CMO in 90 seconds. Scrapes URL, auto-populates `voice-profile.md`, `positioning.md`, `audience.md`, `competitors.md` with real data. Use when the project has a live website. |
|
|
124
|
+
| `mktg update --json` | Refresh skills/agents/catalogs from the package. Run after `npm update`. |
|
|
125
|
+
| `mktg update --check --json` | Read-only probe: ask the npm registry for the latest `marketing-cli` version and compare to the installed one. Returns `{ current, latest, upgradeAvailable, upgradeCommand }`. Use this before suggesting an upgrade. |
|
|
126
|
+
| `mktg update --upgrade --dry-run --json` | Preview the npm upgrade command without spawning. Returns the planned `upgradeCommand`. |
|
|
127
|
+
| `mktg update --upgrade --json` | Run `npm i -g marketing-cli@latest`. Surfaces EACCES guidance when the npm prefix is root-owned (suggest `sudo` or a user-owned prefix via nvm/fnm/volta). The package's postinstall re-syncs skills/agents automatically. |
|
|
128
|
+
| `mktg transcribe <url\|path> --json` | Audio/video → transcript. Wraps `whisper-cli` (whisper.cpp) + `yt-dlp` + `ffmpeg`. Used before `content-atomizer` for podcast/video source material. |
|
|
129
|
+
| `mktg studio` | Launch the studio dashboard (Bun API + Next.js UI). Prefers sibling `mktg-studio/bin/mktg-studio.ts`, then `MKTG_STUDIO_BIN`, then PATH. |
|
|
130
|
+
| `mktg studio --open` | Same, plus open the dashboard in the default browser. |
|
|
131
|
+
| `mktg studio --open --intent cmo --session <id>` | Launch Studio into a CMO-aware dashboard session at `/dashboard?mode=cmo&session=<id>`. Use this for visual command-center startup. |
|
|
132
|
+
| `mktg studio --dry-run --json --intent cmo --session <id>` | Structured preview envelope: resolved launcher, version, forwarded argv, ports, URLs. Zero side effects. Agent-safe for self-discovery. |
|
|
133
|
+
| `mktg verify --dry-run --json` | Preview ecosystem verification suites before running them. |
|
|
134
|
+
| `mktg verify --suite <name> --json` | Run a targeted verification suite. |
|
|
135
|
+
| `mktg ship-check --dry-run --json` | Preview the release go/no-go checks. |
|
|
136
|
+
| `mktg ship-check --fresh true --json` | Run the fresh aggregate ship verdict. |
|
|
137
|
+
| `mktg cmo --dry-run --json` | Preview headless `/cmo` invocation without launching Claude. |
|
|
138
|
+
| `mktg cmo --timeout <seconds> --json` | Run `/cmo` through the CLI with a hard wall-clock cap. |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## External tools (chained via `mktg doctor` detection)
|
|
143
|
+
|
|
144
|
+
Not `mktg` subcommands, but /cmo knows when to suggest them (see `CLAUDE.md` §Ecosystem):
|
|
145
|
+
|
|
146
|
+
| Tool | When CMO suggests it |
|
|
147
|
+
|---|---|
|
|
148
|
+
| Browser profile | Browser automation for Instagram/TikTok/Facebook/YouTube when no API path is configured. |
|
|
149
|
+
| `/last30days` | Quick claim verification — "is this still true?" Ground truth before a content piece. |
|
|
150
|
+
| `/landscape-scan` (chained skill) | Full ecosystem snapshot when brand/landscape.md is missing or stale. |
|
|
151
|
+
| `firecrawl` CLI | Single-page scrape (invoked through `/firecrawl` skill). |
|
|
152
|
+
| `summarize` CLI | Compress long text. Invoked through `/summarize` skill. |
|
|
153
|
+
| `gh` | GitHub operations when publishing to GitHub (releases, READMEs). |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Invocation patterns
|
|
158
|
+
|
|
159
|
+
**Always use `--json`.** TTY output is for humans; JSON is the orchestrator contract.
|
|
160
|
+
|
|
161
|
+
**Always `--dry-run` before mutating.** Every destructive command (`brand delete`, `brand reset`, `skill unregister`, `publish`, `catalog add`) requires either `--dry-run` to preview or `--confirm` to execute. Never skip this.
|
|
162
|
+
|
|
163
|
+
**Use `--fields` aggressively.** Most commands return rich responses; CMO only needs the slice relevant to the current routing decision. Example: `mktg status --json --fields brand.populated,integrations` trims 20KB down to 500 bytes.
|
|
164
|
+
|
|
165
|
+
**Stream when it's a list.** `--ndjson` on `mktg plan`, `mktg compete scan`, `mktg publish` — lets CMO react to each item without waiting for the batch.
|
|
166
|
+
|
|
167
|
+
See `CONTEXT.md` at the repo root for the full agent-facing CLI cheatsheet.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# /cmo Communication — How You Talk to the Builder
|
|
2
|
+
|
|
3
|
+
The builder doesn't speak marketing jargon. They say things like "I need more users" or "how do I get people to care" or "idk what to do next." Your job is to translate that into a marketing plan and explain it in builder terms.
|
|
4
|
+
|
|
5
|
+
**When they're vague:**
|
|
6
|
+
Don't route to `brainstorm` mechanically. First, share what you see. "Looking at your brand profile, you've got solid positioning but zero distribution. Here's what I'd do: write 3 SEO articles targeting your best keywords, then atomize them into social posts. That gives you a content engine. Want to start there, or do you have something else in mind?"
|
|
7
|
+
|
|
8
|
+
**When they're specific:**
|
|
9
|
+
Move fast. "You want a landing page, got it. I see your positioning is 'the anti-course course.' I'll write conversion copy around that angle. Your audience is indie hackers who hate traditional online courses. Give me 5 minutes."
|
|
10
|
+
|
|
11
|
+
**When they're wrong (respectfully):**
|
|
12
|
+
They might ask for the wrong thing. A builder who says "I need social posts" when they have no positioning, no audience research, and no content to repurpose, that's a red flag. Say so: "I can write social posts, but they won't land without knowing who we're talking to. Let me spend 10 minutes building your audience profile first, then the posts will actually convert."
|
|
13
|
+
|
|
14
|
+
**When you need more context:**
|
|
15
|
+
Ask ONE good question, not five. Bundle related questions into a single ask. Explain why you need the answer. "Before I write this email sequence, I need to know: what happens after someone signs up? Do they hit a paywall, a free trial, or an open product? That determines the entire nurture strategy."
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cmo-context-switch
|
|
3
|
+
description: |
|
|
4
|
+
Multi-project context switch protocol. How to safely switch between
|
|
5
|
+
projects without contaminating brand context.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> **Note:** Examples below use fictional brands (Acme, Lumi, Helm). Replace with your own brand context.
|
|
9
|
+
|
|
10
|
+
# Context Switch Protocol
|
|
11
|
+
|
|
12
|
+
The /cmo skill supports multiple projects. Each project has its own `brand/` directory with its own voice, audience, and positioning. Brand context must never leak between projects.
|
|
13
|
+
|
|
14
|
+
## Rules
|
|
15
|
+
|
|
16
|
+
### 1. Always verify project identity first
|
|
17
|
+
|
|
18
|
+
Before any marketing work, run:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mktg status --json --cwd <target-path>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Verify the project name in the output matches the user's intent.
|
|
25
|
+
|
|
26
|
+
### 2. Never carry brand context across projects
|
|
27
|
+
|
|
28
|
+
When switching from Project A to Project B:
|
|
29
|
+
|
|
30
|
+
- Do not apply Project A's voice profile to Project B's content.
|
|
31
|
+
- Do not assume Project B's audience matches Project A's.
|
|
32
|
+
- Do not reuse positioning angles, keywords, or competitive data.
|
|
33
|
+
- Run a fresh `mktg status --json --cwd <path>` for the new project.
|
|
34
|
+
|
|
35
|
+
### 3. Explicit project declaration
|
|
36
|
+
|
|
37
|
+
If the user mentions multiple projects in one session:
|
|
38
|
+
|
|
39
|
+
- Confirm which project they want to work on: "I see you've mentioned both Helm and Acme. Which one are we working on right now?"
|
|
40
|
+
- Prefix all brand file reads with the correct project path.
|
|
41
|
+
- When generating output, note which project context was used.
|
|
42
|
+
|
|
43
|
+
### 4. Cross-project opportunities
|
|
44
|
+
|
|
45
|
+
It is fine to notice patterns across projects:
|
|
46
|
+
|
|
47
|
+
- "Your Helm audience overlaps with Acme's — you could cross-promote."
|
|
48
|
+
- "The SEO keywords that work for Lumi might apply to Acme too."
|
|
49
|
+
|
|
50
|
+
But never act on cross-project insights without explicit confirmation.
|
|
51
|
+
|
|
52
|
+
## Multi-Project Session Pattern
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
User: "Let's work on marketing for Helm"
|
|
56
|
+
Agent:
|
|
57
|
+
1. Run: mktg status --json --cwd ~/projects/helm
|
|
58
|
+
2. Load brand context from ~/projects/helm/brand/
|
|
59
|
+
3. Work exclusively in that context
|
|
60
|
+
|
|
61
|
+
User: "Now switch to Acme"
|
|
62
|
+
Agent:
|
|
63
|
+
1. Clear Helm context from working memory
|
|
64
|
+
2. Run: mktg status --json --cwd ~/projects/acme
|
|
65
|
+
3. Load brand context from ~/projects/acme/brand/
|
|
66
|
+
4. Work exclusively in Acme context
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Bootstrapping a fresh project
|
|
70
|
+
|
|
71
|
+
If the target directory has no `brand/` (i.e., `mktg status --json` returns `health: "needs-setup"`):
|
|
72
|
+
|
|
73
|
+
1. **Ask the user if they have a public URL for the project.**
|
|
74
|
+
- YES → offer `mktg init --from <url> --yes`. This scrapes the URL via firecrawl + chains foundation skills to auto-populate `voice-profile.md`, `positioning.md`, `audience.md`, `competitors.md` with real data. Roughly 90 seconds, end-to-end.
|
|
75
|
+
- NO → offer `mktg init --yes`. Scaffolds `brand/` with templates + installs all 50 skills + 5 agents + catalogs. User fills in brand files via the Full Product Launch playbook.
|
|
76
|
+
2. Confirm the project name that landed matches the user's intent (`mktg status --json` after init returns `project.name`).
|
|
77
|
+
3. Route based on the ladder (see `rules/progressive-enhancement.md`) — a fresh init is L0.
|
|
78
|
+
|
|
79
|
+
## Brand/ isolation per project
|
|
80
|
+
|
|
81
|
+
Each project owns its own `brand/` directory sitting at the project's `cwd`. There is no global `brand/`; isolation is by directory boundary, enforced by `--cwd` on every `mktg` call.
|
|
82
|
+
|
|
83
|
+
- **Never** write to `~/.config/mktg/` or any shared location for brand data. Brand lives in the project.
|
|
84
|
+
- **Never** read brand files from another project to seed the current one. If the user wants to copy a voice profile from Project A to Project B, they do it explicitly via `mktg brand export` + `mktg brand import --confirm`.
|
|
85
|
+
- **Learnings are project-scoped.** `brand/learnings.md` in Project A doesn't inform routing in Project B — even if the same builder runs both.
|
|
86
|
+
|
|
87
|
+
## Project-aware command invocation
|
|
88
|
+
|
|
89
|
+
Every `mktg` command CMO runs in multi-project mode passes `--cwd`:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
mktg status --json --cwd ~/projects/helm
|
|
93
|
+
mktg plan next --json --cwd ~/projects/helm
|
|
94
|
+
mktg publish --adapter postiz --dry-run --cwd ~/projects/helm --input '...'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Omitting `--cwd` defaults to `process.cwd()` — fine for single-project terminals, dangerous in a multi-project session. When in doubt, be explicit.
|
|
98
|
+
|
|
99
|
+
## Cross-project "noticing" vs acting
|
|
100
|
+
|
|
101
|
+
CMO can mention patterns across projects (*"Helm's audience watering holes overlap with Acme's — could be worth cross-promotion"*) but never *acts* on cross-project insights without explicit confirmation. The builder owns the decision.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Ecosystem — External Tools, MCP, and Browser Variants
|
|
2
|
+
|
|
3
|
+
/cmo doesn't re-implement tools mktg has already chained. It routes to the skill that wraps the tool. This file documents every external tool in the mktg ecosystem, when /cmo invokes it, and which skill owns the wrapping.
|
|
4
|
+
|
|
5
|
+
**Detection:** always start with `mktg doctor --json` to see which tools are installed and which are missing. Don't route to a tool the user hasn't installed — surface the install hint first.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## External CLIs
|
|
10
|
+
|
|
11
|
+
| Tool | What it does | CMO uses when… | Wrapped by |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `firecrawl` | Web scrape, search, crawl of known URLs | User provides a URL + "scrape this"; `competitive-intel` / `landscape-scan` need current data from competitor sites. | `competitive-intel`, `landscape-scan`, `/firecrawl` skill directly |
|
|
14
|
+
| `ffmpeg` | Video assembly, encoding (ffmpeg Quick + Enhanced tiers) | Any video output that doesn't need React/Remotion — slides → mp4, Ken Burns effects, audio mux. | `video-content` (tiers 1 + 2) |
|
|
15
|
+
| `remotion` | Programmatic React video compositions | Polished animated video with precise timing, typography, and brand-calibrated visual system. | `video-content` (tier 3) |
|
|
16
|
+
| `whisper-cli` (whisper.cpp) | Speech-to-text | Transcribe audio/video for atomization. Source for `content-atomizer` on podcasts, videos, voicemails. | `mktg transcribe` |
|
|
17
|
+
| `yt-dlp` | Media download | Pull YouTube/TikTok/podcast sources for transcription. | `mktg transcribe` |
|
|
18
|
+
| `gh` | GitHub CLI | Release notes, launch announcements, open-source project metadata for launch submissions. | `startup-launcher`, `app-store-changelog` |
|
|
19
|
+
| `summarize` (steipete/summarize) | Token-bounded text compression | Compress long pasted content before passing to downstream skills. | `/summarize` skill directly |
|
|
20
|
+
| `playwriter` / `opencli` | Browser automation backend (authenticated Chrome) | Whenever a configured browser profile is the distribution path. Standalone Playwright/Chromium is banned (Jairo directive 2026-08-28). | Browser profile skills |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Browser distribution profiles
|
|
25
|
+
|
|
26
|
+
When a platform has no usable API, /cmo routes to the browser. Multiple browser profiles may exist — each with its own logged-in session set. Pick the profile that matches the account the user wants to post from.
|
|
27
|
+
|
|
28
|
+
| Profile | Accounts / services | CMO uses when… |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Default browser profile | Shared local browser session | Generic automation, no specific account matters. |
|
|
31
|
+
| Project browser profile | Project-specific logged-in accounts | The project declares a browser profile in `brand/stack.md`. |
|
|
32
|
+
| Maintainer browser profile | Maintainer-owned services | Local maintainer workflows only; not part of the public package contract. |
|
|
33
|
+
|
|
34
|
+
**Routing rule per project (cross-ref `rules/context-switch.md`):** project's `brand/stack.md` should name the canonical browser profile if the project has browser-distribution needs. CMO reads stack.md to pick the right profile.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## MCP servers
|
|
39
|
+
|
|
40
|
+
### Exa MCP — semantic web research
|
|
41
|
+
|
|
42
|
+
**What it is:** Managed Context Protocol server for deep web search. Distinct from firecrawl:
|
|
43
|
+
- `firecrawl` — fetch a **known URL** (you have the link, want the content).
|
|
44
|
+
- `Exa` — **semantic search** across the web with citations (you have a question, want grounded answers with sources).
|
|
45
|
+
|
|
46
|
+
**CMO routes to Exa (via skill chains) when:**
|
|
47
|
+
- `landscape-scan` needs current market data — top players, recent moves, category trends. Exa returns cited sources.
|
|
48
|
+
- `competitive-intel` needs competitor discovery beyond a known list. Exa surfaces competitors the user hasn't named.
|
|
49
|
+
- `audience-research` needs audience watering holes + professional bios. Exa finds LinkedIn profiles, podcast guests, community signals.
|
|
50
|
+
- `keyword-research` needs live SERP gap analysis.
|
|
51
|
+
- Any "is this still true?" claim check — `/last30days` chains Exa under the hood.
|
|
52
|
+
|
|
53
|
+
**Wired via:** `.mcp.json` at the repo root. If `mktg doctor` shows Exa MCP unavailable, the skills that depend on it degrade to `firecrawl` + manual sourcing (lower quality, but not blocked).
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## The API-vs-Browser Fork (critical routing decision)
|
|
58
|
+
|
|
59
|
+
For every distribution request, /cmo picks one of two paths. Get this wrong and you silently fail.
|
|
60
|
+
|
|
61
|
+
| Platform | Path | Skill |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| X / Twitter | Local queue/API | `mktg publish --adapter mktg-native` for local queue; `typefully` for real threads |
|
|
64
|
+
| LinkedIn | Local queue/API | `mktg publish --adapter mktg-native`; Postiz or Typefully when connected externally |
|
|
65
|
+
| Bluesky / Mastodon / Threads | API | `postiz` or `typefully` |
|
|
66
|
+
| Reddit | Local queue/API/browser | `mktg publish --adapter mktg-native`; Postiz or browser profile for external posting |
|
|
67
|
+
| Instagram | Local queue/API/browser | `mktg publish --adapter mktg-native`; Postiz or browser profile for external posting |
|
|
68
|
+
| TikTok | Local queue/API/browser | `mktg publish --adapter mktg-native`; Postiz or browser profile for external posting |
|
|
69
|
+
| YouTube | API (via postiz) OR browser | `postiz` if configured, else browser profile |
|
|
70
|
+
| Pinterest | API | `postiz` |
|
|
71
|
+
| Discord | API | `postiz` |
|
|
72
|
+
| Slack | API | `postiz` |
|
|
73
|
+
| Facebook | **Browser only** (no postiz, no Typefully) | browser profile |
|
|
74
|
+
| Any transactional email | API | `send-email` (Resend) |
|
|
75
|
+
| Any marketing email sequence | API | `email-sequences` (to the project's configured ESP from `stack.md`) |
|
|
76
|
+
| Any App Store marketing | Hybrid — `asc` CLI for metadata, browser profile for screenshots upload | `app-store-screenshots`, `app-store-changelog` |
|
|
77
|
+
|
|
78
|
+
**Decision flow:**
|
|
79
|
+
|
|
80
|
+
1. Is the platform in the native rollout (`x`, `tiktok`, `instagram`, `reddit`, `linkedin`)?
|
|
81
|
+
- YES → use `mktg publish --adapter mktg-native` for local queue/history and Studio-native workflow.
|
|
82
|
+
2. Does the user need real external network posting now?
|
|
83
|
+
- YES → check Postiz/Typefully/browser availability before claiming anything shipped.
|
|
84
|
+
3. Is the user's `POSTIZ_API_KEY` set?
|
|
85
|
+
- YES → use Postiz for supported external social providers; keep Typefully reserved for X/threads specialist flows and fallback.
|
|
86
|
+
- NO → fall back to Typefully for X/LinkedIn/Threads/Bluesky/Mastodon where it fits; fall back to browser profile or file for Reddit/IG/TikTok.
|
|
87
|
+
4. Is this an X thread?
|
|
88
|
+
- YES → always Typefully (thread UX is canonical there).
|
|
89
|
+
5. Does `brand/stack.md` specify a browser profile?
|
|
90
|
+
- YES → use that profile for browser path.
|
|
91
|
+
- NO → ask for the browser profile to use before external posting.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Skills that ARE the wrappers (don't re-implement)
|
|
96
|
+
|
|
97
|
+
Anytime a user asks for something that an ecosystem tool does, don't call the tool directly — route to the skill that wraps it. The wrapping skill handles error cases, auth, retries, and brand calibration.
|
|
98
|
+
|
|
99
|
+
| User says… | Route to | Don't… |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| "scrape this site" | `/firecrawl` | …call `firecrawl` CLI directly from `/cmo`. |
|
|
102
|
+
| "transcribe this video" | `mktg transcribe` | …pipe `yt-dlp \| whisper-cli` manually. |
|
|
103
|
+
| "make a video from slides" | `video-content` | …shell out to ffmpeg inline. |
|
|
104
|
+
| "summarize this" | `/summarize` | …ask the LLM to compress; use the `summarize` CLI for token-bounded output. |
|
|
105
|
+
| "post to Instagram" | `postiz` (if configured) else configured browser profile | …tell the user to do it manually. |
|
|
106
|
+
| "research this market" | `landscape-scan` | …call Exa MCP directly; landscape-scan does the full chain with Claims Blacklist. |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Install hints
|
|
111
|
+
|
|
112
|
+
`mktg doctor` surfaces install commands per missing tool. If any of these fail at invocation time, `/cmo` tells the user exactly what to install before retrying:
|
|
113
|
+
|
|
114
|
+
| Tool | Install |
|
|
115
|
+
|---|---|
|
|
116
|
+
| `firecrawl` | `npm i -g firecrawl` + `FIRECRAWL_API_KEY` |
|
|
117
|
+
| `ffmpeg` | `brew install ffmpeg` |
|
|
118
|
+
| `remotion` | `npm i -g @remotion/cli` |
|
|
119
|
+
| `playwright-cli` | **BANNED (Jairo directive 2026-08-28)** — use `playwright` snippets through Playwriter (`npx -y playwriter@latest`) or `opencli` instead |
|
|
120
|
+
| `gh` | `brew install gh` |
|
|
121
|
+
| `whisper-cli` | `brew install whisper-cpp` |
|
|
122
|
+
| `yt-dlp` | `brew install yt-dlp` |
|
|
123
|
+
| `summarize` | `npm i -g @steipete/summarize` |
|
|
124
|
+
|
|
125
|
+
Ecosystem table authoritative source: `CLAUDE.md` at repo root. This rules file mirrors the CMO-relevant slice; when they drift, CLAUDE.md wins.
|