@jairodri/huckleberry-cli 1.0.1 → 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 +349 -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,530 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-serp-article
|
|
3
|
+
description: |
|
|
4
|
+
Deep-research article writing methodology for any brand in businesses/.
|
|
5
|
+
Combines NotebookLM source population, NLM-driven gap analysis, brand context
|
|
6
|
+
loading, and NLM article generation with slippery slope copywriting + varied
|
|
7
|
+
rhythm. Produces authoritative pillar articles that outrank competitors.
|
|
8
|
+
Use when: writing a high-quality SEO pillar article, need SERP beating
|
|
9
|
+
research, or want the Madam Groovy limerence-style deep research workflow.
|
|
10
|
+
depends-on:
|
|
11
|
+
- notebooklm
|
|
12
|
+
- nlm-cli
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Deep SERP Article Writer
|
|
16
|
+
|
|
17
|
+
Writes authoritative pillar articles that outrank competitors by loading 50+ NLM sources, running competitive gap analysis through NLM, then generating an article with the brand's voice, audience awareness, and copywriting principles baked in.
|
|
18
|
+
|
|
19
|
+
**Origin:** Extracted from the Madam Groovy limerence pillar article session (thread 1528933448369311745, July 2026). That session produced a 191-line pillar article ranking for "limerence" (301K/mo searches, competition index 2).
|
|
20
|
+
|
|
21
|
+
**Scope:** Works for any brand under `businesses/` — madamgroovy, natureshares, harper, aiwithjai, maps-landing-service, etc.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The Problem This Solves
|
|
26
|
+
|
|
27
|
+
Most SEO articles are thin rehashes of Wikipedia. They fail to:
|
|
28
|
+
1. Populate enough sources (60+) for genuine depth
|
|
29
|
+
2. Identify content gaps NLM can surface from curated sources
|
|
30
|
+
3. Align to ICP awareness level and brand voice
|
|
31
|
+
4. Use copywriting principles that keep readers engaged (slippery slope)
|
|
32
|
+
5. Vary sentence and paragraph rhythm to avoid AI cadence
|
|
33
|
+
|
|
34
|
+
This skill produces articles that do all five — for any brand.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Prerequisites
|
|
39
|
+
|
|
40
|
+
Before starting, gather:
|
|
41
|
+
- **Target keyword** (validated with search volume + competition — use `google-trends` or `google-ads generate-keywords` if needed)
|
|
42
|
+
- **Business name** (directory name under `businesses/`)
|
|
43
|
+
|
|
44
|
+
The skill handles everything else: NLM notebook creation, source population, brand context loading.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Phase 0: NLM Source Population
|
|
49
|
+
|
|
50
|
+
**Goal:** Build a NotebookLM notebook with ~50+ high-quality sources on the pillar keyword.
|
|
51
|
+
|
|
52
|
+
### Step 0.1: Create or Locate the Notebook
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Check if a notebook for this pillar already exists
|
|
56
|
+
notebooklm list --json | python3 -c "
|
|
57
|
+
import json, sys
|
|
58
|
+
data = json.load(sys.stdin)
|
|
59
|
+
keyword = 'PILLAR_KEYWORD'
|
|
60
|
+
for nb in data:
|
|
61
|
+
if keyword.lower() in nb.get('title', '').lower():
|
|
62
|
+
print(nb['id'])
|
|
63
|
+
"
|
|
64
|
+
|
|
65
|
+
# If no match, create one
|
|
66
|
+
notebooklm create "Pillar: [PILLAR_KEYWORD]" --json
|
|
67
|
+
# Save the notebook ID — you'll need it in every subsequent command
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Step 0.2: Add 20 YouTube Videos (Fixed Floor — Not Optional)
|
|
71
|
+
|
|
72
|
+
The YouTube algorithm surfaces the most popular and relevant videos for your keyword. This is the initial quality filter — trust it.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Fetch top 20 YouTube video IDs
|
|
76
|
+
yt-dlp "ytsearch20:[PILLAR_KEYWORD]" --get-id --flat-playlist --skip-download > /tmp/yt-ids.txt
|
|
77
|
+
|
|
78
|
+
# Count results — if under 20, log a warning and proceed with what you have
|
|
79
|
+
count=$(wc -l < /tmp/yt-ids.txt)
|
|
80
|
+
echo "Found $count YouTube videos"
|
|
81
|
+
|
|
82
|
+
# Add each as an NLM source
|
|
83
|
+
while IFS= read -r id; do
|
|
84
|
+
[ -z "$id" ] && continue
|
|
85
|
+
notebooklm source add "https://youtube.com/watch?v=$id" --json
|
|
86
|
+
echo "Added: $id"
|
|
87
|
+
done < /tmp/yt-ids.txt
|
|
88
|
+
|
|
89
|
+
# Wait for all sources to finish processing
|
|
90
|
+
notebooklm source list --json | python3 -c "
|
|
91
|
+
import json, sys
|
|
92
|
+
data = json.load(sys.stdin)
|
|
93
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
94
|
+
print(f'{len(ready)}/{len(data)} sources ready')
|
|
95
|
+
"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Step 0.3: Deep Web Research (NLM Discovers 20-40 More)
|
|
99
|
+
|
|
100
|
+
NLM's deep research mode auto-discovers web sources — articles, PDFs, academic papers.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
notebooklm source add-research "[PILLAR_KEYWORD]" --mode deep --no-wait
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
This runs in the background (15-30 minutes). While it runs, proceed to Phase 1 — they're independent. Come back to check status:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
notebooklm research status
|
|
110
|
+
notebooklm research wait --import-all
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
After import completes, verify total sources:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
notebooklm source list --json | python3 -c "
|
|
117
|
+
import json, sys
|
|
118
|
+
data = json.load(sys.stdin)
|
|
119
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
120
|
+
print(f'{len(ready)} sources ready')
|
|
121
|
+
"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Step 0.4: NLM Self-Curation
|
|
125
|
+
|
|
126
|
+
Let NLM decide which sources are relevant — don't judge them yourself.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
notebooklm ask "Review all sources in this notebook for
|
|
130
|
+
'[PILLAR_KEYWORD]'. List any that are off-topic, redundant, or
|
|
131
|
+
low-quality. Output titles only, one per line, with no additional text." > /tmp/prune-list.txt 2>&1
|
|
132
|
+
|
|
133
|
+
# Delete flagged sources
|
|
134
|
+
while IFS= read -r title; do
|
|
135
|
+
[ -z "$title" ] && continue
|
|
136
|
+
notebooklm source delete-by-title "$title" --yes 2>/dev/null && echo "Deleted: $title"
|
|
137
|
+
done < /tmp/prune-list.txt
|
|
138
|
+
|
|
139
|
+
# Final source count
|
|
140
|
+
notebooklm source list --json | python3 -c "
|
|
141
|
+
import json, sys
|
|
142
|
+
data = json.load(sys.stdin)
|
|
143
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
144
|
+
print(f'Final sources: {len(ready)}')
|
|
145
|
+
"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Spoke reuse note:** This one notebook serves the pillar page AND all its spoke articles. Do not repopulate sources for each spoke. When writing spoke articles later, re-use the same notebook. Add new sources only if the spoke covers a subtopic not well-represented in the current source set.
|
|
149
|
+
|
|
150
|
+
### Troubleshooting: Phase 0
|
|
151
|
+
|
|
152
|
+
**Problem:** yt-dlp returns 0 results
|
|
153
|
+
**Solution:** The keyword may be too niche for YouTube content. Skip Step 0.2 and rely on deep research only. Note the gap to the user.
|
|
154
|
+
|
|
155
|
+
**Problem:** Deep research takes >30 minutes
|
|
156
|
+
**Solution:** Use `--no-wait` and run it as a background task while you proceed to Phase 1. Poll status with `notebooklm research status`.
|
|
157
|
+
|
|
158
|
+
**Problem:** NLM flags no sources for deletion
|
|
159
|
+
**Solution:** All sources are relevant. Accept it — no curation needed.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Phase 1: NLM Gap Analysis
|
|
164
|
+
|
|
165
|
+
**Goal:** Let NLM analyze all sources and tell you what's needed to rank higher.
|
|
166
|
+
|
|
167
|
+
All queries go against the notebook created in Phase 0.
|
|
168
|
+
|
|
169
|
+
### Query 1.1: What Topics Are Covered
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
cat > /tmp/q1-topics.txt << 'PROMPT_EOF'
|
|
173
|
+
What are the main topics, themes, and content types covered
|
|
174
|
+
across all sources in this notebook? Provide a concise overview.
|
|
175
|
+
PROMPT_EOF
|
|
176
|
+
|
|
177
|
+
notebooklm ask --prompt-file /tmp/q1-topics.txt --json > /tmp/a1-topics.json
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Query 1.2: How to Rank Higher (Competitive Gap Analysis)
|
|
181
|
+
|
|
182
|
+
This is the key query. Frame it as competitive, not informational.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
cat > /tmp/q2-rank-higher.txt << 'PROMPT_EOF'
|
|
186
|
+
Based on all sources in this notebook, how could a new pillar
|
|
187
|
+
article on [PILLAR_KEYWORD] rank higher than what currently
|
|
188
|
+
exists? Consider:
|
|
189
|
+
1. Missing perspectives or underserved subtopics
|
|
190
|
+
2. Questions users ask that aren't being answered by current content
|
|
191
|
+
3. Angles that competitors cover poorly or not at all
|
|
192
|
+
4. Structure or format improvements that would win
|
|
193
|
+
5. What specific depth, authority, or unique angle would give
|
|
194
|
+
a new article a competitive edge
|
|
195
|
+
PROMPT_EOF
|
|
196
|
+
|
|
197
|
+
notebooklm ask --prompt-file /tmp/q2-rank-higher.txt --json > /tmp/a2-gaps.json
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Query 1.3: Optimal Structure for Outranking
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cat > /tmp/q3-structure.txt << 'PROMPT_EOF'
|
|
204
|
+
What would be the optimal structure, length, and key sections
|
|
205
|
+
for a pillar page on [PILLAR_KEYWORD] that would outrank current
|
|
206
|
+
top results? Be specific about sections, order, and what each
|
|
207
|
+
section must cover.
|
|
208
|
+
PROMPT_EOF
|
|
209
|
+
|
|
210
|
+
notebooklm ask --prompt-file /tmp/q3-structure.txt --json > /tmp/a3-structure.json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Query 1.4: Semantic Related Keywords
|
|
214
|
+
|
|
215
|
+
Let NLM propose the semantic keywords to weave into H2s.
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
cat > /tmp/q4-semantic.txt << 'PROMPT_EOF'
|
|
219
|
+
What semantic related keywords should a new pillar article on
|
|
220
|
+
[PILLAR_KEYWORD] target beyond the primary keyword? List 5-10
|
|
221
|
+
semantic variants that would help the article rank for related
|
|
222
|
+
search terms.
|
|
223
|
+
PROMPT_EOF
|
|
224
|
+
|
|
225
|
+
notebooklm ask --prompt-file /tmp/q4-semantic.txt --json > /tmp/a4-semantic.json
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Query 1.5: Spoke Article Topics
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
cat > /tmp/q5-spokes.txt << 'PROMPT_EOF'
|
|
232
|
+
Based on the content gaps identified, what specific spoke article
|
|
233
|
+
topics would complement a pillar page on [PILLAR_KEYWORD]?
|
|
234
|
+
Each spoke should target a specific subtopic or variant keyword.
|
|
235
|
+
PROMPT_EOF
|
|
236
|
+
|
|
237
|
+
notebooklm ask --prompt-file /tmp/q5-spokes.txt --json > /tmp/a5-spokes.json
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### What to extract from Phase 1 responses
|
|
241
|
+
|
|
242
|
+
| File | What to extract |
|
|
243
|
+
|---|---|
|
|
244
|
+
| `a2-gaps.json` | Gap list — missing perspectives, underserved angles |
|
|
245
|
+
| `a3-structure.json` | Recommended sections and order (will go into the writing prompt as `**STRUCTURE:**`) |
|
|
246
|
+
| `a4-semantic.json` | Semantic keyword list (will go into the writing prompt as `**SEMANTIC KEYWORDS:**`) |
|
|
247
|
+
| `a5-spokes.json` | Spoke article topics (saved for later) |
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Phase 2: Brand Context Loading (Brand-Agnostic)
|
|
252
|
+
|
|
253
|
+
**Goal:** Load all brand context to inject into the NLM writing prompt.
|
|
254
|
+
|
|
255
|
+
### Step 2.1: Load the Standard Business Context
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# The MCP tool normalizes evergreen.md + brand-assets for any business
|
|
259
|
+
load-business-context [BUSINESS_NAME]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
This loads `evergreen.md` and any brand-assets files. Every brand under `businesses/` has at minimum `evergreen.md`.
|
|
263
|
+
|
|
264
|
+
### Step 2.2: Discover and Load Specialized Brand Files
|
|
265
|
+
|
|
266
|
+
Brands have different layouts. Search for these patterns:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Find voice file (SOUL.md or voice-guide.md)
|
|
270
|
+
find "/Users/clawdbot/clawd/businesses/[BUSINESS_NAME]" \
|
|
271
|
+
-maxdepth 4 -name "SOUL.md" -o -name "voice-guide.md" 2>/dev/null | head -3
|
|
272
|
+
|
|
273
|
+
# Find ICP file (icp-profiles.md, audience.md, or reddit-pain-phrases.md)
|
|
274
|
+
find "/Users/clawdbot/clawd/businesses/[BUSINESS_NAME]" \
|
|
275
|
+
-maxdepth 4 \( -name "icp-profiles.md" -o -name "audience.md" \
|
|
276
|
+
-o -name "reddit-pain-phrases.md" \) 2>/dev/null | head -5
|
|
277
|
+
|
|
278
|
+
# Find keyword plan (optional — supplements NLM's semantic suggestions)
|
|
279
|
+
find "/Users/clawdbot/clawd/businesses/[BUSINESS_NAME]" \
|
|
280
|
+
-maxdepth 4 \( -name "keyword-plan.md" -o -name "topic-clusters.json" \) 2>/dev/null | head -3
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Also check `workspace/[BUSINESS_NAME]/` for additional brand files:
|
|
284
|
+
```bash
|
|
285
|
+
find "/Users/clawdbot/clawd/workspace/[BUSINESS_NAME]" \
|
|
286
|
+
-maxdepth 3 \( -name "SOUL.md" -o -name "reddit-pain-phrases.md" \
|
|
287
|
+
-o -name "CONTENT.md" -o -name "landing-page.md" \) 2>/dev/null | head -5
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Step 2.3: Extract Key Information
|
|
291
|
+
|
|
292
|
+
From all loaded files, extract:
|
|
293
|
+
- **Brand voice descriptors** — e.g., "wise, warm, radically clear" (SOUL.md or voice-guide.md)
|
|
294
|
+
- **Brand phrases / forbidden words** — what to say, what never to say
|
|
295
|
+
- **ICP definition** — who the reader is (from icp-profiles.md or evergree.md)
|
|
296
|
+
- **Awareness level** — problem-aware vs. solution-aware (infer from ICP description)
|
|
297
|
+
- **Storytelling form** — narrative-driven, evidence-based, etc. (from CONTENT.md or evergreen.md)
|
|
298
|
+
- **Pain phrases** — ICP's exact language for pain validation (from reddit-pain-phrases.md or evergreen.md)
|
|
299
|
+
- **CTA path** — the conversion path (article → landing page → service)
|
|
300
|
+
- **Content rules** — DO/DON'T lists from evergreen.md
|
|
301
|
+
|
|
302
|
+
If a file doesn't exist for a given brand (e.g., maps-landing-service has no icp-profiles.md), use whatever's available in evergreen.md alone and note the gap.
|
|
303
|
+
|
|
304
|
+
### Fallback for Minimal Brands
|
|
305
|
+
|
|
306
|
+
Some brands (like maps-landing-service) only have `evergreen.md`. That's fine — extract what you can:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Read evergre.md directly
|
|
310
|
+
cat /Users/clawdbot/clawd/businesses/[BUSINESS_NAME]/evergreen.md
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Then infer: ICP from the business description, brand voice from tone, awareness level from who they serve.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Phase 3: Article Writing via NLM
|
|
318
|
+
|
|
319
|
+
**Goal:** Generate the pillar article using a single comprehensive NLM prompt.
|
|
320
|
+
|
|
321
|
+
### Step 3.1: Assemble the Article Prompt
|
|
322
|
+
|
|
323
|
+
Combine everything from Phases 0-2 into one prompt file:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
cat > /tmp/article-prompt.txt << 'PROMPT_EOF'
|
|
327
|
+
Write a comprehensive, authoritative yet accessible pillar page
|
|
328
|
+
article on [PILLAR_KEYWORD] for [BUSINESS_NAME].
|
|
329
|
+
|
|
330
|
+
**TARGET KEYWORD:** [PILLAR_KEYWORD] (verified volume + competition)
|
|
331
|
+
**SEMANTIC KEYWORDS:** [paste from Phase 1.4 — the 5-10 semantic variants]
|
|
332
|
+
**SEO INSTRUCTION:** Naturally weave semantic related keywords into
|
|
333
|
+
H2 section headers. The article should rank for the primary keyword AND
|
|
334
|
+
its semantic variants.
|
|
335
|
+
|
|
336
|
+
**AUDIENCE:** [paste ICP from Phase 2 — who is reading this]
|
|
337
|
+
**AWARENESS LEVEL:** [problem-aware / solution-aware — from Phase 2]
|
|
338
|
+
**STORYTELLING FORM:** [from Phase 2 — e.g., narrative-driven with personal elements]
|
|
339
|
+
|
|
340
|
+
**COPYWRITING PRINCIPLE: Slippery Slope**
|
|
341
|
+
Each sentence must create an irresistible pull to read the next.
|
|
342
|
+
Open loops in one sentence, close them in the next. Never let the
|
|
343
|
+
reader reach a natural stopping point mid-paragraph.
|
|
344
|
+
Ways to do this:
|
|
345
|
+
- Open loops: "What happened next surprised everyone."
|
|
346
|
+
- Imply value ahead: "This is where most people get it wrong."
|
|
347
|
+
- Plant questions: describe a phenomenon, then leave the
|
|
348
|
+
explanation for the next paragraph
|
|
349
|
+
- End paragraphs on tension, never resolution
|
|
350
|
+
- End sections on questions, never answers
|
|
351
|
+
The goal: a reader who sits down for "5 minutes" and finishes
|
|
352
|
+
the whole article wondering where the time went.
|
|
353
|
+
|
|
354
|
+
**RHYTHM AND CADENCE (CRITICAL):**
|
|
355
|
+
Vary sentence length deliberately. Short punchy sentences. Then
|
|
356
|
+
longer ones that take their time getting where they're going. Mix
|
|
357
|
+
it up. Real writing alternates short and long — AI writing tends
|
|
358
|
+
toward an even, mid-length cadence. Break that pattern.
|
|
359
|
+
Also vary paragraph length: some paragraphs are one searing
|
|
360
|
+
sentence. Some are four sentences. Some are a single observation
|
|
361
|
+
that earns its own space. Never let paragraphs fall into uniform
|
|
362
|
+
multi-sentence blocks.
|
|
363
|
+
|
|
364
|
+
**BRAND VOICE:** [paste from Phase 2 — e.g., "wise, warm, radically clear"]
|
|
365
|
+
**CONTENT RULES:**
|
|
366
|
+
- DO [paste approved terms / approaches from Phase 2]
|
|
367
|
+
- DON'T [paste forbidden terms / approaches from Phase 2]
|
|
368
|
+
|
|
369
|
+
**STRUCTURE:** [paste NLM's recommended structure from Phase 1.3 —
|
|
370
|
+
NLM determines the optimal structure based on what would outrank
|
|
371
|
+
current top results. Do NOT use a fixed template.]
|
|
372
|
+
|
|
373
|
+
**CITATIONS:** Use bracketed citations [1, 2] referencing sources
|
|
374
|
+
in the notebook.
|
|
375
|
+
**INTERNAL LINKS:** Note opportunities to link to related spoke content.
|
|
376
|
+
|
|
377
|
+
**CTA:** [paste conversion path from Phase 2 — soft call-to-action
|
|
378
|
+
aligned with brand positioning]
|
|
379
|
+
PROMPT_EOF
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Step 3.2: Generate the Article
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
notebooklm ask --prompt-file /tmp/article-prompt.txt \
|
|
386
|
+
--save-as-note --note-title "Pillar: [PILLAR_KEYWORD]" --json > /tmp/article-result.json
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Step 3.3: Refine if Needed
|
|
390
|
+
|
|
391
|
+
Review the generated article. If sections need strengthening:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# Example refinement queries
|
|
395
|
+
notebooklm ask "Strengthen section 3 by adding a practical exercise
|
|
396
|
+
the reader can do today." --save-as-note --note-title "Pillar: [PILLAR_KEYWORD] - Section 3"
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Refinements save as separate notes with descriptive titles so you can pick the best version later.
|
|
400
|
+
|
|
401
|
+
### Step 3.4: Retrieve the Final Note
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
# List notes to find the one you want
|
|
405
|
+
notebooklm note list --json | python3 -c "
|
|
406
|
+
import json, sys
|
|
407
|
+
data = json.load(sys.stdin)
|
|
408
|
+
for n in data:
|
|
409
|
+
if 'Pillar: [PILLAR_KEYWORD]' in n.get('title', ''):
|
|
410
|
+
print(f'{n[\"id\"]} {n[\"title\"]}')
|
|
411
|
+
"
|
|
412
|
+
|
|
413
|
+
# Get the best version as markdown
|
|
414
|
+
notebooklm note get [NOTE_ID] --format markdown > /tmp/final-article.md
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Phase 4: Save and Format
|
|
420
|
+
|
|
421
|
+
**Goal:** Save the article in the correct format for the brand's content system.
|
|
422
|
+
|
|
423
|
+
### Step 4.1: Determine Content Structure
|
|
424
|
+
|
|
425
|
+
Different brands use different systems. Check what exists:
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
# Jekyll/Hugo-style draft dir
|
|
429
|
+
ls businesses/[BUSINESS_NAME]/content/_drafts/ 2>/dev/null && echo "Jekyll-style"
|
|
430
|
+
ls businesses/[BUSINESS_NAME]/content/03-production/blog/ 2>/dev/null && echo "Structured blog"
|
|
431
|
+
|
|
432
|
+
# Read an existing draft to match format
|
|
433
|
+
head -10 businesses/[BUSINESS_NAME]/content/_drafts/*/index.md 2>/dev/null | head -20
|
|
434
|
+
head -10 businesses/[BUSINESS_NAME]/content/03-production/blog/*/ARTICLE-DRAFT.md 2>/dev/null | head -20
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Step 4.2: Create the Article File
|
|
438
|
+
|
|
439
|
+
```bash
|
|
440
|
+
# Create a slug from the pillar keyword
|
|
441
|
+
SLUG=$(echo "[PILLAR_KEYWORD]" | sed 's/ /-/g' | tr '[:upper:]' '[:lower:]')
|
|
442
|
+
|
|
443
|
+
# Create directory matching existing pattern
|
|
444
|
+
mkdir -p "businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG"
|
|
445
|
+
|
|
446
|
+
# Write the article (adjust format based on what you found in Step 4.1)
|
|
447
|
+
cp /tmp/final-article.md "businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG/ARTICLE-DRAFT.md"
|
|
448
|
+
|
|
449
|
+
echo "Article saved to: businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG/"
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Step 4.3: Final Polish
|
|
453
|
+
|
|
454
|
+
- Fix any typos in CTAs (ensure brand name is correct)
|
|
455
|
+
- Remove any duplicate lines or sections
|
|
456
|
+
- Verify internal link placeholders point to real spoke slugs
|
|
457
|
+
- Read the first 10 and last 10 lines to confirm clean start/end
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## Phase 5: Quality Gate
|
|
462
|
+
|
|
463
|
+
Before showing the article to the user, verify:
|
|
464
|
+
|
|
465
|
+
1. **Keyword targeting** — primary keyword appears in title, first paragraph, and H2s
|
|
466
|
+
2. **Semantic keywords** — variants naturally appear in H2s
|
|
467
|
+
3. **Content gap coverage** — Phase 1.2 gaps are addressed
|
|
468
|
+
4. **ICP alignment** — language matches pain phrases from Phase 2
|
|
469
|
+
5. **Brand voice** — consistent with voice descriptors from Phase 2
|
|
470
|
+
6. **Slippery slope** — paragraphs end with hooks leading to the next
|
|
471
|
+
7. **Rhythm** — sentence and paragraph length varies (no uniform mid-length cadence)
|
|
472
|
+
8. **Citations** — bracketed references to sources
|
|
473
|
+
9. **CTA** — soft call-to-action aligned with conversion path
|
|
474
|
+
10. **Length** — pillar articles 1500-3000 words; spoke articles 800-1500
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
478
|
+
## Example: Madam Groovy Limerence Article
|
|
479
|
+
|
|
480
|
+
**Thread:** https://discord.com/channels/1109630805409529916/1528933448369311745
|
|
481
|
+
|
|
482
|
+
**What the session did (following this skill exactly):**
|
|
483
|
+
|
|
484
|
+
| Phase | What happened | Result |
|
|
485
|
+
|---|---|---|
|
|
486
|
+
| 0 | Created NLM notebook, added 20 YouTube videos, ran deep research (40+ more), NLM curated | ~60 sources on limerence |
|
|
487
|
+
| 1 | Five NLM queries: topics, gaps, structure, semantic keywords, spokes | Gaps identified, 7-section structure recommended, 5 semantic variants surfaced |
|
|
488
|
+
| 2 | Loaded evergreen.md + SOUL.md + icp-profiles.md + reddit-pain-phrases.md | ICP: women 25-45 navigating heartbreak. Voice: wise, warm, ruthlessly clear |
|
|
489
|
+
| 3 | Comprehensive NLM prompt with all inputs + slippery slope + varied rhythm | 191-line pillar article with bracketed citations |
|
|
490
|
+
| 4 | Formatted and saved to `content/03-production/blog/taming-the-limerent-beast/ARTICLE-DRAFT.md` | Saved and verified |
|
|
491
|
+
| 5 | Verified keyword targeting, gaps covered, brand voice consistent | Ready for user review |
|
|
492
|
+
|
|
493
|
+
**Result:** Article titled "Taming the Limerent Beast: A Guide to Obsessive Love" targeting "limerence" (301K/mo, competition index 2).
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Troubleshooting
|
|
498
|
+
|
|
499
|
+
**Problem:** Brand has no brand-assets directory (e.g., maps-landing-service)
|
|
500
|
+
**Solution:** Fall back to `evergreen.md` only. Extract brand voice from the document's tone and ICP from the business description.
|
|
501
|
+
|
|
502
|
+
**Problem:** yt-dlp returns 0 results
|
|
503
|
+
**Solution:** Keyword may be too niche. Skip YouTube step and rely on deep research only.
|
|
504
|
+
|
|
505
|
+
**Problem:** NLM deep research takes >30 minutes
|
|
506
|
+
**Solution:** Use `--no-wait` and run in background. Proceed to Phase 2 while it processes.
|
|
507
|
+
|
|
508
|
+
**Problem:** NLM flags no sources for deletion
|
|
509
|
+
**Solution:** All sources are relevant. Accept it — no curation needed.
|
|
510
|
+
|
|
511
|
+
**Problem:** Article drifts from brand voice
|
|
512
|
+
**Solution:** Re-read the voice file (SOUL.md or voice-guide.md) and include specific voice phrases as examples in the Phase 3 prompt.
|
|
513
|
+
|
|
514
|
+
**Problem:** Generated article has uniform paragraph lengths
|
|
515
|
+
**Solution:** The NLM prompt's Rhythm section may have been omitted or truncated. Re-run Phase 3 with the full RHYTHM AND CADENCE block.
|
|
516
|
+
|
|
517
|
+
**Problem:** NLM query returns generic structure recommendations
|
|
518
|
+
**Solution:** Refine the Phase 1.3 query to ask: "Be specific. Give exact section headings, not generic advice."
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Related Skills
|
|
523
|
+
|
|
524
|
+
- `notebooklm` — NLM source operations and querying (teng-lin/notebooklm-py)
|
|
525
|
+
- `nlm-cli` — NLM CLI (jacob-bd fork, for batch/cross-notebook ops)
|
|
526
|
+
- `google-trends` — Keyword research and SERP analysis
|
|
527
|
+
- `google-ads` — Keyword volume + competition validation
|
|
528
|
+
- `humanizer` — Post-generation rhythm and AI-tell removal
|
|
529
|
+
- `article-generator` — Router skill that can delegate to this one
|
|
530
|
+
- `seo-content` — Alternative path for pure SEO articles (less research depth)
|