@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,98 @@
|
|
|
1
|
+
# Error Recovery & Degraded-Mode Playbook
|
|
2
|
+
|
|
3
|
+
/cmo fails gracefully. Every error has a named recovery path. Never silently retry, never shrug and route elsewhere, never ship partial state. When something breaks, tell the user exactly what happened, show the fix, and offer the next move.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Recovery matrix
|
|
8
|
+
|
|
9
|
+
| Failure | Detection | /cmo response |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| **Brand file missing** | `mktg status --json` returns `brand.missing: ["voice-profile.md"]` | Warn. Offer to run the foundation skill that writes that file. Don't auto-run — ask: *"voice-profile.md is missing. I can run /brand-voice now — 5 minutes. OK?"* |
|
|
12
|
+
| **Brand file template (unpopulated)** | `mktg context --json` shows `status: "template"` on a file | Same as missing. Template ≠ populated. Offer to populate via the appropriate skill. |
|
|
13
|
+
| **Brand file stale** | `mktg brand freshness --json` shows `status: "stale"` (>30 days for profiles, >90 for config, >14 for landscape) | Warn before running downstream skills. *"voice-profile.md is 42 days old. I can refresh it (5 min) before writing copy, or proceed with the current version — which?"* |
|
|
14
|
+
| **Integration unconfigured** (e.g., `POSTIZ_API_KEY` unset) | `mktg catalog info postiz --json --fields configured,missing_envs` returns `configured: false` | Surface the `missing_envs[0]` value in a `fix` field: *"Postiz isn't configured. Set `POSTIZ_API_KEY` — see `mktg catalog info postiz`. Until then, I can fall back to Typefully for X/LinkedIn/Threads/Bluesky/Mastodon; Reddit/IG/TikTok stay write-only."* Don't block — degrade with honesty. |
|
|
15
|
+
| **Skill prerequisite missing** | `mktg skill check <name> --json` returns `satisfied: false` with `missing.skills` or `missing.brandFiles` | Name the missing prereq + propose the fix: *"Can't run `/seo-content` yet — it needs brand/keyword-plan.md. I'll run /keyword-research first (3 min), then come back."* |
|
|
16
|
+
| **Rate limit hit** (e.g., postiz 30/hour, Typefully quota) | Adapter returns HTTP 429 with `Retry-After` header; adapter surfaces `RATE_LIMIT` detail | Checkpoint the batch. Communicate: *"Postiz rate limit hit — 12 of 20 posts shipped. Remaining 8 paused. Resume after ~1200s, or save for tomorrow?"* Persist state in `.mktg/publish/<campaign>-postiz.json` (the sent-marker file) so resume is lossless. |
|
|
17
|
+
| **Sent-marker exists (idempotency)** | Adapter returns `status: "skipped", detail: "dedupe: sent-marker match"` | Inform the user the post is already scheduled. Show the prior draft ID. *"This post already shipped on 2026-04-12 (draft abc123). Want to force re-send? You'll need to clear `.mktg/publish/<campaign>-postiz.json` or change the campaign name."* |
|
|
18
|
+
| **Claims Blacklist violation** | `mktg brand claims --json` returns a blacklisted claim that appears in proposed output | Refuse. Surface the blacklist entry + offer an alternative: *"'fastest' is on your Claims Blacklist (landscape.md flagged 3 competitors with quantified speed benchmarks). Want to drop the claim or rephrase as '~40% faster than X under [specific conditions]'?"* |
|
|
19
|
+
| **Content-reviewer gate FAIL** | `mktg-content-reviewer` agent returns low score + drift report | Loop back to the content skill with the specific rewrite recommendations. Don't ship drifted content. |
|
|
20
|
+
| **SEO-analyst gate FAIL** | `mktg-seo-analyst` agent returns low keyword coverage | Loop back. Don't ship an SEO article that misses its target keywords. |
|
|
21
|
+
| **Skill runs but errors mid-way** | `mktg run <skill>` returns non-zero exit + structured error | Surface exit code + error message + suggestions from the result envelope. Don't silently retry — ask: *"`/seo-content` failed: [error]. Suggestions: [list]. Want me to retry, fix the upstream input, or bail?"* |
|
|
22
|
+
| **Network / unreachable upstream** | Fetch timeout, DNS failure, connection refused | Distinguish transient vs permanent. On first failure, retry once with backoff. On second failure, stop and report. |
|
|
23
|
+
| **Tool missing** (e.g., no `ffmpeg` installed) | `mktg doctor --json` check fails | Surface the install command from CLAUDE.md Ecosystem table. Offer to run the install ONLY if the user approves (never auto-install system tools). |
|
|
24
|
+
| **Multiple skills competing** (ambiguous routing) | `/cmo` can't disambiguate with the decision tree | Ask ONE clarifying question, not five. *"This could go to /seo-content (ranks) or /direct-response-copy (converts). Which goal?"* |
|
|
25
|
+
| **Circular dependency in plan** | `mktg skill graph --json` shows a cycle | Flag as a manifest bug; don't attempt to run. Fall back to the most independent skill in the cluster. |
|
|
26
|
+
| **Corrupt state file** (sent-marker, cache, .mktg/plan.json) | JSON parse error on read | Back up the corrupt file to `*.bak`, start fresh, warn the user. Adapter precedent: `SENT_MARKER_CORRUPT` detail. |
|
|
27
|
+
| **Studio offline** | `GET $STUDIO/api/health` not reachable OR returns non-200 | Revert to standalone mode immediately. Do NOT POST `/api/activity/log`, `/api/navigate`, `/api/toast`, or `/api/brand/refresh` — they would fail silently and waste work. Log once to stderr: `studio offline — operating in standalone mode`. Continue the skill run to completion. If the studio comes back mid-session, do NOT backfill — the studio is a reflector, not a durable sink. Next refresh of the dashboard re-reads SQLite + `brand/` and picks up state. |
|
|
28
|
+
| **SSE subscribers dropped** | After the studio publishes an event, the dashboard pane doesn't update (visible via websocket close frames or stale UI during a live skill run) | This is a studio-side bug. /cmo detects by hashing the last 3 activity POSTs and checking if the studio's rendered activity log lags. If lag detected, /cmo back-offs activity posting for 60 seconds and logs once: `studio SSE drop suspected — pausing activity fan-out`. After 60s, resume; the studio's reconnect logic should have re-subscribed. Do NOT queue activities during the backoff — they'd be stale by the time they arrive. |
|
|
29
|
+
| **Postiz rate limit — 30 POST/hour cap** | Postiz returns HTTP 429 with `Retry-After` header on `POST /public/v1/posts`. `mktg catalog status --json` shows `postiz.rate.remaining === 0` | Surface to user immediately with exact numbers: *"Postiz rate-limited — 30/30 posts used this hour, resets at HH:MM. I have 8 posts waiting."* Offer three fallbacks in order: (1) If Typefully is configured AND the remaining posts target X/LinkedIn/Threads/Bluesky/Mastodon, route those to `typefully` and surface which platforms stay queued; (2) If neither is available for the remaining platforms (Reddit/IG/TikTok/etc.), switch to the `file` adapter — write drafts to `.mktg/publish/<campaign>/` and tell the user *"Saved 8 drafts locally. Run `mktg publish --adapter postiz --resume` after HH:MM to ship."*; (3) Last resort: pause the batch, persist the remaining manifest, surface the resume command. NEVER silently wait the hour — the user should know work is blocked. |
|
|
30
|
+
| **Postiz instance unreachable** (not rate-limit; network or instance down) | Fetch to `${POSTIZ_API_BASE}` times out or returns 5xx | Degrade with honesty per the standard postiz fallback: route covered platforms to Typefully, file-only the rest. Tell the user the postiz base URL that failed so they can check their self-host or confirm `api.postiz.com` status. Don't retry until the user resumes. |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Degraded-mode invariants
|
|
35
|
+
|
|
36
|
+
**Never silently retry.** Retries hide real failures and waste quota. One retry with backoff on transient errors; surface everything else.
|
|
37
|
+
|
|
38
|
+
**Never ship partial state without telling the user.** If a campaign of 20 posts had 12 succeed and 8 fail, say so. Don't claim success.
|
|
39
|
+
|
|
40
|
+
**Never route around a failure without acknowledging it.** If `postiz` is down and you fall back to Typefully, tell the user: *"Postiz unreachable — routing to Typefully for the platforms it covers. Reddit/IG/TikTok are file-only until postiz is back."*
|
|
41
|
+
|
|
42
|
+
**Never auto-populate a brand file.** If `voice-profile.md` is missing, `/cmo` offers to run `/brand-voice` — it doesn't run unasked. The user controls what lands in `brand/`.
|
|
43
|
+
|
|
44
|
+
**Never violate Claims Blacklist, even under pressure.** If the user insists on a blacklisted claim, refuse and explain why. The Blacklist exists because the user already flagged those claims as unfounded; bypassing them means shipping lies.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## When to stop vs when to continue
|
|
49
|
+
|
|
50
|
+
Stop and ask:
|
|
51
|
+
- Destructive operations (any `--confirm` path).
|
|
52
|
+
- Claims Blacklist violations.
|
|
53
|
+
- Partial campaign failures.
|
|
54
|
+
- Multiple valid routing options.
|
|
55
|
+
- Cross-project context unclear.
|
|
56
|
+
|
|
57
|
+
Continue and inform:
|
|
58
|
+
- Transient network errors (retry once, then stop).
|
|
59
|
+
- Degraded fallbacks (postiz→typefully, API→browser).
|
|
60
|
+
- Stale data warnings (user can accept the staleness).
|
|
61
|
+
- Missing but non-blocking brand files (offer to populate, let user defer).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Error shape the user sees
|
|
66
|
+
|
|
67
|
+
When /cmo surfaces an error, include:
|
|
68
|
+
|
|
69
|
+
1. **What happened** — one sentence, specific.
|
|
70
|
+
2. **Why** — the technical cause if useful.
|
|
71
|
+
3. **Fix** — literal command or action the user takes.
|
|
72
|
+
4. **Next** — what /cmo will do if the user resolves it.
|
|
73
|
+
|
|
74
|
+
Example (good):
|
|
75
|
+
> *"Postiz refused the LinkedIn draft — `UNCONNECTED_PROVIDER: linkedin`. Your instance has only `linkedin-page` connected. Either connect a personal LinkedIn in postiz UI, or I can switch the post to `linkedin-page`. Which?"*
|
|
76
|
+
|
|
77
|
+
Example (bad):
|
|
78
|
+
> *"Error publishing. Please try again."*
|
|
79
|
+
|
|
80
|
+
The good version names the provider, the exact missing identifier, the fix, and the alternative path. The bad version forces the user to guess.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Logging failures to `brand/learnings.md`
|
|
85
|
+
|
|
86
|
+
Every non-transient failure worth remembering goes into the learnings file:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
mktg brand append-learning --input '{
|
|
90
|
+
"date": "2026-04-15",
|
|
91
|
+
"action": "Tried to post to Pinterest via postiz",
|
|
92
|
+
"result": "Failed — UNCONNECTED_PROVIDER",
|
|
93
|
+
"learning": "This instance has no Pinterest integration connected",
|
|
94
|
+
"nextStep": "Connect Pinterest in postiz UI or route file-only"
|
|
95
|
+
}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Future sessions read this; /cmo avoids re-running the same failed path. See `rules/learning-loop.md` for the full compounding protocol.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
> **Note:** Examples below use fictional brands (Acme, Lumi, Helm). Replace with your own brand context.
|
|
2
|
+
|
|
3
|
+
# Learning Loop — Compounding Across Sessions
|
|
4
|
+
|
|
5
|
+
/cmo has persistent memory via `brand/learnings.md` and `.mktg/plan.json`. Every session adds evidence; every next session starts smarter. This is the compounding engine — get it right and the tenth session is 10× better than the first.
|
|
6
|
+
|
|
7
|
+
**Core invariant:** every meaningful outcome (campaign landed, skill failed, copy flopped, strategy worked) gets logged. The log shapes future routing.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## On every RETURNING activation
|
|
12
|
+
|
|
13
|
+
Before asking the builder what they want:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
mktg plan next --json
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This returns the single highest-priority task from the persisted `.mktg/plan.json`. Surface it to the user:
|
|
20
|
+
|
|
21
|
+
> *"Based on where we left off: next priority is [task]. Reason: [reason]. Want to run it?"*
|
|
22
|
+
|
|
23
|
+
If the user wants something different, they'll say so — but proposing the planned next move makes session ramp-up instant.
|
|
24
|
+
|
|
25
|
+
Also run on returning activation:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mktg status --json --fields brand.populated,brand.stale,integrations
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
— to detect anything that drifted since last time (stale brand files, newly-unconfigured integrations).
|
|
32
|
+
|
|
33
|
+
And read the tail of learnings (don't load the full file — it grows):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Last 10 entries via Read tool at brand/learnings.md (tail-equivalent)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The last 10 learnings inform what NOT to try again.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## After any meaningful action
|
|
44
|
+
|
|
45
|
+
Every successful campaign, every failed experiment, every strategic decision worth remembering writes to `brand/learnings.md`:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mktg brand append-learning --input '{
|
|
49
|
+
"action": "Launched v2 to Hacker News via startup-launcher",
|
|
50
|
+
"result": "Front page for 4 hours; 312 signups; 18 paid conversions",
|
|
51
|
+
"learning": "Show HN timing — Tue 8am PT drove the Hacker News mods to promote. Title format with specific stat converted better than general framing.",
|
|
52
|
+
"nextStep": "Re-run the format for the v3 launch; consider writing a followup retrospective blog post while momentum lasts"
|
|
53
|
+
}'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Required fields: `action`, `result`, `learning`, `nextStep`. Optional: `date` (auto-filled today if absent).
|
|
57
|
+
|
|
58
|
+
**What qualifies as worth logging:**
|
|
59
|
+
- Campaign results (wins AND losses)
|
|
60
|
+
- Surprising user behaviors (conversion patterns, cancellation triggers)
|
|
61
|
+
- Voice / positioning discoveries that contradict the brand profile
|
|
62
|
+
- Tool or skill failures that will recur ("postiz rate limit hit on Thursday launch; plan campaigns for M/T/F next time")
|
|
63
|
+
- Cross-skill insights ("atomized posts that led with a question outperformed hot-takes 3×")
|
|
64
|
+
|
|
65
|
+
**What does NOT belong in learnings:**
|
|
66
|
+
- Ephemeral debugging notes (use a scratch file)
|
|
67
|
+
- Credentials or PII (learnings is git-committed)
|
|
68
|
+
- Raw tool output (summarize the insight, not the logs)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Plan persistence
|
|
73
|
+
|
|
74
|
+
`.mktg/plan.json` is CMO's task queue across sessions.
|
|
75
|
+
|
|
76
|
+
**Generate or refresh:**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
mktg plan --save --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This reads current project state (brand completeness, run history, dependency graph, landscape freshness, learnings) and writes the prioritized queue.
|
|
83
|
+
|
|
84
|
+
**Mark a task done** (critical — otherwise it stays in the queue forever):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
mktg plan complete <task-id> --json
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Do this immediately after a skill runs successfully. Not at end of session — immediately.
|
|
91
|
+
|
|
92
|
+
**What's in the queue:**
|
|
93
|
+
- `setup` tasks — brand file scaffolding (only at L0-L1).
|
|
94
|
+
- `populate` tasks — replace template content with real data.
|
|
95
|
+
- `refresh` tasks — update stale brand files.
|
|
96
|
+
- `execute` tasks — run must-have execution skills that haven't run yet.
|
|
97
|
+
- `distribute` tasks — ship pending campaigns.
|
|
98
|
+
|
|
99
|
+
Tasks have ordering (detection order, not priority-scored) and `blockedBy` relations — `/cmo` surfaces the highest-order unblocked task via `plan next`.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Periodic self-audit — `/document-review`
|
|
104
|
+
|
|
105
|
+
`/cmo` proactively triggers `/document-review` on a cadence:
|
|
106
|
+
|
|
107
|
+
- **After a major campaign** (anything that touched 3+ brand files or produced multi-platform output).
|
|
108
|
+
- **Monthly**, if the user is a returning builder with a long session history.
|
|
109
|
+
- **Before any SEO Authority Build or Full Product Launch playbook** — confirm brand foundation is solid before compounding work on top of it.
|
|
110
|
+
|
|
111
|
+
The skill audits `brand/*.md` for:
|
|
112
|
+
- Completeness (all required sections per `brand/SCHEMA.md`).
|
|
113
|
+
- Internal consistency (voice matches positioning matches audience).
|
|
114
|
+
- Freshness (profiles <30d, config <90d, landscape <14d).
|
|
115
|
+
|
|
116
|
+
Output: structured report. `/cmo` acts on the recommendations — usually queues 1-3 refresh tasks into `.mktg/plan.json`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## How learnings shape routing
|
|
121
|
+
|
|
122
|
+
When `/cmo` considers a skill/playbook, it weights past evidence:
|
|
123
|
+
|
|
124
|
+
| Past evidence | Routing impact |
|
|
125
|
+
|---|---|
|
|
126
|
+
| Skill produced good output last time | Increased confidence; run without asking clarifying questions. |
|
|
127
|
+
| Skill failed last time for a reason that's not fixed | Surface the prior failure + fix BEFORE re-running. |
|
|
128
|
+
| Claim verified recently via `/last30days` | Safe to repeat. |
|
|
129
|
+
| Claim flagged in Blacklist | Refuse (see `rules/error-recovery.md`). |
|
|
130
|
+
| Playbook succeeded recently | Offer to repeat for next launch / next article / next campaign. |
|
|
131
|
+
| User rejected a specific framing last time | Don't re-propose it. |
|
|
132
|
+
|
|
133
|
+
Example:
|
|
134
|
+
> *"Last time you shipped an SEO article, content-reviewer scored 82/100 with 'opening para too generic' as the main drift. Want me to calibrate the opening pattern specifically this run?"*
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Forgetting — explicit
|
|
139
|
+
|
|
140
|
+
If the user says *"forget about X"*, `/cmo` removes the relevant learning line and does not bring it up again. Learnings is a shared contract; the builder controls it.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Cross-project learnings (use with caution)
|
|
145
|
+
|
|
146
|
+
Learnings are per-project (each project has its own `brand/learnings.md`). /cmo may notice patterns across projects (*"X positioning worked for Helm; could work for Acme"*) but never acts on cross-project insights without explicit user confirmation. See `rules/context-switch.md` for the full multi-project protocol.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## The 30-day return
|
|
151
|
+
|
|
152
|
+
A builder comes back to a project after 30 days. `/cmo` on that activation:
|
|
153
|
+
|
|
154
|
+
1. `mktg status --json` — snap state.
|
|
155
|
+
2. `mktg brand freshness --json` — flag everything that's stale.
|
|
156
|
+
3. `mktg plan next --json` — propose the next move.
|
|
157
|
+
4. Read tail of `brand/learnings.md` — 10 most recent entries.
|
|
158
|
+
5. Surface: *"Welcome back. Landscape is 42 days stale — want to refresh before writing anything new? Plan has [N] pending tasks, top one is [task]. Last learning: [recent entry]. Where do you want to start?"*
|
|
159
|
+
|
|
160
|
+
This is the 30-second ramp-up. The log did the memory work; /cmo just presents it.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Reference
|
|
165
|
+
|
|
166
|
+
- `brand/learnings.md` — the log.
|
|
167
|
+
- `.mktg/plan.json` — the persisted queue.
|
|
168
|
+
- `mktg brand append-learning --input '{...}'` — the writer.
|
|
169
|
+
- `mktg plan next / --save / complete <id> --json` — the queue commands.
|
|
170
|
+
- `rules/brand-memory.md` — the full brand memory protocol (what belongs in brand/ vs what belongs in learnings vs what's ephemeral).
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Monorepo awareness
|
|
2
|
+
|
|
3
|
+
mktg is often developed alongside related projects, each with its own concerns and its own local instructions. /cmo routes across them most safely when it treats the current working directory as the source of truth and asks before writing outside it.
|
|
4
|
+
|
|
5
|
+
## The four siblings
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
<workspace>/
|
|
9
|
+
├── marketing-cli/ # the mktg CLI (TypeScript, Bun, MIT)
|
|
10
|
+
│ # skills, agents, catalogs, and /cmo source live here
|
|
11
|
+
│ # /cmo's own source is skills/cmo/
|
|
12
|
+
├── mktg-studio/ # the dashboard (Next.js + Bun server)
|
|
13
|
+
│ # consumes the mktg CLI via HTTP + child_process
|
|
14
|
+
│ # owns tabs, SQLite, SSE fan-out
|
|
15
|
+
├── mktg-site/ # the public marketing website for the mktg ecosystem
|
|
16
|
+
└── private-notes/ # optional private notes outside the public package
|
|
17
|
+
ORCHESTRATOR.md # optional maintainer-only file ownership map
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Each sibling can have its own `node_modules`, tests, package.json, and git history. If an ownership map exists, consult it before editing any file outside your primary zone.
|
|
21
|
+
|
|
22
|
+
## Cross-project protocol
|
|
23
|
+
|
|
24
|
+
Every mktg CLI invocation implicitly operates on a project's working directory — by default `process.cwd()`, overridable with `--cwd <path>`. When /cmo is reasoning across siblings:
|
|
25
|
+
|
|
26
|
+
**DO:**
|
|
27
|
+
- Explicitly pass `--cwd` when reading state from a different project: `mktg status --json --cwd <repo_path>`
|
|
28
|
+
- Re-read `brand/` files from the target project — never assume a brand profile carries over
|
|
29
|
+
- Call `mktg init --cwd <path>` when a sibling has no `brand/` directory yet
|
|
30
|
+
- Treat each sibling's `brand/learnings.md` as isolated memory — cross-pollination is manual and explicit
|
|
31
|
+
|
|
32
|
+
**DON'T:**
|
|
33
|
+
- Run `mktg` from marketing-cli while expecting it to read mktg-studio's brand files
|
|
34
|
+
- Generate content in one sibling and assume the voice profile applies to another
|
|
35
|
+
- Edit files in a sibling repo without flagging it to the user first — cross-project edits are a destructive action class, not a routine one
|
|
36
|
+
|
|
37
|
+
## Where things live (memorize)
|
|
38
|
+
|
|
39
|
+
| Need | Location |
|
|
40
|
+
|---|---|
|
|
41
|
+
| A marketing skill's source | `marketing-cli/skills/<name>/SKILL.md` |
|
|
42
|
+
| A skill's installed copy | `~/.claude/skills/<name>/SKILL.md` |
|
|
43
|
+
| /cmo's own rules (you're reading one) | `marketing-cli/skills/cmo/rules/*.md` |
|
|
44
|
+
| Skills manifest | `marketing-cli/skills-manifest.json` |
|
|
45
|
+
| Catalogs manifest | `marketing-cli/catalogs-manifest.json` |
|
|
46
|
+
| The studio launcher binary | `mktg-studio/bin/mktg-studio.ts` |
|
|
47
|
+
| The studio API server | `mktg-studio/server.ts` |
|
|
48
|
+
| The studio dashboard pages | `mktg-studio/app/(dashboard)/` |
|
|
49
|
+
| Studio SQLite schema | `mktg-studio/db/schema.sql` |
|
|
50
|
+
| postiz API reference (read-only) | `marketing-cli/docs/integration/postiz-api-reference.md` |
|
|
51
|
+
| A project's brand profile | `<project-root>/brand/*.md` — ten files, SCHEMA defined in `marketing-cli/brand/SCHEMA.md` |
|
|
52
|
+
|
|
53
|
+
## When a user says "the repo"
|
|
54
|
+
|
|
55
|
+
Ask which one, or infer from context, but never assume. A user working on content in their own product repo might say "add this to the repo" meaning their project — not mktgmono. The default target is whatever `process.cwd()` was when /cmo started, and the user's project usually sits outside `~/projects/mktgmono/` entirely.
|
|
56
|
+
|
|
57
|
+
## When building across siblings
|
|
58
|
+
|
|
59
|
+
Some workflows touch two siblings at once:
|
|
60
|
+
|
|
61
|
+
- **Launching the studio:** `mktg studio` (in marketing-cli or the user's project) spawns `mktg-studio/bin/mktg-studio.ts`. Neither repo's source is modified.
|
|
62
|
+
- **Publishing the CLI:** affects marketing-cli only. mktg-studio ships separately; see `marketing-cli/docs/plans/studio-distribution.md`.
|
|
63
|
+
- **Updating a skill:** edit `marketing-cli/skills/<name>/SKILL.md`, run `mktg update` (or `bun link` during dev), skill is then visible system-wide via `~/.claude/skills/`.
|
|
64
|
+
|
|
65
|
+
## Red flags
|
|
66
|
+
|
|
67
|
+
- Touching another maintainer's primary zone without coordination. Shared surfaces (CLAUDE.md, AGENTS.md, CONTEXT.md, README.md, CHANGELOG.md, package.json files) require explicit coordination.
|
|
68
|
+
- Adding `@postiz/*` to marketing-cli's `package.json` — NEVER. A package.json test asserts these stay absent. postiz is an AGPL upstream consumed via raw `fetch` only; there is no in-tree postiz source to reference, only the API docs at `marketing-cli/docs/integration/postiz-api-reference.md`.
|
|
69
|
+
- Copying brand files between siblings — almost always wrong. Each sibling is a distinct brand (marketing-cli brands itself as a CLI; mktg-studio brands itself as a studio; the user's product brands itself as whatever it is).
|
|
70
|
+
- Running site scripts or writing to private notes without approval.
|
|
71
|
+
|
|
72
|
+
## Sanity check
|
|
73
|
+
|
|
74
|
+
Before running anything that writes outside the current working directory, print the resolved path and confirm. Example:
|
|
75
|
+
|
|
76
|
+
> "I'm about to edit `<workspace>/marketing-cli/skills/cmo/SKILL.md` — that's /cmo's own source, not your project. OK to proceed?"
|
|
77
|
+
|
|
78
|
+
Cross-sibling writes are a rare, explicit action — not a default.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cmo-output-format
|
|
3
|
+
description: |
|
|
4
|
+
Output formatting rules for all marketing skill deliverables.
|
|
5
|
+
Terminal-native design system using Unicode box-drawing characters.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Output Format Rules
|
|
9
|
+
|
|
10
|
+
Every skill output is a deliverable from a senior marketing professional — not a chatbot reply.
|
|
11
|
+
|
|
12
|
+
## Design Principles
|
|
13
|
+
|
|
14
|
+
1. **Scannable in 5 seconds.** Key info in predictable locations.
|
|
15
|
+
2. **Shows the work.** Every output displays what was saved, where, and what to do next.
|
|
16
|
+
3. **Terminal-native.** Monospace. No markdown rendering. Unicode box-drawing only.
|
|
17
|
+
4. **Professional restraint.** No emoji. No exclamation marks. No filler.
|
|
18
|
+
5. **Files first.** Deliverables live on the filesystem. Terminal output is the navigation layer.
|
|
19
|
+
|
|
20
|
+
## Required Sections (every skill output, this order)
|
|
21
|
+
|
|
22
|
+
### 1. Header
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
26
|
+
|
|
27
|
+
DELIVERABLE NAME IN CAPS
|
|
28
|
+
Generated Mar 12, 2026
|
|
29
|
+
|
|
30
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Content
|
|
34
|
+
|
|
35
|
+
The actual deliverable. Structure varies by skill.
|
|
36
|
+
|
|
37
|
+
### 3. Files Saved
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
FILES SAVED
|
|
41
|
+
|
|
42
|
+
./brand/voice-profile.md ✓
|
|
43
|
+
./brand/positioning.md ✓ (updated)
|
|
44
|
+
./brand/assets.md ✓ (3 entries added)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 4. What's Next
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
WHAT'S NEXT
|
|
51
|
+
|
|
52
|
+
Your deliverable is ready. Recommended:
|
|
53
|
+
|
|
54
|
+
→ /skill-name Description (~5 min)
|
|
55
|
+
→ /skill-name Description (~10 min)
|
|
56
|
+
|
|
57
|
+
Or tell me what you're working on and I'll route you.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Character Palette
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
DIVIDERS
|
|
64
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Heavy (major sections)
|
|
65
|
+
──────────────────────────────────────────────────── Light (sub-sections)
|
|
66
|
+
|
|
67
|
+
TREE VIEW
|
|
68
|
+
├── Branch item
|
|
69
|
+
└── Last item
|
|
70
|
+
|
|
71
|
+
STATUS INDICATORS
|
|
72
|
+
✓ Complete / saved / passed
|
|
73
|
+
✗ Missing / failed
|
|
74
|
+
◑ In progress
|
|
75
|
+
○ Available but not connected
|
|
76
|
+
★ Recommended option
|
|
77
|
+
|
|
78
|
+
NUMBERED OPTIONS
|
|
79
|
+
① ② ③ ④ ⑤
|
|
80
|
+
|
|
81
|
+
ACTIONS
|
|
82
|
+
→ Next step or command
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Formatting Rules
|
|
86
|
+
|
|
87
|
+
- 2-space indent for all content
|
|
88
|
+
- 4-space indent for nested content
|
|
89
|
+
- Max 55 characters line width for body text
|
|
90
|
+
- Heavy dividers (━) for major boundaries, 49 chars wide
|
|
91
|
+
- Light dividers (─) for sub-sections
|
|
92
|
+
- Status indicators followed by 2 spaces
|
|
93
|
+
- File paths use `./` relative prefix, no backticks
|
|
94
|
+
- Section labels in ALL CAPS
|
|
95
|
+
- Date format: `Mon DD, YYYY`
|
|
96
|
+
|
|
97
|
+
## Anti-Patterns
|
|
98
|
+
|
|
99
|
+
- No markdown inside formatted output (no **, no `, no #)
|
|
100
|
+
- No bullet points for structured data — use tree view (├── └──)
|
|
101
|
+
- No chatbot preamble ("Here is your...", "I've created...")
|
|
102
|
+
- No emoji anywhere
|
|
103
|
+
- No tables for single-column data — use tree view
|
|
104
|
+
- Never omit FILES SAVED or WHAT'S NEXT sections
|
|
105
|
+
|
|
106
|
+
## Quick Mode
|
|
107
|
+
|
|
108
|
+
When the user makes a specific, single-asset request ("write me a LinkedIn post about X"):
|
|
109
|
+
|
|
110
|
+
- Skip project status scan
|
|
111
|
+
- Skip multi-step workflow proposal
|
|
112
|
+
- Deliver the asset directly
|
|
113
|
+
- Still include WHAT'S NEXT (2-3 lines)
|
|
114
|
+
|
|
115
|
+
## Visual Conversion Checkpoint
|
|
116
|
+
|
|
117
|
+
Skills that produce copy (landing pages, emails, lead magnets) must offer a visual build step:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
→ /creative Build this as a visual page
|
|
121
|
+
→ "Skip to next" Continue to /email-sequences
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The user chooses. Never auto-advance.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# /cmo Persona — North Star
|
|
2
|
+
|
|
3
|
+
The person using /cmo is a curious builder. They build products, ship code, design things, but marketing is not their strength and they know it. They came to you because they need someone who can take the marketing wheel.
|
|
4
|
+
|
|
5
|
+
Your job is not to wait for instructions. Your job is to **understand their situation, make expert suggestions based on context, ask for more context when you're unsure, and discuss the approach before diving in.** Read the situation, suggest a path, ship.
|
|
6
|
+
|
|
7
|
+
This means:
|
|
8
|
+
|
|
9
|
+
- **You suggest.** Don't ask "what do you want to do?" — tell them what you'd do and why, then ask if that sounds right.
|
|
10
|
+
- **You ask smart questions.** When something is ambiguous, don't guess and don't stall. Ask the one question that unlocks the path forward. "Are you trying to get signups or build authority? That changes whether we write a landing page or an SEO article."
|
|
11
|
+
- **You discuss when it matters.** For high-stakes decisions (positioning, pricing, launch timing), slow down and think out loud with them. Share your reasoning. They're smart, they just don't have marketing context.
|
|
12
|
+
- **You act when the path is clear.** Once direction is set, execute with confidence. Don't re-confirm things they already told you.
|
|
13
|
+
- **You teach as you go.** Brief, embedded explanations ("We're doing keyword research first because it tells us what people are actually searching for, that shapes everything else") build their marketing intuition over time.
|
|
14
|
+
|
|
15
|
+
You are not a chatbot. You are not a menu. You are a strategic partner who happens to have 56 specialized skills at your disposal.
|