@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,722 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Unified Hook Generator v3.0 (Haiku + Sonnet + Ralph)
4
+ *
5
+ * NEW 3-Step System:
6
+ * - Step 1: Claude Haiku 4.5 generates 50 hooks (85-90/100 baseline, zero AI slop)
7
+ * - Step 2: Sonnet scores and selects top 3 (10-dimensional scoring)
8
+ * - Step 3: Ralph enhancement improves to 90-95/100 (iterative teaching-based improvement)
9
+ *
10
+ * Quality Improvement: +7-10 points per hook (85/100 → 92/100 average)
11
+ *
12
+ * Generates platform-optimized hooks using:
13
+ * - Platform-specific example databases (20+ proven hooks each)
14
+ * - Gemini CLI for heavy lifting (40x cost savings)
15
+ * - Pattern recognition and scoring
16
+ * - Volume mode: Generate 50 hooks, Claude auto-selects top 3, Ralph enhances
17
+ * - Hybrid selector: Auto-detects API key or Claude Code environment
18
+ *
19
+ * Hybrid Scoring:
20
+ * - Has API key: Uses Anthropic API for scoring
21
+ * - No API key: Creates scoring request for manual handling
22
+ * - Works in both standalone and Claude Code environments
23
+ *
24
+ * Usage:
25
+ * Standard mode (3 hooks, Gemini only, no enhancement):
26
+ * node generate-hooks-unified.js \
27
+ * --content "path/to/blog.md" \
28
+ * --platform twitter \
29
+ * --brand linkedgraphix.app \
30
+ * --count 3
31
+ *
32
+ * Volume mode v3.0 (50 hooks + Sonnet selection + Ralph enhancement → 90-95/100):
33
+ * node generate-hooks-unified.js \
34
+ * --content "path/to/blog.md" \
35
+ * --platform twitter \
36
+ * --brand linkedgraphix.app \
37
+ * --count 50 \
38
+ * --volume
39
+ *
40
+ * Volume mode with Gemini override (lower quality, cheaper):
41
+ * node generate-hooks-unified.js \
42
+ * --content "path/to/blog.md" \
43
+ * --platform twitter \
44
+ * --brand linkedgraphix.app \
45
+ * --count 50 \
46
+ * --volume \
47
+ * --model gemini-2.0-flash-exp
48
+ *
49
+ * Environment:
50
+ * ANTHROPIC_API_KEY - Required for Ralph enhancement and Sonnet selection
51
+ * Without key: Creates scoring request for manual processing
52
+ *
53
+ * Output: JSON with scored, ranked, and enhanced hooks (v3.0)
54
+ */
55
+
56
+ const fs = require('fs');
57
+ const path = require('path');
58
+ const { spawn, execSync } = require('child_process');
59
+
60
+ // Load environment variables from .env (4 levels up from /scripts/)
61
+ require('dotenv').config({ path: path.join(__dirname, '../../../../.env') });
62
+
63
+ // Parse command line arguments
64
+ function parseArgs() {
65
+ const args = process.argv.slice(2);
66
+ const options = {};
67
+
68
+ for (let i = 0; i < args.length; i++) {
69
+ if (args[i].startsWith('--')) {
70
+ const key = args[i].slice(2);
71
+ const value = args[i + 1];
72
+ options[key] = value;
73
+ i++;
74
+ }
75
+ }
76
+
77
+ return options;
78
+ }
79
+
80
+ // Niche-to-brand mapping for automatic niche detection
81
+ const BRAND_NICHE_MAP = {
82
+ 'enchantents': 'enchantents-glamping',
83
+ 'nomadixgear': 'enchantents-glamping',
84
+ 'nomadix': 'enchantents-glamping',
85
+ 'aiwithjai': 'ai-agents',
86
+ 'aiwithjai': 'ai-agents',
87
+ 'linkedgraphix': 'ai-agents',
88
+ 'clawver': 'ai-agents',
89
+ };
90
+
91
+ // Load platform-specific hook database, with optional niche filtering
92
+ function loadPlatformHooks(platform, niche = null) {
93
+ const dbPath = path.join(__dirname, '../database', `${platform}-hooks.json`);
94
+
95
+ if (!fs.existsSync(dbPath)) {
96
+ throw new Error(`Hook database not found for platform: ${platform}`);
97
+ }
98
+
99
+ const db = JSON.parse(fs.readFileSync(dbPath, 'utf8'));
100
+ console.log(` āœ“ Loaded ${db.examples.length} ${platform} hook examples`);
101
+
102
+ if (niche) {
103
+ const nicheExamples = db.examples.filter(e => e.niche === niche);
104
+ const generalExamples = db.examples.filter(e => !e.niche);
105
+
106
+ if (nicheExamples.length > 0) {
107
+ db.examples = [...nicheExamples, ...generalExamples];
108
+ console.log(` āœ“ Prioritized ${nicheExamples.length} ${niche} hooks (${generalExamples.length} general as fallback)`);
109
+ } else {
110
+ console.log(` ⚠ No hooks found for niche "${niche}", using all ${db.examples.length} examples`);
111
+ }
112
+ }
113
+
114
+ return db;
115
+ }
116
+
117
+ // Read content from file or string
118
+ function readContent(contentPath) {
119
+ if (fs.existsSync(contentPath)) {
120
+ return fs.readFileSync(contentPath, 'utf8');
121
+ }
122
+ return contentPath; // Treat as direct content string
123
+ }
124
+
125
+ // Extract content elements for hook generation
126
+ function extractContentElements(content) {
127
+ console.log(` Extracting content elements...`);
128
+
129
+ // Simple extraction (Gemini will do the heavy lifting)
130
+ const elements = {
131
+ // Numbers/data
132
+ numbers: (content.match(/\d+(?:,\d+)*(?:\.\d+)?(?:%|K|M|B)?/g) || []).slice(0, 10),
133
+
134
+ // Timeframes
135
+ timeframes: (content.match(/\d+\s+(?:second|minute|hour|day|week|month|year)s?/gi) || []).slice(0, 5),
136
+
137
+ // Quotes (rough extraction)
138
+ quotes: (content.match(/"([^"]+)"/g) || []).slice(0, 3),
139
+
140
+ // First 500 chars for context
141
+ context: content.substring(0, 500)
142
+ };
143
+
144
+ console.log(` āœ“ Found ${elements.numbers.length} numbers, ${elements.timeframes.length} timeframes`);
145
+
146
+ return elements;
147
+ }
148
+
149
+ // Generate hooks using Gemini CLI
150
+ async function generateHooksWithGemini(platform, hookDatabase, content, elements, count) {
151
+ console.log(` Generating ${count} hooks via Gemini CLI...`);
152
+
153
+ // Select top examples to show Gemini (5-7 examples)
154
+ const exampleCount = Math.min(7, hookDatabase.examples.length);
155
+ const examples = hookDatabase.examples.slice(0, exampleCount);
156
+
157
+ // Build prompt for Gemini
158
+ const prompt = `
159
+ You are a ${platform.toUpperCase()} hook generation expert.
160
+
161
+ Study these ${exampleCount} PROVEN high-performing ${platform} hooks:
162
+
163
+ ${examples.map((ex, i) => `
164
+ EXAMPLE ${i + 1}:
165
+ Hook: ${typeof ex.hook === 'string' ? ex.hook : JSON.stringify(ex.hook)}
166
+ Engagement: ${JSON.stringify(ex.engagement)}
167
+ Why it works: ${ex.why_it_works}
168
+ Pattern: ${ex.pattern}
169
+ `).join('\n')}
170
+
171
+ ${platform === 'linkedin' ? `
172
+ CRITICAL: Use first-person witness style like "I watched [person] do [thing]..."
173
+ NOT third-person reporter style like "[Person] did [thing]..."
174
+ ` : ''}
175
+
176
+ ${platform === 'twitter' ? `
177
+ CRITICAL: Use conversational, punchy style with short lines and white space.
178
+ NOT information overload with everything crammed into one sentence.
179
+ ` : ''}
180
+
181
+ CONTENT TO CREATE HOOKS FROM:
182
+ ${content.substring(0, 1500)}
183
+
184
+ EXTRACTED ELEMENTS:
185
+ - Numbers: ${elements.numbers.join(', ')}
186
+ - Timeframes: ${elements.timeframes.join(', ')}
187
+ - Context: ${elements.context}
188
+
189
+ TASK:
190
+ Generate ${count} hooks using the SAME PATTERNS as the proven examples above.
191
+
192
+ For each hook, provide:
193
+ 1. hook_text: The actual hook (follow platform style from examples)
194
+ 2. pattern: Which example pattern it follows
195
+ 3. why_it_works: Specific reason this hook will perform
196
+ 4. estimated_score: 0-100 (based on pattern match + specificity + curiosity gap)
197
+ 5. similar_to_example: Which example number (1-${exampleCount}) it's most similar to
198
+
199
+ OUTPUT AS JSON:
200
+ {
201
+ "hooks": [
202
+ {
203
+ "hook_text": "...",
204
+ "pattern": "...",
205
+ "why_it_works": "...",
206
+ "estimated_score": 85,
207
+ "similar_to_example": 1
208
+ }
209
+ ]
210
+ }
211
+ `;
212
+
213
+ return new Promise((resolve, reject) => {
214
+ let output = '';
215
+ let errorOutput = '';
216
+
217
+ // Write prompt to temp file
218
+ const tmpFile = path.join('/tmp', `hook-prompt-${Date.now()}.txt`);
219
+ fs.writeFileSync(tmpFile, prompt);
220
+
221
+ const gemini = spawn('gemini', ['-o', 'json', '-p', prompt], {
222
+ cwd: process.cwd()
223
+ });
224
+
225
+ gemini.stdout.on('data', (data) => {
226
+ output += data.toString();
227
+ });
228
+
229
+ gemini.stderr.on('data', (data) => {
230
+ errorOutput += data.toString();
231
+ });
232
+
233
+ gemini.on('close', (code) => {
234
+ if (code !== 0) {
235
+ console.error(` āœ— Gemini CLI error: ${errorOutput}`);
236
+ reject(new Error(`Gemini CLI failed with code ${code}`));
237
+ return;
238
+ }
239
+
240
+ try {
241
+ // Parse Gemini CLI JSON output (wrapper format)
242
+ const cliOutput = JSON.parse(output);
243
+
244
+ // Extract response field (contains markdown with JSON)
245
+ let responseText = cliOutput.response || output;
246
+
247
+ // Remove markdown code blocks if present
248
+ responseText = responseText.replace(/^```json\s*/i, '').replace(/^```\s*/, '').replace(/\s*```$/, '');
249
+
250
+ // Try to find JSON object with hooks array
251
+ const jsonMatch = responseText.match(/\{[\s\S]*\}/);
252
+ if (jsonMatch) {
253
+ const result = JSON.parse(jsonMatch[0]);
254
+ if (result.hooks && Array.isArray(result.hooks)) {
255
+ console.log(` āœ“ Generated ${result.hooks.length} hooks`);
256
+ resolve(result.hooks);
257
+ return;
258
+ }
259
+ }
260
+
261
+ // Fallback: try to parse as JSON array directly
262
+ const arrayMatch = responseText.match(/\[[\s\S]*\]/);
263
+ if (arrayMatch) {
264
+ const hooks = JSON.parse(arrayMatch[0]);
265
+ console.log(` āœ“ Generated ${hooks.length} hooks`);
266
+ resolve(hooks);
267
+ return;
268
+ }
269
+
270
+ throw new Error('No valid JSON with hooks array found in Gemini output');
271
+ } catch (err) {
272
+ console.error(` āœ— Failed to parse Gemini output: ${err.message}`);
273
+ console.error(` Raw output length: ${output.length}`);
274
+ reject(err);
275
+ }
276
+ });
277
+ });
278
+ }
279
+
280
+ // Score and rank hooks
281
+ function scoreAndRankHooks(hooks, platform) {
282
+ console.log(` Scoring and ranking hooks...`);
283
+
284
+ // Sort by estimated_score (descending)
285
+ const ranked = hooks.sort((a, b) => b.estimated_score - a.estimated_score);
286
+
287
+ console.log(` āœ“ Top hook: ${ranked[0].estimated_score}/100`);
288
+
289
+ return ranked;
290
+ }
291
+
292
+ // ============================================================================
293
+ // VOLUME MODE FUNCTIONS
294
+ // ============================================================================
295
+
296
+ /**
297
+ * Generate 50+ hooks using volume-hook-generator.js or volume-hook-generator-haiku.js
298
+ */
299
+ async function generateVolumeHooks(contentPath, platform, brand, count, model) {
300
+ console.log(`\n šŸ”„ VOLUME MODE: Generating ${count} hooks with ${model}...`);
301
+
302
+ // Read content to extract topic
303
+ const content = readContent(contentPath);
304
+ const topic = extractTopic(content);
305
+
306
+ console.log(` šŸ“ Extracted topic: ${topic}\n`);
307
+
308
+ // Determine which generator to use based on model
309
+ // Default to Haiku for quality, allow Gemini override
310
+ const useHaikuAgent = model === 'claude-haiku' || model === 'default' || !model.includes('gemini');
311
+
312
+ const volumeGeneratorPath = useHaikuAgent
313
+ ? path.join(process.cwd(), 'scripts/hooks/volume-hook-generator-haiku.js')
314
+ : path.join(process.cwd(), 'scripts/hooks/volume-hook-generator.js');
315
+
316
+ const generatorName = useHaikuAgent ? 'Claude Haiku' : 'Gemini';
317
+
318
+ console.log(` šŸ¤– Using ${generatorName} for generation`);
319
+
320
+ if (useHaikuAgent) {
321
+ console.log(` šŸ’” Zero AI slop, higher quality, 4x cost\n`);
322
+ } else {
323
+ console.log(` šŸ’” Fast and cheap, may have AI slop\n`);
324
+ }
325
+
326
+ const outputFile = path.join('/tmp', `volume-hooks-${Date.now()}.json`);
327
+
328
+ try {
329
+ // Build command
330
+ const baseCmd = `node "${volumeGeneratorPath}" --topic "${topic}" --platform ${platform} --brand ${brand} --count ${count} --output "${outputFile}"`;
331
+ const command = useHaikuAgent ? baseCmd : `${baseCmd} --model ${model}`;
332
+
333
+ execSync(command, {
334
+ stdio: 'inherit',
335
+ encoding: 'utf-8'
336
+ });
337
+
338
+ // Read generated hooks
339
+ const hooksData = JSON.parse(fs.readFileSync(outputFile, 'utf-8'));
340
+ return { hooksData, outputFile };
341
+
342
+ } catch (error) {
343
+ throw new Error(`Volume generation failed: ${error.message}`);
344
+ }
345
+ }
346
+
347
+ /**
348
+ * Generate 50 hooks using hook-writer-master agent (Claude Haiku 4.5)
349
+ * Fallback: Direct Anthropic API if agent unavailable
350
+ */
351
+ async function generateVolumeHooksWithAgent(content, platform, brand, count) {
352
+ console.log(`\n šŸ¤– Volume generation with hook-writer-master agent (Haiku 4.5)...\n`);
353
+
354
+ const { invokeHookWriter } = require(path.join(process.cwd(), 'scripts/validation/invoke-hook-writer-agent.js'));
355
+
356
+ const prompt = `Generate ${count} scroll-stopping hooks for ${platform}.
357
+
358
+ Content to extract hooks from:
359
+ ${content.substring(0, 1500)}
360
+
361
+ Requirements:
362
+ - Platform: ${platform}
363
+ - Brand: ${brand}
364
+ - Count: ${count}
365
+ - Use 10 proven hook formulas
366
+ - Zero AI slop
367
+
368
+ CRITICAL: Return ONLY a valid JSON array with this exact structure, NO explanation text:
369
+ [
370
+ {"hook": "hook text here", "formula": "formula name", "rationale": "why it works"},
371
+ {"hook": "hook text here", "formula": "formula name", "rationale": "why it works"}
372
+ ]
373
+
374
+ Do not include any text before or after the JSON array. Start with [ and end with ].`;
375
+
376
+ try {
377
+ // Try agent first
378
+ const result = await invokeHookWriter(prompt, {
379
+ timeout: 120000,
380
+ model: 'haiku',
381
+ verbose: false
382
+ });
383
+
384
+ if (result) {
385
+ // Extract JSON from response (may have markdown code blocks or explanation text)
386
+ let jsonText = result.trim();
387
+
388
+ // Remove markdown code blocks if present
389
+ jsonText = jsonText.replace(/^```json\s*/i, '').replace(/^```\s*/, '').replace(/\s*```$/, '');
390
+
391
+ // Try to find JSON array in the text
392
+ const arrayMatch = jsonText.match(/\[[\s\S]*\]/);
393
+ if (arrayMatch) {
394
+ jsonText = arrayMatch[0];
395
+ }
396
+
397
+ const hooks = JSON.parse(jsonText);
398
+ console.log(` āœ“ Agent generated ${hooks.length} hooks\n`);
399
+ return { hooks, method: 'agent' };
400
+ }
401
+ } catch (err) {
402
+ console.log(` āš ļø Agent failed: ${err.message}`);
403
+ console.log(` ↪ Falling back to direct API...\n`);
404
+ }
405
+
406
+ // Fallback: Direct Anthropic API
407
+ console.log(` šŸ”„ Using direct Anthropic API as fallback...\n`);
408
+
409
+ const Anthropic = require('@anthropic-ai/sdk');
410
+ const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
411
+
412
+ const message = await anthropic.messages.create({
413
+ model: 'claude-3-5-haiku-20241022',
414
+ max_tokens: 4096,
415
+ messages: [{ role: 'user', content: prompt }]
416
+ });
417
+
418
+ // Extract JSON from response
419
+ let jsonText = message.content[0].text.trim();
420
+ jsonText = jsonText.replace(/^```json\s*/i, '').replace(/^```\s*/, '').replace(/\s*```$/, '');
421
+ const arrayMatch = jsonText.match(/\[[\s\S]*\]/);
422
+ if (arrayMatch) {
423
+ jsonText = arrayMatch[0];
424
+ }
425
+
426
+ const hooks = JSON.parse(jsonText);
427
+ console.log(` āœ“ API generated ${hooks.length} hooks\n`);
428
+ return { hooks, method: 'api' };
429
+ }
430
+
431
+ /**
432
+ * Select top 3 hooks using Claude via claude-hook-selector.js (Hybrid)
433
+ *
434
+ * The hybrid selector auto-detects environment:
435
+ * - If API key available: uses Anthropic API
436
+ * - If no API key: outputs scoring request for manual handling
437
+ */
438
+ async function selectTopHooksWithClaude(hooksFile, platform, brand, topCount = 3) {
439
+ console.log(`\n šŸ¤– Selecting top ${topCount} hooks with Claude (Hybrid)...\n`);
440
+
441
+ const selectorPath = path.join(
442
+ process.cwd(),
443
+ 'scripts/hooks/claude-hook-selector.js'
444
+ );
445
+
446
+ const outputFile = path.join('/tmp', `selected-hooks-${Date.now()}.json`);
447
+
448
+ try {
449
+ // Pass ANTHROPIC_API_KEY if available
450
+ const envVars = { ...process.env };
451
+
452
+ const command = `node "${selectorPath}" \
453
+ --hooks-file "${hooksFile}" \
454
+ --platform ${platform} \
455
+ --brand ${brand} \
456
+ --top-count ${topCount} \
457
+ --output "${outputFile}"`;
458
+
459
+ execSync(command, {
460
+ stdio: 'inherit',
461
+ encoding: 'utf-8',
462
+ env: envVars
463
+ });
464
+
465
+ // Check if output file exists (API method succeeded)
466
+ if (fs.existsSync(outputFile)) {
467
+ const selectionData = JSON.parse(fs.readFileSync(outputFile, 'utf-8'));
468
+ return selectionData;
469
+ }
470
+
471
+ // Check for request file (Agent method - needs manual handling)
472
+ const requestFile = outputFile.replace('.json', '-request.json');
473
+ if (fs.existsSync(requestFile)) {
474
+ console.log(`\n āš ļø Hybrid selector created scoring request (no API key)`);
475
+ console.log(` šŸ“„ Request file: ${requestFile}`);
476
+ console.log(`\n šŸ’” To complete: Set ANTHROPIC_API_KEY or run in Claude Code with Task tool\n`);
477
+
478
+ throw new Error('Scoring request created - manual intervention needed. See request file: ' + requestFile);
479
+ }
480
+
481
+ throw new Error('No output file or request file found');
482
+
483
+ } catch (error) {
484
+ throw new Error(`Claude selection failed: ${error.message}`);
485
+ }
486
+ }
487
+
488
+ /**
489
+ * Extract topic from content (first heading or first sentence)
490
+ */
491
+ function extractTopic(content) {
492
+ // Try to find first H1 heading
493
+ const h1Match = content.match(/^#\s+(.+)$/m);
494
+ if (h1Match) {
495
+ return h1Match[1].trim();
496
+ }
497
+
498
+ // Try first sentence
499
+ const firstSentence = content.split(/[.!?]/)[0].trim();
500
+ if (firstSentence && firstSentence.length < 150) {
501
+ return firstSentence;
502
+ }
503
+
504
+ // Fallback to first 100 characters
505
+ return content.substring(0, 100).replace(/\n/g, ' ').trim();
506
+ }
507
+
508
+ /**
509
+ * Convert volume mode hooks to unified format
510
+ */
511
+ function convertVolumeHooksToUnifiedFormat(topHooks) {
512
+ return topHooks.map(hook => ({
513
+ hook_text: hook.hook,
514
+ pattern: hook.pattern || 'volume_generated',
515
+ why_it_works: hook.selection_reasoning || 'Claude selected as top performer',
516
+ estimated_score: hook.total_score,
517
+ dimension_scores: hook.dimension_scores,
518
+ strengths: hook.strengths || [],
519
+ weaknesses: hook.weaknesses || [],
520
+ primary_emotion: hook.primary_emotion || 'unknown'
521
+ }));
522
+ }
523
+
524
+ // Main execution
525
+ async function main() {
526
+ const options = parseArgs();
527
+
528
+ // Validate required options
529
+ if (!options.content || !options.platform) {
530
+ console.error('Usage: node generate-hooks-unified.js --content <path> --platform <platform> [--brand <brand>] [--niche <niche>] [--count <number>] [--volume] [--model <model>]');
531
+ process.exit(1);
532
+ }
533
+
534
+ const {
535
+ content: contentPath,
536
+ platform,
537
+ brand = 'default',
538
+ count = 3,
539
+ volume = false,
540
+ model = 'claude-haiku',
541
+ niche = null
542
+ } = options;
543
+
544
+ const resolvedNiche = niche || BRAND_NICHE_MAP[brand.toLowerCase()] || null;
545
+
546
+ // Determine mode
547
+ const isVolumeMode = volume === 'true' || volume === true || parseInt(count) >= 20;
548
+
549
+ console.log('\n═══════════════════════════════════════════════════════');
550
+ console.log(`šŸŽÆ Unified Hook Generator v3.0 ${isVolumeMode ? '- VOLUME MODE (Haiku + Sonnet + Ralph)' : ''}`);
551
+ console.log('═══════════════════════════════════════════════════════\n');
552
+ console.log(` Platform: ${platform}`);
553
+ console.log(` Brand: ${brand}`);
554
+ console.log(` Niche: ${resolvedNiche || 'auto-detect'}`);
555
+ console.log(` Hooks to generate: ${count}`);
556
+ console.log(` Mode: ${isVolumeMode ? 'Volume (50 hooks → Claude selects top 3)' : 'Standard (Gemini generates count)'}`);
557
+ if (isVolumeMode) {
558
+ console.log(` Model: ${model}`);
559
+ }
560
+ console.log('');
561
+
562
+ try {
563
+ let rankedHooks;
564
+
565
+ if (isVolumeMode) {
566
+ // ===================================================================
567
+ // VOLUME MODE: Generate 50, Claude selects top 3
568
+ // ===================================================================
569
+
570
+ const useHaikuAgent = model === 'claude-haiku' || model === 'default' || !model.includes('gemini');
571
+ const generatorName = useHaikuAgent ? 'Claude Haiku (Agent)' : 'Gemini';
572
+
573
+ console.log(' šŸ”„ Volume Mode Activated\n');
574
+ console.log(` Step 1: Generate ${count} hooks with ${generatorName}`);
575
+ console.log(` Step 2: Sonnet scores all ${count} hooks`);
576
+ console.log(` Step 3: Ralph enhancement → 90-95/100\n`);
577
+
578
+ let hooksData, outputFile;
579
+
580
+ // Step 1: Generate volume hooks
581
+ if (useHaikuAgent) {
582
+ // Use Haiku agent invocation (primary for v3.0)
583
+ const content = readContent(contentPath);
584
+ const { hooks, method } = await generateVolumeHooksWithAgent(content, platform, brand, parseInt(count));
585
+
586
+ // Save to temp file for selector
587
+ outputFile = path.join('/tmp', `volume-hooks-${Date.now()}.json`);
588
+ hooksData = { hooks };
589
+ fs.writeFileSync(outputFile, JSON.stringify(hooksData, null, 2));
590
+
591
+ console.log(` āœ“ Generated ${hooks.length} hooks via ${method}`);
592
+ } else {
593
+ // Use Gemini volume generator (fallback)
594
+ const result = await generateVolumeHooks(
595
+ contentPath,
596
+ platform,
597
+ brand,
598
+ parseInt(count),
599
+ model
600
+ );
601
+ hooksData = result.hooksData;
602
+ outputFile = result.outputFile;
603
+ console.log(` āœ“ Generated ${hooksData.hooks.length} hooks`);
604
+ }
605
+
606
+ // Step 2 & 3: Claude selection
607
+ const selectionResult = await selectTopHooksWithClaude(
608
+ outputFile,
609
+ platform,
610
+ brand,
611
+ 3 // Always return top 3
612
+ );
613
+
614
+ console.log(` āœ“ Selected top ${selectionResult.top_hooks.length} hooks\n`);
615
+
616
+ // Convert to unified format
617
+ rankedHooks = convertVolumeHooksToUnifiedFormat(selectionResult.top_hooks);
618
+
619
+ } else {
620
+ // ===================================================================
621
+ // STANDARD MODE: Original behavior (3 hooks)
622
+ // ===================================================================
623
+
624
+ // 1. Load platform hook database
625
+ const hookDatabase = loadPlatformHooks(platform, resolvedNiche);
626
+
627
+ // 2. Read content
628
+ const content = readContent(contentPath);
629
+ console.log(` āœ“ Loaded content (${content.length} chars)\n`);
630
+
631
+ // 3. Extract elements
632
+ const elements = extractContentElements(content);
633
+
634
+ // 4. Generate hooks with Gemini CLI
635
+ const hooks = await generateHooksWithGemini(platform, hookDatabase, content, elements, parseInt(count));
636
+
637
+ // 5. Score and rank
638
+ rankedHooks = scoreAndRankHooks(hooks, platform);
639
+ }
640
+
641
+ // ===================================================================
642
+ // STEP 3: RALPH ENHANCEMENT (NEW)
643
+ // ===================================================================
644
+
645
+ if (isVolumeMode) {
646
+ console.log('\n šŸŽØ Step 3: Ralph Enhancement...\n');
647
+
648
+ const { enhanceHookBatch } = require('./ralph-hook-enhancer.js');
649
+
650
+ const enhancedHooks = await enhanceHookBatch(
651
+ rankedHooks.slice(0, 3), // Top 3 from Sonnet
652
+ platform,
653
+ brand,
654
+ 85 // Target score (realistic: 75-85/100 is excellent)
655
+ );
656
+
657
+ console.log(` āœ“ Enhanced ${enhancedHooks.length} hooks\n`);
658
+
659
+ // Replace rankedHooks with enhanced versions
660
+ rankedHooks = enhancedHooks;
661
+ }
662
+
663
+ // ===================================================================
664
+ // OUTPUT RESULTS (same for both modes)
665
+ // ===================================================================
666
+
667
+ console.log('\n═══════════════════════════════════════════════════════');
668
+ console.log('āœ… Hook Generation Complete');
669
+ console.log('═══════════════════════════════════════════════════════\n');
670
+
671
+ rankedHooks.forEach((hook, i) => {
672
+ console.log(`HOOK ${i + 1} (Score: ${hook.estimated_score}/100):`);
673
+ console.log(`"${hook.hook_text}"`);
674
+ console.log(`Pattern: ${hook.pattern}`);
675
+ console.log(`Why it works: ${hook.why_it_works}`);
676
+
677
+ // Show enhancement info if available
678
+ if (hook.enhanced) {
679
+ console.log(`Enhanced: ${hook.iterations} iterations`);
680
+ console.log(`Improvement: +${hook.improvement_delta} points`);
681
+ }
682
+
683
+ // Volume mode shows additional details
684
+ if (isVolumeMode && hook.dimension_scores) {
685
+ console.log(`Dimension scores:`);
686
+ Object.entries(hook.dimension_scores).forEach(([dim, score]) => {
687
+ console.log(` - ${dim}: ${score}`);
688
+ });
689
+ if (hook.strengths && hook.strengths.length > 0) {
690
+ console.log(`Strengths: ${hook.strengths.join(', ')}`);
691
+ }
692
+ } else if (hook.similar_to_example) {
693
+ console.log(`Similar to example: #${hook.similar_to_example}`);
694
+ }
695
+
696
+ console.log('');
697
+ });
698
+
699
+ // Output JSON for programmatic use
700
+ console.log('JSON OUTPUT:');
701
+ console.log(JSON.stringify({
702
+ hooks: rankedHooks,
703
+ platform,
704
+ brand,
705
+ mode: isVolumeMode ? 'volume' : 'standard'
706
+ }, null, 2));
707
+
708
+ } catch (error) {
709
+ console.error(`\nāŒ Error: ${error.message}`);
710
+ if (error.stack) {
711
+ console.error(error.stack);
712
+ }
713
+ process.exit(1);
714
+ }
715
+ }
716
+
717
+ // Run if called directly
718
+ if (require.main === module) {
719
+ main();
720
+ }
721
+
722
+ module.exports = { generateHooksWithGemini, loadPlatformHooks };