@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,230 @@
|
|
|
1
|
+
# Cross-API Compound Recipes
|
|
2
|
+
|
|
3
|
+
Single APIs answer single questions. Compound recipes — chaining two or three APIs in one move — answer the questions Ahrefs alone can't. The four recipes here are mktg-native and depend only on tools already in our stack: **Exa MCP**, **last30days** skill, **firecrawl**, **gh CLI**, **mktg-x**, **DeepWiki**, **company-research** skill, **people-research** skill, **Exa Websets MCP**.
|
|
4
|
+
|
|
5
|
+
Each recipe in this file is a sequence — run the steps in order, accumulate outputs, hand the consolidated result to the parent skill.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Recipe 1 — Pain-Point Cluster Discovery
|
|
10
|
+
|
|
11
|
+
Finds the *real* complaints the audience has today, not yesterday's keyword data. Drives `/for/` use-case page angles and `/playbooks/` opening hooks. Replaces stale Ahrefs "questions" data.
|
|
12
|
+
|
|
13
|
+
**APIs chained:** `/last30days` + Exa `deep_search_exa` + `mktg-x` (optional, when X login cookie is configured) + Exa `web_search_advanced_exa`
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Step 1 — Aggregate recent organic signal
|
|
17
|
+
Invoke: /last30days "<product-category> + frustrations OR problems OR struggling with"
|
|
18
|
+
→ Returns Reddit + X + HN + YouTube + TikTok mentions with engagement counts
|
|
19
|
+
→ Filter to posts with >10 engagement (avoid astroturfed noise)
|
|
20
|
+
|
|
21
|
+
Step 2 — Cluster the complaints
|
|
22
|
+
For each high-engagement complaint, extract the verb phrase:
|
|
23
|
+
"I keep losing track of..." → "keep losing track of <object>"
|
|
24
|
+
"Why is <task> so hard?" → "<task> being hard"
|
|
25
|
+
"There has to be a better way to..." → "better way to <task>"
|
|
26
|
+
Cluster phrases by verb-object similarity. 5-10 clusters typical.
|
|
27
|
+
|
|
28
|
+
Step 3 — Validate via Exa deep search
|
|
29
|
+
For each cluster, run:
|
|
30
|
+
mcp__exa__deep_search_exa(
|
|
31
|
+
objective: "What are people saying about <cluster-phrase> in <product-category>?",
|
|
32
|
+
type: "deep",
|
|
33
|
+
numResults: 8
|
|
34
|
+
)
|
|
35
|
+
→ Confirms cluster is real (not a single noisy post)
|
|
36
|
+
→ Surfaces authoritative articles already covering the pain
|
|
37
|
+
|
|
38
|
+
Step 4 — Optional X deep-dive (if MKTG_X_AUTH_TOKEN configured)
|
|
39
|
+
For the top 2-3 clusters, invoke /mktg-x to read a representative thread:
|
|
40
|
+
/mktg-x https://twitter.com/<user>/status/<id>
|
|
41
|
+
→ Lived-experience quotes for the page's pain section
|
|
42
|
+
→ Three-beat vignette material (scenario / surprise / lesson)
|
|
43
|
+
|
|
44
|
+
Step 5 — Map to page candidates
|
|
45
|
+
Each surviving cluster becomes either:
|
|
46
|
+
- A /for/<audience>/<verb> use-case page (Pattern B)
|
|
47
|
+
- A /playbooks/<topic> playbook opening hook (Pattern E)
|
|
48
|
+
Output schema: array of { cluster, sources[], page_type, draft_h1, draft_lede }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Why this beats Ahrefs question data:** Ahrefs Questions reflects last 30-90 days of search-engine signal aggregated globally. `/last30days` reflects real conversations from the past 30 days, with engagement counts proving they aren't astroturfed. For B2B SaaS and developer-targeted products, the conversation signal leads the search-engine signal by 3-6 months.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Recipe 2 — OSS Competitor Teardown
|
|
56
|
+
|
|
57
|
+
For competitors that are open source (most agent / dev-tool / Claude-Code-skill competitors are), pull a full profile in one fan-out. Replaces single-source competitor research with a multi-API mosaic.
|
|
58
|
+
|
|
59
|
+
**APIs chained:** `gh CLI` + `mcp__deepwiki__read_wiki_contents` + `company-research` skill + Exa `web_search_advanced_exa`
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Step 1 — GitHub baseline (parallel fan-out)
|
|
63
|
+
gh repo view <owner/repo> --json description,homepageUrl,stargazerCount,forkCount,createdAt,updatedAt
|
|
64
|
+
gh api repos/<owner/repo>/contents/README.md --jq '.content' | base64 -d
|
|
65
|
+
gh api repos/<owner/repo>/contents/skills 2>/dev/null # Claude Code skills
|
|
66
|
+
gh api repos/<owner/repo>/releases --jq 'length' # release cadence
|
|
67
|
+
gh api repos/<owner/repo>/contributors --jq 'length' # contributor count
|
|
68
|
+
|
|
69
|
+
Step 2 — Deep documentation read
|
|
70
|
+
mcp__deepwiki__read_wiki_structure(repoName: "<owner/repo>")
|
|
71
|
+
→ Get the wiki TOC; identify the architecture/getting-started sections
|
|
72
|
+
mcp__deepwiki__read_wiki_contents(repoName: "<owner/repo>", path: "<section>")
|
|
73
|
+
→ Read the most informative sections (limit to 3-5 to avoid token bloat)
|
|
74
|
+
|
|
75
|
+
Step 3 — Business context (company-research)
|
|
76
|
+
Invoke: /company-research "<competitor-brand-name>"
|
|
77
|
+
→ Returns funding state, team size, positioning, customer list
|
|
78
|
+
→ Note: only meaningful if the OSS project has a parent company
|
|
79
|
+
|
|
80
|
+
Step 4 — Live SERP context
|
|
81
|
+
mcp__exa__web_search_advanced_exa(
|
|
82
|
+
query: "<competitor-brand> review",
|
|
83
|
+
numResults: 10,
|
|
84
|
+
enableSummary: true
|
|
85
|
+
)
|
|
86
|
+
→ What 3rd-party reviewers say (the "weaknesses" most users cite)
|
|
87
|
+
|
|
88
|
+
Step 5 — Consolidate into competitor profile
|
|
89
|
+
Output a single block per competitor:
|
|
90
|
+
{
|
|
91
|
+
"slug": "<canonical-slug>",
|
|
92
|
+
"github": { stars, contributors, last_release, release_cadence_days },
|
|
93
|
+
"positioning": "<from README intro>",
|
|
94
|
+
"pricing": "<free / freemium / paid + price points>",
|
|
95
|
+
"weaknesses_cited": ["<from Exa review summaries>"],
|
|
96
|
+
"differentiators": ["<what they emphasize>"],
|
|
97
|
+
"our_win_angles": ["<derived by comparison with our brand>"]
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Where it lands:** the competitor profile goes into `brand/competitors.md` (via the `competitive-intel` skill's writer agent `mktg-competitive-scanner`) AND into `.seo/keyword-research.json` per-competitor block for the alternatives pages.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Recipe 3 — Outreach Prospect Discovery
|
|
106
|
+
|
|
107
|
+
Turn a backlink target list into an actual person to pitch. Required for Phase 15 (listicle outreach) in the seo-machine roadmap.
|
|
108
|
+
|
|
109
|
+
**APIs chained:** off-page-seo Recipe F output + Exa `people_search_exa` + Exa `web_search_advanced_exa` + `mktg-x` (optional)
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Step 1 — Start from .seo/backlink-targets.json
|
|
113
|
+
Read the `listicles` and `guest_posts` arrays from the existing target list.
|
|
114
|
+
These have { domain, dr, url, topic }.
|
|
115
|
+
|
|
116
|
+
Step 2 — Find the byline author per target
|
|
117
|
+
For each listicle URL:
|
|
118
|
+
mcp__exa__web_search_advanced_exa(
|
|
119
|
+
query: "site:<domain> author <topic>",
|
|
120
|
+
numResults: 5,
|
|
121
|
+
enableSummary: true,
|
|
122
|
+
summaryQuery: "Who wrote this article? What's their role and contact info?"
|
|
123
|
+
)
|
|
124
|
+
→ Extract: { name, role, twitter/X handle, email pattern if visible }
|
|
125
|
+
|
|
126
|
+
Step 3 — Enrich with people-research
|
|
127
|
+
For each name surfaced:
|
|
128
|
+
Invoke: /people-research "<name> + <company>"
|
|
129
|
+
→ LinkedIn role, recent talks, social handles, areas of focus
|
|
130
|
+
|
|
131
|
+
Step 4 — Pre-pitch context (optional X dive)
|
|
132
|
+
If mktg-x configured AND person has an active X handle:
|
|
133
|
+
/mktg-x https://twitter.com/<handle>
|
|
134
|
+
→ Last 10 tweets → reveals their current focus / recent rants → angle for personalized pitch
|
|
135
|
+
|
|
136
|
+
Step 5 — Output enriched prospects
|
|
137
|
+
Schema appended to .seo/backlink-targets.json:
|
|
138
|
+
{
|
|
139
|
+
...listicle entry...,
|
|
140
|
+
"prospect": {
|
|
141
|
+
"name": "Jane Doe",
|
|
142
|
+
"role": "Senior Editor",
|
|
143
|
+
"linkedin": "...",
|
|
144
|
+
"x_handle": "@janedoe",
|
|
145
|
+
"recent_focus": "AI search optimization, December 2025 article series",
|
|
146
|
+
"pitch_angle": "Her recent series on AI overviews aligns with our /playbooks/ai-citation page; lead with that"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**The prospect block is consumed by:** `direct-response-copy` (cold-email mode) when /cmo chains into outreach email writing in Phase 15.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Recipe 4 — Newcomer Surveillance (ongoing competitive radar)
|
|
156
|
+
|
|
157
|
+
Replaces ad-hoc "I saw a new tool launched on Product Hunt" lookups with continuous monitoring. Refreshes `brand/competitors.md` automatically when new entrants appear.
|
|
158
|
+
|
|
159
|
+
**APIs chained:** Exa Websets MCP + Exa `web_search_advanced_exa` + `/last30days` + `competitive-intel` skill
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
Step 1 — Create a webset for the category (one-time setup)
|
|
163
|
+
mcp__exa-websets__create_webset({
|
|
164
|
+
criteria: "AI marketing tools launched in the last 90 days targeting <persona>",
|
|
165
|
+
enrichments: [
|
|
166
|
+
{ type: "company_basics" },
|
|
167
|
+
{ type: "founder_lookup" }
|
|
168
|
+
]
|
|
169
|
+
})
|
|
170
|
+
→ Returns a webset ID. Persist to .seo/config.json as `surveillance_webset_id`.
|
|
171
|
+
|
|
172
|
+
Step 2 — On every seo-machine Resume invocation
|
|
173
|
+
mcp__exa-websets__list_webset_items(websetId: "<id>", since: "<last-check>")
|
|
174
|
+
→ Returns new entries since last check
|
|
175
|
+
Persist `last_surveillance_check` to .seo/config.json.
|
|
176
|
+
|
|
177
|
+
Step 3 — Validate via /last30days for each new entry
|
|
178
|
+
For each new tool name:
|
|
179
|
+
Invoke: /last30days "<new-tool-name>"
|
|
180
|
+
→ Confirms the tool has real organic signal (≥5 mentions in 30d)
|
|
181
|
+
→ Filters out vaporware and stale listings
|
|
182
|
+
|
|
183
|
+
Step 4 — Triage decision
|
|
184
|
+
For each surviving entry, /cmo runs the standard /competitive-intel check:
|
|
185
|
+
- Is this a direct overlap with our positioning? → propose alts page
|
|
186
|
+
- Is it adjacent? → propose comparison content
|
|
187
|
+
- Is it tangential? → log to brand/competitors.md "Watching" section, no immediate action
|
|
188
|
+
|
|
189
|
+
Step 5 — Auto-refresh brand/competitors.md when triggered
|
|
190
|
+
When a new direct overlap clears triage, /cmo spawns `mktg-competitive-scanner`
|
|
191
|
+
on just that one competitor, which appends to brand/competitors.md without
|
|
192
|
+
rewriting the existing entries.
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Cadence:** weekly via `/loop 7d` or on every seo-machine Resume invocation (whichever comes first). Cheap because Exa Websets is incremental — only new items get processed.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## When to use which recipe
|
|
200
|
+
|
|
201
|
+
| You want… | Recipe |
|
|
202
|
+
|---|---|
|
|
203
|
+
| Real audience complaints → use-case page hooks | 1 (Pain-Point Cluster Discovery) |
|
|
204
|
+
| Full competitor profile in one pass | 2 (OSS Competitor Teardown) |
|
|
205
|
+
| Actual humans to email for backlink outreach | 3 (Outreach Prospect Discovery) |
|
|
206
|
+
| Continuous radar on new entrants in the category | 4 (Newcomer Surveillance) |
|
|
207
|
+
|
|
208
|
+
For numeric volume/KD/TP data → see `references/exa-recipes.md` (the standard 7 recipes for keyword research).
|
|
209
|
+
For the manual fallback when no MCPs are available → `references/manual-research.md`.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Cost discipline
|
|
214
|
+
|
|
215
|
+
Each compound recipe touches 3-5 APIs. Token discipline:
|
|
216
|
+
|
|
217
|
+
| Recipe | Heavy API | Budget per run |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| 1 — Pain-Point | Exa `deep_search_exa` | ~$0.05 (deep) — run weekly, not per session |
|
|
220
|
+
| 2 — OSS Teardown | DeepWiki contents | ~$0.02 per competitor — cache for 30 days |
|
|
221
|
+
| 3 — Outreach Prospect | Exa Websets enrichments | ~$0.10 per 50 prospects — run once per off-page phase |
|
|
222
|
+
| 4 — Newcomer Surveillance | Exa Websets list | ~$0.01 per check — run weekly |
|
|
223
|
+
|
|
224
|
+
Cache to `.seo/<recipe>-cache.json` per recipe. Re-run only when:
|
|
225
|
+
- Recipe 1: every 7 days (audience pain cycles weekly)
|
|
226
|
+
- Recipe 2: every 30 days per competitor (competitive movement is slower)
|
|
227
|
+
- Recipe 3: per off-page phase (one-shot)
|
|
228
|
+
- Recipe 4: every 7 days (newcomer cadence)
|
|
229
|
+
|
|
230
|
+
Total monthly research cost stays under $5 for a project running all four recipes on the recommended cadence — orders of magnitude cheaper than Ahrefs Pro ($249/mo) while covering signal Ahrefs doesn't have.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Exa-Native Research Cookbook
|
|
2
|
+
|
|
3
|
+
The 7 recipes below replace the Ahrefs-only flow with mktg's native research stack: **Exa MCP** (primary) + **Firecrawl** (SERP scraping) + **gh CLI** (OSS competitor signal) + **last30days** (Reddit/X/HN aggregation) + **mktg-x** (auth-walled Twitter) + **company-research** / **people-research** skills (already in mktg's catalog).
|
|
4
|
+
|
|
5
|
+
The trade vs Ahrefs: less numeric precision on volume/KD/TP, but live data, broader signal surface, no paid subscription gate, and recipes that compound multiple APIs in ways a single tool can't.
|
|
6
|
+
|
|
7
|
+
For the Ahrefs path on projects where you *do* have a subscription, see the appendix at the bottom of this file.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Recipe A — Domain baseline (DR proxy + topical authority)
|
|
12
|
+
|
|
13
|
+
Replaces Ahrefs `site-explorer-domain-rating`. Builds a multi-signal DR estimate from public data.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
1. mcp__exa__company_research_exa(companyName: "<user-brand>")
|
|
17
|
+
→ existence + business profile + age signal
|
|
18
|
+
2. mcp__exa__web_search_advanced_exa(
|
|
19
|
+
query: "site:<user-domain>",
|
|
20
|
+
numResults: 100,
|
|
21
|
+
type: "fast"
|
|
22
|
+
)
|
|
23
|
+
→ indexed page count (Exa proxy for what Google has crawled)
|
|
24
|
+
3. (If OSS) gh repo view <owner/repo> --json stargazerCount,forkCount,createdAt
|
|
25
|
+
→ GitHub-stars-as-authority signal for tech-product competitors
|
|
26
|
+
4. mcp__exa__web_search_advanced_exa(
|
|
27
|
+
query: "<brand-name> -site:<user-domain>",
|
|
28
|
+
numResults: 30
|
|
29
|
+
)
|
|
30
|
+
→ unique referring domains mentioning the brand (DR proxy)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**DR estimate rules:**
|
|
34
|
+
|
|
35
|
+
| Signal | DR estimate |
|
|
36
|
+
|---|---|
|
|
37
|
+
| < 50 indexed pages AND < 20 mentions | 0–10 (greenfield) |
|
|
38
|
+
| 50–500 indexed pages, 20–100 mentions | 10–25 |
|
|
39
|
+
| 500–5000 indexed pages, 100–500 mentions | 25–45 |
|
|
40
|
+
| 5000+ indexed pages, 500+ mentions | 45+ |
|
|
41
|
+
| GitHub OSS bonus: stars > 1k | +5 |
|
|
42
|
+
| GitHub OSS bonus: stars > 10k | +10 |
|
|
43
|
+
|
|
44
|
+
Record the DR estimate in `.seo/config.json` under `domain_rating_estimate`. Default to 10 (greenfield) when uncertain — under-estimating is safer than over-estimating (the KD cap stays conservative).
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Recipe B — Competitor reverse-lookup (what they rank for)
|
|
49
|
+
|
|
50
|
+
Replaces Ahrefs `site-explorer-organic-keywords`. Exa surfaces the pages a competitor has indexed; we infer which keywords drive them.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
1. mcp__exa__web_search_advanced_exa(
|
|
54
|
+
query: "site:<competitor-domain>",
|
|
55
|
+
numResults: 50,
|
|
56
|
+
type: "auto",
|
|
57
|
+
enableSummary: true,
|
|
58
|
+
summaryQuery: "What is this page about? What keyword would search for it?"
|
|
59
|
+
)
|
|
60
|
+
→ top 50 indexed pages with AI-summarized intent
|
|
61
|
+
2. For each top page that looks like an alts/compare/use-case target:
|
|
62
|
+
mcp__exa__web_search_advanced_exa(
|
|
63
|
+
query: "<inferred-keyword>",
|
|
64
|
+
numResults: 10,
|
|
65
|
+
enableSummary: true
|
|
66
|
+
)
|
|
67
|
+
→ Verify the keyword is real (competitor actually ranks for it)
|
|
68
|
+
3. (Bonus, for OSS competitors)
|
|
69
|
+
gh api repos/<owner/repo>/contents/website 2>/dev/null
|
|
70
|
+
gh api repos/<owner/repo>/contents/docs 2>/dev/null
|
|
71
|
+
→ Read their actual marketing routes / docs structure
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Output schema (per competitor in `.seo/keyword-research.json`):**
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"competitor": "<slug>",
|
|
79
|
+
"indexed_pages_sampled": 50,
|
|
80
|
+
"high_value_pages": [
|
|
81
|
+
{ "url": "...", "inferred_keyword": "...", "page_type": "alternatives|compare|use-case|playbook" }
|
|
82
|
+
],
|
|
83
|
+
"win_angles_for_our_brand": [...]
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Recipe C — Use-case keyword sweep (the `/for/` and `/playbooks/` discovery loop)
|
|
90
|
+
|
|
91
|
+
Replaces Ahrefs `keywords-explorer-matching-terms`. Three parallel passes for breadth.
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
PASS 1 — Use-case seed expansion via Exa deep search
|
|
95
|
+
mcp__exa__deep_search_exa(
|
|
96
|
+
objective: "What are the most-searched 'for [audience]' and 'for [use-case]' queries in <product-category>?",
|
|
97
|
+
numResults: 12,
|
|
98
|
+
type: "deep"
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
PASS 2 — Google autocomplete via Firecrawl
|
|
102
|
+
firecrawl scrape "https://www.google.com/complete/search?q=<seed>&output=toolbar"
|
|
103
|
+
firecrawl scrape "https://www.google.com/complete/search?q=<seed>+for"
|
|
104
|
+
firecrawl scrape "https://www.google.com/complete/search?q=<seed>+vs"
|
|
105
|
+
firecrawl scrape "https://www.google.com/complete/search?q=best+<seed>"
|
|
106
|
+
→ Real query suggestions from Google's autocomplete index
|
|
107
|
+
|
|
108
|
+
PASS 3 — Pain-point mining (last30days skill)
|
|
109
|
+
Invoke: /last30days "<product-category> problems"
|
|
110
|
+
Invoke: /last30days "<persona> + <pain-point>"
|
|
111
|
+
→ Returns Reddit + X + HN + YouTube + TikTok mentions with engagement counts
|
|
112
|
+
→ Recurring complaints = keyword opportunities ("how to <unblock>")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**What "good" looks like for this recipe:**
|
|
116
|
+
- 30–60 candidate keywords/topics per competitor
|
|
117
|
+
- Filtered to KD ≤ DR + buffer (see DR-cap heuristic in keyword-research/references/dr-cap-and-confidence.md)
|
|
118
|
+
- Grouped by parent topic (cluster header)
|
|
119
|
+
- Tagged with `confidence: high|medium|estimated` per the 3-tier label rule
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Recipe D — Comparison volume (`/compare/[a]-vs-[b]` validation)
|
|
124
|
+
|
|
125
|
+
Replaces Ahrefs `keywords-explorer-overview` on "[a] vs [b]". Confirms volume exists for a comparison page before writing it.
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
1. mcp__exa__web_search_advanced_exa(
|
|
129
|
+
query: "<a> vs <b>",
|
|
130
|
+
numResults: 10,
|
|
131
|
+
type: "fast"
|
|
132
|
+
)
|
|
133
|
+
→ If SERP returns 5+ comparison-shaped results, demand exists.
|
|
134
|
+
→ If 0–2 results, defer this comparison.
|
|
135
|
+
|
|
136
|
+
2. firecrawl scrape "https://www.google.com/search?q=<a>+vs+<b>"
|
|
137
|
+
→ Captures "About X,XXX results" line (rough volume proxy)
|
|
138
|
+
→ Captures featured snippet (signals comparison-page winnability)
|
|
139
|
+
|
|
140
|
+
3. mcp__exa__deep_search_exa(
|
|
141
|
+
objective: "Are people actively comparing <a> and <b> on Reddit, HN, X in the last 90 days?",
|
|
142
|
+
type: "deep"
|
|
143
|
+
)
|
|
144
|
+
→ Confirms real audience interest, not just SEO ghost demand
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Decision rule:** ship a `/compare/[a]-vs-[b]` page when Pass 1 returns ≥5 results AND Pass 3 surfaces ≥3 organic mentions in the last 90 days. Otherwise defer.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Recipe E — SERP saturation analysis (replaces Ahrefs DR/KD numbers)
|
|
152
|
+
|
|
153
|
+
Replaces Ahrefs `keywords-explorer-overview` (KD field) and `serp-overview`. Builds a "is this winnable?" verdict from SERP composition.
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
1. mcp__exa__web_search_advanced_exa(
|
|
157
|
+
query: "<target-keyword>",
|
|
158
|
+
numResults: 10,
|
|
159
|
+
type: "auto"
|
|
160
|
+
)
|
|
161
|
+
→ Top 10 results
|
|
162
|
+
|
|
163
|
+
2. For EACH top-10 result, run:
|
|
164
|
+
mcp__exa__company_research_exa(companyName: "<domain-from-result>")
|
|
165
|
+
→ Returns business signal (size, age, recognition) → DR proxy
|
|
166
|
+
|
|
167
|
+
3. Classify each top-10 result:
|
|
168
|
+
| Result type | KD signal |
|
|
169
|
+
|---|---|
|
|
170
|
+
| Major SaaS landing page (G2, Capterra, established competitor) | High KD (60+) |
|
|
171
|
+
| Reddit / Quora / forum thread | LOW KD (10-30) — content gap |
|
|
172
|
+
| Listicle from DR 30-60 niche site | Medium KD (30-50) |
|
|
173
|
+
| Generic blog from unknown site | LOW KD (10-30) — winnable |
|
|
174
|
+
| YouTube video / TikTok at position 5+ | Medium KD + AI-citation surface |
|
|
175
|
+
|
|
176
|
+
4. Compute SERP-derived KD:
|
|
177
|
+
- 5+ "high KD" results → KD 60+
|
|
178
|
+
- 5+ "medium KD" results → KD 30-50
|
|
179
|
+
- 3+ "low KD" results in top 5 → KD ≤ 20
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Output rule:** record both `serp_signal_kd` (derived) AND `confidence` (`high` if Pass 2 ran on every result, `medium` if sampled, `estimated` if SERP was small).
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Recipe F — Backlink prospecting (referring-domains via Exa)
|
|
187
|
+
|
|
188
|
+
See `skills/off-page-seo/SKILL.md` for the canonical version. Quick reference:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
mcp__exa__web_search_advanced_exa(
|
|
192
|
+
query: "<competitor-domain>",
|
|
193
|
+
numResults: 50
|
|
194
|
+
// Note: Exa indexes by content, not by linksTo metadata, so this
|
|
195
|
+
// surfaces pages mentioning the competitor — proxy for inbound link sources
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
Then for each top result:
|
|
199
|
+
- mcp__exa__company_research_exa(companyName: "<result-domain>")
|
|
200
|
+
→ DR proxy + business profile (filters paid networks / PR wires)
|
|
201
|
+
- Classify into: directories / listicles / guest-post candidates
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Output: `.seo/backlink-targets.json` (schema in `off-page-seo` SKILL).
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Recipe G — Content gap analysis (what competitors rank for that we don't)
|
|
209
|
+
|
|
210
|
+
Replaces Ahrefs `site-explorer-organic-keywords` cross-referenced with the user's own indexed pages.
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
1. Recipe B output per competitor → list of inferred keywords they rank for
|
|
214
|
+
2. mcp__exa__web_search_advanced_exa(
|
|
215
|
+
query: "site:<our-domain>",
|
|
216
|
+
numResults: 100
|
|
217
|
+
)
|
|
218
|
+
→ Our indexed pages (what we already rank for)
|
|
219
|
+
3. Compute set difference: their_keywords − our_keywords = the gap
|
|
220
|
+
4. Filter gap to keywords within our DR-cap (per KD signal from Recipe E)
|
|
221
|
+
5. Rank surviving gaps by traffic_potential proxy:
|
|
222
|
+
- 1st-page SERP demand (Recipe E) × intent fit (commercial > info)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Output:** ranked content gap list with the proposed page slug + pattern (A/B/C/D/E) per gap entry. Becomes the input to the roadmap's pending phases.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Cross-API compound recipes
|
|
230
|
+
|
|
231
|
+
Single APIs are useful; chained APIs are differentiating. The big ones:
|
|
232
|
+
|
|
233
|
+
- **Pain-point cluster discovery**: `/last30days` + Exa `deep_search_exa` + mktg-x targeted reading → produces the real complaints the audience has today (drives use-case page angles and playbook hooks)
|
|
234
|
+
- **OSS competitor teardown**: `gh repo view` + `gh api repos/<r>/contents` + DeepWiki `read_wiki_contents` + Exa company research → full competitor profile in one fan-out
|
|
235
|
+
- **Outreach prospect list**: Recipe F output + `mcp__exa__people_search_exa` per domain → finds the actual person to pitch (byline author, marketing lead, etc.) for the listicle outreach phase
|
|
236
|
+
- **Newcomer surveillance**: `mcp__exa-websets__create_webset` with "new <category> tools 2026" criteria → ongoing competitive radar; ingest into `brand/competitors.md` updates
|
|
237
|
+
|
|
238
|
+
Full details for these compound moves: `references/api-stack-recipes.md`.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Ahrefs appendix (when you have a paid subscription)
|
|
243
|
+
|
|
244
|
+
If `mcp__ahrefs__subscription-info-limits-and-usage` returns data, Ahrefs adds **numeric precision** on top of the Exa-stack recipes above. It does not replace them — Ahrefs has no equivalent for pain-point mining via `/last30days`, no `gh`-style OSS competitor signal, no built-in deep research.
|
|
245
|
+
|
|
246
|
+
The minimal Ahrefs-augmented flow when available:
|
|
247
|
+
|
|
248
|
+
| Exa-stack recipe | Ahrefs upgrade for that step |
|
|
249
|
+
|---|---|
|
|
250
|
+
| Recipe A — DR proxy | `site-explorer-domain-rating` returns the real Ahrefs DR (0–100). Replaces the proxy estimate. |
|
|
251
|
+
| Recipe B — Competitor reverse-lookup | `site-explorer-organic-keywords` filtered `kd <= DR_CAP AND volume >= 30` returns numeric KD/volume per keyword. Replaces inferred-keyword step. |
|
|
252
|
+
| Recipe C — Use-case sweep | `keywords-explorer-matching-terms` with seeds → KD/volume/TP per candidate. Replaces deep-search inference. |
|
|
253
|
+
| Recipe D — Comparison volume | `keywords-explorer-overview` on "[a] vs [b]" → exact monthly volume. Replaces "About X results" proxy. |
|
|
254
|
+
| Recipe E — SERP saturation | `serp-overview` → top 10 with DR per row, no per-domain `company_research_exa` lookups needed. |
|
|
255
|
+
| Recipe F — Backlink prospecting | `site-explorer-referring-domains` filtered `DR >= 30 AND traffic_dofollow >= 100` → cleaner target list. |
|
|
256
|
+
| Recipe G — Content gap | `site-explorer-content-gap` (cross-references multiple competitors at once) → faster than the set-difference computation. |
|
|
257
|
+
|
|
258
|
+
When using Ahrefs, record `research_backend: "ahrefs+exa"` in `.seo/config.json` (both — Ahrefs for numerics, Exa-stack for breadth/qualitative signal). The compound-recipe stack (`api-stack-recipes.md`) still runs in parallel because Ahrefs doesn't replace it.
|
|
259
|
+
|
|
260
|
+
**Not chained into mktg's ecosystem.** Ahrefs MCP requires a paid Ahrefs subscription. It is intentionally NOT in `CLAUDE.md`'s chained-in CLI table or registered as a catalog. If you want it, configure it in your own MCP config — mktg's recipes will detect it via the probe and switch paths automatically.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Manual Research Mode (Ahrefs MCP unavailable)
|
|
2
|
+
|
|
3
|
+
When `mcp__ahrefs__*` tools aren't available, the skill still works — keyword data quality just drops. The goal of this fallback is to produce *good-enough* keyword research to populate the roadmap, not to pretend Ahrefs-grade data is there.
|
|
4
|
+
|
|
5
|
+
Be honest with the user: "Ahrefs MCP isn't connected, so I'll work in manual mode. We'll have less precise volume/KD numbers, but we can still ship a roadmap. You can re-run with Ahrefs later to refine it."
|
|
6
|
+
|
|
7
|
+
## Three substitution patterns
|
|
8
|
+
|
|
9
|
+
### 1. User pastes data from their UI
|
|
10
|
+
|
|
11
|
+
If the user has Ahrefs, Semrush, Mangools, Ubersuggest, or similar — ask them to paste:
|
|
12
|
+
|
|
13
|
+
- Their domain's DR / DA / authority score
|
|
14
|
+
- Top 20 competitor organic keywords (export CSV → paste here)
|
|
15
|
+
- Striking-distance keywords (pos 5-20 in their GSC)
|
|
16
|
+
- Comparison-keyword volumes for the pairs we want to target
|
|
17
|
+
|
|
18
|
+
Parse the pasted CSV/text into the same `.seo/keyword-research.json` schema you'd build from Ahrefs. Validate columns; warn if KD or volume are missing.
|
|
19
|
+
|
|
20
|
+
### 2. Web-search-based competitor reverse-lookup
|
|
21
|
+
|
|
22
|
+
If the user has nothing:
|
|
23
|
+
|
|
24
|
+
1. **Identify competitors** — ask the user, or pull from their pricing page / about page.
|
|
25
|
+
2. **Web search for each competitor** — use the `firecrawl-search` or built-in WebSearch to query `"<competitor name> alternatives"` and `"<competitor name> vs"`. Look at:
|
|
26
|
+
- Autocomplete suggestions on Google (use a `google.com/search?q=` URL via firecrawl-scrape)
|
|
27
|
+
- "People also ask" boxes
|
|
28
|
+
- Related searches at the bottom of the SERP
|
|
29
|
+
3. **Scrape top-3 ranking competitor-alternative pages** — these are your benchmark. Capture their H1/H2/comparison structure. Lets you understand the intent and quality bar.
|
|
30
|
+
4. **Estimate volume crudely.** Use Google Trends (web search) for relative interest. A comparison keyword with steady Google Trends interest score 10+ is probably worth ≥30 monthly searches.
|
|
31
|
+
|
|
32
|
+
Document estimated volumes as **ranges** (e.g. "100-500 monthly") and **mark as estimated** in `keyword-research.json` (`"source": "estimated"`). The user can refine later.
|
|
33
|
+
|
|
34
|
+
### 3. Manual question-driven discovery
|
|
35
|
+
|
|
36
|
+
Failing all the above, run a structured interview using `AskUserQuestion`:
|
|
37
|
+
|
|
38
|
+
- "Who are your 3-5 most-known direct competitors?"
|
|
39
|
+
- "What problems do customers tell you they're trying to solve when they sign up?"
|
|
40
|
+
- "What tools did customers tell you they tried before yours?"
|
|
41
|
+
- "What does your ideal customer's job title look like? Industry?"
|
|
42
|
+
|
|
43
|
+
From those answers, generate hypothesis keywords:
|
|
44
|
+
- Competitor names → `/alternatives/[competitor]` candidates
|
|
45
|
+
- Stated problems → `/for/[use-case]` candidates
|
|
46
|
+
- Industries / personas → `/for/[audience]` candidates
|
|
47
|
+
|
|
48
|
+
Mark all as unvalidated and **encourage the user to validate volumes via free tools** before deep work:
|
|
49
|
+
- Google Keyword Planner (free with any Google Ads account)
|
|
50
|
+
- Mangools KWFinder free tier (5 queries/day)
|
|
51
|
+
- Keywords Everywhere browser extension (paid, but cheap)
|
|
52
|
+
|
|
53
|
+
## What's degraded vs Ahrefs mode
|
|
54
|
+
|
|
55
|
+
Be explicit with the user about what's missing:
|
|
56
|
+
|
|
57
|
+
| Capability | Ahrefs mode | Manual mode |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| Keyword volume | Precise monthly searches | Range estimate or "validate before targeting" |
|
|
60
|
+
| Keyword difficulty (KD) | 0-100 score | Heuristic ("competitive" if top-3 are DR>60) |
|
|
61
|
+
| Traffic potential | Per-keyword TP score | Not available — use volume × CTR estimate |
|
|
62
|
+
| Striking-distance | GSC pos 5-20 via MCP | Requires user to paste GSC data manually |
|
|
63
|
+
| Backlink target research | competitor referring-domains | Manual: who links to top-3 competitor results? |
|
|
64
|
+
| SERP overview | Top 10 with DR per result | firecrawl-scrape the SERP page |
|
|
65
|
+
|
|
66
|
+
## Roadmap impact
|
|
67
|
+
|
|
68
|
+
In manual mode, the roadmap doc should:
|
|
69
|
+
- Front-load the "validate this volume" step on every phase
|
|
70
|
+
- Use 3-tier confidence labels per row: `high`, `medium`, `estimated`
|
|
71
|
+
- Include a top-of-doc note: "Manual research mode — refine with Ahrefs when available."
|
|
72
|
+
|
|
73
|
+
When Ahrefs MCP becomes available later, run an "Initialize: refresh" pass to upgrade `estimated` rows to real numbers.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Methodology
|
|
2
|
+
|
|
3
|
+
The principles below come from running this playbook across many production phases on a real site. They're not a framework; they're what consistently worked.
|
|
4
|
+
|
|
5
|
+
## Core mental model
|
|
6
|
+
|
|
7
|
+
SEO is a compounding asset. Pages need time to age in Google's index before they rank, and the day-0 crawl shapes how Google understands your product for months. So:
|
|
8
|
+
|
|
9
|
+
1. **Publish early, refine later.** A thin page indexed now ages while you sleep. A perfect page indexed a month from now loses that month of compounding. The age signal is real and one-way.
|
|
10
|
+
2. **Conversion intent before traffic intent.** Most founders publish blog posts first because they're easier. But comparison pages and alternative pages convert at 5-20x the rate of "what is X" blog posts, even at 1/10 the volume. Start with the bottom of the funnel.
|
|
11
|
+
3. **Bet only where you can win.** DR < 10 cannot rank for KD > 30 in any reasonable timeframe. Target KD ≤ DR + 10 while your DR is still climbing. This is non-negotiable math.
|
|
12
|
+
4. **Topical depth beats topical breadth.** Pick a niche slice (e.g. "Twitter monitoring for B2B SaaS") and own it. Don't fan out across 20 unrelated themes.
|
|
13
|
+
|
|
14
|
+
## The publishing-order inversion (most founders do this backwards)
|
|
15
|
+
|
|
16
|
+
The instinct is: write educational content first to build "authority," then add product pages later. This is wrong. The actual high-performing order is:
|
|
17
|
+
|
|
18
|
+
| Order | Page type | Why |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 1 | `/alternatives/[competitor]` | Highest conversion intent. User typing "hootsuite alternative" wants to switch tools, today. |
|
|
21
|
+
| 2 | `/compare/[a]-vs-[b]` | High intent. User is deciding between two known tools — be the third option. |
|
|
22
|
+
| 3 | `/for/[use-case]` and `/for/[audience]` | Mid intent. User has a job-to-be-done but doesn't know which tool fits. |
|
|
23
|
+
| 4 | `/playbooks/[topic]` (long-form pillar) | Brand authority + AI-citation surface area. Lower direct conversion but huge inbound link draw and LLM mentions. |
|
|
24
|
+
| 5 | `/blog/...` informational posts | Lowest direct conversion; useful for keyword sweep and internal linking after the conversion pages exist. (Out of scope for this skill — use `blog-article` skill.) |
|
|
25
|
+
|
|
26
|
+
This sequence matches the 4 patterns this skill bundles. Phase 0 is technical foundations; everything after Phase 0 follows this order by default.
|
|
27
|
+
|
|
28
|
+
## Five lessons from running this for real
|
|
29
|
+
|
|
30
|
+
Each one is here because skipping it cost real time on the first try.
|
|
31
|
+
|
|
32
|
+
### 1. Capture singular AND plural in one URL.
|
|
33
|
+
|
|
34
|
+
For most competitor brands, `[brand] alternatives` (plural) has 2-3× the volume of `[brand] alternative` (singular). A single URL can rank for both if the H2 reads "Best [Brand] alternatives in 2026" and the meta title hints at plural. **Bake this in from page 1.** Retrofitting later cost an entire phase on the real project.
|
|
35
|
+
|
|
36
|
+
### 2. The honesty section is non-negotiable.
|
|
37
|
+
|
|
38
|
+
Every `/alternatives/[competitor]` page must list 3-4 things where the competitor genuinely wins. This is:
|
|
39
|
+
- A brand signal (you're trustworthy)
|
|
40
|
+
- A Google quality signal (genuine comparison > thinly-veiled vendor page)
|
|
41
|
+
- A conversion signal (readers convert when they trust the comparison)
|
|
42
|
+
|
|
43
|
+
Pages without honesty sections measurably underperform on rankings and conversion.
|
|
44
|
+
|
|
45
|
+
### 3. Internal-link minimums are quality bars, not nice-to-haves.
|
|
46
|
+
|
|
47
|
+
A new page nobody links to is invisible. Bake link counts into the quality gate per pattern:
|
|
48
|
+
- `/alternatives/*` → ≥2 sibling alts, ≥1 feature, ≥1 tool
|
|
49
|
+
- `/for/*` → ≥2 features, ≥2 tools, ≥1 sibling `/for/`
|
|
50
|
+
- `/compare/*` → both alt pages + ≥1 `/for/` + pricing
|
|
51
|
+
- `/playbooks/*` → ≥3 features, ≥2 tools, ≥2 `/for/`, ≥1 `/alternatives/`
|
|
52
|
+
- **Every page reachable from ≥2 other pages.**
|
|
53
|
+
|
|
54
|
+
Verify these mechanically (`scripts/link_audit.py`). Don't ship pages that fail.
|
|
55
|
+
|
|
56
|
+
### 4. Word-count minimums catch lazy phase work.
|
|
57
|
+
|
|
58
|
+
Soft floors per pattern:
|
|
59
|
+
- `/alternatives/*`: ≥600 words of unique copy
|
|
60
|
+
- `/for/*`: ≥800 words
|
|
61
|
+
- `/compare/*`: ≥700 words
|
|
62
|
+
- `/playbooks/*`: ≥2,500 words
|
|
63
|
+
|
|
64
|
+
These aren't about Google word-count algorithms (there isn't one). They're about ensuring the page actually answers the searcher's question. A 200-word "[brand] alternative" page that's just a comparison table will lose to a 1,200-word page that explains tradeoffs.
|
|
65
|
+
|
|
66
|
+
### 5. Striking-distance is the fastest win on any existing site.
|
|
67
|
+
|
|
68
|
+
Pages currently ranking position 8-20 in GSC are one push from page 1. Adding 200-400 words of depth + 3-5 new internal links to a position-14 page routinely moves it to position 3-5, **tripling traffic** without writing a new page.
|
|
69
|
+
|
|
70
|
+
**Run the striking-distance audit at Initialize time on any existing site.** It almost always surfaces 3-8 immediate wins that beat shipping new pages.
|
|
71
|
+
|
|
72
|
+
## Why this skill writes a persistent roadmap
|
|
73
|
+
|
|
74
|
+
Multi-phase SEO work spans weeks. Contexts compact, agents change, the user comes and goes. The roadmap doc (`docs/seo-machine.md`) is the **single source of truth** that survives:
|
|
75
|
+
- Conversation compaction
|
|
76
|
+
- New worktree / fresh Claude session
|
|
77
|
+
- Different team members executing different phases
|
|
78
|
+
- Long pauses between phases
|
|
79
|
+
|
|
80
|
+
The tracker row update lands **in the same commit/PR as the phase work**, never after. This is so every PR review sees the doc-level status change alongside the code change, and the tracker stays in sync with `main` history.
|
|
81
|
+
|
|
82
|
+
## What this skill explicitly does NOT do
|
|
83
|
+
|
|
84
|
+
- **Write blog posts.** Use the `blog-article` skill for those. This skill scaffolds the strategy (which topics, what cluster structure) but hands off the writing.
|
|
85
|
+
- **Generate images / OG cards.** Use the `og-image` or `feature-image` skill. This skill specifies which pages need OG images but doesn't make them.
|
|
86
|
+
- **Submit to GSC / IndexNow / directories.** The off-page checklist is informational. The user (or future automation) does the submitting.
|
|
87
|
+
- **Target keywords where DR < KD - 10.** It will refuse to add doomed phases to the tracker. This is a feature.
|