@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.
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 +349 -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,864 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Ralph Hook Enhancer - Hook-specific Quality Enhancement
4
+ *
5
+ * Enhances social media hooks from 85-88/100 to 90-95/100 using Ralph methodology.
6
+ * Adapted from ralph-quality-scorer.js for hook-specific optimization.
7
+ *
8
+ * Key Features:
9
+ * - 10-dimensional scoring (adapted for hooks)
10
+ * - Targeted improvement prompts (weak dimensions only)
11
+ * - Iterative enhancement (max 3 iterations, early stopping)
12
+ * - Pattern teaching (explain WHY hooks work)
13
+ * - Voice preservation (strong dimensions protected)
14
+ *
15
+ * Usage:
16
+ * const { enhanceHook, enhanceHookBatch } = require('./ralph-hook-enhancer.js');
17
+ * const enhanced = await enhanceHook(hook, platform, brand, 90);
18
+ */
19
+
20
+ const fs = require('fs');
21
+ const path = require('path');
22
+ const { spawn } = require('child_process');
23
+
24
+ // Load environment variables from .env
25
+ require('dotenv').config({ path: path.join(__dirname, '../../../../.env') });
26
+
27
+ /**
28
+ * Hook-specific dimension weights (adapted from Ralph's reader engagement weights)
29
+ *
30
+ * Hook Effectiveness is CRITICAL (lose reader in 0.3 seconds) = 40% weight
31
+ * Voice Authenticity prevents AI slop = 20% weight
32
+ * Specificity creates credibility = 15% weight
33
+ * Emotion drives sharing = 10% weight
34
+ * Pattern Recognition ensures proven formulas = 10% weight
35
+ * Platform Optimization matches culture = 5% weight
36
+ */
37
+ const HOOK_DIMENSION_WEIGHTS = {
38
+ 'Hook Effectiveness': 0.40, // CRITICAL: Stops scrolling in 0.3 seconds
39
+ 'Voice Authenticity': 0.20, // HIGH: Sounds like real person, not AI
40
+ 'Specificity': 0.15, // MEDIUM: Concrete details vs vague claims
41
+ 'Emotion Strength': 0.10, // MEDIUM: Single clear emotion at 7+/10
42
+ 'Pattern Recognition': 0.10, // MEDIUM: Uses proven formulas
43
+ 'Platform Optimization': 0.05 // LOW: Platform-specific format
44
+ };
45
+
46
+ /**
47
+ * Score hook using Sonnet API (same system as Step 2 selection)
48
+ * This ensures consistency between selection and enhancement scoring
49
+ *
50
+ * @param {string} hookText - The hook to score
51
+ * @param {string} platform - Platform (twitter, linkedin, etc.)
52
+ * @param {string} brand - Brand identifier
53
+ * @returns {Promise<object>} - { compositeScore, dimensionScores, tier }
54
+ */
55
+ async function scoreHook(hookText, platform, brand) {
56
+ const Anthropic = require('@anthropic-ai/sdk');
57
+
58
+ if (!process.env.ANTHROPIC_API_KEY) {
59
+ console.warn(`⚠️ ANTHROPIC_API_KEY not set, using heuristic scoring`);
60
+ return {
61
+ compositeScore: 75,
62
+ dimensionScores: {
63
+ 'Hook Effectiveness': 7.5,
64
+ 'Voice Authenticity': 7.5,
65
+ 'Specificity': 7.5,
66
+ 'Emotion Strength': 7.5,
67
+ 'Pattern Recognition': 7.5,
68
+ 'Platform Optimization': 7.5
69
+ },
70
+ tier: 'ACCEPTABLE'
71
+ };
72
+ }
73
+
74
+ try {
75
+ const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
76
+
77
+ const scoringPrompt = `Score this ${platform} hook across 6 dimensions using the EXACT same criteria as the hook selector.
78
+
79
+ HOOK TO SCORE:
80
+ "${hookText}"
81
+
82
+ SCORING CRITERIA (Total: 100 points):
83
+
84
+ 1. Hook Effectiveness (40 points max)
85
+ - 0.3 second stop test - Interrupts scroll immediately?
86
+ - Strong curiosity gap - Demands clicking/reading more?
87
+ - Clear value in first 5 words - Benefit obvious fast?
88
+
89
+ 2. Specificity (20 points max)
90
+ - Exact numbers (47 tasks, $12/month) NOT ranges
91
+ - Specific timeframes (3 hours, 2 weeks) NOT "quickly"
92
+ - Named tools/techniques NOT "methods"
93
+
94
+ 3. Emotion Strength (15 points max)
95
+ - Single clear emotion: surprise, awe, relief, opportunity
96
+ - Emotion strength 7+/10
97
+ - Appropriate for content
98
+
99
+ 4. Voice Authenticity (15 points max)
100
+ - Zero AI clichés: "imagine", "unlock", "discover", "transform", "game-changing"
101
+ - Natural conversational tone
102
+ - Sounds like real person
103
+
104
+ 5. Trending Alignment (5 points max)
105
+ - Uses current proven patterns
106
+ - Not stale 2020 formulas
107
+
108
+ 6. Platform Optimization (5 points max)
109
+ - Within character limit (${platform === 'twitter' ? '280' : '500'} chars)
110
+ - Mobile-first readable
111
+ - Platform-appropriate tone
112
+
113
+ Return ONLY valid JSON (no explanation):
114
+ {
115
+ "total_score": 82,
116
+ "dimension_scores": {
117
+ "hookEffectiveness": 35,
118
+ "specificity": 18,
119
+ "emotionStrength": 12,
120
+ "voiceAuthenticity": 13,
121
+ "trendingAlignment": 4,
122
+ "platformOptimization": 5
123
+ }
124
+ }`;
125
+
126
+ const message = await anthropic.messages.create({
127
+ model: 'claude-sonnet-4-20250514',
128
+ max_tokens: 400,
129
+ temperature: 0,
130
+ messages: [{ role: 'user', content: scoringPrompt }]
131
+ });
132
+
133
+ // Extract JSON
134
+ let jsonText = message.content[0].text.trim();
135
+ jsonText = jsonText.replace(/^```json\s*/i, '').replace(/^```\s*/, '').replace(/\s*```$/, '');
136
+ const jsonMatch = jsonText.match(/\{[\s\S]*\}/);
137
+ if (jsonMatch) jsonText = jsonMatch[0];
138
+
139
+ const result = JSON.parse(jsonText);
140
+
141
+ // Normalize to 10-point scale for display
142
+ const dimensionScores = {
143
+ 'Hook Effectiveness': (result.dimension_scores.hookEffectiveness || 0) / 4,
144
+ 'Voice Authenticity': (result.dimension_scores.voiceAuthenticity || 0) / 1.5,
145
+ 'Specificity': (result.dimension_scores.specificity || 0) / 2,
146
+ 'Emotion Strength': (result.dimension_scores.emotionStrength || 0) / 1.5,
147
+ 'Pattern Recognition': (result.dimension_scores.trendingAlignment || 0) / 0.5,
148
+ 'Platform Optimization': (result.dimension_scores.platformOptimization || 0) / 0.5
149
+ };
150
+
151
+ const compositeScore = result.total_score;
152
+
153
+ const tier =
154
+ compositeScore >= 90 ? 'EXCELLENT' :
155
+ compositeScore >= 80 ? 'STRONG' :
156
+ compositeScore >= 70 ? 'ACCEPTABLE' : 'NEEDS IMPROVEMENT';
157
+
158
+ return { compositeScore, dimensionScores, tier };
159
+
160
+ } catch (err) {
161
+ console.warn(`⚠️ Sonnet scoring failed: ${err.message}`);
162
+ return {
163
+ compositeScore: 75,
164
+ dimensionScores: {
165
+ 'Hook Effectiveness': 7.5,
166
+ 'Voice Authenticity': 7.5,
167
+ 'Specificity': 7.5,
168
+ 'Emotion Strength': 7.5,
169
+ 'Pattern Recognition': 7.5,
170
+ 'Platform Optimization': 7.5
171
+ },
172
+ tier: 'ACCEPTABLE'
173
+ };
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Score Hook Effectiveness: Stops scrolling in 0.3 seconds?
179
+ */
180
+ function scoreHookEffectiveness(hookText, platform) {
181
+ let score = 5.0; // Baseline
182
+
183
+ // Word count: <10 words = +2 points (Twitter), <15 words = +1 (LinkedIn)
184
+ const wordCount = hookText.split(/\s+/).length;
185
+ if (platform === 'twitter' && wordCount <= 10) score += 2;
186
+ else if (wordCount <= 15) score += 1;
187
+
188
+ // Contains specific numbers/metrics = +1.5 points
189
+ if (/\d+(?:,\d+)*(?:\.\d+)?(?:%|K|M|B)?/.test(hookText)) score += 1.5;
190
+
191
+ // Creates curiosity gap (question, incomplete statement, "Here's what", etc.) = +1.5 points
192
+ if (/\?|Here's what|What happened|Why|How/.test(hookText)) score += 1.5;
193
+
194
+ return Math.min(10, score);
195
+ }
196
+
197
+ /**
198
+ * Score Voice Authenticity: Sounds like real person? Zero AI clichés?
199
+ */
200
+ function scoreVoiceAuthenticity(hookText, brand) {
201
+ let score = 10.0; // Start perfect, subtract for AI slop
202
+
203
+ // AI clichés detection (each -2 points)
204
+ const aiCliches = [
205
+ /ever-evolving/i,
206
+ /game-changer/i,
207
+ /revolutionary/i,
208
+ /delve into/i,
209
+ /leverage/i,
210
+ /robust/i,
211
+ /seamless/i,
212
+ /imagine\s+this/i,
213
+ /picture\s+this/i,
214
+ /in\s+conclusion/i
215
+ ];
216
+
217
+ aiCliches.forEach(pattern => {
218
+ if (pattern.test(hookText)) score -= 2;
219
+ });
220
+
221
+ // Generic openings (each -1 point)
222
+ if (/^Most people think/i.test(hookText)) score -= 1;
223
+ if (/^Have you ever/i.test(hookText)) score -= 1;
224
+ if (/^In today's world/i.test(hookText)) score -= 1;
225
+
226
+ return Math.max(0, score);
227
+ }
228
+
229
+ /**
230
+ * Score Specificity: Concrete details vs vague claims
231
+ */
232
+ function scoreSpecificity(hookText) {
233
+ let score = 5.0; // Baseline
234
+
235
+ // Contains specific numbers = +2 points
236
+ if (/\d+/.test(hookText)) score += 2;
237
+
238
+ // Contains timeframes (48 hours, 2 weeks, etc.) = +1.5 points
239
+ if (/\d+\s+(?:second|minute|hour|day|week|month|year)s?/i.test(hookText)) score += 1.5;
240
+
241
+ // Contains proper nouns (capitalized words, tool names) = +1.5 points
242
+ if (/[A-Z][a-z]+/.test(hookText)) score += 1.5;
243
+
244
+ return Math.min(10, score);
245
+ }
246
+
247
+ /**
248
+ * Score Emotion Strength: Single clear emotion at 7+/10
249
+ */
250
+ function scoreEmotionStrength(hookText) {
251
+ let score = 5.0; // Baseline
252
+
253
+ // High-arousal positive emotions (awe, excitement, surprise)
254
+ const positiveEmotions = [
255
+ /shocking/i,
256
+ /surprising/i,
257
+ /amazing/i,
258
+ /incredible/i,
259
+ /powerful/i,
260
+ /explosive/i
261
+ ];
262
+
263
+ positiveEmotions.forEach(pattern => {
264
+ if (pattern.test(hookText)) score += 2;
265
+ });
266
+
267
+ // Urgency/FOMO emotions
268
+ if (/before|after|miss|lose|gain|win/.test(hookText)) score += 1.5;
269
+
270
+ return Math.min(10, score);
271
+ }
272
+
273
+ /**
274
+ * Score Pattern Recognition: Uses proven formulas
275
+ */
276
+ function scorePatternRecognition(hookText) {
277
+ let score = 5.0; // Baseline
278
+
279
+ // Contrarian pattern (Most X, but actually Y) = +3 points
280
+ if (/Most.*but|think.*wrong|believe.*actually/i.test(hookText)) score += 3;
281
+
282
+ // First-person witness (I watched, I saw) = +2.5 points
283
+ if (/I watched|I saw|I built|I discovered/i.test(hookText)) score += 2.5;
284
+
285
+ // Transformation pattern (From X to Y, Before/After) = +2 points
286
+ if (/from.*to|before.*after|went from/i.test(hookText)) score += 2;
287
+
288
+ return Math.min(10, score);
289
+ }
290
+
291
+ /**
292
+ * Score Platform Optimization: Follows platform culture
293
+ */
294
+ function scorePlatformOptimization(hookText, platform) {
295
+ let score = 7.0; // Baseline (most hooks are platform-agnostic)
296
+
297
+ if (platform === 'twitter') {
298
+ // Twitter: Conversational, short, punchy
299
+ if (hookText.split(/\s+/).length <= 10) score += 1.5;
300
+ if (/\.\.\./.test(hookText)) score += 1.5; // Ellipsis creates pause
301
+ } else if (platform === 'linkedin') {
302
+ // LinkedIn: Professional, first-person, authority
303
+ if (/I\s+/.test(hookText)) score += 1.5; // First-person
304
+ if (/\d+%|\d+x|\$\d+/.test(hookText)) score += 1.5; // Business metrics
305
+ }
306
+
307
+ return Math.min(10, score);
308
+ }
309
+
310
+ /**
311
+ * Generate improvement prompt for weak dimensions
312
+ *
313
+ * Based on ralph-quality-scorer.js:generateImprovementPrompt (lines 508-651)
314
+ * Adapted for hook-specific optimization
315
+ *
316
+ * @param {object} hookData - { hook, scores, platform, brand }
317
+ * @param {number} targetScore - Target composite score (default: 90)
318
+ * @returns {string} - Improvement prompt
319
+ */
320
+ async function generateImprovementPrompt(hookData, targetScore = 90) {
321
+ const { hook, scores, platform, brand } = hookData;
322
+
323
+ // Identify weak dimensions (score < 7/10)
324
+ const weakDimensions = Object.entries(scores.dimensionScores)
325
+ .filter(([_, score]) => score < 7)
326
+ .sort(([dimA, scoreA], [dimB, scoreB]) => {
327
+ // Sort by weight first (high-impact dimensions prioritized)
328
+ const weightA = HOOK_DIMENSION_WEIGHTS[dimA] || 0;
329
+ const weightB = HOOK_DIMENSION_WEIGHTS[dimB] || 0;
330
+ if (weightA !== weightB) return weightB - weightA;
331
+ // Then by score (lowest first)
332
+ return scoreA - scoreB;
333
+ });
334
+
335
+ if (weakDimensions.length === 0) {
336
+ return null; // Hook already meets quality standards
337
+ }
338
+
339
+ let prompt = '';
340
+
341
+ // Section 1: Hook Quality Improvement - Teaching-Based Approach
342
+ prompt += '# Hook Quality Improvement - Teaching-Based Approach\n\n';
343
+ prompt += `**Target**: Composite quality score ≥${targetScore}/100\n`;
344
+ prompt += `**Current**: ${scores.compositeScore.toFixed(1)}/100 (${scores.tier})\n`;
345
+ prompt += `**Platform**: ${platform}\n`;
346
+ prompt += `**Brand**: ${brand}\n\n`;
347
+
348
+ // Section 2: Current Hook
349
+ prompt += '## Current Hook\n\n';
350
+ prompt += `"${hook}"\n\n`;
351
+
352
+ // Section 3: Load Banger Hook Options (if Hook Effectiveness weak)
353
+ const isHookWeak = weakDimensions.some(([dim]) => dim === 'Hook Effectiveness');
354
+ if (isHookWeak) {
355
+ const bangerHooks = await loadBangerHookOptions(platform);
356
+ if (bangerHooks && bangerHooks.length > 0) {
357
+ prompt += '## ✨ BANGER HOOK OPTIONS (9/10 Examples)\n\n';
358
+ prompt += 'Study these proven high-performing hooks and use their PATTERNS:\n\n';
359
+
360
+ bangerHooks.slice(0, 5).forEach((example, i) => {
361
+ prompt += `**Example ${i + 1}**: "${example.hook}"\n`;
362
+ prompt += `- Engagement: ${JSON.stringify(example.engagement)}\n`;
363
+ prompt += `- Pattern: ${example.pattern}\n`;
364
+ prompt += `- Why it works: ${example.why_it_works}\n\n`;
365
+ });
366
+ }
367
+ }
368
+
369
+ // Section 4: Weak Dimensions - What to Improve
370
+ prompt += '## Dimensions Needing Improvement\n\n';
371
+ prompt += `${weakDimensions.length} dimensions scored <7/10 and need improvement.\n\n`;
372
+
373
+ weakDimensions.forEach(([dimension, score], index) => {
374
+ prompt += `### ${index + 1}. ${dimension} (${score.toFixed(1)}/10 → Target: 7+/10)\n\n`;
375
+ prompt += getDimensionImprovementGuidance(dimension, platform);
376
+ prompt += '\n---\n\n';
377
+ });
378
+
379
+ // Section 5: Strong Dimensions - What to PRESERVE
380
+ const strongDimensions = Object.entries(scores.dimensionScores)
381
+ .filter(([_, score]) => score >= 7)
382
+ .sort(([_, scoreA], [__, scoreB]) => scoreB - scoreA);
383
+
384
+ if (strongDimensions.length > 0) {
385
+ prompt += '## 🚨 CRITICAL: Dimensions to PRESERVE (Do NOT Sacrifice These)\n\n';
386
+ prompt += `While fixing weak dimensions, you MUST maintain these ${strongDimensions.length} strong dimensions.\n\n`;
387
+
388
+ strongDimensions.forEach(([dimension, score], index) => {
389
+ prompt += `### ${index + 1}. ${dimension}: ${score.toFixed(1)}/10 ✅\n\n`;
390
+ prompt += getPreservationGuidance(dimension);
391
+ prompt += '\n---\n\n';
392
+ });
393
+ }
394
+
395
+ // Section 6: Pattern Teaching - WHY These Patterns Work
396
+ prompt += '## Understanding WHY These Patterns Work\n\n';
397
+ prompt += generatePatternTeaching(weakDimensions.map(([dim]) => dim));
398
+ prompt += '\n\n';
399
+
400
+ // Section 7: Critical Rules - No AI Slop
401
+ prompt += '## Critical Rules - Do NOT Introduce New AI Slop\n\n';
402
+ prompt += '**NEVER use these AI slop phrases in hooks**:\n';
403
+ prompt += '- "ever-evolving", "game-changer", "revolutionary", "delve into"\n';
404
+ prompt += '- "leverage", "robust", "seamless", "imagine this", "picture this"\n';
405
+ prompt += '- "Most people think...", "Have you ever...", "In today\'s world..."\n\n';
406
+
407
+ prompt += '**Quality Check**:\n';
408
+ prompt += '- Is it specific? (numbers, names, timeframes)\n';
409
+ prompt += '- Is it conversational? (sounds human, not corporate)\n';
410
+ prompt += '- Does it create curiosity gap? (makes reader want more)\n';
411
+ prompt += '- Is it <15 words? (Twitter: <10 words ideal)\n\n';
412
+
413
+ // Section 8: Implementation Instructions
414
+ prompt += '## Implementation Instructions\n\n';
415
+ prompt += '1. Study the banger hook examples above\n';
416
+ prompt += '2. Identify which pattern fits the content best\n';
417
+ prompt += '3. Apply transformation to fix weak dimensions\n';
418
+ prompt += '4. Preserve strong dimensions (don\'t break what works)\n';
419
+ prompt += '5. Output ONLY the improved hook (no explanation)\n\n';
420
+
421
+ return prompt;
422
+ }
423
+
424
+ /**
425
+ * Get dimension-specific improvement guidance
426
+ */
427
+ function getDimensionImprovementGuidance(dimension, platform) {
428
+ const guidance = {
429
+ 'Hook Effectiveness': `**What 9/10 looks like**:
430
+ - "I watched Kip build an AI app live. Under 10 minutes. 16 viral talking points from ONE video."
431
+ - "Most marketers think SEO is dead. $2.4M in organic traffic later, here's what actually works:"
432
+ - "You don't need 10 tools. You need these 3 APIs."
433
+
434
+ **How to improve**:
435
+ - Use specific numbers (not "a lot", use "47 hours")
436
+ - Create curiosity gap ("Here's what happened", incomplete statement)
437
+ - Keep it SHORT: ${platform === 'twitter' ? '<10 words' : '<15 words'}
438
+ - Start with contrarian belief or first-person witness`,
439
+
440
+ 'Voice Authenticity': `**What 9/10 sounds like**:
441
+ - "I broke the LinkedIn algorithm. 450K views in 72 hours. Zero paid ads."
442
+ - "Most creators burn out. I automated 80% of my workflow. Here's the system:"
443
+
444
+ **How to improve**:
445
+ - Remove AI clichés ("game-changer", "revolutionary", "leverage")
446
+ - Don't use "Most people think..." (overused pattern)
447
+ - Sound conversational, like explaining to a friend
448
+ - Use contractions ("you're" not "you are")`,
449
+
450
+ 'Specificity': `**What 9/10 looks like**:
451
+ - "I analyzed 1,247 viral tweets. 3 patterns appeared in 94% of them."
452
+ - "Claude Code + Playwright + 15 minutes = Full e2e test suite."
453
+
454
+ **How to improve**:
455
+ - Replace vague words with exact numbers ("many" → "147")
456
+ - Add timeframes ("quickly" → "in 48 hours")
457
+ - Use proper nouns ("automation tool" → "Zapier")
458
+ - Include metrics (%, $, x, hours, etc.)`,
459
+
460
+ 'Emotion Strength': `**What 9/10 looks like**:
461
+ - "This is POWERFUL. I built a $10K/mo SaaS in 3 weekends."
462
+ - "I was shocked. One API call replaced 6 hours of manual work."
463
+
464
+ **How to improve**:
465
+ - Choose ONE clear emotion (excitement, surprise, awe)
466
+ - Use high-arousal words (shocking, powerful, explosive)
467
+ - Add urgency/FOMO (before, after, miss, gain)
468
+ - Avoid neutral/flat language`,
469
+
470
+ 'Pattern Recognition': `**What 9/10 looks like**:
471
+ - Contrarian: "Most X think Y. That's wrong. Here's Z:"
472
+ - Witness: "I watched [person] do [thing]. [Surprising result]."
473
+ - Transformation: "I went from X to Y in [timeframe]."
474
+
475
+ **How to improve**:
476
+ - Use proven formulas (contrarian, witness, transformation)
477
+ - Don't invent new patterns (stick to what works)
478
+ - Match pattern to content (contrarian for belief shift, witness for case study)`,
479
+
480
+ 'Platform Optimization': `**What 9/10 looks like (${platform})**:
481
+ ${platform === 'twitter' ? `- "10 years of SEO experience. 3 lessons that matter:"
482
+ - "You're doing content marketing wrong. Here's why:"
483
+ - Short, punchy, conversational` : ''}
484
+ ${platform === 'linkedin' ? `- "I watched 50 founders build in public. The ones who succeeded had 3 things in common:"
485
+ - "After analyzing $2.4M in ad spend, here's what I learned:"
486
+ - Professional, first-person, authority-driven` : ''}
487
+
488
+ **How to improve**:
489
+ ${platform === 'twitter' ? '- Keep it ultra-short (<10 words)\n- Use ellipsis (...) for pause\n- Conversational tone' : ''}
490
+ ${platform === 'linkedin' ? '- Use first-person ("I")\n- Include business metrics ($, %, x)\n- Professional but approachable' : ''}`
491
+ };
492
+
493
+ return guidance[dimension] || '';
494
+ }
495
+
496
+ /**
497
+ * Get preservation guidance for strong dimensions
498
+ */
499
+ function getPreservationGuidance(dimension) {
500
+ const guides = {
501
+ 'Hook Effectiveness': `**How to preserve**:
502
+ - Keep the curiosity gap mechanism
503
+ - Don't add filler words
504
+ - Maintain word count`,
505
+
506
+ 'Voice Authenticity': `**How to preserve**:
507
+ - Keep conversational tone
508
+ - Don't add corporate language
509
+ - Preserve contractions and natural flow`,
510
+
511
+ 'Specificity': `**How to preserve**:
512
+ - Keep all current numbers and metrics
513
+ - Don't replace specifics with vague terms
514
+ - Maintain timeframes and proper nouns`,
515
+
516
+ 'Emotion Strength': `**How to preserve**:
517
+ - Keep high-arousal language
518
+ - Don't tone down excitement
519
+ - Maintain emotional intensity`,
520
+
521
+ 'Pattern Recognition': `**How to preserve**:
522
+ - Keep the proven formula structure
523
+ - Don't break the pattern
524
+ - Maintain contrarian/witness/transformation setup`,
525
+
526
+ 'Platform Optimization': `**How to preserve**:
527
+ - Keep platform-specific formatting
528
+ - Don't change tone for wrong platform
529
+ - Maintain cultural fit`
530
+ };
531
+
532
+ return guides[dimension] || '';
533
+ }
534
+
535
+ /**
536
+ * Generate pattern teaching section
537
+ */
538
+ function generatePatternTeaching(weakDimensionNames) {
539
+ let teaching = '';
540
+
541
+ const patterns = {
542
+ 'Hook Effectiveness': {
543
+ why: 'Brain has 0.3-second attention window on social media. Curiosity gap creates cognitive tension that MUST be resolved.',
544
+ pattern: 'Specific number + curiosity gap + short form = reader keeps reading',
545
+ research: 'Neuroscience: Information gaps trigger dopamine release when resolved'
546
+ },
547
+ 'Voice Authenticity': {
548
+ why: 'AI slop signals "not worth reading" to brain. Authentic voice builds trust and connection.',
549
+ pattern: 'Conversational tone + zero clichés + natural language = sounds like friend, not corporation',
550
+ research: 'Psychology: People trust conversational content 2.3x more than formal writing'
551
+ },
552
+ 'Specificity': {
553
+ why: 'Concrete language processed 2x faster, 30% more memorable than abstract.',
554
+ pattern: 'Exact number + specific timeframe + proper noun = credibility and recall',
555
+ research: 'Cognitive load theory: Tangible details reduce working memory demands'
556
+ },
557
+ 'Emotion Strength': {
558
+ why: 'High-arousal emotions activate sympathetic nervous system → action → sharing.',
559
+ pattern: 'Single clear emotion + high intensity (7+/10) + practical value = viral potential',
560
+ research: 'Jonah Berger (Wharton): High-arousal content shared 34% more'
561
+ },
562
+ 'Pattern Recognition': {
563
+ why: 'Proven formulas work because they exploit cognitive biases (contrarian = cognitive dissonance).',
564
+ pattern: 'Use tested formulas (contrarian, witness, transformation) = predictable engagement',
565
+ research: 'Copywriting: 80% of hook success comes from formula, 20% from execution'
566
+ },
567
+ 'Platform Optimization': {
568
+ why: 'Each platform has culture and norms. Mismatch signals "doesn\'t belong here".',
569
+ pattern: 'Match platform culture (Twitter conversational, LinkedIn professional) = higher engagement',
570
+ research: 'Social proof: Content that fits platform norms gets 40% more engagement'
571
+ }
572
+ };
573
+
574
+ weakDimensionNames.forEach(dimension => {
575
+ if (patterns[dimension]) {
576
+ const pattern = patterns[dimension];
577
+ teaching += `**${dimension}**:\n`;
578
+ teaching += `- WHY: ${pattern.why}\n`;
579
+ teaching += `- PATTERN: ${pattern.pattern}\n`;
580
+ teaching += `- RESEARCH: ${pattern.research}\n\n`;
581
+ }
582
+ });
583
+
584
+ return teaching;
585
+ }
586
+
587
+ /**
588
+ * Load banger hook options from platform database
589
+ */
590
+ async function loadBangerHookOptions(platform) {
591
+ const dbPath = path.join(__dirname, '../database', `${platform}-hooks.json`);
592
+
593
+ if (!fs.existsSync(dbPath)) {
594
+ return null;
595
+ }
596
+
597
+ try {
598
+ const db = JSON.parse(fs.readFileSync(dbPath, 'utf-8'));
599
+ return db.examples || null;
600
+ } catch (err) {
601
+ console.warn(`⚠️ Could not load banger hooks: ${err.message}`);
602
+ return null;
603
+ }
604
+ }
605
+
606
+ /**
607
+ * Improve hook using Claude Sonnet API
608
+ * (Much better than Gemini for maintaining quality and avoiding AI slop)
609
+ *
610
+ * @param {string} hook - Current hook text
611
+ * @param {string} improvementPrompt - Generated improvement prompt
612
+ * @returns {Promise<string|null>} - Improved hook or null on failure
613
+ */
614
+ async function improveHookWithSonnet(hook, improvementPrompt) {
615
+ const Anthropic = require('@anthropic-ai/sdk');
616
+
617
+ if (!process.env.ANTHROPIC_API_KEY) {
618
+ console.warn(`⚠️ ANTHROPIC_API_KEY not set, cannot improve hook`);
619
+ return null;
620
+ }
621
+
622
+ try {
623
+ const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
624
+
625
+ const combinedInput = `${improvementPrompt}\n\n# CURRENT HOOK TO IMPROVE\n\n"${hook}"\n\nCRITICAL: Return ONLY the improved hook as a single line. No explanation, no quotes, no prefix text. Just the hook itself.`;
626
+
627
+ const message = await anthropic.messages.create({
628
+ model: 'claude-sonnet-4-20250514', // Sonnet 4 for best quality rewriting
629
+ max_tokens: 200,
630
+ temperature: 0.7, // Some creativity for rewriting
631
+ messages: [{
632
+ role: 'user',
633
+ content: combinedInput
634
+ }]
635
+ });
636
+
637
+ // Extract just the hook
638
+ let improved = message.content[0].text.trim();
639
+ improved = improved.split('\n')[0]; // Take first line only
640
+ improved = improved.replace(/^["']|["']$/g, ''); // Remove quotes
641
+ improved = improved.replace(/^Improved hook:\s*/i, ''); // Remove prefix
642
+ improved = improved.trim();
643
+
644
+ // Validate improvement (must be different and reasonable length)
645
+ if (improved && improved !== hook && improved.length > 10 && improved.length < 280) {
646
+ return improved;
647
+ }
648
+
649
+ return null;
650
+
651
+ } catch (err) {
652
+ console.warn(`⚠️ Sonnet improvement failed: ${err.message}`);
653
+ return null;
654
+ }
655
+ }
656
+
657
+ /**
658
+ * Enhance single hook to target score
659
+ *
660
+ * @param {string} hook - Hook text to enhance
661
+ * @param {string} platform - Platform (twitter, linkedin, etc.)
662
+ * @param {string} brand - Brand identifier
663
+ * @param {number} targetScore - Target composite score (default: 90)
664
+ * @returns {Promise<object>} - { hook, score, iterations, dimensions }
665
+ */
666
+ async function enhanceHook(hook, platform, brand, targetScore = 90) {
667
+ const maxIterations = 3;
668
+ let currentHook = hook;
669
+ let iteration = 0;
670
+ let previousScore = 0;
671
+
672
+ console.log(` 🎨 Enhancing hook for ${platform}...`);
673
+ console.log(` Current: "${currentHook.substring(0, 60)}..."`);
674
+
675
+ for (iteration = 1; iteration <= maxIterations; iteration++) {
676
+ // Score current version
677
+ const scores = await scoreHook(currentHook, platform, brand);
678
+
679
+ console.log(` Iteration ${iteration}: ${scores.compositeScore.toFixed(1)}/100 (${scores.tier})`);
680
+
681
+ // Check if already good (75+) - don't touch it!
682
+ // Rationale: Hooks 75-85/100 are excellent. Rewriting often makes them worse.
683
+ if (iteration === 1 && scores.compositeScore >= 75) {
684
+ console.log(` ✅ Already excellent (${scores.compositeScore.toFixed(1)}/100) - skipping enhancement`);
685
+ return {
686
+ hook: currentHook,
687
+ score: scores.compositeScore,
688
+ iterations: 0,
689
+ dimensions: scores.dimensionScores,
690
+ enhanced: false,
691
+ improvement_delta: 0,
692
+ skip_reason: 'Already excellent quality'
693
+ };
694
+ }
695
+
696
+ // Check if target reached
697
+ if (scores.compositeScore >= targetScore) {
698
+ console.log(` ✅ Target reached! ${scores.compositeScore.toFixed(1)} ≥ ${targetScore}`);
699
+ return {
700
+ hook: currentHook,
701
+ score: scores.compositeScore,
702
+ iterations: iteration,
703
+ dimensions: scores.dimensionScores,
704
+ enhanced: true,
705
+ improvement_delta: scores.compositeScore - previousScore
706
+ };
707
+ }
708
+
709
+ // Early stopping: No improvement after 2 iterations
710
+ if (iteration > 1 && scores.compositeScore <= previousScore + 0.5) {
711
+ console.log(` 🛑 Early stop: No meaningful improvement`);
712
+ return {
713
+ hook: currentHook,
714
+ score: scores.compositeScore,
715
+ iterations: iteration,
716
+ dimensions: scores.dimensionScores,
717
+ enhanced: true,
718
+ improvement_delta: scores.compositeScore - previousScore
719
+ };
720
+ }
721
+
722
+ // Generate improvement prompt
723
+ const improvementPrompt = await generateImprovementPrompt({
724
+ hook: currentHook,
725
+ scores,
726
+ platform,
727
+ brand
728
+ }, targetScore);
729
+
730
+ if (!improvementPrompt) {
731
+ // No weak dimensions, hook is already good
732
+ return {
733
+ hook: currentHook,
734
+ score: scores.compositeScore,
735
+ iterations: iteration,
736
+ dimensions: scores.dimensionScores,
737
+ enhanced: false,
738
+ improvement_delta: 0
739
+ };
740
+ }
741
+
742
+ // Improve with Sonnet
743
+ const improvedHook = await improveHookWithSonnet(currentHook, improvementPrompt);
744
+
745
+ if (!improvedHook) {
746
+ console.log(` ⚠️ Improvement failed, returning current version`);
747
+ return {
748
+ hook: currentHook,
749
+ score: scores.compositeScore,
750
+ iterations: iteration,
751
+ dimensions: scores.dimensionScores,
752
+ enhanced: false,
753
+ improvement_delta: 0
754
+ };
755
+ }
756
+
757
+ previousScore = scores.compositeScore;
758
+ currentHook = improvedHook;
759
+ }
760
+
761
+ // Max iterations reached
762
+ const finalScores = await scoreHook(currentHook, platform, brand);
763
+ console.log(` ⏱️ Max iterations reached: ${finalScores.compositeScore.toFixed(1)}/100`);
764
+
765
+ return {
766
+ hook: currentHook,
767
+ score: finalScores.compositeScore,
768
+ iterations: maxIterations,
769
+ dimensions: finalScores.dimensionScores,
770
+ enhanced: true,
771
+ improvement_delta: finalScores.compositeScore - previousScore
772
+ };
773
+ }
774
+
775
+ /**
776
+ * Enhance batch of hooks (typically top 3 from Sonnet selection)
777
+ *
778
+ * @param {array} hooks - Array of hook objects from Sonnet selector
779
+ * @param {string} platform - Platform
780
+ * @param {string} brand - Brand
781
+ * @param {number} targetScore - Target score (default: 90)
782
+ * @returns {Promise<array>} - Enhanced hooks
783
+ */
784
+ async function enhanceHookBatch(hooks, platform, brand, targetScore = 90) {
785
+ const enhanced = [];
786
+
787
+ for (let i = 0; i < hooks.length; i++) {
788
+ const hook = hooks[i];
789
+ const hookText = hook.hook_text || hook.hook || hook;
790
+
791
+ console.log(`\n Hook ${i + 1}/${hooks.length}:`);
792
+
793
+ const result = await enhanceHook(hookText, platform, brand, targetScore);
794
+
795
+ // Merge with original hook data
796
+ enhanced.push({
797
+ ...hook,
798
+ hook_text: result.hook,
799
+ estimated_score: result.score,
800
+ enhanced: result.enhanced,
801
+ iterations: result.iterations,
802
+ improvement_delta: result.improvement_delta,
803
+ dimension_scores: result.dimensions
804
+ });
805
+ }
806
+
807
+ return enhanced;
808
+ }
809
+
810
+ /**
811
+ * CLI test function
812
+ */
813
+ async function testEnhancement() {
814
+ const args = process.argv.slice(2);
815
+ const options = {};
816
+
817
+ for (let i = 0; i < args.length; i++) {
818
+ if (args[i].startsWith('--')) {
819
+ const key = args[i].slice(2);
820
+ const value = args[i + 1];
821
+ options[key] = value;
822
+ i++;
823
+ }
824
+ }
825
+
826
+ const {
827
+ hook = "I watched Kip build an AI app in 10 minutes",
828
+ platform = "twitter",
829
+ brand = "ai.withjai",
830
+ target = 90
831
+ } = options;
832
+
833
+ console.log('\n=== Ralph Hook Enhancement Test ===\n');
834
+ console.log(`Hook: "${hook}"`);
835
+ console.log(`Platform: ${platform}`);
836
+ console.log(`Brand: ${brand}`);
837
+ console.log(`Target: ${target}/100\n`);
838
+
839
+ const result = await enhanceHook(hook, platform, brand, parseInt(target));
840
+
841
+ console.log('\n=== Results ===\n');
842
+ console.log(`Final hook: "${result.hook}"`);
843
+ console.log(`Score: ${result.score.toFixed(1)}/100`);
844
+ console.log(`Iterations: ${result.iterations}`);
845
+ console.log(`Improvement: +${result.improvement_delta.toFixed(1)} points`);
846
+ console.log(`Enhanced: ${result.enhanced}`);
847
+ console.log('\nDimension Scores:');
848
+ Object.entries(result.dimensions).forEach(([dim, score]) => {
849
+ console.log(` ${dim}: ${score.toFixed(1)}/10`);
850
+ });
851
+ }
852
+
853
+ // Export functions
854
+ module.exports = {
855
+ scoreHook,
856
+ generateImprovementPrompt,
857
+ enhanceHook,
858
+ enhanceHookBatch
859
+ };
860
+
861
+ // CLI execution
862
+ if (require.main === module) {
863
+ testEnhancement().catch(console.error);
864
+ }