@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,677 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-serp-article
|
|
3
|
+
description: Write authoritative deep-SERP pillar articles that outrank competitors by loading 50+ NLM sources, running competitive gap analysis, and generating the article with the brand's voice and copywriting principles baked in. Use for pillar and cornerstone article writing.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: deep-serp-article
|
|
7
|
+
|
|
8
|
+
# Deep SERP Article Writer
|
|
9
|
+
|
|
10
|
+
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.
|
|
11
|
+
|
|
12
|
+
**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).
|
|
13
|
+
|
|
14
|
+
**Scope:** Works for any brand under `businesses/` — madamgroovy, natureshares, harper, aiwithjai, maps-landing-service, etc.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## The Problem This Solves
|
|
19
|
+
|
|
20
|
+
Most SEO articles are thin rehashes of Wikipedia. They fail to:
|
|
21
|
+
1. Populate enough sources (60+) for genuine depth
|
|
22
|
+
2. Identify content gaps NLM can surface from curated sources
|
|
23
|
+
3. Align to ICP awareness level and brand voice
|
|
24
|
+
4. Use copywriting principles that keep readers engaged (slippery slope)
|
|
25
|
+
5. Vary sentence and paragraph rhythm to avoid AI cadence
|
|
26
|
+
|
|
27
|
+
This skill produces articles that do all five — for any brand.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Prerequisites
|
|
32
|
+
|
|
33
|
+
Before starting, gather:
|
|
34
|
+
- **Target keyword** (validated with search volume + competition — use `google-trends` or `google-ads generate-keywords` if needed)
|
|
35
|
+
- **Business name** (directory name under `businesses/`)
|
|
36
|
+
|
|
37
|
+
The skill handles everything else: NLM notebook creation, source population, brand context loading.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Phase 0: NLM Source Population
|
|
42
|
+
|
|
43
|
+
**Goal:** Build a NotebookLM notebook with ~50+ high-quality sources on the pillar keyword.
|
|
44
|
+
|
|
45
|
+
### Step 0.1: Create or Locate the Notebook
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Check if a notebook for this pillar already exists
|
|
49
|
+
notebooklm list --json | python3 -c "
|
|
50
|
+
import json, sys
|
|
51
|
+
data = json.load(sys.stdin)
|
|
52
|
+
keyword = 'PILLAR_KEYWORD'
|
|
53
|
+
for nb in data:
|
|
54
|
+
if keyword.lower() in nb.get('title', '').lower():
|
|
55
|
+
print(nb['id'])
|
|
56
|
+
"
|
|
57
|
+
|
|
58
|
+
# If no match, create one
|
|
59
|
+
notebooklm create "Pillar: [PILLAR_KEYWORD]" --json
|
|
60
|
+
# Save the notebook ID — you'll need it in every subsequent command
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 0.2: Add 20 YouTube Videos (Fixed Floor — Not Optional)
|
|
64
|
+
|
|
65
|
+
The YouTube algorithm surfaces the most popular and relevant videos for your keyword. This is the initial quality filter — trust it.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Fetch top 20 YouTube video IDs
|
|
69
|
+
yt-dlp "ytsearch20:[PILLAR_KEYWORD]" --get-id --flat-playlist --skip-download > /tmp/yt-ids.txt
|
|
70
|
+
|
|
71
|
+
# Count results — if under 20, log a warning and proceed with what you have
|
|
72
|
+
count=$(wc -l < /tmp/yt-ids.txt)
|
|
73
|
+
echo "Found $count YouTube videos"
|
|
74
|
+
|
|
75
|
+
# Add each as an NLM source
|
|
76
|
+
while IFS= read -r id; do
|
|
77
|
+
[ -z "$id" ] && continue
|
|
78
|
+
notebooklm source add "https://youtube.com/watch?v=$id" --json
|
|
79
|
+
echo "Added: $id"
|
|
80
|
+
done < /tmp/yt-ids.txt
|
|
81
|
+
|
|
82
|
+
# Wait for all sources to finish processing
|
|
83
|
+
notebooklm source list --json | python3 -c "
|
|
84
|
+
import json, sys
|
|
85
|
+
data = json.load(sys.stdin)
|
|
86
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
87
|
+
print(f'{len(ready)}/{len(data)} sources ready')
|
|
88
|
+
"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 0.3: Deep Web Research (NLM Discovers 20-40 More)
|
|
92
|
+
|
|
93
|
+
NLM's deep research mode auto-discovers web sources — articles, PDFs, academic papers.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
notebooklm source add-research "[PILLAR_KEYWORD]" --mode deep --no-wait
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This runs in the background (15-30 minutes). While it runs, proceed to Phase 1 — they're independent. Come back to check status:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
notebooklm research status
|
|
103
|
+
notebooklm research wait --import-all
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
After import completes, verify total sources:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
notebooklm source list --json | python3 -c "
|
|
110
|
+
import json, sys
|
|
111
|
+
data = json.load(sys.stdin)
|
|
112
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
113
|
+
print(f'{len(ready)} sources ready')
|
|
114
|
+
"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Step 0.4: NLM Self-Curation
|
|
118
|
+
|
|
119
|
+
Let NLM decide which sources are relevant — don't judge them yourself.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
notebooklm ask "Review all sources in this notebook for
|
|
123
|
+
'[PILLAR_KEYWORD]'. List any that are off-topic, redundant, or
|
|
124
|
+
low-quality. Output titles only, one per line, with no additional text." > /tmp/prune-list.txt 2>&1
|
|
125
|
+
|
|
126
|
+
# Delete flagged sources
|
|
127
|
+
while IFS= read -r title; do
|
|
128
|
+
[ -z "$title" ] && continue
|
|
129
|
+
notebooklm source delete-by-title "$title" --yes 2>/dev/null && echo "Deleted: $title"
|
|
130
|
+
done < /tmp/prune-list.txt
|
|
131
|
+
|
|
132
|
+
# Final source count
|
|
133
|
+
notebooklm source list --json | python3 -c "
|
|
134
|
+
import json, sys
|
|
135
|
+
data = json.load(sys.stdin)
|
|
136
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
137
|
+
print(f'Final sources: {len(ready)}')
|
|
138
|
+
"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**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.
|
|
142
|
+
|
|
143
|
+
### Troubleshooting: Phase 0
|
|
144
|
+
|
|
145
|
+
**Problem:** yt-dlp returns 0 results
|
|
146
|
+
**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.
|
|
147
|
+
|
|
148
|
+
**Problem:** Deep research takes >30 minutes
|
|
149
|
+
**Solution:** Use `--no-wait` and run it as a background task while you proceed to Phase 1. Poll status with `notebooklm research status`.
|
|
150
|
+
|
|
151
|
+
**Problem:** NLM flags no sources for deletion
|
|
152
|
+
**Solution:** All sources are relevant. Accept it — no curation needed.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Phase 1: NLM Gap Analysis
|
|
157
|
+
|
|
158
|
+
**Goal:** Let NLM analyze all sources and tell you what's needed to rank higher.
|
|
159
|
+
|
|
160
|
+
All queries go against the notebook created in Phase 0.
|
|
161
|
+
|
|
162
|
+
### Query 1.1: What Topics Are Covered
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
cat > /tmp/q1-topics.txt << 'PROMPT_EOF'
|
|
166
|
+
What are the main topics, themes, and content types covered
|
|
167
|
+
across all sources in this notebook? Provide a concise overview.
|
|
168
|
+
PROMPT_EOF
|
|
169
|
+
|
|
170
|
+
notebooklm ask --prompt-file /tmp/q1-topics.txt --json > /tmp/a1-topics.json
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Query 1.2: How to Rank Higher (Competitive Gap Analysis)
|
|
174
|
+
|
|
175
|
+
This is the key query. Frame it as competitive, not informational.
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
cat > /tmp/q2-rank-higher.txt << 'PROMPT_EOF'
|
|
179
|
+
Based on all sources in this notebook, how could a new pillar
|
|
180
|
+
article on [PILLAR_KEYWORD] rank higher than what currently
|
|
181
|
+
exists? Consider:
|
|
182
|
+
1. Missing perspectives or underserved subtopics
|
|
183
|
+
2. Questions users ask that aren't being answered by current content
|
|
184
|
+
3. Angles that competitors cover poorly or not at all
|
|
185
|
+
4. Structure or format improvements that would win
|
|
186
|
+
5. What specific depth, authority, or unique angle would give
|
|
187
|
+
a new article a competitive edge
|
|
188
|
+
PROMPT_EOF
|
|
189
|
+
|
|
190
|
+
notebooklm ask --prompt-file /tmp/q2-rank-higher.txt --json > /tmp/a2-gaps.json
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Query 1.3: Optimal Structure for Outranking
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
cat > /tmp/q3-structure.txt << 'PROMPT_EOF'
|
|
197
|
+
What would be the optimal structure, length, and key sections
|
|
198
|
+
for a pillar page on [PILLAR_KEYWORD] that would outrank current
|
|
199
|
+
top results? Be specific about sections, order, and what each
|
|
200
|
+
section must cover.
|
|
201
|
+
PROMPT_EOF
|
|
202
|
+
|
|
203
|
+
notebooklm ask --prompt-file /tmp/q3-structure.txt --json > /tmp/a3-structure.json
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Query 1.4: Semantic Related Keywords
|
|
207
|
+
|
|
208
|
+
Let NLM propose the semantic keywords to weave into H2s.
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
cat > /tmp/q4-semantic.txt << 'PROMPT_EOF'
|
|
212
|
+
What semantic related keywords should a new pillar article on
|
|
213
|
+
[PILLAR_KEYWORD] target beyond the primary keyword? List 5-10
|
|
214
|
+
semantic variants that would help the article rank for related
|
|
215
|
+
search terms.
|
|
216
|
+
PROMPT_EOF
|
|
217
|
+
|
|
218
|
+
notebooklm ask --prompt-file /tmp/q4-semantic.txt --json > /tmp/a4-semantic.json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Query 1.5: Spoke Article Topics
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
cat > /tmp/q5-spokes.txt << 'PROMPT_EOF'
|
|
225
|
+
Based on the content gaps identified, what specific spoke article
|
|
226
|
+
topics would complement a pillar page on [PILLAR_KEYWORD]?
|
|
227
|
+
Each spoke should target a specific subtopic or variant keyword.
|
|
228
|
+
PROMPT_EOF
|
|
229
|
+
|
|
230
|
+
notebooklm ask --prompt-file /tmp/q5-spokes.txt --json > /tmp/a5-spokes.json
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### What to extract from Phase 1 responses
|
|
234
|
+
|
|
235
|
+
| File | What to extract |
|
|
236
|
+
|---|---|
|
|
237
|
+
| `a2-gaps.json` | Gap list — missing perspectives, underserved angles |
|
|
238
|
+
| `a3-structure.json` | Recommended sections and order (will go into the writing prompt as `**STRUCTURE:**`) |
|
|
239
|
+
| `a4-semantic.json` | Semantic keyword list (will go into the writing prompt as `**SEMANTIC KEYWORDS:**`) |
|
|
240
|
+
| `a5-spokes.json` | Spoke article topics (saved for later) |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Phase 2: Brand Context Loading (Brand-Agnostic)
|
|
245
|
+
|
|
246
|
+
**Goal:** Load all brand context to inject into the NLM writing prompt.
|
|
247
|
+
|
|
248
|
+
### Step 2.1: Load the Standard Business Context
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# The MCP tool normalizes evergreen.md + brand-assets for any business
|
|
252
|
+
load-business-context [BUSINESS_NAME]
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
This loads `evergreen.md` and any brand-assets files. Every brand under `businesses/` has at minimum `evergreen.md`.
|
|
256
|
+
|
|
257
|
+
### Step 2.2: Discover and Load Specialized Brand Files
|
|
258
|
+
|
|
259
|
+
Brands have different layouts. Search for these patterns:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# Find voice file (SOUL.md or voice-guide.md)
|
|
263
|
+
find "./businesses/[BUSINESS_NAME]" \
|
|
264
|
+
-maxdepth 4 -name "SOUL.md" -o -name "voice-guide.md" 2>/dev/null | head -3
|
|
265
|
+
|
|
266
|
+
# Find ICP file (icp-profiles.md, audience.md, or reddit-pain-phrases.md)
|
|
267
|
+
find "./businesses/[BUSINESS_NAME]" \
|
|
268
|
+
-maxdepth 4 \( -name "icp-profiles.md" -o -name "audience.md" \
|
|
269
|
+
-o -name "reddit-pain-phrases.md" \) 2>/dev/null | head -5
|
|
270
|
+
|
|
271
|
+
# Find keyword plan (optional — supplements NLM's semantic suggestions)
|
|
272
|
+
find "./businesses/[BUSINESS_NAME]" \
|
|
273
|
+
-maxdepth 4 \( -name "keyword-plan.md" -o -name "topic-clusters.json" \) 2>/dev/null | head -3
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Also check `workspace/[BUSINESS_NAME]/` for additional brand files:
|
|
277
|
+
```bash
|
|
278
|
+
find "./workspace/[BUSINESS_NAME]" \
|
|
279
|
+
-maxdepth 3 \( -name "SOUL.md" -o -name "reddit-pain-phrases.md" \
|
|
280
|
+
-o -name "CONTENT.md" -o -name "landing-page.md" \) 2>/dev/null | head -5
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Step 2.3: Extract Key Information
|
|
284
|
+
|
|
285
|
+
From all loaded files, extract:
|
|
286
|
+
- **Brand voice descriptors** — e.g., "wise, warm, radically clear" (SOUL.md or voice-guide.md)
|
|
287
|
+
- **Brand phrases / forbidden words** — what to say, what never to say
|
|
288
|
+
- **ICP definition** — who the reader is (from icp-profiles.md or evergree.md)
|
|
289
|
+
- **Awareness level** — problem-aware vs. solution-aware (infer from ICP description)
|
|
290
|
+
- **Storytelling form** — narrative-driven, evidence-based, etc. (from CONTENT.md or evergreen.md)
|
|
291
|
+
- **Pain phrases** — ICP's exact language for pain validation (from reddit-pain-phrases.md or evergreen.md)
|
|
292
|
+
- **CTA path** — the conversion path (article → landing page → service)
|
|
293
|
+
- **Content rules** — DO/DON'T lists from evergreen.md
|
|
294
|
+
|
|
295
|
+
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.
|
|
296
|
+
|
|
297
|
+
### Fallback for Minimal Brands
|
|
298
|
+
|
|
299
|
+
Some brands (like maps-landing-service) only have `evergreen.md`. That's fine — extract what you can:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
# Read evergre.md directly
|
|
303
|
+
cat ./businesses/[BUSINESS_NAME]/evergreen.md
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Then infer: ICP from the business description, brand voice from tone, awareness level from who they serve.
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Phase 3: Thesis-Enhanced Article Writing via NLM
|
|
311
|
+
|
|
312
|
+
**Goal:** Generate a strong thesis statement based on research, validate it using Sharp-Thesis criteria, then use it to guide the article generation.
|
|
313
|
+
|
|
314
|
+
### Step 3.1: Generate Thesis Statement
|
|
315
|
+
|
|
316
|
+
Based on Phase 1 gap analysis and Phase 2 brand context, generate a compelling thesis statement:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
cat > /tmp/thesis-prompt.txt << 'PROMPT_EOF'
|
|
320
|
+
Based on the research insights below, craft a single, compelling thesis statement for a pillar article on [PILLAR_KEYWORD] that meets the Sharp-Thesis (Cerebras) Test criteria:
|
|
321
|
+
|
|
322
|
+
PHASE 1 INSIGHTS:
|
|
323
|
+
- Content gaps: [paste key insights from a2-gaps.json]
|
|
324
|
+
- Recommended structure: [paste key insights from a3-structure.json]
|
|
325
|
+
- Semantic keywords: [paste key insights from a4-semantic.json]
|
|
326
|
+
|
|
327
|
+
PHASE 2 BRAND CONTEXT:
|
|
328
|
+
- Brand voice: [paste from Phase 2]
|
|
329
|
+
- ICP/audience: [paste from Phase 2]
|
|
330
|
+
- Brand positioning: [paste from Phase 2]
|
|
331
|
+
|
|
332
|
+
A strong thesis statement must:
|
|
333
|
+
1. Make ONE clear, arguable claim (not just a topic description)
|
|
334
|
+
2. Include a concrete number (dollar amount, percentage, timeframe, etc.)
|
|
335
|
+
3. Establish urgency ("why this matters now")
|
|
336
|
+
- Be expressible as a title ≤80 characters
|
|
337
|
+
|
|
338
|
+
The thesis should emerge naturally from the research gaps and brand positioning, not feel forced.
|
|
339
|
+
|
|
340
|
+
Output ONLY the thesis statement, nothing else.
|
|
341
|
+
PROMPT_EOF
|
|
342
|
+
|
|
343
|
+
notebooklm ask --prompt-file /tmp/thesis-prompt.txt --json > /tmp/thesis-result.json
|
|
344
|
+
THESIS=$(python3 -c "
|
|
345
|
+
import json
|
|
346
|
+
with open('/tmp/thesis-result.json') as f:
|
|
347
|
+
data = json.load(f)
|
|
348
|
+
print(data.get('text', '').strip())
|
|
349
|
+
")
|
|
350
|
+
echo "Generated thesis: $THESIS"
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Step 3.2: Validate Thesis with Sharp-Thesis Criteria
|
|
354
|
+
|
|
355
|
+
Validate the generated thesis against the Sharp-Thesis (Cerebras) Test:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# Manual validation based on Sharp-Thesis criteria from sharp-thesis-validator skill
|
|
359
|
+
echo "Validating thesis against Sharp-Thesis criteria:"
|
|
360
|
+
echo "Thesis: $THESIS"
|
|
361
|
+
echo ""
|
|
362
|
+
|
|
363
|
+
# Check for single arguable claim
|
|
364
|
+
if echo "$THESIS" | grep -iqE "(because|causes?|leads to?|results? in?|due to?|since|as a result)"; then
|
|
365
|
+
CLAIM_CHECK="PASS - Contains causal language suggesting arguable claim"
|
|
366
|
+
else
|
|
367
|
+
CLAIM_CHECK="FAIL - No clear causal relationship found"
|
|
368
|
+
fi
|
|
369
|
+
echo "1. Single arguable claim: $CLAIM_CHECK"
|
|
370
|
+
|
|
371
|
+
# Check for concrete number
|
|
372
|
+
if echo "$THESIS" | grep -iqE '\$[0-9,]+\.?[0-9]*|[0-9,]+\.?[0-9]*%|[0-9]+\s*(years?|months?|weeks?|days?|hours?)\b|[0-9]+\s*(usd|eur|gbp|cad|aud|\btons?\b|\bkilograms?\b|\bmeters?\b|\bfeet\b|\binches?\b)'; then
|
|
373
|
+
NUMBER_CHECK="PASS - Contains concrete number"
|
|
374
|
+
else
|
|
375
|
+
NUMBER_CHECK="FAIL - No concrete number detected"
|
|
376
|
+
fi
|
|
377
|
+
echo "2. Concrete number: $NUMBER_CHECK"
|
|
378
|
+
|
|
379
|
+
# Check for urgency
|
|
380
|
+
if echo "$THESIS" | grep -iqE "(now|today|this year|202[0-9]|immediately|urgent|critical|deadline|limited time|only|must|should|need to|has to|growing|increasing|rising|declining|decreasing|trend|surge|drop|plummet|skyrocket|explode|boom|bust|crisis|emergency|breakthrough|discovery|revolution|transform|change|shift|evolve|adapt|breakthrough|innovation|disrupt|threat|risk|danger|opportunity|advantage|benefit|solution|fix|solve|address|tackle|combat|fight|against|versus|vs\.?|compared to|than ever before|more than ever|less than ever)"; then
|
|
381
|
+
URGENCY_CHECK="PASS - Contains urgency indicators"
|
|
382
|
+
else
|
|
383
|
+
URGENCY_CHECK="FAIL - No clear urgency detected"
|
|
384
|
+
fi
|
|
385
|
+
echo "3. Urgency: $URGENCY_CHECK"
|
|
386
|
+
|
|
387
|
+
# Check length (≤80 chars for long-form)
|
|
388
|
+
THESIS_LENGTH=${#THESIS}
|
|
389
|
+
if [ $THESIS_LENGTH -le 80 ]; then
|
|
390
|
+
LENGTH_CHECK="PASS - Length is $THESIS_LENGTH characters (≤80)"
|
|
391
|
+
else
|
|
392
|
+
LENGTH_CHECK="FAIL - Length is $THESIS_LENGTH characters (>80)"
|
|
393
|
+
fi
|
|
394
|
+
echo "4. Title expressibility (≤80 chars): $LENGTH_CHECK"
|
|
395
|
+
|
|
396
|
+
# Overall assessment
|
|
397
|
+
if [[ "$CLAIM_CHECK" == PASS* && "$NUMBER_CHECK" == PASS* && "$URGENCY_CHECK" == PASS* && "$LENGTH_CHECK" == PASS* ]]; then
|
|
398
|
+
VALIDATION_RESULT="PASS"
|
|
399
|
+
echo ""
|
|
400
|
+
echo "OVERALL VALIDATION: PASS - Thesis meets all Sharp-Thesis criteria"
|
|
401
|
+
else
|
|
402
|
+
VALIDATION_RESULT="FAIL"
|
|
403
|
+
echo ""
|
|
404
|
+
echo "OVERALL VALIDATION: FAIL - Thesis does not meet all Sharp-Thesis criteria"
|
|
405
|
+
echo "Consider refining the thesis to address the failed criteria above."
|
|
406
|
+
fi
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Step 3.3: Handle Validation Results
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
if [ "$VALIDATION_RESULT" = "PASS" ]; then
|
|
413
|
+
echo "Using validated thesis for article generation."
|
|
414
|
+
FINAL_THESIS="$THESIS"
|
|
415
|
+
else
|
|
416
|
+
echo "Thesis validation failed. Attempting to refine..."
|
|
417
|
+
|
|
418
|
+
# Try to refine the thesis based on failed criteria
|
|
419
|
+
cat > /tmp/refine-thesis-prompt.txt << 'PROMPT_EOF'
|
|
420
|
+
The following thesis statement failed validation against the Sharp-Thesis (Cerebras) Test:
|
|
421
|
+
"$THESIS"
|
|
422
|
+
|
|
423
|
+
Please refine it to:
|
|
424
|
+
1. Make ONE clear, arguable claim (not just a topic description)
|
|
425
|
+
2. Include a concrete number (dollar amount, percentage, timeframe, etc.)
|
|
426
|
+
3. Establish urgency ("why this matters now")
|
|
427
|
+
4. Be expressible as a title ≤80 characters
|
|
428
|
+
|
|
429
|
+
Base your refinement on the same research insights and brand context:
|
|
430
|
+
- Content gaps: [paste key insights from a2-gaps.json]
|
|
431
|
+
- Recommended structure: [paste key insights from a3-structure.json]
|
|
432
|
+
- Semantic keywords: [paste key insights from a4-semantic.json]
|
|
433
|
+
- Brand voice: [paste from Phase 2]
|
|
434
|
+
- ICP/audience: [paste from Phase 2]
|
|
435
|
+
- Brand positioning: [paste from Phase 2]
|
|
436
|
+
|
|
437
|
+
Output ONLY the refined thesis statement, nothing else.
|
|
438
|
+
PROMPT_EOF
|
|
439
|
+
|
|
440
|
+
notebooklm ask --prompt-file /tmp/refine-thesis-prompt.txt --json > /tmp/refined-thesis-result.json
|
|
441
|
+
REFINED_THESIS=$(python3 -c "
|
|
442
|
+
import json
|
|
443
|
+
with open('/tmp/refined-thesis-result.json') as f:
|
|
444
|
+
data = json.load(f)
|
|
445
|
+
print(data.get('text', '').strip())
|
|
446
|
+
")
|
|
447
|
+
echo "Refined thesis: $REFINED_THESIS"
|
|
448
|
+
FINAL_THESIS="$REFINED_THESIS"
|
|
449
|
+
fi
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Step 3.4: Assemble Article Prompt with Thesis Guidance
|
|
453
|
+
|
|
454
|
+
Incorporate the validated thesis into the article generation prompt:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
cat > /tmp/article-prompt.txt << 'PROMPT_EOF'
|
|
458
|
+
Write a comprehensive, authoritative yet accessible pillar page
|
|
459
|
+
article on [PILLAR_KEYWORD] for [BUSINESS_NAME].
|
|
460
|
+
|
|
461
|
+
**CENTRAL THESIS:** $FINAL_THESIS
|
|
462
|
+
**THESIS INSTRUCTION:** The entire article must consistently support, elaborate on, and provide evidence for this central thesis. Every section, example, and argument should trace back to reinforcing this core proposition.
|
|
463
|
+
|
|
464
|
+
**TARGET KEYWORD:** [PILLAR_KEYWORD] (verified volume + competition)
|
|
465
|
+
**SEMANTIC KEYWORDS:** [paste from Phase 1.4 — the 5-10 semantic variants]
|
|
466
|
+
**SEO INSTRUCTION:** Naturally weave semantic related keywords into
|
|
467
|
+
H2 section headers. The article should rank for the primary keyword AND
|
|
468
|
+
its semantic variants.
|
|
469
|
+
|
|
470
|
+
**AUDIENCE:** [paste ICP from Phase 2 — who is reading this]
|
|
471
|
+
**AWARENESS LEVEL:** [problem-aware / solution-aware — from Phase 2]
|
|
472
|
+
**STORYTELLING FORM:** [from Phase 2 — e.g., narrative-driven with personal elements]
|
|
473
|
+
|
|
474
|
+
**COPYWRITING PRINCIPLE: Slippery Slope**
|
|
475
|
+
Each sentence must create an irresistible pull to read the next.
|
|
476
|
+
Open loops in one sentence, close them in the next. Never let the
|
|
477
|
+
reader reach a natural stopping point mid-paragraph.
|
|
478
|
+
Ways to do this:
|
|
479
|
+
- Open loops: "What happened next surprised everyone."
|
|
480
|
+
- Imply value ahead: "This is where most people get it wrong."
|
|
481
|
+
- Plant questions: describe a phenomenon, then leave the
|
|
482
|
+
explanation for the next paragraph
|
|
483
|
+
- End paragraphs on tension, never resolution
|
|
484
|
+
- End sections on questions, never answers
|
|
485
|
+
The goal: a reader who sits down for "5 minutes" and finishes
|
|
486
|
+
the whole article wondering where the time went.
|
|
487
|
+
|
|
488
|
+
**RHYTHM AND CADENCE (CRITICAL):**
|
|
489
|
+
Vary sentence length deliberately. Short punchy sentences. Then
|
|
490
|
+
longer ones that take their time getting where they're going. Mix
|
|
491
|
+
it up. Real writing alternates short and long — AI writing tends
|
|
492
|
+
toward an even, mid-length cadence. Break that pattern.
|
|
493
|
+
Also vary paragraph length: some paragraphs are one searing
|
|
494
|
+
sentence. Some are four sentences. Some are a single observation
|
|
495
|
+
that earns its own space. Never let paragraphs fall into uniform
|
|
496
|
+
multi-sentence blocks.
|
|
497
|
+
|
|
498
|
+
**BRAND VOICE:** [paste from Phase 2 — e.g., "wise, warm, radically clear"]
|
|
499
|
+
**CONTENT RULES:**
|
|
500
|
+
- DO [paste approved terms / approaches from Phase 2]
|
|
501
|
+
- DON'T [paste forbidden terms / approaches from Phase 2]
|
|
502
|
+
|
|
503
|
+
**STRUCTURE:** [paste NLM's recommended structure from Phase 1.3 —
|
|
504
|
+
NLM determines the optimal structure based on what would outrank
|
|
505
|
+
current top results. Do NOT use a fixed template.]
|
|
506
|
+
|
|
507
|
+
**CITATIONS:** Use bracketed citations [1, 2] referencing sources
|
|
508
|
+
in the notebook.
|
|
509
|
+
**INTERNAL LINKS:** Note opportunities to link to related spoke content.
|
|
510
|
+
|
|
511
|
+
**CTA:** [paste conversion path from Phase 2 — soft call-to-action
|
|
512
|
+
aligned with brand positioning]
|
|
513
|
+
PROMPT_EOF
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
### Step 3.5: Generate the Article
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
notebooklm ask --prompt-file /tmp/article-prompt.txt \
|
|
520
|
+
--save-as-note --note-title "Pillar: [PILLAR_KEYWORD]" --json > /tmp/article-result.json
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Step 3.6: Refine if Needed
|
|
524
|
+
|
|
525
|
+
Review the generated article. If sections need strengthening:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
# Example refinement queries
|
|
529
|
+
notebooklm ask "Strengthen section 3 by adding a practical exercise
|
|
530
|
+
the reader can do today." --save-as-note --note-title "Pillar: [PILLAR_KEYWORD] - Section 3"
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
Refinements save as separate notes with descriptive titles so you can pick the best version later.
|
|
534
|
+
|
|
535
|
+
### Step 3.7: Retrieve the Final Note
|
|
536
|
+
|
|
537
|
+
```bash
|
|
538
|
+
# List notes to find the one you want
|
|
539
|
+
notebooklm note list --json | python3 -c "
|
|
540
|
+
import json, sys
|
|
541
|
+
data = json.load(sys.stdin)
|
|
542
|
+
for n in data:
|
|
543
|
+
if 'Pillar: [PILLAR_KEYWORD]' in n.get('title', ''):
|
|
544
|
+
print(f'{n[\"id\"]} {n[\"title\"]}'
|
|
545
|
+
"
|
|
546
|
+
|
|
547
|
+
# Get the best version as markdown
|
|
548
|
+
notebooklm note get [NOTE_ID] --format markdown > /tmp/final-article.md
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## Phase 4: Save and Format
|
|
554
|
+
|
|
555
|
+
**Goal:** Save the article in the correct format for the brand's content system.
|
|
556
|
+
|
|
557
|
+
### Step 4.1: Determine Content Structure
|
|
558
|
+
|
|
559
|
+
Different brands use different systems. Check what exists:
|
|
560
|
+
|
|
561
|
+
```bash
|
|
562
|
+
# Jekyll/Hugo-style draft dir
|
|
563
|
+
ls businesses/[BUSINESS_NAME]/content/_drafts/ 2>/dev/null && echo "Jekyll-style"
|
|
564
|
+
ls businesses/[BUSINESS_NAME]/content/03-production/blog/ 2>/dev/null && echo "Structured blog"
|
|
565
|
+
|
|
566
|
+
# Read an existing draft to match format
|
|
567
|
+
head -10 businesses/[BUSINESS_NAME]/content/_drafts/*/index.md 2>/dev/null | head -20
|
|
568
|
+
head -10 businesses/[BUSINESS_NAME]/content/03-production/blog/*/ARTICLE-DRAFT.md 2>/dev/null | head -20
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
### Step 4.2: Create the Article File
|
|
572
|
+
|
|
573
|
+
```bash
|
|
574
|
+
# Create a slug from the pillar keyword
|
|
575
|
+
SLUG=$(echo "[PILLAR_KEYWORD]" | sed 's/ /-/g' | tr '[:upper:]' '[:lower:]')
|
|
576
|
+
|
|
577
|
+
# Create directory matching existing pattern
|
|
578
|
+
mkdir -p "businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG"
|
|
579
|
+
|
|
580
|
+
# Write the article (adjust format based on what you found in Step 4.1)
|
|
581
|
+
cp /tmp/final-article.md "businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG/ARTICLE-DRAFT.md"
|
|
582
|
+
|
|
583
|
+
echo "Article saved to: businesses/[BUSINESS_NAME]/content/03-production/blog/$SLUG/"
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### Step 4.3: Final Polish
|
|
587
|
+
|
|
588
|
+
- Fix any typos in CTAs (ensure brand name is correct)
|
|
589
|
+
- Remove any duplicate lines or sections
|
|
590
|
+
- Verify internal link placeholders point to real spoke slugs
|
|
591
|
+
- Read the first 10 and last 10 lines to confirm clean start/end
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## Phase 5: Quality Gate
|
|
596
|
+
|
|
597
|
+
Before showing the article to the user, verify:
|
|
598
|
+
|
|
599
|
+
1. **Keyword targeting** — primary keyword appears in title, first paragraph, and H2s
|
|
600
|
+
2. **Semantic keywords** — variants naturally appear in H2s
|
|
601
|
+
3. **Content gap coverage** — Phase 1.2 gaps are addressed
|
|
602
|
+
4. **ICP alignment** — language matches pain phrases from Phase 2
|
|
603
|
+
5. **Brand voice** — consistent with voice descriptors from Phase 2
|
|
604
|
+
6. **Slippery slope** — paragraphs end with hooks leading to the next
|
|
605
|
+
7. **Rhythm** — sentence and paragraph length varies (no uniform mid-length cadence)
|
|
606
|
+
8. **Citations** — bracketed references to sources
|
|
607
|
+
9. **CTA** — soft call-to-action aligned with conversion path
|
|
608
|
+
10. **Length** — pillar articles 1500-3000 words; spoke articles 800-1500
|
|
609
|
+
11. **Thesis alignment** — article consistently supports and develops the central thesis from Phase 3.4
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## Example: Madam Groovy Limerence Article with Enhanced Thesis
|
|
614
|
+
|
|
615
|
+
**Thread:** https://discord.com/channels/1109630805409529916/1528933448369311745
|
|
616
|
+
|
|
617
|
+
**What the session did (following this enhanced skill):**
|
|
618
|
+
|
|
619
|
+
| Phase | What happened | Result |
|
|
620
|
+
|---|---|---|
|
|
621
|
+
| 0 | Created NLM notebook, added 20 YouTube videos, ran deep research (40+ more), NLM curated | ~60 sources on limerence |
|
|
622
|
+
| 1 | Five NLM queries: topics, gaps, structure, semantic keywords, spokes | Gaps identified: lack of gender-specific data, socioeconomic factors, long-term impacts; 7-section structure recommended; 5 semantic variants surfaced |
|
|
623
|
+
| 2 | Loaded evergreen.md + SOUL.md + icp-profiles.md + reddit-pain-phrases.md | ICP: women 25-45 navigating heartbreak. Voice: wise, warm, ruthlessly clear |
|
|
624
|
+
| 3 | **Generated thesis**: "Women over 30 experiencing limerence face 3x higher lifetime healthcare costs due to prolonged untreated emotional distress"<br>**Validated**: PASS - contains arguable claim (3x higher costs), concrete number (3x), urgency (lifetime impact), length (76 chars)<br>Created comprehensive NLM prompt with thesis as central organizing principle | 191-line pillar article with bracketed citations, all sections tying back to the healthcare cost thesis |
|
|
625
|
+
| 4 | Formatted and saved to `content/03-production/blog/taming-the-limerent-beast/ARTICLE-DRAFT.md` | Saved and verified |
|
|
626
|
+
| 5 | Verified keyword targeting, gaps covered, brand voice consistent, thesis alignment throughout | Ready for user review |
|
|
627
|
+
|
|
628
|
+
**Result:** Article titled "Taming the Limerent Beast: A Guide to Obsessive Love" targeting "limerence" (301K/mo, competition index 2), uniquely structured around the validated thesis about long-term healthcare economic impact.
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## Troubleshooting
|
|
633
|
+
|
|
634
|
+
**Problem:** Brand has no brand-assets directory (e.g., maps-landing-service)
|
|
635
|
+
**Solution:** Fall back to `evergreen.md` only. Extract brand voice from the document's tone and ICP from the business description.
|
|
636
|
+
|
|
637
|
+
**Problem:** yt-dlp returns 0 results
|
|
638
|
+
**Solution:** Keyword may be too niche. Skip YouTube step and rely on deep research only.
|
|
639
|
+
|
|
640
|
+
**Problem:** NLM deep research takes >30 minutes
|
|
641
|
+
**Solution:** Use `--no-wait` and run in background. Proceed to Phase 2 while it processes.
|
|
642
|
+
|
|
643
|
+
**Problem:** NLM flags no sources for deletion
|
|
644
|
+
**Solution:** All sources are relevant. Accept it — no curation needed.
|
|
645
|
+
|
|
646
|
+
**Problem:** Generated thesis fails Sharp-Thesis validation
|
|
647
|
+
**Solution:** Review the specific failure reasons above and consider manual adjustment or regeneration with more specific prompting.
|
|
648
|
+
|
|
649
|
+
**Problem:** Article drifts from brand voice
|
|
650
|
+
**Solution:** Re-read the voice file (SOUL.md or voice-guide.md) and include specific voice phrases as examples in the Phase 3 prompt.
|
|
651
|
+
|
|
652
|
+
**Problem:** Generated article has uniform paragraph lengths
|
|
653
|
+
**Solution:** The NLM prompt's Rhythm section may have been omitted or truncated. Re-run Phase 3 with the full RHYTHM AND CADENCE block.
|
|
654
|
+
|
|
655
|
+
**Problem:** NLM query returns generic structure recommendations
|
|
656
|
+
**Solution:** Refine the Phase 1.3 query to ask: "Be specific. Give exact section headings, not generic advice."
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## Related Skills
|
|
661
|
+
|
|
662
|
+
- `notebooklm` — NLM source operations and querying (teng-lin/notebooklm-py)
|
|
663
|
+
- `nlm-cli` — NLM CLI (jacob-bd fork, for batch/cross-notebook ops)
|
|
664
|
+
- `google-trends` — Keyword research and SERP analysis
|
|
665
|
+
- `google-ads` — Keyword volume + competition validation
|
|
666
|
+
- `humanizer` — Post-generation rhythm and AI-tell removal
|
|
667
|
+
- `article-generator` — Router skill that can delegate to this one
|
|
668
|
+
- `seo-content` — Alternative path for pure SEO articles (less research depth)
|
|
669
|
+
|
|
670
|
+
Base directory for this skill: ./deep-serp-article
|
|
671
|
+
Relative paths in this script (e.g., scripts/, reference/) are relative to this base directory.
|
|
672
|
+
Note: file list is sampled.
|
|
673
|
+
|
|
674
|
+
<skill_files>
|
|
675
|
+
<file>./deep-serp-article/SKILL.md.bak</file>
|
|
676
|
+
</skill_files>
|
|
677
|
+
</content>
|