@jairodri/huckleberry-cli 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (745) hide show
  1. package/README.md +85 -0
  2. package/agents/cos.json +2 -5
  3. package/agents/hermes/AGENTS.md +25 -49
  4. package/agents/hermes/fix-kimaki/SKILL.md +19 -92
  5. package/agents/hermes/hermes-fixer.md +44 -74
  6. package/agents/hermes.json +6 -18
  7. package/kanban/SKILL.md +18 -18
  8. package/kanban/package.json +1 -1
  9. package/kanban/src/dispatcher.mjs +1 -1
  10. package/kanban/templates/blog-social-campaign.yaml +6 -2
  11. package/kanban/templates/social-campaign.yaml +9 -4
  12. package/mcp/jev-calibration.mjs +335 -0
  13. package/mcp/jev-client.mjs +119 -0
  14. package/mcp/jev-thresholds.json +27 -0
  15. package/package.json +13 -9
  16. package/scripts/doctor-watchdog.sh +73 -0
  17. package/scripts/install-services.sh +34 -27
  18. package/scripts/self-improve-weekly.sh +34 -0
  19. package/scripts/sync-skills.mjs +121 -0
  20. package/skills/ab-test-setup/SKILL.md +266 -0
  21. package/skills/ab-test-setup/evals/evals.json +105 -0
  22. package/skills/ab-test-setup/references/sample-size-guide.md +263 -0
  23. package/skills/ab-test-setup/references/test-templates.md +277 -0
  24. package/skills/agent-reach/SKILL.md +132 -0
  25. package/skills/agent-reach/references/career.md +29 -0
  26. package/skills/agent-reach/references/dev.md +62 -0
  27. package/skills/agent-reach/references/search.md +33 -0
  28. package/skills/agent-reach/references/social.md +232 -0
  29. package/skills/agent-reach/references/video.md +130 -0
  30. package/skills/agent-reach/references/web.md +50 -0
  31. package/skills/ai-agent-seo/SKILL.md +450 -0
  32. package/skills/ai-cold-email-intelligence/SKILL.md +54 -0
  33. package/skills/ai-cold-email-intelligence/references/prompts.md +21 -0
  34. package/skills/ai-consensus-builder/SKILL.md +324 -0
  35. package/skills/ai-seo/SKILL.md +399 -0
  36. package/skills/ai-seo/evals/evals.json +90 -0
  37. package/skills/ai-seo/references/content-patterns.md +284 -0
  38. package/skills/ai-seo/references/platform-ranking-factors.md +152 -0
  39. package/skills/ai-visibility-audit/SKILL.md +322 -0
  40. package/skills/analytics-tracking/SKILL.md +309 -0
  41. package/skills/analytics-tracking/evals/evals.json +90 -0
  42. package/skills/analytics-tracking/references/event-library.md +260 -0
  43. package/skills/analytics-tracking/references/ga4-implementation.md +300 -0
  44. package/skills/analytics-tracking/references/gtm-implementation.md +390 -0
  45. package/skills/article-generator/SKILL.md +216 -0
  46. package/skills/auto-indexing/SKILL.md +179 -0
  47. package/skills/auto-indexing/scripts/auto-indexing.js +257 -0
  48. package/skills/auto-skill/SKILL.md +151 -0
  49. package/skills/auto-skill/correction-queue.js +102 -0
  50. package/skills/auto-skill/dedup.js +97 -0
  51. package/skills/auto-skill/skill-router.js +224 -0
  52. package/skills/autoresearch/SKILL.md +334 -0
  53. package/skills/autoresearch/autoresearch-autoresearch/SKILL.md.baseline +329 -0
  54. package/skills/autoresearch/autoresearch-autoresearch/changelog.md +34 -0
  55. package/skills/autoresearch/autoresearch-autoresearch/dashboard.html +116 -0
  56. package/skills/autoresearch/autoresearch-autoresearch/evals.md +39 -0
  57. package/skills/autoresearch/autoresearch-autoresearch/results.json +44 -0
  58. package/skills/autoresearch/autoresearch-autoresearch/results.tsv +3 -0
  59. package/skills/autoresearch/eval-guide.md +121 -0
  60. package/skills/b2b-cold-outreach/SKILL.md +322 -0
  61. package/skills/birdclaw/SKILL.md +82 -0
  62. package/skills/brainstorm/SKILL.md +168 -0
  63. package/skills/brand-kit-playground/SKILL.md +312 -0
  64. package/skills/brand-kit-playground/references/html-architecture.md +316 -0
  65. package/skills/brand-kit-playground/references/steal-patterns.md +88 -0
  66. package/skills/brand-voice/SKILL.md +223 -0
  67. package/skills/brand-voice/references/honesty-as-positioning.md +60 -0
  68. package/skills/brand-voice/references/voice-modes.md +1158 -0
  69. package/skills/business-advisory-council/README.md +136 -0
  70. package/skills/business-advisory-council/SKILL.md +94 -0
  71. package/skills/business-advisory-council/business-advisory-council.py +492 -0
  72. package/skills/business-advisory-council/discord-components-decision.json +8 -0
  73. package/skills/business-advisory-council/examples/steve-conley-partnership.json +6 -0
  74. package/skills/business-advisory-council/steve-conley-call-brief.json +6 -0
  75. package/skills/churn-prevention/SKILL.md +305 -0
  76. package/skills/churn-prevention/evals/evals.json +93 -0
  77. package/skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
  78. package/skills/churn-prevention/references/dunning-playbook.md +408 -0
  79. package/skills/claw-compactor/LICENSE +21 -0
  80. package/skills/claw-compactor/README.md +459 -0
  81. package/skills/claw-compactor/SKILL.md +329 -0
  82. package/skills/claw-compactor/benchmark/RESULTS.md +104 -0
  83. package/skills/claw-compactor/benchmark/__init__.py +1 -0
  84. package/skills/claw-compactor/benchmark/compressors.py +520 -0
  85. package/skills/claw-compactor/benchmark/data/sample_01_devops.json +82 -0
  86. package/skills/claw-compactor/benchmark/data/sample_02_trading.json +54 -0
  87. package/skills/claw-compactor/benchmark/data/sample_03_ml_short.json +38 -0
  88. package/skills/claw-compactor/benchmark/data/sample_04_mixed_long.json +318 -0
  89. package/skills/claw-compactor/benchmark/data/sample_05_sysadmin.json +56 -0
  90. package/skills/claw-compactor/benchmark/evaluate.py +278 -0
  91. package/skills/claw-compactor/benchmark/report.py +241 -0
  92. package/skills/claw-compactor/benchmark/results/benchmark_results.json +405 -0
  93. package/skills/claw-compactor/benchmark/run_benchmark.py +238 -0
  94. package/skills/claw-compactor/engram.yaml +49 -0
  95. package/skills/claw-compactor/proxy/README.md +87 -0
  96. package/skills/claw-compactor/proxy/dashboard.html +804 -0
  97. package/skills/claw-compactor/proxy/event-log.mjs +213 -0
  98. package/skills/claw-compactor/proxy/fair-queue.mjs +288 -0
  99. package/skills/claw-compactor/proxy/metrics-store.mjs +425 -0
  100. package/skills/claw-compactor/proxy/package-lock.json +125 -0
  101. package/skills/claw-compactor/proxy/package.json +15 -0
  102. package/skills/claw-compactor/proxy/portal.html +360 -0
  103. package/skills/claw-compactor/proxy/process-registry.mjs +447 -0
  104. package/skills/claw-compactor/proxy/rate-limiter.mjs +117 -0
  105. package/skills/claw-compactor/proxy/redis-client.mjs +75 -0
  106. package/skills/claw-compactor/proxy/retry.mjs +182 -0
  107. package/skills/claw-compactor/proxy/server.mjs +2100 -0
  108. package/skills/claw-compactor/proxy/session-affinity.mjs +177 -0
  109. package/skills/claw-compactor/proxy/start.sh +23 -0
  110. package/skills/claw-compactor/proxy/test/event-log.test.mjs +237 -0
  111. package/skills/claw-compactor/proxy/test/helpers.mjs +103 -0
  112. package/skills/claw-compactor/proxy/test/integration.test.mjs +297 -0
  113. package/skills/claw-compactor/proxy/test/metrics-store.test.mjs +243 -0
  114. package/skills/claw-compactor/proxy/test/process-registry.test.mjs +390 -0
  115. package/skills/claw-compactor/proxy/test/rate-limiter.test.mjs +121 -0
  116. package/skills/claw-compactor/proxy/test/redis-client.test.mjs +62 -0
  117. package/skills/claw-compactor/proxy/test/token-tracker.test.mjs +200 -0
  118. package/skills/claw-compactor/proxy/token-tracker.mjs +482 -0
  119. package/skills/claw-compactor/pyproject.toml +26 -0
  120. package/skills/claw-compactor/references/README.md +44 -0
  121. package/skills/claw-compactor/references/architecture.md +197 -0
  122. package/skills/claw-compactor/references/benchmarks.md +94 -0
  123. package/skills/claw-compactor/references/compression-prompts.md +39 -0
  124. package/skills/claw-compactor/references/compression-techniques.md +219 -0
  125. package/skills/claw-compactor/references/testing.md +160 -0
  126. package/skills/claw-compactor/scripts/audit_memory.py +216 -0
  127. package/skills/claw-compactor/scripts/compress_memory.py +236 -0
  128. package/skills/claw-compactor/scripts/compressed_context.py +280 -0
  129. package/skills/claw-compactor/scripts/dedup_memory.py +147 -0
  130. package/skills/claw-compactor/scripts/dictionary_compress.py +170 -0
  131. package/skills/claw-compactor/scripts/engram-auto.sh +152 -0
  132. package/skills/claw-compactor/scripts/engram_auto.py +695 -0
  133. package/skills/claw-compactor/scripts/engram_cli.py +474 -0
  134. package/skills/claw-compactor/scripts/estimate_tokens.py +131 -0
  135. package/skills/claw-compactor/scripts/generate_summary_tiers.py +292 -0
  136. package/skills/claw-compactor/scripts/lib/__init__.py +34 -0
  137. package/skills/claw-compactor/scripts/lib/config.py +289 -0
  138. package/skills/claw-compactor/scripts/lib/dedup.py +119 -0
  139. package/skills/claw-compactor/scripts/lib/dictionary.py +281 -0
  140. package/skills/claw-compactor/scripts/lib/engram.py +793 -0
  141. package/skills/claw-compactor/scripts/lib/engram_prompts.py +175 -0
  142. package/skills/claw-compactor/scripts/lib/engram_storage.py +254 -0
  143. package/skills/claw-compactor/scripts/lib/exceptions.py +24 -0
  144. package/skills/claw-compactor/scripts/lib/markdown.py +312 -0
  145. package/skills/claw-compactor/scripts/lib/rle.py +165 -0
  146. package/skills/claw-compactor/scripts/lib/tokenizer_optimizer.py +188 -0
  147. package/skills/claw-compactor/scripts/lib/tokens.py +68 -0
  148. package/skills/claw-compactor/scripts/mem_compress.py +788 -0
  149. package/skills/claw-compactor/scripts/observation_compressor.py +346 -0
  150. package/skills/claw-compactor/tests/__init__.py +0 -0
  151. package/skills/claw-compactor/tests/conftest.py +94 -0
  152. package/skills/claw-compactor/tests/test_audit_comprehensive.py +123 -0
  153. package/skills/claw-compactor/tests/test_audit_memory.py +67 -0
  154. package/skills/claw-compactor/tests/test_benchmark.py +122 -0
  155. package/skills/claw-compactor/tests/test_cli_commands.py +228 -0
  156. package/skills/claw-compactor/tests/test_compress_memory.py +109 -0
  157. package/skills/claw-compactor/tests/test_compress_memory_comprehensive.py +191 -0
  158. package/skills/claw-compactor/tests/test_compressed_context.py +145 -0
  159. package/skills/claw-compactor/tests/test_config.py +54 -0
  160. package/skills/claw-compactor/tests/test_dedup_memory.py +124 -0
  161. package/skills/claw-compactor/tests/test_dictionary.py +327 -0
  162. package/skills/claw-compactor/tests/test_dictionary_comprehensive.py +241 -0
  163. package/skills/claw-compactor/tests/test_engram.py +1091 -0
  164. package/skills/claw-compactor/tests/test_engram_auto.py +529 -0
  165. package/skills/claw-compactor/tests/test_error_handling.py +194 -0
  166. package/skills/claw-compactor/tests/test_estimate_tokens.py +99 -0
  167. package/skills/claw-compactor/tests/test_generate_summary_tiers.py +105 -0
  168. package/skills/claw-compactor/tests/test_integration.py +249 -0
  169. package/skills/claw-compactor/tests/test_lib_dedup.py +135 -0
  170. package/skills/claw-compactor/tests/test_lib_markdown.py +388 -0
  171. package/skills/claw-compactor/tests/test_lib_tokens.py +82 -0
  172. package/skills/claw-compactor/tests/test_main_entry.py +176 -0
  173. package/skills/claw-compactor/tests/test_markdown_advanced.py +284 -0
  174. package/skills/claw-compactor/tests/test_new_features.py +77 -0
  175. package/skills/claw-compactor/tests/test_observation_comprehensive.py +261 -0
  176. package/skills/claw-compactor/tests/test_observation_compressor.py +128 -0
  177. package/skills/claw-compactor/tests/test_performance.py +172 -0
  178. package/skills/claw-compactor/tests/test_pipeline.py +109 -0
  179. package/skills/claw-compactor/tests/test_real_workspace.py +161 -0
  180. package/skills/claw-compactor/tests/test_rle.py +114 -0
  181. package/skills/claw-compactor/tests/test_rle_comprehensive.py +151 -0
  182. package/skills/claw-compactor/tests/test_roundtrip.py +253 -0
  183. package/skills/claw-compactor/tests/test_roundtrip_comprehensive.py +192 -0
  184. package/skills/claw-compactor/tests/test_tiers_comprehensive.py +171 -0
  185. package/skills/claw-compactor/tests/test_token_economics.py +237 -0
  186. package/skills/claw-compactor/tests/test_tokenizer_optimizer.py +175 -0
  187. package/skills/claw-compactor/tests/test_tokenizer_optimizer_comprehensive.py +241 -0
  188. package/skills/claw-compactor/tests/test_tokens.py +27 -0
  189. package/skills/cmo/CHANGELOG.md +61 -0
  190. package/skills/cmo/SKILL.md +500 -0
  191. package/skills/cmo/references/ai-slop-patterns.md +56 -0
  192. package/skills/cmo/references/analytics-guide.md +152 -0
  193. package/skills/cmo/references/ideas-library.md +197 -0
  194. package/skills/cmo/rules/brand-file-map.md +198 -0
  195. package/skills/cmo/rules/brand-memory.md +158 -0
  196. package/skills/cmo/rules/cli-runtime-index.md +95 -0
  197. package/skills/cmo/rules/command-reference.md +167 -0
  198. package/skills/cmo/rules/communication.md +15 -0
  199. package/skills/cmo/rules/context-switch.md +101 -0
  200. package/skills/cmo/rules/ecosystem.md +125 -0
  201. package/skills/cmo/rules/error-recovery.md +98 -0
  202. package/skills/cmo/rules/learning-loop.md +170 -0
  203. package/skills/cmo/rules/monorepo.md +78 -0
  204. package/skills/cmo/rules/output-format.md +124 -0
  205. package/skills/cmo/rules/persona.md +15 -0
  206. package/skills/cmo/rules/playbooks.md +327 -0
  207. package/skills/cmo/rules/progressive-enhancement.md +231 -0
  208. package/skills/cmo/rules/publish-index.md +106 -0
  209. package/skills/cmo/rules/quality-gate.md +90 -0
  210. package/skills/cmo/rules/recency-grounding.md +124 -0
  211. package/skills/cmo/rules/safety.md +80 -0
  212. package/skills/cmo/rules/studio-api-index.md +138 -0
  213. package/skills/cmo/rules/studio-integration.md +147 -0
  214. package/skills/cmo/rules/sub-agents.md +167 -0
  215. package/skills/cold-email/SKILL.md +240 -0
  216. package/skills/cold-email/evals/evals.json +94 -0
  217. package/skills/cold-email/references/benchmarks.md +83 -0
  218. package/skills/cold-email/references/follow-up-sequences.md +81 -0
  219. package/skills/cold-email/references/frameworks.md +90 -0
  220. package/skills/cold-email/references/personalization.md +79 -0
  221. package/skills/cold-email/references/subject-lines.md +53 -0
  222. package/skills/competitive-intel/SKILL.md +433 -0
  223. package/skills/competitive-intel/references/competitive-frameworks.md +145 -0
  224. package/skills/competitor-alternatives/SKILL.md +362 -0
  225. package/skills/competitor-alternatives/evals/evals.json +93 -0
  226. package/skills/competitor-alternatives/references/content-architecture.md +271 -0
  227. package/skills/competitor-alternatives/references/templates.md +223 -0
  228. package/skills/concreteness-fixer/SKILL.md +483 -0
  229. package/skills/concreteness-fixer/scripts/validation/concreteness-validator.js +221 -0
  230. package/skills/concreteness-fixer/utils/execFileNoThrow.js +16 -0
  231. package/skills/content-atomizer/SKILL.md +424 -0
  232. package/skills/content-atomizer/references/hook-strategies.md +56 -0
  233. package/skills/content-atomizer/references/platform-specs.md +118 -0
  234. package/skills/content-atomizer/references/platforms/bluesky.md +64 -0
  235. package/skills/content-atomizer/references/platforms/instagram.md +77 -0
  236. package/skills/content-atomizer/references/platforms/linkedin.md +120 -0
  237. package/skills/content-atomizer/references/platforms/reddit.md +73 -0
  238. package/skills/content-atomizer/references/platforms/threads.md +64 -0
  239. package/skills/content-atomizer/references/platforms/tiktok.md +55 -0
  240. package/skills/content-atomizer/references/platforms/twitter.md +123 -0
  241. package/skills/content-atomizer/references/platforms/youtube.md +56 -0
  242. package/skills/content-atomizer/references/tweet-patterns.md +40 -0
  243. package/skills/content-repost-manager/SKILL.md +245 -0
  244. package/skills/content-repost-manager/scripts/content-repost-scan.py +133 -0
  245. package/skills/context-recovery/.clawdhub/origin.json +7 -0
  246. package/skills/context-recovery/SKILL.md +198 -0
  247. package/skills/context-recovery/_meta.json +6 -0
  248. package/skills/conversion-flow-cro/SKILL.md +248 -0
  249. package/skills/conversion-flow-cro/references/flow-benchmarks.md +158 -0
  250. package/skills/copy-editing/SKILL.md +474 -0
  251. package/skills/copy-editing/evals/evals.json +89 -0
  252. package/skills/copy-editing/references/plain-english-alternatives.md +394 -0
  253. package/skills/copywriting/SKILL.md +349 -0
  254. package/skills/copywriting/evals/evals.json +111 -0
  255. package/skills/copywriting/references/awareness-level-guide.md +227 -0
  256. package/skills/copywriting/references/copy-frameworks.md +389 -0
  257. package/skills/copywriting/references/natural-transitions.md +272 -0
  258. package/skills/creative/SKILL.md +365 -0
  259. package/skills/creative/modes/ad-creative.md +1748 -0
  260. package/skills/creative/modes/product-photo.md +1520 -0
  261. package/skills/creative/modes/product-video.md +1657 -0
  262. package/skills/creative/modes/social-graphics.md +1511 -0
  263. package/skills/creative/modes/talking-head.md +2208 -0
  264. package/skills/creative/references/VISUAL_INTELLIGENCE.md +1233 -0
  265. package/skills/deep-serp-article/SKILL.md +677 -0
  266. package/skills/deep-serp-article/SKILL.md.bak +530 -0
  267. package/skills/earned-media/SKILL.md +260 -0
  268. package/skills/email-sequences/SKILL.md +446 -0
  269. package/skills/email-sequences/references/sequence-templates.md +1217 -0
  270. package/skills/firecrawl/.skill-meta.json +13 -0
  271. package/skills/firecrawl/SKILL.md +154 -0
  272. package/skills/firecrawl/rules/install.md +63 -0
  273. package/skills/firecrawl/rules/security.md +26 -0
  274. package/skills/form-cro/SKILL.md +429 -0
  275. package/skills/form-cro/evals/evals.json +90 -0
  276. package/skills/free-tool-strategy/SKILL.md +325 -0
  277. package/skills/free-tool-strategy/evals/evals.json +90 -0
  278. package/skills/free-tool-strategy/references/tool-types.md +253 -0
  279. package/skills/frontend-slides/SKILL.md +248 -0
  280. package/skills/frontend-slides/STYLE_PRESETS.md +347 -0
  281. package/skills/frontend-slides/animation-patterns.md +110 -0
  282. package/skills/frontend-slides/html-template.md +347 -0
  283. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  284. package/skills/frontend-slides/viewport-base.css +153 -0
  285. package/skills/guardrail-framework/SKILL.md +319 -0
  286. package/skills/hook-generator/SKILL.md +438 -0
  287. package/skills/hook-generator/database/2026-PLATFORM-RESEARCH.md +211 -0
  288. package/skills/hook-generator/database/instagram-hooks.json +591 -0
  289. package/skills/hook-generator/database/linkedin-hooks.json +502 -0
  290. package/skills/hook-generator/database/medium-hooks.json +181 -0
  291. package/skills/hook-generator/database/tiktok-hooks.json +337 -0
  292. package/skills/hook-generator/database/twitter-hooks.json +567 -0
  293. package/skills/hook-generator/database/youtube-hooks.json +275 -0
  294. package/skills/hook-generator/package-lock.json +24 -0
  295. package/skills/hook-generator/package.json +5 -0
  296. package/skills/hook-generator/references/hook-generation-system.md +257 -0
  297. package/skills/hook-generator/references/hook-performance-analysis.json +153 -0
  298. package/skills/hook-generator/references/hooks-library.md +128 -0
  299. package/skills/hook-generator/references/platform-hook-frameworks.md +275 -0
  300. package/skills/hook-generator/scripts/generate-hooks-unified.js +722 -0
  301. package/skills/hook-generator/scripts/generate-hooks.js +225 -0
  302. package/skills/hook-generator/scripts/generate.sh +36 -0
  303. package/skills/hook-generator/scripts/ralph-hook-enhancer.js +864 -0
  304. package/skills/hook-generator/scripts/test-gemini-output.js +51 -0
  305. package/skills/humanizer/README.md +120 -0
  306. package/skills/humanizer/SKILL.md +699 -0
  307. package/skills/image-gen/SKILL.md +277 -0
  308. package/skills/image-gen/references/prompt-patterns.md +114 -0
  309. package/skills/image-gen/references/visual-metaphors.md +51 -0
  310. package/skills/impeccable/SKILL.md +86 -0
  311. package/skills/impeccable/reference/adapt.md +312 -0
  312. package/skills/impeccable/reference/adapt.native.md +58 -0
  313. package/skills/impeccable/reference/android.md +40 -0
  314. package/skills/impeccable/reference/animate.md +86 -0
  315. package/skills/impeccable/reference/audit.md +136 -0
  316. package/skills/impeccable/reference/audit.native.md +139 -0
  317. package/skills/impeccable/reference/bolder.md +31 -0
  318. package/skills/impeccable/reference/clarify.md +94 -0
  319. package/skills/impeccable/reference/colorize.md +86 -0
  320. package/skills/impeccable/reference/craft-floor.md +42 -0
  321. package/skills/impeccable/reference/craft.md +5 -0
  322. package/skills/impeccable/reference/critique.md +788 -0
  323. package/skills/impeccable/reference/degraded/asset-producer.md +90 -0
  324. package/skills/impeccable/reference/degraded/documenter.md +24 -0
  325. package/skills/impeccable/reference/degraded/finish-reviewer.md +37 -0
  326. package/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  327. package/skills/impeccable/reference/delight.md +70 -0
  328. package/skills/impeccable/reference/distill.md +111 -0
  329. package/skills/impeccable/reference/doctor.md +53 -0
  330. package/skills/impeccable/reference/document.md +416 -0
  331. package/skills/impeccable/reference/extract.md +69 -0
  332. package/skills/impeccable/reference/harden.md +336 -0
  333. package/skills/impeccable/reference/hooks.md +105 -0
  334. package/skills/impeccable/reference/init.md +125 -0
  335. package/skills/impeccable/reference/ios.md +45 -0
  336. package/skills/impeccable/reference/layout.md +84 -0
  337. package/skills/impeccable/reference/live-setup.md +102 -0
  338. package/skills/impeccable/reference/live.md +323 -0
  339. package/skills/impeccable/reference/new-work.md +110 -0
  340. package/skills/impeccable/reference/onboard.md +234 -0
  341. package/skills/impeccable/reference/operate.md +61 -0
  342. package/skills/impeccable/reference/optimize.md +258 -0
  343. package/skills/impeccable/reference/overdrive.md +127 -0
  344. package/skills/impeccable/reference/polish.md +97 -0
  345. package/skills/impeccable/reference/quieter.md +99 -0
  346. package/skills/impeccable/reference/routing.md +18 -0
  347. package/skills/impeccable/reference/shape.md +59 -0
  348. package/skills/impeccable/reference/typeset.md +80 -0
  349. package/skills/impeccable/reference/visualize.md +49 -0
  350. package/skills/impeccable/scripts/command-metadata.json +94 -0
  351. package/skills/impeccable/scripts/concept-seed.mjs +558 -0
  352. package/skills/impeccable/scripts/context-signals.mjs +334 -0
  353. package/skills/impeccable/scripts/context.mjs +1467 -0
  354. package/skills/impeccable/scripts/critique-storage.mjs +213 -0
  355. package/skills/impeccable/scripts/detect-csp.mjs +198 -0
  356. package/skills/impeccable/scripts/detect.mjs +21 -0
  357. package/skills/impeccable/scripts/detector/browser/injected/index.mjs +2023 -0
  358. package/skills/impeccable/scripts/detector/cli/main.mjs +438 -0
  359. package/skills/impeccable/scripts/detector/design-system.mjs +1046 -0
  360. package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +8283 -0
  361. package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
  362. package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +372 -0
  363. package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +1168 -0
  364. package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1186 -0
  365. package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +264 -0
  366. package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  367. package/skills/impeccable/scripts/detector/findings.mjs +18 -0
  368. package/skills/impeccable/scripts/detector/node/file-system.mjs +203 -0
  369. package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  370. package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +617 -0
  371. package/skills/impeccable/scripts/detector/rules/checks.mjs +5580 -0
  372. package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
  373. package/skills/impeccable/scripts/detector/shared/constants.mjs +112 -0
  374. package/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
  375. package/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  376. package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  377. package/skills/impeccable/scripts/doctor.mjs +336 -0
  378. package/skills/impeccable/scripts/embed-prompt.mjs +133 -0
  379. package/skills/impeccable/scripts/generate-image.mjs +240 -0
  380. package/skills/impeccable/scripts/hook-admin.mjs +801 -0
  381. package/skills/impeccable/scripts/hook-before-edit.mjs +508 -0
  382. package/skills/impeccable/scripts/hook-lib.mjs +2153 -0
  383. package/skills/impeccable/scripts/hook.mjs +78 -0
  384. package/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
  385. package/skills/impeccable/scripts/lib/composition-catalog.mjs +200 -0
  386. package/skills/impeccable/scripts/lib/concept-catalog.mjs +384 -0
  387. package/skills/impeccable/scripts/lib/design-parser.mjs +925 -0
  388. package/skills/impeccable/scripts/lib/impeccable-config.mjs +658 -0
  389. package/skills/impeccable/scripts/lib/impeccable-paths.mjs +137 -0
  390. package/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
  391. package/skills/impeccable/scripts/lib/provider.mjs +5 -0
  392. package/skills/impeccable/scripts/lib/roll-selection.mjs +362 -0
  393. package/skills/impeccable/scripts/lib/staleness-deep.mjs +478 -0
  394. package/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
  395. package/skills/impeccable/scripts/lib/staleness.mjs +457 -0
  396. package/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
  397. package/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  398. package/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
  399. package/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
  400. package/skills/impeccable/scripts/live/accept-css.mjs +617 -0
  401. package/skills/impeccable/scripts/live/accept-verify.mjs +60 -0
  402. package/skills/impeccable/scripts/live/browser-script-parts.mjs +55 -0
  403. package/skills/impeccable/scripts/live/completion.mjs +28 -0
  404. package/skills/impeccable/scripts/live/event-validation.mjs +199 -0
  405. package/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
  406. package/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +73 -0
  407. package/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
  408. package/skills/impeccable/scripts/live/frameworks/journal.mjs +197 -0
  409. package/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
  410. package/skills/impeccable/scripts/live/frameworks/nuxt.mjs +161 -0
  411. package/skills/impeccable/scripts/live/frameworks/script-src.mjs +17 -0
  412. package/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
  413. package/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
  414. package/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
  415. package/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
  416. package/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
  417. package/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
  418. package/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
  419. package/skills/impeccable/scripts/live/instructions.mjs +142 -0
  420. package/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
  421. package/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
  422. package/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
  423. package/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
  424. package/skills/impeccable/scripts/live/roots.mjs +508 -0
  425. package/skills/impeccable/scripts/live/session-store.mjs +563 -0
  426. package/skills/impeccable/scripts/live/source-lock.mjs +105 -0
  427. package/skills/impeccable/scripts/live/source-search.mjs +105 -0
  428. package/skills/impeccable/scripts/live/svelte-ast.mjs +961 -0
  429. package/skills/impeccable/scripts/live/svelte-component.mjs +1342 -0
  430. package/skills/impeccable/scripts/live/sveltekit-adapter.mjs +316 -0
  431. package/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
  432. package/skills/impeccable/scripts/live/ui-core.mjs +180 -0
  433. package/skills/impeccable/scripts/live/vocabulary.mjs +171 -0
  434. package/skills/impeccable/scripts/live-accept.mjs +954 -0
  435. package/skills/impeccable/scripts/live-browser-dom.js +146 -0
  436. package/skills/impeccable/scripts/live-browser-session.js +123 -0
  437. package/skills/impeccable/scripts/live-browser.js +12520 -0
  438. package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1244 -0
  439. package/skills/impeccable/scripts/live-complete.mjs +107 -0
  440. package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  441. package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  442. package/skills/impeccable/scripts/live-inject.mjs +503 -0
  443. package/skills/impeccable/scripts/live-insert.mjs +292 -0
  444. package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +368 -0
  445. package/skills/impeccable/scripts/live-poll.mjs +429 -0
  446. package/skills/impeccable/scripts/live-resume.mjs +123 -0
  447. package/skills/impeccable/scripts/live-server.mjs +1669 -0
  448. package/skills/impeccable/scripts/live-status.mjs +71 -0
  449. package/skills/impeccable/scripts/live-target.mjs +30 -0
  450. package/skills/impeccable/scripts/live-wrap.mjs +927 -0
  451. package/skills/impeccable/scripts/live.mjs +359 -0
  452. package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  453. package/skills/impeccable/scripts/palette.mjs +628 -0
  454. package/skills/impeccable/scripts/pin.mjs +221 -0
  455. package/skills/impeccable/scripts/serve-question.mjs +932 -0
  456. package/skills/impeccable/scripts/surface-brief.mjs +74 -0
  457. package/skills/inkstone-admin/SKILL.md +66 -0
  458. package/skills/jev-hook-gate/SKILL.md +111 -0
  459. package/skills/keyword-research/SKILL.md +503 -0
  460. package/skills/keyword-research/references/dr-cap-and-confidence.md +62 -0
  461. package/skills/keyword-research/references/keyword-examples.md +769 -0
  462. package/skills/landing-page-architect/SKILL.md +585 -0
  463. package/skills/landing-page-architect/references/architecture-reference.md +32 -0
  464. package/skills/launch-strategy/SKILL.md +384 -0
  465. package/skills/launch-strategy/evals/evals.json +91 -0
  466. package/skills/launch-strategy/references/launch-checklist.md +209 -0
  467. package/skills/launch-strategy/references/launch-timeline.md +159 -0
  468. package/skills/lead-email-craft/SKILL.md +522 -0
  469. package/skills/lead-magnets/SKILL.md +310 -0
  470. package/skills/lead-magnets/references/benchmarks.md +129 -0
  471. package/skills/lead-magnets/references/format-guide.md +196 -0
  472. package/skills/link-building-seo/SKILL.md +210 -0
  473. package/skills/lint-report.txt +1 -0
  474. package/skills/manifest.json +129 -0
  475. package/skills/marketing-demo/SKILL.md +249 -0
  476. package/skills/marketing-demo/references/remotion-examples.md +281 -0
  477. package/skills/marketing-ideas/SKILL.md +167 -0
  478. package/skills/marketing-ideas/evals/evals.json +90 -0
  479. package/skills/marketing-ideas/references/ideas-by-category.md +366 -0
  480. package/skills/marketing-psychology/SKILL.md +374 -0
  481. package/skills/marketing-psychology/evals/evals.json +88 -0
  482. package/skills/marketing-psychology/references/case-studies.md +148 -0
  483. package/skills/narrative-research-article/SKILL.md +469 -0
  484. package/skills/narrative-research-article/references/lanusse-patterns.md +166 -0
  485. package/skills/notebooklm/SKILL.md +674 -0
  486. package/skills/off-page-seo/SKILL.md +219 -0
  487. package/skills/onboarding-cro/SKILL.md +220 -0
  488. package/skills/onboarding-cro/evals/evals.json +92 -0
  489. package/skills/onboarding-cro/references/experiments.md +258 -0
  490. package/skills/original-research/SKILL.md +388 -0
  491. package/skills/page-cro/SKILL.md +269 -0
  492. package/skills/page-cro/references/cro-benchmarks.md +140 -0
  493. package/skills/paper-marketing/SKILL.md +448 -0
  494. package/skills/paper-marketing/references/agent-quality-rubric.md +68 -0
  495. package/skills/paper-marketing/references/brand-system-template.md +120 -0
  496. package/skills/paper-marketing/references/paper-mcp-rules.md +71 -0
  497. package/skills/paper-marketing/references/platform-conventions.md +43 -0
  498. package/skills/paywall-upgrade-cro/SKILL.md +227 -0
  499. package/skills/paywall-upgrade-cro/evals/evals.json +93 -0
  500. package/skills/paywall-upgrade-cro/references/experiments.md +164 -0
  501. package/skills/platform-formatting/SKILL.md +51 -0
  502. package/skills/popup-cro/SKILL.md +454 -0
  503. package/skills/popup-cro/evals/evals.json +94 -0
  504. package/skills/positioning-angles/SKILL.md +524 -0
  505. package/skills/positioning-angles/references/ad-matrix-and-examples.md +176 -0
  506. package/skills/positioning-angles/references/angle-frameworks.md +187 -0
  507. package/skills/positioning-angles/references/dunford-positioning.md +135 -0
  508. package/skills/positioning-angles/references/hormozi-offer.md +247 -0
  509. package/skills/positioning-angles/references/schwartz-sophistication.md +166 -0
  510. package/skills/positioning-angles/references/unique-mechanism.md +162 -0
  511. package/skills/pricing-strategy/SKILL.md +346 -0
  512. package/skills/pricing-strategy/evals/evals.json +90 -0
  513. package/skills/pricing-strategy/references/research-methods.md +152 -0
  514. package/skills/pricing-strategy/references/tier-structure.md +307 -0
  515. package/skills/programmatic-seo/SKILL.md +238 -0
  516. package/skills/programmatic-seo/evals/evals.json +94 -0
  517. package/skills/programmatic-seo/references/playbooks.md +308 -0
  518. package/skills/project-rag/SKILL.md +127 -0
  519. package/skills/quality-gate/SKILL.md +519 -0
  520. package/skills/quality-gate/judge-personas/buyer.md +47 -0
  521. package/skills/quality-gate/judge-personas/expert.md +47 -0
  522. package/skills/quality-gate/judge-personas/outsider.md +47 -0
  523. package/skills/quality-gate/judge-personas/scanner.md +41 -0
  524. package/skills/quality-gate/judge-personas/skeptic.md +40 -0
  525. package/skills/referral-program/SKILL.md +290 -0
  526. package/skills/referral-program/evals/evals.json +89 -0
  527. package/skills/referral-program/references/affiliate-programs.md +163 -0
  528. package/skills/referral-program/references/program-examples.md +143 -0
  529. package/skills/review-sites/SKILL.md +279 -0
  530. package/skills/revops/SKILL.md +343 -0
  531. package/skills/revops/evals/evals.json +91 -0
  532. package/skills/revops/references/automation-playbooks.md +290 -0
  533. package/skills/revops/references/lifecycle-definitions.md +278 -0
  534. package/skills/revops/references/routing-rules.md +203 -0
  535. package/skills/revops/references/scoring-models.md +247 -0
  536. package/skills/saas-product-seo/SKILL.md +324 -0
  537. package/skills/sales-enablement/SKILL.md +349 -0
  538. package/skills/sales-enablement/evals/evals.json +91 -0
  539. package/skills/sales-enablement/references/deck-frameworks.md +263 -0
  540. package/skills/sales-enablement/references/demo-scripts.md +355 -0
  541. package/skills/sales-enablement/references/objection-library.md +270 -0
  542. package/skills/sales-enablement/references/one-pager-templates.md +208 -0
  543. package/skills/schema-markup/SKILL.md +179 -0
  544. package/skills/schema-markup/evals/evals.json +87 -0
  545. package/skills/schema-markup/references/schema-examples.md +398 -0
  546. package/skills/self-improve/SKILL.md +166 -0
  547. package/skills/self-improving-agent/README.md +243 -0
  548. package/skills/self-improving-agent/SKILL.md +437 -0
  549. package/skills/self-improving-agent/scripts/__init__.py +16 -0
  550. package/skills/self-improving-agent/scripts/__pycache__/auto_detect.cpython-314.pyc +0 -0
  551. package/skills/self-improving-agent/scripts/__pycache__/nlm_curation.cpython-314.pyc +0 -0
  552. package/skills/self-improving-agent/scripts/__pycache__/self_improving_agent.cpython-314.pyc +0 -0
  553. package/skills/self-improving-agent/scripts/auto_detect.py +270 -0
  554. package/skills/self-improving-agent/scripts/init_expertise_registry.py +89 -0
  555. package/skills/self-improving-agent/scripts/nlm_curation.py +259 -0
  556. package/skills/self-improving-agent/scripts/self-improving-agent +113 -0
  557. package/skills/self-improving-agent/scripts/self_improving_agent.py +603 -0
  558. package/skills/self-improving-agent/scripts/test_curation_scorer.py +20 -0
  559. package/skills/self-improving-agent/scripts/test_self_improving.py +184 -0
  560. package/skills/send-email/SKILL.md +426 -0
  561. package/skills/send-email/references/batch-email-examples.md +807 -0
  562. package/skills/send-email/references/best-practices.md +453 -0
  563. package/skills/send-email/references/installation.md +123 -0
  564. package/skills/send-email/references/single-email-examples.md +470 -0
  565. package/skills/send-email/references/webhooks.md +221 -0
  566. package/skills/seo-audit/SKILL.md +362 -0
  567. package/skills/seo-audit/references/ai-writing-detection.md +200 -0
  568. package/skills/seo-audit/references/architecture-patterns.md +271 -0
  569. package/skills/seo-audit/references/schema-templates.md +427 -0
  570. package/skills/seo-content/SKILL.md +510 -0
  571. package/skills/seo-content/references/anti-ai-detection.md +184 -0
  572. package/skills/seo-content/references/content-structures.md +148 -0
  573. package/skills/seo-content/references/eeat-examples.md +235 -0
  574. package/skills/seo-content/references/on-page-seo.md +261 -0
  575. package/skills/seo-content/references/pseo-playbooks.md +226 -0
  576. package/skills/seo-content/references/schema-templates.md +104 -0
  577. package/skills/seo-content/references/serp-analysis-format.md +151 -0
  578. package/skills/seo-machine/SKILL.md +331 -0
  579. package/skills/seo-machine/assets/brand-template.md +73 -0
  580. package/skills/seo-machine/assets/link-inventory-template.md +74 -0
  581. package/skills/seo-machine/assets/roadmap-template.md +184 -0
  582. package/skills/seo-machine/references/api-stack-recipes.md +230 -0
  583. package/skills/seo-machine/references/exa-recipes.md +260 -0
  584. package/skills/seo-machine/references/manual-research.md +73 -0
  585. package/skills/seo-machine/references/methodology.md +87 -0
  586. package/skills/seo-machine/references/off-page.md +123 -0
  587. package/skills/seo-machine/references/patterns/alternatives.md +176 -0
  588. package/skills/seo-machine/references/patterns/compare.md +105 -0
  589. package/skills/seo-machine/references/patterns/playbooks.md +106 -0
  590. package/skills/seo-machine/references/patterns/use-case.md +109 -0
  591. package/skills/seo-machine/references/quality-bars.md +99 -0
  592. package/skills/seo-machine/references/stacks/astro.md +156 -0
  593. package/skills/seo-machine/references/stacks/detection.md +61 -0
  594. package/skills/seo-machine/references/stacks/markdown-fallback.md +181 -0
  595. package/skills/seo-machine/references/stacks/nextjs.md +108 -0
  596. package/skills/seo-machine/references/stacks/rails-inertia.md +99 -0
  597. package/skills/seo-machine/references/striking-distance.md +116 -0
  598. package/skills/seo-machine/references/technical-audit.md +153 -0
  599. package/skills/seo-machine/scripts/link_audit.py +265 -0
  600. package/skills/seo-machine/scripts/tech_audit.py +221 -0
  601. package/skills/seo-machine/scripts/word_count.py +154 -0
  602. package/skills/sharp-thesis-validator/SKILL.md +393 -0
  603. package/skills/sharp-thesis-validator/examples.md +186 -0
  604. package/skills/signup-flow-cro/SKILL.md +359 -0
  605. package/skills/signup-flow-cro/evals/evals.json +88 -0
  606. package/skills/site-architecture/SKILL.md +357 -0
  607. package/skills/site-architecture/evals/evals.json +88 -0
  608. package/skills/site-architecture/references/mermaid-templates.md +216 -0
  609. package/skills/site-architecture/references/navigation-patterns.md +305 -0
  610. package/skills/site-architecture/references/site-type-templates.md +293 -0
  611. package/skills/skill-self-improvement/SKILL.md +151 -0
  612. package/skills/slideshow-script/SKILL.md +274 -0
  613. package/skills/slideshow-script/references/content-spec-schema.md +77 -0
  614. package/skills/slideshow-script/references/frameworks.md +84 -0
  615. package/skills/slideshow-script/references/paips-framework.md +37 -0
  616. package/skills/social-campaign/SKILL.md +419 -0
  617. package/skills/social-campaign/references/paper-mcp-workflow.md +48 -0
  618. package/skills/social-content/SKILL.md +359 -0
  619. package/skills/social-content/evals/evals.json +92 -0
  620. package/skills/social-content/references/platforms.md +170 -0
  621. package/skills/social-content/references/post-templates.md +177 -0
  622. package/skills/social-content/references/reverse-engineering.md +195 -0
  623. package/skills/social-worker/SKILL.md +204 -0
  624. package/skills/startup-launcher/SKILL.md +252 -0
  625. package/skills/startup-launcher/references/file-router.md +64 -0
  626. package/skills/startup-launcher/references/platform-matrix.md +65 -0
  627. package/skills/startup-launcher/references/platforms/alternativeto.md +283 -0
  628. package/skills/startup-launcher/references/platforms/appsumo.md +495 -0
  629. package/skills/startup-launcher/references/platforms/auraplusplus.md +736 -0
  630. package/skills/startup-launcher/references/platforms/betalist.md +98 -0
  631. package/skills/startup-launcher/references/platforms/capterra.md +276 -0
  632. package/skills/startup-launcher/references/platforms/crunchbase.md +514 -0
  633. package/skills/startup-launcher/references/platforms/dealify.md +291 -0
  634. package/skills/startup-launcher/references/platforms/dealmirror.md +313 -0
  635. package/skills/startup-launcher/references/platforms/desifounder.md +490 -0
  636. package/skills/startup-launcher/references/platforms/devhunt.md +210 -0
  637. package/skills/startup-launcher/references/platforms/devpost.md +448 -0
  638. package/skills/startup-launcher/references/platforms/fazier.md +56 -0
  639. package/skills/startup-launcher/references/platforms/firsto.md +489 -0
  640. package/skills/startup-launcher/references/platforms/g2.md +226 -0
  641. package/skills/startup-launcher/references/platforms/hackernews.md +99 -0
  642. package/skills/startup-launcher/references/platforms/hackernoon.md +385 -0
  643. package/skills/startup-launcher/references/platforms/indiedeals.md +367 -0
  644. package/skills/startup-launcher/references/platforms/indiehackers.md +80 -0
  645. package/skills/startup-launcher/references/platforms/kenmoo.md +231 -0
  646. package/skills/startup-launcher/references/platforms/labstartups.md +618 -0
  647. package/skills/startup-launcher/references/platforms/launchboard.md +307 -0
  648. package/skills/startup-launcher/references/platforms/launchfast.md +560 -0
  649. package/skills/startup-launcher/references/platforms/launchigniter.md +56 -0
  650. package/skills/startup-launcher/references/platforms/launchingnext.md +674 -0
  651. package/skills/startup-launcher/references/platforms/launchit.md +574 -0
  652. package/skills/startup-launcher/references/platforms/launchyourapp.md +677 -0
  653. package/skills/startup-launcher/references/platforms/libhunt.md +220 -0
  654. package/skills/startup-launcher/references/platforms/ltdhunt.md +221 -0
  655. package/skills/startup-launcher/references/platforms/microlaunch.md +45 -0
  656. package/skills/startup-launcher/references/platforms/openalternative.md +195 -0
  657. package/skills/startup-launcher/references/platforms/peerlist.md +56 -0
  658. package/skills/startup-launcher/references/platforms/peerpush.md +64 -0
  659. package/skills/startup-launcher/references/platforms/primeclub.md +282 -0
  660. package/skills/startup-launcher/references/platforms/productcanyon.md +190 -0
  661. package/skills/startup-launcher/references/platforms/producthunt.md +98 -0
  662. package/skills/startup-launcher/references/platforms/rankinpublic.md +315 -0
  663. package/skills/startup-launcher/references/platforms/rockethub.md +374 -0
  664. package/skills/startup-launcher/references/platforms/saasgenius.md +175 -0
  665. package/skills/startup-launcher/references/platforms/saashub.md +205 -0
  666. package/skills/startup-launcher/references/platforms/saasmantra.md +221 -0
  667. package/skills/startup-launcher/references/platforms/saaspirate.md +287 -0
  668. package/skills/startup-launcher/references/platforms/saaswarrior.md +190 -0
  669. package/skills/startup-launcher/references/platforms/saaszilla.md +194 -0
  670. package/skills/startup-launcher/references/platforms/selected.md +925 -0
  671. package/skills/startup-launcher/references/platforms/sideprojectors.md +86 -0
  672. package/skills/startup-launcher/references/platforms/softonic.md +240 -0
  673. package/skills/startup-launcher/references/platforms/sourceforge.md +251 -0
  674. package/skills/startup-launcher/references/platforms/stacksocial.md +244 -0
  675. package/skills/startup-launcher/references/platforms/startupstash.md +326 -0
  676. package/skills/startup-launcher/references/platforms/theresanaiforthat.md +253 -0
  677. package/skills/startup-launcher/references/platforms/tinylaunch.md +70 -0
  678. package/skills/startup-launcher/references/platforms/tinystartups.md +72 -0
  679. package/skills/startup-launcher/references/platforms/toolfolio.md +291 -0
  680. package/skills/startup-launcher/references/platforms/trustmrr.md +194 -0
  681. package/skills/startup-launcher/references/platforms/trylaunch.md +531 -0
  682. package/skills/startup-launcher/references/platforms/uneed.md +57 -0
  683. package/skills/startup-launcher/references/templates/asset-checklist.md +218 -0
  684. package/skills/startup-launcher/references/templates/launch-tracker.md +195 -0
  685. package/skills/startup-launcher/references/templates/product-brief.md +98 -0
  686. package/skills/summarize/.skill-meta.json +13 -0
  687. package/skills/summarize/SKILL.md +170 -0
  688. package/skills/summarize/rules/install.md +157 -0
  689. package/skills/summarize/rules/usage.md +207 -0
  690. package/skills/topical-authority/SKILL.md +307 -0
  691. package/skills/topical-authority/references/jake-ward-framework.md +201 -0
  692. package/skills/topical-authority/references/serp-clustering-algorithm.md +325 -0
  693. package/skills/topical-authority/scripts/orchestrator.js +367 -0
  694. package/skills/topical-authority/scripts/seo/analyze-competitor-coverage.js +3 -0
  695. package/skills/topical-authority/scripts/seo/audit-internal-links.js +3 -0
  696. package/skills/topical-authority/scripts/seo/build-clusters-from-serp.js +3 -0
  697. package/skills/topical-authority/scripts/seo/extract-keywords-from-forums.js +3 -0
  698. package/skills/topical-authority/scripts/seo/extract-paa-questions.js +3 -0
  699. package/skills/topical-authority/scripts/seo/fetch-serp-urls.js +3 -0
  700. package/skills/topical-authority/scripts/seo/gemini-serp-clustering.js +3 -0
  701. package/skills/topical-authority/scripts/seo/identify-content-gaps.js +3 -0
  702. package/skills/topical-authority/scripts/seo/identify-research-gaps.js +3 -0
  703. package/skills/topical-authority/scripts/seo/scrape-quora-questions.js +3 -0
  704. package/skills/topical-authority/scripts/seo/scrape-reddit-pain-points.js +3 -0
  705. package/skills/topical-authority/scripts/seo/weave-internal-links.js +3 -0
  706. package/skills/visual-style/SKILL.md +199 -0
  707. package/skills/voice-brand-alignment/SKILL.md +70 -0
  708. package/skills/voice-brand-alignment/references/ai-slop-patterns.md +405 -0
  709. package/skills/voice-brand-alignment/scripts/validation/gemini-voice-validator.js +96 -0
  710. package/skills/voice-extraction/SKILL.md +234 -0
  711. package/skills/voice-extraction/references/extraction-prompt.md +155 -0
  712. package/skills/voice-extraction/references/voice-dna-template.md +168 -0
  713. package/skills/voice-extraction/references/voice-elements.md +259 -0
  714. package/skills/voice-extraction/scripts/build-corpus.js +120 -0
  715. package/skills/voice-extraction/scripts/collect-sources.sh +168 -0
  716. package/skills/warm-outbound/SKILL.md +299 -0
  717. package/skills/warm-outbound/templates/warm-message.md +39 -0
  718. package/skills/weekly-newsletter-digest/SKILL.md +78 -0
  719. package/skills/x-playwriter/SKILL.md +428 -0
  720. package/skills/x-playwriter/scripts/x-browser.js +185 -0
  721. package/skills/x-post-generator-openclaw/SKILL.md +138 -0
  722. package/skills/x-post-generator-openclaw/scripts/generate-x-post.js +537 -0
  723. package/skills/x-posting-playwriter/SKILL.md +203 -0
  724. package/skills/x-research/SKILL.md +129 -0
  725. package/skills/x-research/x-research.sh +85 -0
  726. package/skills/youtube-summarize/SKILL.md +90 -0
  727. package/skills/youtube-summarize/scripts/youtube-summarize.sh +143 -0
  728. package/src/cli.js +347 -172
  729. package/src/harness/deepseek-adapter.js +102 -0
  730. package/src/harness/deepseek.js +225 -0
  731. package/src/harness/opencode-adapter.js +174 -0
  732. package/src/harness/pi-adapter.js +172 -0
  733. package/src/harness/registry.js +121 -0
  734. package/src/harness/telemetry.js +102 -0
  735. package/src/harness/types.js +165 -0
  736. package/src/interview.js +36 -4
  737. package/src/postinstall.js +10 -12
  738. package/templates/AGENTS.md +17 -17
  739. package/templates/ORG.md +1 -1
  740. package/templates/TOOLS.md +7 -2
  741. package/templates/opencode.json +26 -29
  742. package/wiki/doctor.md +54 -0
  743. package/wiki/inkstone.md +4 -4
  744. package/wiki/opencode.md +3 -3
  745. 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>