@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,469 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: narrative-research-article
|
|
3
|
+
description: |
|
|
4
|
+
Write Medium-style narrative articles that read like a human wrote them.
|
|
5
|
+
Uses NotebookLM for deep research intelligence, applies a thesis-driven
|
|
6
|
+
7-section narrative architecture (cinematic cold open, bridge, escalation,
|
|
7
|
+
circular close), and chains to the humanizer skill to strip AI cadence.
|
|
8
|
+
Use when: writing a longform narrative article, Medium-style essay,
|
|
9
|
+
research-driven storytelling piece, or any article where the WRITING
|
|
10
|
+
matters as much as the information. Triggers on "narrative article",
|
|
11
|
+
"medium style article", "research essay", "longform piece", "write like
|
|
12
|
+
this article", or when you need to produce article-quality writing from
|
|
13
|
+
NLM research rather than SEO content blocks.
|
|
14
|
+
depends-on:
|
|
15
|
+
- nlm-cli
|
|
16
|
+
- humanizer
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Narrative Research Article
|
|
20
|
+
|
|
21
|
+
Writes longform articles with narrative depth using NLM-sourced intelligence and a thesis-driven 7-section architecture. Every paragraph serves one job: prove the thesis.
|
|
22
|
+
|
|
23
|
+
**Origin:** Extracted from structural analysis of Ricky Lanusse's "The Future of Energy is Buried Under the Sea" (The New Climate, Medium, July 2026). See `references/lanusse-patterns.md` for the full pattern extraction.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Awareness Gate (MANDATORY)
|
|
28
|
+
|
|
29
|
+
Before any copy work, determine the target audience's awareness level:
|
|
30
|
+
|
|
31
|
+
1. **Can you determine awareness level from the prompt/context?**
|
|
32
|
+
- For SEO: keyword intent maps to awareness level
|
|
33
|
+
- Informational ("how to fix X") → Problem-aware
|
|
34
|
+
- Comparative ("X vs Y") → Solution-aware
|
|
35
|
+
- Branded ("your product") → Product-aware
|
|
36
|
+
- Transactional ("buy X") → Most-aware
|
|
37
|
+
- For social: content topic + audience → awareness level
|
|
38
|
+
- For email: subscriber stage → awareness level
|
|
39
|
+
|
|
40
|
+
2. **If YES** → Proceed with awareness-matched strategy
|
|
41
|
+
- Load `references/awareness-level-guide.md`
|
|
42
|
+
- Select copy framework based on awareness level
|
|
43
|
+
|
|
44
|
+
3. **If NO** → ASK THE USER before proceeding:
|
|
45
|
+
"What awareness level is your target audience at?"
|
|
46
|
+
- Unaware — doesn't know they have a problem
|
|
47
|
+
- Problem-aware — knows the problem, doesn't know solutions exist
|
|
48
|
+
- Solution-aware — knows solutions exist, doesn't know your product
|
|
49
|
+
- Product-aware — knows your product, not convinced it's right
|
|
50
|
+
- Most-aware — ready to buy, just needs the offer
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## The Problem This Solves
|
|
55
|
+
|
|
56
|
+
Most AI-generated articles are structured information dumps. They have H2 headers, bullet lists, and a conclusion that says "In conclusion, X is important." They read like SEO content blocks, not writing.
|
|
57
|
+
|
|
58
|
+
This skill produces articles that read like a skilled human wrote them. The structure is invisible. The voice is direct. The data is embedded in narrative, not listed. Every section escalates a single argument toward a resonant close.
|
|
59
|
+
|
|
60
|
+
The difference: SEO articles deliver information. Narrative articles deliver an experience that happens to be informative.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Prerequisites
|
|
65
|
+
|
|
66
|
+
Before starting, gather:
|
|
67
|
+
- **Topic** (the subject area)
|
|
68
|
+
- **Thesis** (the big idea you are proving) or let the skill discover one from research
|
|
69
|
+
- **Business name** (optional, for brand context loading)
|
|
70
|
+
- **Reference article URL** (optional, to extract voice patterns from a writer you want to emulate)
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Phase -1: Thesis Formation (MANDATORY: Before Any Research)
|
|
75
|
+
|
|
76
|
+
A narrative article without a thesis is a wandering information dump. The 7-section architecture only works when every section serves a single argument.
|
|
77
|
+
|
|
78
|
+
### Mode A: Thesis Provided
|
|
79
|
+
|
|
80
|
+
If the user provides both topic and thesis, lock it in and proceed to Phase 0.
|
|
81
|
+
|
|
82
|
+
Validate the thesis against these criteria:
|
|
83
|
+
- **Single arguable claim**: not "X is important" but "X does Y because Z"
|
|
84
|
+
- **Has tension**: there is a paradox, contradiction, or counterintuitive truth at its core
|
|
85
|
+
- **Expressible as a turnaround**: "The future of energy is not buried under the sea. It is buried in our willingness to trust each other."
|
|
86
|
+
|
|
87
|
+
If the thesis is vague ("AI is transforming healthcare"), sharpen it:
|
|
88
|
+
- Ask: what is the counterintuitive version? What does everyone get wrong about this?
|
|
89
|
+
- Ask: what is the concrete proof? What single example makes this undeniable?
|
|
90
|
+
- Ask: what is the deeper layer? (Lanusse: cables to infrastructure to trust)
|
|
91
|
+
|
|
92
|
+
### Mode B: Thesis Discovery via NLM
|
|
93
|
+
|
|
94
|
+
If the user provides only a topic, use NLM to surface candidate theses:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
nlm notebook create "Thesis Research: [TOPIC]"
|
|
98
|
+
nlm source add <notebook_id> --url "https://en.wikipedia.org/wiki/[TOPIC]"
|
|
99
|
+
nlm research start <notebook_id> --query "[TOPIC]" --depth deep --no-wait
|
|
100
|
+
nlm research wait --import-all
|
|
101
|
+
|
|
102
|
+
nlm notebook query <notebook_id> "What are the biggest unresolved tensions, paradoxes, or counterintuitive truths about [TOPIC]? Focus on disagreements between experts, surprising data points that contradict common assumptions, and hidden infrastructure or invisible systems that make everything work but nobody talks about. List 5 specific tensions with brief explanations."
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
From the NLM response, extract 3 candidate theses and present them to the user. Each candidate needs:
|
|
106
|
+
- The thesis statement (one sentence)
|
|
107
|
+
- Evidence: key data points from NLM
|
|
108
|
+
- Tension: the paradox at its core
|
|
109
|
+
|
|
110
|
+
User picks one. Lock it in. Proceed to Phase 0.
|
|
111
|
+
|
|
112
|
+
### Thesis Contract
|
|
113
|
+
|
|
114
|
+
Once locked, the thesis drives every subsequent decision:
|
|
115
|
+
- Every NLM query is framed to find thesis-serving evidence
|
|
116
|
+
- Every section in the 7-section architecture proves a facet of the thesis
|
|
117
|
+
- The cold open scene embodies the thesis in miniature
|
|
118
|
+
- The circular close restates the thesis through the opening metaphor, now weighted with everything in between
|
|
119
|
+
|
|
120
|
+
Write the thesis at the top of your working file. Refer back to it before writing each section.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Phase 0: NLM Source Population
|
|
125
|
+
|
|
126
|
+
**Goal:** Build a NotebookLM notebook with 30+ high-quality sources on the topic.
|
|
127
|
+
|
|
128
|
+
### Step 0.1: Create or Locate the Notebook
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Check if a notebook already exists for this topic
|
|
132
|
+
nlm notebook list 2>&1 | python3 -c "
|
|
133
|
+
import json, sys
|
|
134
|
+
data = json.load(sys.stdin)
|
|
135
|
+
for nb in data:
|
|
136
|
+
if 'TOPIC'.lower() in nb.get('title', '').lower():
|
|
137
|
+
print(f'{nb[\"id\"]} | {nb[\"source_count\"]} sources | {nb[\"title\"]}')
|
|
138
|
+
"
|
|
139
|
+
|
|
140
|
+
# If no match, create one
|
|
141
|
+
nlm notebook create "Narrative: [TOPIC]"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step 0.2: Add Sources (Target 30+)
|
|
145
|
+
|
|
146
|
+
Sources should be thesis-serving. For each source, ask: does this help prove the thesis?
|
|
147
|
+
|
|
148
|
+
**YouTube videos (10-15):**
|
|
149
|
+
```bash
|
|
150
|
+
yt-dlp "ytsearch15:[TOPIC]" --get-id --flat-playlist --skip-download > /tmp/yt-ids.txt
|
|
151
|
+
|
|
152
|
+
while IFS= read -r id; do
|
|
153
|
+
[ -z "$id" ] && continue
|
|
154
|
+
nlm source add <notebook_id> --url "https://youtube.com/watch?v=$id"
|
|
155
|
+
echo "Added: $id"
|
|
156
|
+
done < /tmp/yt-ids.txt
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Web articles and primary sources (10-15):**
|
|
160
|
+
```bash
|
|
161
|
+
nlm source add <notebook_id> --url "https://example.com/article"
|
|
162
|
+
nlm source add <notebook_id> --file "research.pdf"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Deep research (10+ more):**
|
|
166
|
+
```bash
|
|
167
|
+
nlm research start <notebook_id> --query "[TOPIC] [THESIS-RELEVANT ANGLE]" --depth deep --no-wait
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Wait for indexing (30-60 seconds after adding, longer for research mode):
|
|
171
|
+
```bash
|
|
172
|
+
nlm source list --json 2>&1 | python3 -c "
|
|
173
|
+
import json, sys
|
|
174
|
+
data = json.load(sys.stdin)
|
|
175
|
+
ready = [s for s in data if s.get('status') == 'READY']
|
|
176
|
+
print(f'{len(ready)}/{len(data)} sources ready')
|
|
177
|
+
"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Step 0.3: Self-Curation (Optional)
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
nlm notebook query <notebook_id> "Review all sources for relevance to this thesis: [THESIS]. List any off-topic or redundant sources by title."
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Delete flagged sources. Final count should be 30+.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Phase 1: Intelligence Extraction
|
|
191
|
+
|
|
192
|
+
**Goal:** Query NLM to extract thesis-serving intelligence. Each query targets a specific narrative element.
|
|
193
|
+
|
|
194
|
+
Run these 6 queries. Save each response as JSON. These become the raw material for the 7-section architecture.
|
|
195
|
+
|
|
196
|
+
### Query 1: Named Concepts (for the Technical Layer)
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
nlm notebook query <notebook_id> "What are the key named concepts, mechanisms, or frameworks in [TOPIC] that a general reader could visualize? For each, explain it in one sentence using a concrete analogy or physical metaphor. I need concepts like 'the duck curve' or 'Moore's law': named ideas with visual shapes."
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Query 2: Specific Data Points (for the Data Layer)
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
nlm notebook query <notebook_id> "List every specific number, statistic, date, and quantitative claim about [TOPIC] from the sources. For each: the raw number, its source (institution name), the year, and what it means in plain language. Format: NUMBER | SOURCE | YEAR | MEANING."
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Query 3: Cost-Benefit Comparisons (for the Data Layer)
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
nlm notebook query <notebook_id> "What are the strongest cost-benefit or cost-of-inaction comparisons in [TOPIC]? I need asymmetric pairs where the cost of doing something is dwarfed by the cost of not doing it. Include specific dollar figures or scale comparisons."
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Query 4: Historical Precedents (for the Cold Open)
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
nlm notebook query <notebook_id> "What historical events, eras, or precedents relate to [TOPIC] that would make a vivid opening scene? I need specific moments with sensory details: what did it look, sound, feel like to be there? Think Roman roads, Apollo missions, transatlantic cables: moments where infrastructure or invisible systems changed everything."
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Query 5: Human Conflict and Politics (for the Geopolitical Layer)
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
nlm notebook query <notebook_id> "Who benefits from the current state of [TOPIC]? Who is threatened? What are the political conflicts, power struggles, or geopolitical tensions? Include named countries, companies, or individuals and what they stand to gain or lose."
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Query 6: The Deeper Truth (for the Elevation and Close)
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
nlm notebook query <notebook_id> "What is the deepest truth about [TOPIC] that most people miss? If you had to state the thesis of this entire field in one sentence, what would it be? What paradox lies at the heart of [TOPIC] that nobody talks about?"
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Intelligence Map
|
|
233
|
+
|
|
234
|
+
| Query Output | Narrative Element | Section It Serves |
|
|
235
|
+
|---|---|---|
|
|
236
|
+
| Named concepts | Mechanisms with visual shapes | Section 4: Technical Layer |
|
|
237
|
+
| Data points | Numbers with named sources | Section 5: Data Layer |
|
|
238
|
+
| Cost-benefit pairs | Asymmetric comparisons | Section 5: Data Layer |
|
|
239
|
+
| Historical precedents | Vivid scenes | Section 1: Cold Open + Section 7: Close |
|
|
240
|
+
| Human conflict | Stakes and power dynamics | Section 6: Geopolitical Layer |
|
|
241
|
+
| Deeper truth | Thesis synthesis | Section 6: Elevation + Section 7: Close |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Phase 2: Article Generation (7-Section Architecture)
|
|
246
|
+
|
|
247
|
+
**Goal:** Write the article using the thesis-driven structure.
|
|
248
|
+
|
|
249
|
+
Read `references/lanusse-patterns.md` before writing. It contains the full pattern extraction with examples.
|
|
250
|
+
|
|
251
|
+
### Voice Rules (Apply Throughout: Non-Negotiable)
|
|
252
|
+
|
|
253
|
+
1. **Two-sentence rhythm.** Most paragraphs: sentence 1 sets context, sentence 2 delivers the turn. Vary with one-sentence "hammer" paragraphs for emphasis.
|
|
254
|
+
|
|
255
|
+
2. **No hedging.** "The math is not close." Not "the math seems to suggest." Commit to your claims.
|
|
256
|
+
|
|
257
|
+
3. **Concrete before abstract.** Every principle gets grounded in a tangible detail first. Never state a rule without showing the thing it applies to.
|
|
258
|
+
|
|
259
|
+
4. **Named sources only.** Never write "studies show" or "experts say." Always: institution name + year + number. "The California ISO documented this in 2013."
|
|
260
|
+
|
|
261
|
+
5. **Standalone hammer sentences.** Use 3-5 word standalone paragraphs for emphasis: "Nobody cares." "The cable is the thing." "The math is not close."
|
|
262
|
+
|
|
263
|
+
6. **No section headers in the body.** Sections are separated by horizontal rules (`---`). No "## The Problem" or "## Key Findings." The content carries the structure. The reader should never feel they are reading a list.
|
|
264
|
+
|
|
265
|
+
7. **Emotional micro-bursts.** In analytical sections, insert brief human beats. Not sentimentality. A moment of connection that prevents whitepaper feel. "It is heavy in the way that makes you think of your 6-year-old back home."
|
|
266
|
+
|
|
267
|
+
8. **Recurring motifs.** Pick 1-2 key phrases that echo across sections. "The thing." "The road." "The cable." These build cumulative emphasis.
|
|
268
|
+
|
|
269
|
+
9. **One rhetorical question maximum.** Use it at the 70% mark as a section pivot. Never as opener or closer.
|
|
270
|
+
|
|
271
|
+
10. **No bullet lists in the article body.** This is prose, not a briefing. If you need to enumerate, use flowing sentences with semicolons and commas.
|
|
272
|
+
|
|
273
|
+
### The 7 Sections
|
|
274
|
+
|
|
275
|
+
Write each section in order. After completing each, verify it serves the thesis.
|
|
276
|
+
|
|
277
|
+
#### Section 1: Cinematic Cold Open (100-150 words)
|
|
278
|
+
|
|
279
|
+
Drop the reader INTO a scene. No thesis, no definition, no context. Sensory details: what does it look, sound, feel, smell like?
|
|
280
|
+
|
|
281
|
+
**Source material:** Historical precedents from Query 4.
|
|
282
|
+
|
|
283
|
+
**Rules:**
|
|
284
|
+
- Use second person ("you") to place the reader inside the scene
|
|
285
|
+
- Include at least 3 sensory details (sound, touch, smell, weight, temperature)
|
|
286
|
+
- End on a detail that creates tension or curiosity
|
|
287
|
+
- Do NOT explain what this has to do with the topic yet
|
|
288
|
+
|
|
289
|
+
#### Section 2: The Bridge (1 paragraph)
|
|
290
|
+
|
|
291
|
+
Pivot from the scene to the topic. One paragraph. State the thesis explicitly as a paradox or lesson.
|
|
292
|
+
|
|
293
|
+
**Formula:** "This is the [paradox/lesson/truth] at the heart of [TOPIC]: [THESIS]."
|
|
294
|
+
|
|
295
|
+
**Rules:**
|
|
296
|
+
- Exactly one paragraph
|
|
297
|
+
- The transition should feel inevitable, not forced
|
|
298
|
+
- State the thesis directly
|
|
299
|
+
|
|
300
|
+
#### Section 3: The Concrete Example (200-400 words)
|
|
301
|
+
|
|
302
|
+
Name the specific thing the article is about. What is it? Where is it? What does it do?
|
|
303
|
+
|
|
304
|
+
**Rules:**
|
|
305
|
+
- Start with the most basic description possible
|
|
306
|
+
- Build from "it does not look like much" to "it represents something extraordinary"
|
|
307
|
+
- Include at least one "the thing you cannot see" detail (invisible infrastructure)
|
|
308
|
+
- End with a standalone declarative that names the core insight
|
|
309
|
+
|
|
310
|
+
#### Section 4: The Technical Layer (300-500 words)
|
|
311
|
+
|
|
312
|
+
Explain the underlying mechanism. Use a named concept. Make it visual.
|
|
313
|
+
|
|
314
|
+
**Source material:** Named concepts from Query 1.
|
|
315
|
+
|
|
316
|
+
**Rules:**
|
|
317
|
+
- Introduce the named concept with its common name
|
|
318
|
+
- Explain WHY it is named that (the visual shape, the counterintuitive result)
|
|
319
|
+
- Use the Specificity Stack: raw number, comparison, emotional grounding
|
|
320
|
+
- End with: "The only thing that does not work is the [politics/economics/human nature]."
|
|
321
|
+
|
|
322
|
+
#### Section 5: The Data Layer (300-500 words)
|
|
323
|
+
|
|
324
|
+
Numbers with named sources. Cost-benefit comparisons. Let asymmetry speak.
|
|
325
|
+
|
|
326
|
+
**Source material:** Data from Query 2 + cost-benefit from Query 3.
|
|
327
|
+
|
|
328
|
+
**Rules:**
|
|
329
|
+
- Every number gets the Specificity Stack: NUMBER, COMPARISON, GROUNDING
|
|
330
|
+
- Pair every cost with the cost of inaction
|
|
331
|
+
- Follow the asymmetry with a one-sentence hammer
|
|
332
|
+
- Include geographic or scale comparisons
|
|
333
|
+
- Name every institution and date
|
|
334
|
+
|
|
335
|
+
#### Section 6: The Geopolitical / Human Layer (300-500 words)
|
|
336
|
+
|
|
337
|
+
Who benefits? Who is threatened? What is the conflict? Then zoom out to the deeper truth.
|
|
338
|
+
|
|
339
|
+
**Source material:** Conflict from Query 5 + deeper truth from Query 6.
|
|
340
|
+
|
|
341
|
+
**Rules:**
|
|
342
|
+
- Name specific countries, companies, or individuals
|
|
343
|
+
- Describe the power dynamics, not just the facts
|
|
344
|
+
- Include at least one threat or vulnerability (sabotage, fragility, conflict)
|
|
345
|
+
- Transition from geopolitics to the deeper theme
|
|
346
|
+
- State the thesis's deepest layer here
|
|
347
|
+
- Use the rhetorical question pivot if you have not already
|
|
348
|
+
|
|
349
|
+
#### Section 7: The Circular Close (150-250 words)
|
|
350
|
+
|
|
351
|
+
Return to the opening metaphor. But now it carries the weight of everything explained.
|
|
352
|
+
|
|
353
|
+
**Source material:** Deeper truth from Query 6, restated through the opening scene.
|
|
354
|
+
|
|
355
|
+
**Rules:**
|
|
356
|
+
- Echo the opening imagery explicitly
|
|
357
|
+
- Restate the thesis through the metaphor, not directly
|
|
358
|
+
- The metaphor should feel ENRICHED by everything in between
|
|
359
|
+
- End with 2-3 standalone hammer sentences
|
|
360
|
+
- Final line should be the motif phrase, now carrying full meaning
|
|
361
|
+
|
|
362
|
+
### Section Assembly
|
|
363
|
+
|
|
364
|
+
After writing all 7 sections:
|
|
365
|
+
1. Join them with `---` dividers between sections
|
|
366
|
+
2. Read the full article start to finish
|
|
367
|
+
3. Check the circular frame: does the close genuinely echo the open?
|
|
368
|
+
4. Check the motif: does the recurring phrase appear at least 3 times across sections?
|
|
369
|
+
5. Verify thesis service: can you point to how each section proves the thesis?
|
|
370
|
+
6. Check for AI cadence: any uniform paragraph lengths? Any "furthermore" or "moreover"? Fix them.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## Phase 3: Humanizer Pass (MANDATORY: Final Step)
|
|
375
|
+
|
|
376
|
+
Load the `humanizer` skill and pass the complete draft through it. This is non-negotiable. The 7-section architecture produces structural patterns that can still read as AI-generated if the sentence-level cadence is off.
|
|
377
|
+
|
|
378
|
+
### How to Chain
|
|
379
|
+
|
|
380
|
+
1. Save the draft to a file: `/tmp/nra-draft-[slug].md`
|
|
381
|
+
2. Load the humanizer skill: use the `skill` tool with name `humanizer`
|
|
382
|
+
3. Pass the draft text to the humanizer process
|
|
383
|
+
4. The humanizer will identify AI tells, rewrite preserving all information and structure, vary sentence rhythm, and remove hedging and filler
|
|
384
|
+
5. Review the humanized output against the voice rules above
|
|
385
|
+
|
|
386
|
+
### Voice Calibration
|
|
387
|
+
|
|
388
|
+
If a reference article URL was provided, use it as the voice calibration sample for the humanizer. The humanizer will match sentence length patterns, word choice level, and paragraph habits from the reference. This ensures the output sounds like the writer you are emulating.
|
|
389
|
+
|
|
390
|
+
### Post-Humanizer Checklist
|
|
391
|
+
|
|
392
|
+
After humanizing, verify:
|
|
393
|
+
- No em dashes remain (replace with periods, commas, colons, or parentheses)
|
|
394
|
+
- No AI vocabulary: "delve," "crucial," "tapestry," "vibrant," "underscore," "landscape" (abstract)
|
|
395
|
+
- No "studies show" or "experts say" (all sources named)
|
|
396
|
+
- Sentence lengths vary (short punchy plus longer flowing)
|
|
397
|
+
- The 7-section structure is intact (humanizer should not collapse sections)
|
|
398
|
+
- The thesis is still clearly argued
|
|
399
|
+
- The circular frame still works
|
|
400
|
+
- No bullet lists appeared (humanizer should not add them)
|
|
401
|
+
|
|
402
|
+
If the humanizer broke the structure or weakened the thesis, re-run Phase 2 for the affected sections and humanize again.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Output
|
|
407
|
+
|
|
408
|
+
Save the final article as:
|
|
409
|
+
- Markdown: `/tmp/nra-final-[slug].md`
|
|
410
|
+
- If brand context loaded: also save to `businesses/[BUSINESS]/content/drafts/[slug].md`
|
|
411
|
+
|
|
412
|
+
Present to the user with: word count, thesis (restated), sources used count, whether humanizer pass completed.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Brand Context Loading (Optional)
|
|
417
|
+
|
|
418
|
+
If a business name is provided, load brand context before Phase 2:
|
|
419
|
+
|
|
420
|
+
Use the `load-business-context` MCP tool with the business name, or read the business `evergreen.md` directly.
|
|
421
|
+
|
|
422
|
+
Extract from brand files:
|
|
423
|
+
- **Brand voice descriptors**: tone, vocabulary level, formality
|
|
424
|
+
- **ICP**: who is the reader (affects cold open scene choice and technical depth)
|
|
425
|
+
- **CTA path**: where the article points (if applicable)
|
|
426
|
+
- **Content rules**: DO/DON'T lists from evergreen.md
|
|
427
|
+
|
|
428
|
+
Apply brand voice to the Phase 2 writing. The narrative architecture stays the same. Only the voice and ICP targeting change.
|
|
429
|
+
|
|
430
|
+
If no brand is provided, write in the default Lanusse voice: direct, declarative, unsentimental, no hedging.
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Reference Article Analysis (Optional)
|
|
435
|
+
|
|
436
|
+
If the user provides a reference article URL to emulate its style:
|
|
437
|
+
|
|
438
|
+
1. Fetch the article using `webfetch` or `ctx_fetch_and_index`
|
|
439
|
+
2. Extract structural patterns using the same analysis framework in `references/lanusse-patterns.md`
|
|
440
|
+
3. Use the extracted patterns INSTEAD of the default Lanusse patterns for Phase 2
|
|
441
|
+
4. Use the article text as the voice calibration sample for Phase 3
|
|
442
|
+
|
|
443
|
+
This allows emulating any writer's style, not just Lanusse's.
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## Troubleshooting
|
|
448
|
+
|
|
449
|
+
**NLM query returns generic answers:** Make the query more specific. Instead of "What are the key concepts?", ask "What named mechanisms can a general reader visualize? Give me analogies with physical shapes."
|
|
450
|
+
|
|
451
|
+
**Cold open does not connect to the topic:** The connection does not need to be obvious in the cold open. The Bridge paragraph (Section 2) makes the connection explicit. Trust the reader to hold the tension.
|
|
452
|
+
|
|
453
|
+
**Article reads like an essay, not a narrative:** You are probably explaining instead of showing. Rewrite key paragraphs as scenes. Use sensory details. Replace "the system was complex" with a concrete moment that demonstrates complexity.
|
|
454
|
+
|
|
455
|
+
**Humanizer flattened the voice:** The humanizer removed personality along with AI tells. Re-run Phase 2 for affected sections, then humanize with a voice calibration sample provided.
|
|
456
|
+
|
|
457
|
+
**Sections feel disconnected:** Check the motif. Pick a recurring phrase and thread it through all 7 sections. Also verify each section's last sentence creates tension that pulls into the next section.
|
|
458
|
+
|
|
459
|
+
**Thesis got lost in the middle sections:** Before writing Sections 3-5, write the thesis at the top of your working file. After each section, ask: "How did this section prove the thesis?" If it did not, cut or rewrite.
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Related Skills
|
|
464
|
+
|
|
465
|
+
- `nlm-cli`: NLM CLI for source population and querying
|
|
466
|
+
- `humanizer`: Post-generation AI-tell removal (chained in Phase 3)
|
|
467
|
+
- `deep-serp-article`: Alternative for SEO-focused pillar articles (more structured, less narrative)
|
|
468
|
+
- `article-generator`: Router skill for general article generation
|
|
469
|
+
- `seo-content`: Alternative for keyword-driven SEO articles
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Lanusse Writing Patterns
|
|
2
|
+
|
|
3
|
+
Structural patterns extracted from "The Future of Energy is Buried Under the Sea" by Ricky Lanusse (The New Climate, Medium, July 2026). ~2,800 words, 12 min read.
|
|
4
|
+
|
|
5
|
+
Load this reference before writing articles with the `narrative-research-article` skill.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Structure and Architecture
|
|
10
|
+
|
|
11
|
+
### The Cinematic Cold Open
|
|
12
|
+
|
|
13
|
+
The article opens NOT with the thesis, NOT with a definition, but inside a **scene**. The reader is dropped into the boots of a Roman legionnaire mid-march. Sensory details (the leather sandal, the iron studs, the clacking) create immediacy before any argument is made.
|
|
14
|
+
|
|
15
|
+
**Rule:** Start in a specific, vivid moment. No throat-clearing. No "In today's world of..." The reader should feel *placed*, not *informed*, on line one.
|
|
16
|
+
|
|
17
|
+
**Example:**
|
|
18
|
+
> Your left sandal is already cutting into your heel. The leather is new, and the little iron studs on the bottom bite the road and clack with every step, like they're trying to wake the whole empire up.
|
|
19
|
+
|
|
20
|
+
### The Bridge Paragraph
|
|
21
|
+
|
|
22
|
+
After the cold open scene, a single paragraph pivots from the metaphor to the actual subject. This is NOT a transition section. It is a single paragraph that explicitly states the connection.
|
|
23
|
+
|
|
24
|
+
**Rule:** After your cold open scene, write ONE paragraph that says: "This is the paradox/lesson at the heart of [topic]." Then state the thesis. The bridge is the hinge between imagination and argument.
|
|
25
|
+
|
|
26
|
+
### Section-by-Section Escalation
|
|
27
|
+
|
|
28
|
+
The article follows a 7-section architecture, each with a distinct function:
|
|
29
|
+
|
|
30
|
+
| # | Section Function | Content Type |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| 1 | Cold Open | Scene (Roman soldier) |
|
|
33
|
+
| 2 | Concrete Example | Baltic Cable: the "what" |
|
|
34
|
+
| 3 | Technical Explanation | The Duck Curve: the "why" |
|
|
35
|
+
| 4 | Data and Numbers | EU interconnection targets: the "how big" |
|
|
36
|
+
| 5 | Geopolitical Layer | NordLink, Nord Stream sabotage: the "who" |
|
|
37
|
+
| 6 | Thematic Elevation | Trust as scarcest resource: the "so what" |
|
|
38
|
+
| 7 | Circular Close | Returns to Roman roads metaphor |
|
|
39
|
+
|
|
40
|
+
**Rule:** Each section does ONE job. Do not mix explanation with data with geopolitics in the same section. The reader should always know which *mode* they are in.
|
|
41
|
+
|
|
42
|
+
### The Section Divider
|
|
43
|
+
|
|
44
|
+
Sections are separated by `---` (horizontal rules). No numbered headers, no "Section 1: The Problem." The divider is invisible architecture.
|
|
45
|
+
|
|
46
|
+
**Rule:** Use horizontal rules or whitespace breaks between major sections. Never number sections or use "First... Second... Finally." Let the content carry the structure.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. Voice and Style
|
|
51
|
+
|
|
52
|
+
### The Second-Person Immersion
|
|
53
|
+
|
|
54
|
+
Uses "you" and "your" in the cold open to place the reader inside the scene. Then shifts to third person for the analytical sections. The voice is direct, declarative, and unsentimental.
|
|
55
|
+
|
|
56
|
+
**Voice markers:**
|
|
57
|
+
- Short, punchy sentences: "Nobody cares." (3 words, standalone paragraph)
|
|
58
|
+
- Colloquial but precise: "the not-so-heroic stuff"
|
|
59
|
+
- No hedging: "The math isn't close." Not "the math seems to suggest"
|
|
60
|
+
- Period as a weapon: "The cable is the thing." Finality, authority
|
|
61
|
+
|
|
62
|
+
### The Two-Sentence Rhythm
|
|
63
|
+
|
|
64
|
+
Most paragraphs follow a **setup-punchline** cadence. The first sentence sets context. The second sentence delivers the insight or turn. Occasionally a one-sentence paragraph appears as a "hammer" for emphasis.
|
|
65
|
+
|
|
66
|
+
**Example:**
|
|
67
|
+
> This is a legion on the move. And Rome didn't build an empire by pausing the march so everyone could get comfy shoes.
|
|
68
|
+
|
|
69
|
+
**Example (hammer):**
|
|
70
|
+
> Nobody cares. (standalone)
|
|
71
|
+
|
|
72
|
+
### Concrete Before Abstract
|
|
73
|
+
|
|
74
|
+
Every abstract claim is preceded by a specific, tangible detail. The author never states a principle without first grounding it in something the reader can see, touch, or imagine.
|
|
75
|
+
|
|
76
|
+
**Abstract to Concrete mappings:**
|
|
77
|
+
- "Infrastructure moves civilization forward" becomes "a 250-kilometer submarine power line beneath the waves"
|
|
78
|
+
- "Renewable intermittency is a problem" becomes "the duck curve because the net demand chart looks like a duck"
|
|
79
|
+
- "Geopolitics complicates cables" becomes "Russia has been known to run military exercises near undersea cables"
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 3. Research and Data Patterns
|
|
84
|
+
|
|
85
|
+
### The Specificity Stack
|
|
86
|
+
|
|
87
|
+
Data is always paired with interpretation. Numbers never stand alone. The formula is: **Number + What it means + Why it matters**.
|
|
88
|
+
|
|
89
|
+
**Example (three layers):**
|
|
90
|
+
1. Raw number: "14 gigawatts of interconnection capacity"
|
|
91
|
+
2. Comparison: "roughly equivalent to the output of 14 nuclear power plants"
|
|
92
|
+
3. Grounding: "That's 14 nuclear plants' worth of electricity moving through cables you can't see, across ocean floors you'll never visit, governed by treaties you probably haven't read"
|
|
93
|
+
|
|
94
|
+
### Named Sources and Dates
|
|
95
|
+
|
|
96
|
+
Every data point traces to a named institution and a specific year:
|
|
97
|
+
- "California Independent System Operator since 2013"
|
|
98
|
+
- "European Commission estimates approximately 58 billion euros by 2030"
|
|
99
|
+
- "International Energy Agency estimates 180-200 billion euros annually by 2050"
|
|
100
|
+
- "Nord Stream pipelines were sabotaged in 2022"
|
|
101
|
+
|
|
102
|
+
**Rule:** Never say "studies show" or "experts say." Name the institution, give the date, provide the number. Specificity equals credibility.
|
|
103
|
+
|
|
104
|
+
### The Cost-Benefit Frame
|
|
105
|
+
|
|
106
|
+
When presenting data, the author almost always presents both sides of a cost/benefit comparison, then lets the asymmetry speak for itself.
|
|
107
|
+
|
|
108
|
+
**Example:**
|
|
109
|
+
> "58 billion euros to build the cables" vs. "180-200 billion euros annually to NOT build them"
|
|
110
|
+
|
|
111
|
+
Followed by: "The math isn't close." One sentence. No elaboration needed.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 4. Narrative Devices
|
|
116
|
+
|
|
117
|
+
### The Circular Frame
|
|
118
|
+
|
|
119
|
+
The article begins and ends with the same metaphor (Roman roads/legionnaires). The closing paragraphs explicitly echo the opening imagery, creating a sense of completeness. But the return is not repetition. It is *elevation*. The metaphor has been enriched by everything in between.
|
|
120
|
+
|
|
121
|
+
**Opening:**
|
|
122
|
+
> Everything that does take up space: the gear, the food, the water. That's what wins wars.
|
|
123
|
+
|
|
124
|
+
**Closing:**
|
|
125
|
+
> The Roman soldier didn't win because he carried everything himself. He won because the empire had supply lines. Roads. Cables. Connections.
|
|
126
|
+
|
|
127
|
+
### The One-Word Echo
|
|
128
|
+
|
|
129
|
+
Key words and phrases recur across sections like musical motifs: "the thing," "the road," "the cable." These echoes build cumulative emphasis without explicit restatement.
|
|
130
|
+
|
|
131
|
+
**Recurring motif progression:**
|
|
132
|
+
- "Glorious speeches don't fill stomachs. **Swords win battles, not slogans.**"
|
|
133
|
+
- "**The cable is the thing.**"
|
|
134
|
+
- "**The road is the thing.**"
|
|
135
|
+
|
|
136
|
+
### The Rhetorical Question (Used Sparingly)
|
|
137
|
+
|
|
138
|
+
Only one rhetorical question appears: "So why isn't it happening faster?" It appears at the 70% mark as a pivot from exposition to analysis. The restraint makes it effective.
|
|
139
|
+
|
|
140
|
+
**Rule:** Use rhetorical questions only once per article, and only as a section pivot. Never as an opener or closer.
|
|
141
|
+
|
|
142
|
+
### The Emotional Micro-Burst
|
|
143
|
+
|
|
144
|
+
Within analytical sections, brief emotional beats appear. Not sentimentality. A moment of human connection that prevents the piece from feeling like a whitepaper.
|
|
145
|
+
|
|
146
|
+
**Examples:**
|
|
147
|
+
- "It's heavy in the way that makes you think of your 6-year-old back home"
|
|
148
|
+
- "a declaration of mutual dependence: we will keep the lights on for you, and you will keep the lights on for us"
|
|
149
|
+
- "trust, in the energy world, is the scarcest resource of all"
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 5. Formula Summary
|
|
154
|
+
|
|
155
|
+
| Element | Pattern | Rule |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| Opening | Cinematic cold open scene | Drop reader INTO a moment. No throat-clearing. |
|
|
158
|
+
| Bridge | Single pivot paragraph | "This is the paradox at the heart of [X]:" then thesis |
|
|
159
|
+
| Body sections | 7 sections, each with ONE job | Scene, Example, Technical, Data, Geopolitics, Theme, Close |
|
|
160
|
+
| Data | Specificity Stack | Never a bare number. Always interpret. |
|
|
161
|
+
| Voice | Two-sentence rhythm + hammer paragraphs | Setup-punchline. Standalone sentences for emphasis. |
|
|
162
|
+
| Tone | Direct, unsentimental, no hedging | "The math isn't close" not "the math seems to suggest" |
|
|
163
|
+
| Research | Named institutions + dates | Never "studies show." Always name + year + number. |
|
|
164
|
+
| Motif | Recurring one-word echoes | "the thing," "the road," "the cable" as musical motifs |
|
|
165
|
+
| Closing | Circular frame (echo opening) | Return to opening metaphor, elevated by everything between |
|
|
166
|
+
| Dividers | Horizontal rules, no section numbers | Invisible architecture. Content carries structure. |
|