@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,90 @@
|
|
|
1
|
+
# Quality Gate — AI Slop Audit
|
|
2
|
+
|
|
3
|
+
After ANY content skill produces text output (copy, emails, social posts, SEO articles, lead magnets, landing pages), run this quality gate before presenting to the user.
|
|
4
|
+
|
|
5
|
+
## When to Apply
|
|
6
|
+
|
|
7
|
+
Apply after these skills produce output:
|
|
8
|
+
- `direct-response-copy` (all modes: generate, edit, cold email)
|
|
9
|
+
- `seo-content` (single article and programmatic)
|
|
10
|
+
- `email-sequences` (all sequence types)
|
|
11
|
+
- `content-atomizer` (all platform variants)
|
|
12
|
+
- `newsletter` (editorial content)
|
|
13
|
+
- `lead-magnet` (all written sections)
|
|
14
|
+
- `social-campaign` (Phase 3 is this audit)
|
|
15
|
+
- `competitor-alternatives` (comparison copy)
|
|
16
|
+
|
|
17
|
+
Do NOT apply to:
|
|
18
|
+
- Research output (audience profiles, competitive intel, keyword plans)
|
|
19
|
+
- Strategy documents (launch plans, pricing analysis)
|
|
20
|
+
- Technical output (schema markup, SEO audit reports)
|
|
21
|
+
|
|
22
|
+
## How to Audit
|
|
23
|
+
|
|
24
|
+
1. Read the full reference: [references/ai-slop-patterns.md](../references/ai-slop-patterns.md)
|
|
25
|
+
2. Read the output in sequence, not paragraph by paragraph
|
|
26
|
+
3. Check structural patterns (em dashes, triple anaphora, dramatic reveals)
|
|
27
|
+
4. Check transition filler ("Here's why", "Here's the thing", "The reality is")
|
|
28
|
+
5. Check vocabulary tells ("landscape", "delve", "nuanced", "multifaceted")
|
|
29
|
+
6. If multiple pieces: check batch-level patterns (uniform openings, identical rhythm)
|
|
30
|
+
7. Fix anything that fails — rewrite, don't just flag
|
|
31
|
+
8. If `brand/voice-profile.md` exists, compare output against the documented voice
|
|
32
|
+
|
|
33
|
+
## The Rule
|
|
34
|
+
|
|
35
|
+
**If the output reads like AI wrote it, rewrite it until it doesn't.** The quality gate is not a checklist to pass — it's a standard to meet. Every piece of text that leaves /cmo should sound like a human who happens to be very good at marketing wrote it.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Full Pre-Ship Pipeline
|
|
40
|
+
|
|
41
|
+
The AI slop audit is one of four gates. Before any content ships (landing page goes live, email sequence triggers, posts schedule, article publishes), run them in this order:
|
|
42
|
+
|
|
43
|
+
| # | Gate | Purpose | How /cmo invokes | Fail behavior |
|
|
44
|
+
|---|---|---|---|---|
|
|
45
|
+
| 1 | `editorial-first-pass` | Structural check — hook, thesis, promise, stakes. Fastest gate; kills obvious misses early. | `/editorial-first-pass <path>` — returns pass/fail + rework recommendations. | On fail: bounce back to the content skill for a second pass. Don't proceed to gate 2. |
|
|
46
|
+
| 2 | `ai-check` + this AI slop audit | Line-by-line pattern detection against the full reference at `references/ai-slop-patterns.md`. | Invoked automatically by content skills in their own post-production; /cmo runs it on batches (e.g., atomizer output). | On fail: rewrite the flagged lines in place. Don't pass slop to a reviewer. |
|
|
47
|
+
| 3 | `mktg-content-reviewer` agent | Voice-profile consistency — does this sound like the brand documented in `brand/voice-profile.md`? | Spawn via Agent tool — see `rules/sub-agents.md` for the pattern. Returns structured score + drift report. | On fail: loop back to the content skill with the specific rewrite recommendations. |
|
|
48
|
+
| 4 | `mktg-seo-analyst` agent (SEO assets only) | Keyword-plan adherence — primary/secondary keywords, search intent match, on-page basics, AI search readiness. | Spawn via Agent tool. Reads `brand/keyword-plan.md` + `brand/audience.md` + `brand/competitors.md`. | On fail: loop back with keyword-gap recommendations. |
|
|
49
|
+
|
|
50
|
+
**Which gates apply to which outputs:**
|
|
51
|
+
|
|
52
|
+
| Output | Gate 1 | Gate 2 | Gate 3 | Gate 4 |
|
|
53
|
+
|---|---|---|---|---|
|
|
54
|
+
| Landing page (`direct-response-copy`) | ✓ | ✓ | ✓ | ✓ if SEO is a goal |
|
|
55
|
+
| Sales copy, cold email | ✓ | ✓ | ✓ | — |
|
|
56
|
+
| SEO article (`seo-content`) | ✓ | ✓ | ✓ | ✓ |
|
|
57
|
+
| Email sequence (`email-sequences`) | ✓ (per email) | ✓ | ✓ (batch) | — |
|
|
58
|
+
| Newsletter issue (`newsletter`) | ✓ | ✓ | ✓ | — |
|
|
59
|
+
| Lead magnet (`lead-magnet`) | ✓ | ✓ | ✓ | — |
|
|
60
|
+
| Atomized social posts (`content-atomizer`) | — (platform-native check instead) | ✓ (batch-level) | ✓ (batch) | — |
|
|
61
|
+
| Comparison page (`competitor-alternatives`) | ✓ | ✓ | ✓ | ✓ |
|
|
62
|
+
| AI-search asset (`ai-seo`) | ✓ | ✓ | ✓ | ✓ |
|
|
63
|
+
| Research / strategy output | — | — | — | — (no gates on research) |
|
|
64
|
+
| Visual assets | — (visual review happens in `visual-style` → `brand-kit-playground`) | — | — | — |
|
|
65
|
+
|
|
66
|
+
**Skipping gates is an anti-pattern.** /cmo doesn't skip gates to save time. If the user demands a skip, surface the risk first:
|
|
67
|
+
|
|
68
|
+
> *"You want to ship the landing page without the content-reviewer gate. That risks voice drift — my last review on similar content flagged 3 tone issues. OK with you?"*
|
|
69
|
+
|
|
70
|
+
The user can override. /cmo never silently bypasses.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Named pipeline: `pre-ship-gates`
|
|
75
|
+
|
|
76
|
+
When /cmo needs to run the full gate chain on one asset:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
PIPELINE: pre-ship-gates
|
|
80
|
+
INPUT: <file path>
|
|
81
|
+
STEPS:
|
|
82
|
+
1. /editorial-first-pass <path> → PASS required
|
|
83
|
+
2. AI slop audit (this file) → rewrite in place
|
|
84
|
+
3. Agent: mktg-content-reviewer → score ≥ threshold required
|
|
85
|
+
4. Agent: mktg-seo-analyst → score ≥ threshold required (SEO assets only)
|
|
86
|
+
OUTPUT: ready-to-ship flag + final asset path
|
|
87
|
+
FAIL: return to the content skill with aggregated recommendations
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Announce the pipeline to the user before running — they see the investment up front, approve once, and let it compound.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cmo-recency-grounding
|
|
3
|
+
description: |
|
|
4
|
+
Teaches the CMO that LLMs are blind past their training cutoff and that
|
|
5
|
+
/last30days + landscape.md are the corrective lenses for recency.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Recency Grounding — You Are Blind Past Your Training Cutoff
|
|
9
|
+
|
|
10
|
+
## The Core Problem
|
|
11
|
+
|
|
12
|
+
You are an LLM. Your knowledge has a cutoff date. Everything after that date is a black hole — you don't know what happened, what changed, what launched, what died, what got acquired, what pivoted. You will confidently state things about the market that were true 6 months ago and are wrong today. You won't know they're wrong because you can't see the gap.
|
|
13
|
+
|
|
14
|
+
This is the single biggest risk in marketing: making claims about a market that moved while you weren't looking.
|
|
15
|
+
|
|
16
|
+
## Your Corrective Lenses
|
|
17
|
+
|
|
18
|
+
Two tools bridge the gap:
|
|
19
|
+
|
|
20
|
+
### 1. `/last30days` — Live Research
|
|
21
|
+
|
|
22
|
+
The `/last30days` skill searches Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, Bluesky, and the web for the last 30 days of real discussion. It returns what people are *actually saying right now* — not what your training data says they said months ago.
|
|
23
|
+
|
|
24
|
+
**Invoke it by name:** `Skill: last30days` with a research query as the argument.
|
|
25
|
+
|
|
26
|
+
### 2. `brand/landscape.md` — Cached Ground Truth
|
|
27
|
+
|
|
28
|
+
`/landscape-scan` chains `/last30days` to produce a structured ecosystem snapshot with a Claims Blacklist. This file is the cached version of recent reality — good for 14 days before it goes stale.
|
|
29
|
+
|
|
30
|
+
## When to Ground
|
|
31
|
+
|
|
32
|
+
### Before making ecosystem claims
|
|
33
|
+
|
|
34
|
+
Any time you're about to state something about competitors, market trends, pricing benchmarks, adoption rates, or industry shifts — ask yourself: "Do I know this from my training data, or from verified recent research?"
|
|
35
|
+
|
|
36
|
+
If the answer is training data:
|
|
37
|
+
1. Check `brand/landscape.md` — is it fresh (< 14 days)?
|
|
38
|
+
2. If fresh: use it. The Claims Blacklist is the hard gate.
|
|
39
|
+
3. If stale or missing: tell the user. "My knowledge of the market may be outdated. Want me to run `/landscape-scan` to get a current snapshot before we proceed?"
|
|
40
|
+
|
|
41
|
+
### Before content campaigns
|
|
42
|
+
|
|
43
|
+
Before routing to any content skill (`seo-content`, `direct-response-copy`, `email-sequences`, `social-campaign`, `content-atomizer`, `newsletter`), check:
|
|
44
|
+
- Does `brand/landscape.md` exist and is it fresh?
|
|
45
|
+
- If not: recommend running `/landscape-scan` first. One research pass grounds an entire campaign.
|
|
46
|
+
|
|
47
|
+
### Before posting to social
|
|
48
|
+
|
|
49
|
+
Before any tweet, LinkedIn post, or social content goes live:
|
|
50
|
+
- Does it make a claim about the current state of something? ("The market is moving toward X", "Nobody else does Y", "Users are frustrated with Z")
|
|
51
|
+
- If yes: is that claim backed by landscape.md research, or are you guessing from training data?
|
|
52
|
+
- If guessing: flag it. "This tweet claims X. I'm not confident this is still true. Want me to quick-check with `/last30days [topic]` before posting?"
|
|
53
|
+
|
|
54
|
+
### Before competitive positioning
|
|
55
|
+
|
|
56
|
+
Before running `/competitive-intel`, `/positioning-angles`, or `/competitor-alternatives`:
|
|
57
|
+
- Is `brand/landscape.md` fresh? Competitive claims are the highest-risk category for recency errors.
|
|
58
|
+
- If landscape.md is stale: run `/landscape-scan` first. Don't build positioning on top of stale competitive data.
|
|
59
|
+
|
|
60
|
+
## Web Research Tool Hierarchy
|
|
61
|
+
|
|
62
|
+
When you need to look something up, use the right tool for the job:
|
|
63
|
+
|
|
64
|
+
| Need | Tool | Why |
|
|
65
|
+
|------|------|-----|
|
|
66
|
+
| Social + community signal (Reddit, X, YouTube, TikTok, HN) | `/last30days` (chains Parallel AI for web) | Engagement signals, real people talking |
|
|
67
|
+
| Company research, competitor lookup, finding specific sites | Exa MCP (`company-research`, `get-code-context-exa`) | Best discovery engine — finds things other search misses |
|
|
68
|
+
| General web queries the CMO needs answered | Exa MCP | Higher quality discovery than native WebSearch |
|
|
69
|
+
| Full ecosystem snapshot with Claims Blacklist | `/landscape-scan` (chains `/last30days`) | Structured ground truth for 14 days |
|
|
70
|
+
|
|
71
|
+
**Never use Claude's native WebSearch tool.** Always use Exa MCP for web queries. Exa finds things native search misses — including direct competitors, niche tools, and specific companies that generic search buries.
|
|
72
|
+
|
|
73
|
+
## How to Use /last30days Directly
|
|
74
|
+
|
|
75
|
+
For social/community signal (not a full landscape refresh), invoke directly:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Skill: last30days
|
|
79
|
+
Args: "[specific question about current market state]"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This searches Reddit, X, YouTube, TikTok, HN, Polymarket, AND web (via Parallel AI) in one pass.
|
|
83
|
+
|
|
84
|
+
Examples:
|
|
85
|
+
- "What are people saying about [competitor] in the last 30 days?"
|
|
86
|
+
- "Is [claim from our copy] still accurate as of this month?"
|
|
87
|
+
- "What's the current sentiment around [technology/trend]?"
|
|
88
|
+
|
|
89
|
+
## How to Use Exa MCP Directly
|
|
90
|
+
|
|
91
|
+
For company research, competitor discovery, or any web query the CMO needs:
|
|
92
|
+
|
|
93
|
+
- `company-research` skill — finds company info, competitors, news, financials
|
|
94
|
+
- `get-code-context-exa` skill — finds code examples, API docs, GitHub repos
|
|
95
|
+
- Exa MCP tools directly — for custom search queries with domain filtering
|
|
96
|
+
|
|
97
|
+
Examples:
|
|
98
|
+
- "Find competitors to [product] in the [space] market"
|
|
99
|
+
- "What does [company]'s pricing page say?"
|
|
100
|
+
- "Find GitHub repos similar to [project]"
|
|
101
|
+
|
|
102
|
+
## The Decision Framework
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Am I stating something about the world outside this project?
|
|
106
|
+
├── NO → proceed (internal product facts are fine)
|
|
107
|
+
└── YES → Is it backed by landscape.md (< 14 days old)?
|
|
108
|
+
├── YES → proceed, respecting Claims Blacklist
|
|
109
|
+
└── NO → Is it a quick claim I can spot-check?
|
|
110
|
+
├── YES → run /last30days "[claim]" inline
|
|
111
|
+
└── NO → recommend /landscape-scan before proceeding
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## What This Looks Like in Practice
|
|
115
|
+
|
|
116
|
+
**Bad CMO behavior:** "Your competitors are [list from training data]. The market is moving toward [trend from training data]. Let's position you as [angle based on stale competitive assumptions]."
|
|
117
|
+
|
|
118
|
+
**Good CMO behavior:** "I see your landscape.md is 3 days old — good. Based on the current ecosystem snapshot, your competitors are [list from landscape.md]. The Claims Blacklist flags [specific wrong claims]. Let's position around [angle grounded in verified data]."
|
|
119
|
+
|
|
120
|
+
**Good CMO behavior (no landscape):** "Before we write competitive copy, I want to ground us in reality. My knowledge of the market may not reflect the last few months. Let me run `/landscape-scan` — it takes 2-3 minutes and will give us verified competitive data, recent market shifts, and a Claims Blacklist. Worth it?"
|
|
121
|
+
|
|
122
|
+
## The Rule
|
|
123
|
+
|
|
124
|
+
**Never make an ecosystem claim from training data alone when `/last30days` or `landscape.md` can verify it.** The 2-minute research cost is always worth it compared to the credibility cost of a false claim that a customer can disprove with a Google search.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cmo-safety
|
|
3
|
+
description: |
|
|
4
|
+
Safety rules for external actions, rate limiting, and tool usage.
|
|
5
|
+
Prevents accidental publishing, data leaks, and SaaS dependency.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Safety Rules
|
|
9
|
+
|
|
10
|
+
## External Actions
|
|
11
|
+
|
|
12
|
+
Any action that reaches the outside world requires `--dry-run` first.
|
|
13
|
+
|
|
14
|
+
### Posting to social media
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Always dry-run first
|
|
18
|
+
ply "Go to twitter.com and compose: {content}" --dry-run
|
|
19
|
+
|
|
20
|
+
# Only after user approves the preview
|
|
21
|
+
ply "Go to twitter.com and compose: {content}"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Sending emails
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Always dry-run first
|
|
28
|
+
gws send --to user@example.com --subject "..." --body "..." --dry-run
|
|
29
|
+
|
|
30
|
+
# Only after user approves
|
|
31
|
+
gws send --to user@example.com --subject "..." --body "..."
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Publishing content
|
|
35
|
+
|
|
36
|
+
Never publish directly. Always:
|
|
37
|
+
1. Generate content to a file
|
|
38
|
+
2. Show the user the preview
|
|
39
|
+
3. Get explicit "publish" confirmation
|
|
40
|
+
4. Execute the publish action
|
|
41
|
+
|
|
42
|
+
## Rate Limiting
|
|
43
|
+
|
|
44
|
+
- Maximum 3 social posts per platform per session unless the user explicitly asks for more.
|
|
45
|
+
- Maximum 1 email blast per session. Always confirm recipient list.
|
|
46
|
+
- Maximum 10 pages in a single programmatic SEO batch. Review samples before scaling.
|
|
47
|
+
|
|
48
|
+
## Agentic Tools Only
|
|
49
|
+
|
|
50
|
+
Do not reference or depend on SaaS dashboard tools. The system uses CLI-native tools only:
|
|
51
|
+
|
|
52
|
+
| Need | Tool | Not This |
|
|
53
|
+
|------|------|----------|
|
|
54
|
+
| Send email | `gws` | Mailchimp, ConvertKit, HubSpot |
|
|
55
|
+
| Post to social | `ply`, `playwright-cli` | Buffer, Hootsuite, Later |
|
|
56
|
+
| Generate video | `remotion`, `ffmpeg` | Loom, Canva Video |
|
|
57
|
+
| Web research | Exa MCP (primary), `firecrawl` (scraping) | Ahrefs, SEMrush, Moz, Claude native WebSearch |
|
|
58
|
+
| Analytics | PostHog, GA4 API | Dashboard-only tools |
|
|
59
|
+
|
|
60
|
+
If a user mentions a SaaS tool they already use, that's fine — integrate with their existing stack. But never suggest or require a new SaaS signup.
|
|
61
|
+
|
|
62
|
+
## File Safety
|
|
63
|
+
|
|
64
|
+
- Never write outside the project directory. All paths must be relative to project root.
|
|
65
|
+
- Never read or write `.env` files in skill output. Reference `brand/stack.md` instead.
|
|
66
|
+
- Never include API keys, tokens, or credentials in generated content.
|
|
67
|
+
- All generated files go to `brand/`, `campaigns/`, or `marketing/` directories.
|
|
68
|
+
|
|
69
|
+
## Brand Data Privacy
|
|
70
|
+
|
|
71
|
+
- Brand voice profiles, audience data, and competitive intel are project-private.
|
|
72
|
+
- Never include brand data in external API calls unless the user explicitly requests it.
|
|
73
|
+
- When using web research tools, search for public information only.
|
|
74
|
+
|
|
75
|
+
## Content Safety
|
|
76
|
+
|
|
77
|
+
- Generated copy must not make false claims or unverifiable statistics.
|
|
78
|
+
- When using estimated data (no web research connected), prefix with `~` and note it is estimated.
|
|
79
|
+
- Never generate content that impersonates real people or brands.
|
|
80
|
+
- Flag potential legal issues (trademark, copyright) when they arise.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Studio API Index
|
|
2
|
+
|
|
3
|
+
This is the /cmo routing index for `mktg-studio`. Runtime Studio schema wins:
|
|
4
|
+
if this file conflicts with `GET /api/schema`, trust the running Studio.
|
|
5
|
+
|
|
6
|
+
## Detect And Discover
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
STUDIO=${STUDIO_BASE:-http://localhost:3001}
|
|
10
|
+
curl -fsS -m 2 "$STUDIO/api/health" >/dev/null
|
|
11
|
+
curl -fsS "$STUDIO/api/schema" | jq '.routes[].path'
|
|
12
|
+
curl -fsS "$STUDIO/api/schema?route=/api/navigate" | jq
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
If health is not reachable, continue in CLI-only mode. Studio is a reflector,
|
|
16
|
+
not a durable dependency.
|
|
17
|
+
|
|
18
|
+
## Boot Studio Explicitly
|
|
19
|
+
|
|
20
|
+
Do not rely on hidden Claude hooks or browser automation to start Studio. If the
|
|
21
|
+
user asks for a visual dashboard, or if the best next step is easier to
|
|
22
|
+
inspect in Studio, use the CLI launcher:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
mktg studio --open --intent cmo --session <id>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
For agent-safe discovery, preview first:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
mktg studio --dry-run --json --intent cmo --session <id>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The preview response returns the exact `urls.dashboard` value, for example:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
http://localhost:3000/dashboard?mode=cmo&session=<id>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`mktg studio` prefers a sibling `mktg-studio/bin/mktg-studio.ts` checkout,
|
|
41
|
+
then `MKTG_STUDIO_BIN`, then `mktg-studio` on PATH. Preview mode is always
|
|
42
|
+
side-effect free; launch mode starts the local Bun API and Next.js dashboard.
|
|
43
|
+
|
|
44
|
+
## Primary Navigation Contract
|
|
45
|
+
|
|
46
|
+
Current primary tabs:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
pulse, signals, publish, brand
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Legacy callers are remapped by the Studio server:
|
|
53
|
+
|
|
54
|
+
| Legacy tab | Current destination |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `trends` | `signals` with `filter.mode = "radar"` |
|
|
57
|
+
| `audience` | `pulse` |
|
|
58
|
+
| `opportunities` | `pulse` |
|
|
59
|
+
|
|
60
|
+
Trend radar is not its own tab. Use:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{"tab":"signals","filter":{"mode":"radar"}}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Agent-Verbs
|
|
67
|
+
|
|
68
|
+
| Verb | Endpoint | Use |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| Schema fetch | `GET /api/schema` | Discover live route, body, enum, and dry-run support. |
|
|
71
|
+
| Log | `POST /api/activity/log` | Append one meaningful action to the Activity panel. |
|
|
72
|
+
| Brand note | `POST /api/brand/note` | Tell Studio that /cmo wrote or edited a brand file externally. |
|
|
73
|
+
| Brand write | `POST /api/brand/write` | Atomic Studio-mediated brand write with optimistic locking. |
|
|
74
|
+
| Push action | `POST /api/opportunities/push` | Add a next action that Pulse can surface. |
|
|
75
|
+
| Navigate | `POST /api/navigate` | Move the dashboard to the user's next useful view. |
|
|
76
|
+
| Toast | `POST /api/toast` | Short transient user-visible confirmation. |
|
|
77
|
+
| Brand refresh | `POST /api/brand/refresh` | Re-run/refresh foundation data when the user explicitly wants it. |
|
|
78
|
+
|
|
79
|
+
## Payload Patterns
|
|
80
|
+
|
|
81
|
+
Log:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"kind": "skill-run",
|
|
86
|
+
"skill": "landscape-scan",
|
|
87
|
+
"summary": "Refreshed landscape and wrote brand/landscape.md",
|
|
88
|
+
"filesChanged": ["brand/landscape.md"]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Push next action:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"skill": "seo-content",
|
|
97
|
+
"reason": "Fresh keyword plan exists but no launch article has been drafted.",
|
|
98
|
+
"priority": 80
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Navigate to Publish:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{"tab":"publish","filter":{"adapter":"mktg-native"}}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Navigate to Trend radar:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{"tab":"signals","filter":{"mode":"radar"}}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## What To Mirror
|
|
115
|
+
|
|
116
|
+
- Skill runs that produce user-visible artifacts.
|
|
117
|
+
- Brand file writes and refreshes.
|
|
118
|
+
- Native, Postiz, Typefully, Resend, or file publish actions.
|
|
119
|
+
- Recommended next actions that should appear on Pulse.
|
|
120
|
+
- One navigation event when the user's attention should move.
|
|
121
|
+
|
|
122
|
+
## What Not To Mirror
|
|
123
|
+
|
|
124
|
+
- Read-only setup checks such as `mktg status`, `mktg doctor`, `mktg list`, or `mktg schema`.
|
|
125
|
+
- Dry-runs, unless the user explicitly asked to inspect a preview.
|
|
126
|
+
- Internal scratch work, prompt planning, or failed probes that do not change user-visible state.
|
|
127
|
+
- Repeated navigations during one turn.
|
|
128
|
+
|
|
129
|
+
## Order Of Operations
|
|
130
|
+
|
|
131
|
+
1. `POST /api/activity/log` for the start or completion event.
|
|
132
|
+
2. `POST /api/brand/note` or `POST /api/brand/write` if brand memory changed.
|
|
133
|
+
3. `POST /api/opportunities/push` if a next action exists.
|
|
134
|
+
4. `POST /api/navigate` if the user should look somewhere specific.
|
|
135
|
+
5. `POST /api/toast` for the short confirmation.
|
|
136
|
+
|
|
137
|
+
Keep calls fire-and-forget. If Studio returns non-2xx, continue the real work
|
|
138
|
+
and do not block the user on dashboard reflection.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# CMO ↔ Studio Integration
|
|
2
|
+
|
|
3
|
+
The mktg-studio dashboard (Bun API + Next.js UI, default ports 3001 + 3000, or the ports printed by `mktg studio`) is a local visual layer that /cmo *drives* from Claude Code. The studio never initiates skill runs; it reflects state. Every user-visible action the studio shows — an activity row, a tab switch, a toast, a refreshed brand file — is /cmo POSTing to the studio's HTTP surface.
|
|
4
|
+
|
|
5
|
+
## When the studio is running
|
|
6
|
+
|
|
7
|
+
Detect with a single HEAD request:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
STUDIO=${STUDIO_BASE:-http://localhost:3001}
|
|
11
|
+
curl -s -o /dev/null -w "%{http_code}" "$STUDIO/api/health"
|
|
12
|
+
# 200 → studio is live. Anything else → studio is offline or starting.
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
If 200, /cmo is in **studio-attached mode** and MUST mirror key side effects to the studio via HTTP. If not 200, /cmo is in **standalone mode** — work exactly as before, no HTTP calls.
|
|
16
|
+
|
|
17
|
+
There is no retry loop. Studio absence is not an error; it's a state.
|
|
18
|
+
|
|
19
|
+
## When the user wants Studio open
|
|
20
|
+
|
|
21
|
+
Launch Studio explicitly through `mktg`; do not rely on hidden hooks or
|
|
22
|
+
browser automation:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
mktg studio --dry-run --json --intent cmo --session <id>
|
|
26
|
+
mktg studio --open --intent cmo --session <id>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The dry-run is side-effect free and returns `urls.dashboard`, usually:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
http://localhost:3000/dashboard?mode=cmo&session=<id>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The launcher prefers the sibling `mktg-studio/bin/mktg-studio.ts` checkout,
|
|
36
|
+
then `MKTG_STUDIO_BIN`, then `mktg-studio` on PATH. Once health returns 200,
|
|
37
|
+
switch to studio-attached mode and use the verbs below.
|
|
38
|
+
|
|
39
|
+
## The studio verbs
|
|
40
|
+
|
|
41
|
+
Most are mutating POSTs /cmo sends outbound; schema-fetch is a read-only GET /cmo calls before the first POST of a session to resolve payload schemas at runtime. Never hardcode shapes — the studio's schema is the source of truth.
|
|
42
|
+
|
|
43
|
+
| Verb | Endpoint | Purpose | When /cmo uses it |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| schema-fetch | `GET /api/schema` | Resolve every endpoint's request + response shape at runtime | Once per session, before the first mutating POST. Cache the result for the rest of the session. |
|
|
46
|
+
| activity | `POST /api/activity/log` | Append a row to the live Activity panel | After any skill run, any brand file write, any publish, any non-trivial CLI invocation |
|
|
47
|
+
| brand-note | `POST /api/brand/note` | Tell Studio that /cmo wrote a brand file externally | After direct edits to `brand/*.md` |
|
|
48
|
+
| brand-write | `POST /api/brand/write` | Atomic Studio-mediated brand write with optimistic locking | When /cmo wants Studio to own the write + refresh event |
|
|
49
|
+
| push-action | `POST /api/opportunities/push` | Add a recommended next action that Pulse can surface | When analysis produces a concrete next move |
|
|
50
|
+
| navigate | `POST /api/navigate` | Switch the active tab + apply filters | When routing a user from one concern to another (e.g., drafted a post → switch to Publish tab) |
|
|
51
|
+
| toast | `POST /api/toast` | Fire a one-off sonner toast | For transient user-facing notifications — "brand voice refreshed", "postiz draft created", etc. |
|
|
52
|
+
| brand-refresh | `POST /api/brand/refresh` | Invalidate brand-backed SWR caches | Immediately after `brand/*.md` is written or appended |
|
|
53
|
+
|
|
54
|
+
Every body is JSON. `/api/schema` is agent-native by design — same contract as `mktg schema --json` — so a teammate agent extending /cmo can self-discover the studio surface with one curl.
|
|
55
|
+
|
|
56
|
+
## What to mirror vs what to hide
|
|
57
|
+
|
|
58
|
+
**Mirror (post to studio):**
|
|
59
|
+
- Skill runs that write brand files → `activity` + `brand/refresh`
|
|
60
|
+
- Publish actions (Typefully / postiz / Resend drafts) → `activity` + `navigate` to Publish tab + `toast`
|
|
61
|
+
- Native publish actions (`mktg-native`) → `activity` + `navigate` to Publish tab + `toast`
|
|
62
|
+
- Signal collection, competitive scans, landscape refreshes → `activity` + `navigate` to Signals or Signals/Trend radar
|
|
63
|
+
- Opportunity recommendations → `activity` + `opportunities/push` so Pulse can surface the next action
|
|
64
|
+
|
|
65
|
+
**Hide (do not post):**
|
|
66
|
+
- Read-only CLI invocations (`mktg status`, `mktg list`, `mktg plan next`) — these are /cmo's own context gathering, not user-visible events
|
|
67
|
+
- Dry-run previews (`--dry-run` anywhere) — never mirror a preview as if it were an action
|
|
68
|
+
- Failed integration checks that /cmo is about to guide the user through — surface as a toast only after the user opts in to setup
|
|
69
|
+
- Internal learnings appended to `brand/learnings.md` from the `--learning` flag — the brand refresh event will show the file changed, which is enough
|
|
70
|
+
|
|
71
|
+
## Activity row shape
|
|
72
|
+
|
|
73
|
+
```jsonc
|
|
74
|
+
{
|
|
75
|
+
"kind": "skill-run" | "brand-write" | "publish" | "navigate" | "toast",
|
|
76
|
+
"skill": "seo-content", // optional, when kind === "skill-run"
|
|
77
|
+
"summary": "Drafted 3 SEO articles for 'anti-course course' positioning",
|
|
78
|
+
"filesChanged": ["brand/assets.md"], // optional
|
|
79
|
+
"meta": {
|
|
80
|
+
"result": "success" | "partial" | "failed"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
/cmo NEVER sends the full skill output. The activity log is a log, not a storage layer. Full artifacts live in brand files and the SQLite `skill_runs` table (written by the mktg CLI, not by /cmo directly).
|
|
86
|
+
|
|
87
|
+
## Navigate payload — use sparingly
|
|
88
|
+
|
|
89
|
+
```jsonc
|
|
90
|
+
{
|
|
91
|
+
"tab": "publish" | "signals" | "brand" | "pulse",
|
|
92
|
+
"filter": { "adapter": "mktg-native" } // optional, tab-specific
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Only navigate when the user's next logical move is on a specific tab. Trend radar lives inside Signals, so use `{"tab":"signals","filter":{"mode":"radar"}}`. Legacy tabs are remapped by Studio (`trends` → Signals/Trend radar, `audience` and `opportunities` → Pulse), but new callers should send only `pulse`, `signals`, `publish`, or `brand`. Do not navigate on every skill run — that thrashes the UI. A good rule: navigate at most once per user turn, at the moment their attention needs to shift.
|
|
97
|
+
|
|
98
|
+
## Toast — transient only
|
|
99
|
+
|
|
100
|
+
Toasts disappear. Use them for ephemeral confirmations, never for information the user might need to reference later. "Posted to LinkedIn", "Brand voice refreshed", "Landscape stale — refreshing now" — yes. A 200-word strategic recommendation — no, that goes in the chat (Claude Code terminal) where it persists.
|
|
101
|
+
|
|
102
|
+
## Order of operations
|
|
103
|
+
|
|
104
|
+
When a skill run produces a brand file write AND a publish AND a tab switch, the order matters:
|
|
105
|
+
|
|
106
|
+
1. `POST /api/activity/log` first — records the event, appears in the Activity panel immediately
|
|
107
|
+
2. `POST /api/brand/note`, `POST /api/brand/write`, or `POST /api/brand/refresh` second (if brand file changed) — invalidates SWR so the tab shows fresh data
|
|
108
|
+
3. `POST /api/opportunities/push` third (if a next action should appear on Pulse)
|
|
109
|
+
4. `POST /api/navigate` fourth (if tab should switch) — user arrives on a tab that already has the latest data
|
|
110
|
+
5. `POST /api/toast` last — confirmation on top of the already-correct view
|
|
111
|
+
|
|
112
|
+
Posting navigate before refresh risks showing the user stale data on the destination tab.
|
|
113
|
+
|
|
114
|
+
## Failure handling
|
|
115
|
+
|
|
116
|
+
Every /cmo → studio POST is fire-and-forget. If the studio returns non-2xx, /cmo:
|
|
117
|
+
|
|
118
|
+
1. Logs a single-line note to stderr — "studio POST failed: {endpoint} {code}"
|
|
119
|
+
2. Continues the skill run to completion
|
|
120
|
+
3. Does NOT retry, does NOT queue, does NOT surface the failure to the user
|
|
121
|
+
|
|
122
|
+
The studio is a dashboard, not a durable sink. If a row is lost, the skill's actual output (brand files, publish_log SQLite row) is the source of truth and will re-surface on the next dashboard reload.
|
|
123
|
+
|
|
124
|
+
## Schema introspection (the schema-fetch verb in detail)
|
|
125
|
+
|
|
126
|
+
First action on a studio-attached session, before any mutating POST:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
STUDIO=${STUDIO_BASE:-http://localhost:3001}
|
|
130
|
+
curl -s "$STUDIO/api/schema" > /tmp/studio-schema.json
|
|
131
|
+
jq '.routes[] | select(.path == "/api/activity/log")' /tmp/studio-schema.json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The response shape mirrors `mktg schema --json`: every endpoint lists its request body shape, response body shape, enum values, and required-vs-optional fields. /cmo uses this to:
|
|
135
|
+
|
|
136
|
+
1. Validate its own outbound payloads before POSTing (reject bad payloads locally, don't spam the studio with 400s).
|
|
137
|
+
2. Discover new endpoints added in newer studio versions without a CLI update.
|
|
138
|
+
3. Surface version drift: if /cmo's expected shape and the studio's declared shape diverge, log once to stderr and fall back to the minimal common subset.
|
|
139
|
+
|
|
140
|
+
Cache for the session — the studio's schema is stable within a single run. Refresh on studio restart or when /cmo itself restarts.
|
|
141
|
+
|
|
142
|
+
## Never
|
|
143
|
+
|
|
144
|
+
- Never import `@postiz/*` — AGPL firewall, enforced by test.
|
|
145
|
+
- Never initiate a Claude Code session from the studio. /cmo is always invoked from the user's terminal.
|
|
146
|
+
- Do not delegate intelligence to `POST /api/skill/run` unless explicitly operating Studio's local skill-runner surface. /cmo remains the orchestrator; the studio reflects.
|
|
147
|
+
- Never store API keys in the studio. The mktg CLI reads its own env vars; the studio's settings panel writes to `.env.local` which the next `mktg` invocation picks up.
|