@jairodri/huckleberry-cli 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (745) hide show
  1. package/README.md +85 -0
  2. package/agents/cos.json +2 -5
  3. package/agents/hermes/AGENTS.md +25 -49
  4. package/agents/hermes/fix-kimaki/SKILL.md +19 -92
  5. package/agents/hermes/hermes-fixer.md +44 -74
  6. package/agents/hermes.json +6 -18
  7. package/kanban/SKILL.md +18 -18
  8. package/kanban/package.json +1 -1
  9. package/kanban/src/dispatcher.mjs +1 -1
  10. package/kanban/templates/blog-social-campaign.yaml +6 -2
  11. package/kanban/templates/social-campaign.yaml +9 -4
  12. package/mcp/jev-calibration.mjs +335 -0
  13. package/mcp/jev-client.mjs +119 -0
  14. package/mcp/jev-thresholds.json +27 -0
  15. package/package.json +13 -9
  16. package/scripts/doctor-watchdog.sh +73 -0
  17. package/scripts/install-services.sh +34 -27
  18. package/scripts/self-improve-weekly.sh +34 -0
  19. package/scripts/sync-skills.mjs +121 -0
  20. package/skills/ab-test-setup/SKILL.md +266 -0
  21. package/skills/ab-test-setup/evals/evals.json +105 -0
  22. package/skills/ab-test-setup/references/sample-size-guide.md +263 -0
  23. package/skills/ab-test-setup/references/test-templates.md +277 -0
  24. package/skills/agent-reach/SKILL.md +132 -0
  25. package/skills/agent-reach/references/career.md +29 -0
  26. package/skills/agent-reach/references/dev.md +62 -0
  27. package/skills/agent-reach/references/search.md +33 -0
  28. package/skills/agent-reach/references/social.md +232 -0
  29. package/skills/agent-reach/references/video.md +130 -0
  30. package/skills/agent-reach/references/web.md +50 -0
  31. package/skills/ai-agent-seo/SKILL.md +450 -0
  32. package/skills/ai-cold-email-intelligence/SKILL.md +54 -0
  33. package/skills/ai-cold-email-intelligence/references/prompts.md +21 -0
  34. package/skills/ai-consensus-builder/SKILL.md +324 -0
  35. package/skills/ai-seo/SKILL.md +399 -0
  36. package/skills/ai-seo/evals/evals.json +90 -0
  37. package/skills/ai-seo/references/content-patterns.md +284 -0
  38. package/skills/ai-seo/references/platform-ranking-factors.md +152 -0
  39. package/skills/ai-visibility-audit/SKILL.md +322 -0
  40. package/skills/analytics-tracking/SKILL.md +309 -0
  41. package/skills/analytics-tracking/evals/evals.json +90 -0
  42. package/skills/analytics-tracking/references/event-library.md +260 -0
  43. package/skills/analytics-tracking/references/ga4-implementation.md +300 -0
  44. package/skills/analytics-tracking/references/gtm-implementation.md +390 -0
  45. package/skills/article-generator/SKILL.md +216 -0
  46. package/skills/auto-indexing/SKILL.md +179 -0
  47. package/skills/auto-indexing/scripts/auto-indexing.js +257 -0
  48. package/skills/auto-skill/SKILL.md +151 -0
  49. package/skills/auto-skill/correction-queue.js +102 -0
  50. package/skills/auto-skill/dedup.js +97 -0
  51. package/skills/auto-skill/skill-router.js +224 -0
  52. package/skills/autoresearch/SKILL.md +334 -0
  53. package/skills/autoresearch/autoresearch-autoresearch/SKILL.md.baseline +329 -0
  54. package/skills/autoresearch/autoresearch-autoresearch/changelog.md +34 -0
  55. package/skills/autoresearch/autoresearch-autoresearch/dashboard.html +116 -0
  56. package/skills/autoresearch/autoresearch-autoresearch/evals.md +39 -0
  57. package/skills/autoresearch/autoresearch-autoresearch/results.json +44 -0
  58. package/skills/autoresearch/autoresearch-autoresearch/results.tsv +3 -0
  59. package/skills/autoresearch/eval-guide.md +121 -0
  60. package/skills/b2b-cold-outreach/SKILL.md +322 -0
  61. package/skills/birdclaw/SKILL.md +82 -0
  62. package/skills/brainstorm/SKILL.md +168 -0
  63. package/skills/brand-kit-playground/SKILL.md +312 -0
  64. package/skills/brand-kit-playground/references/html-architecture.md +316 -0
  65. package/skills/brand-kit-playground/references/steal-patterns.md +88 -0
  66. package/skills/brand-voice/SKILL.md +223 -0
  67. package/skills/brand-voice/references/honesty-as-positioning.md +60 -0
  68. package/skills/brand-voice/references/voice-modes.md +1158 -0
  69. package/skills/business-advisory-council/README.md +136 -0
  70. package/skills/business-advisory-council/SKILL.md +94 -0
  71. package/skills/business-advisory-council/business-advisory-council.py +492 -0
  72. package/skills/business-advisory-council/discord-components-decision.json +8 -0
  73. package/skills/business-advisory-council/examples/steve-conley-partnership.json +6 -0
  74. package/skills/business-advisory-council/steve-conley-call-brief.json +6 -0
  75. package/skills/churn-prevention/SKILL.md +305 -0
  76. package/skills/churn-prevention/evals/evals.json +93 -0
  77. package/skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
  78. package/skills/churn-prevention/references/dunning-playbook.md +408 -0
  79. package/skills/claw-compactor/LICENSE +21 -0
  80. package/skills/claw-compactor/README.md +459 -0
  81. package/skills/claw-compactor/SKILL.md +329 -0
  82. package/skills/claw-compactor/benchmark/RESULTS.md +104 -0
  83. package/skills/claw-compactor/benchmark/__init__.py +1 -0
  84. package/skills/claw-compactor/benchmark/compressors.py +520 -0
  85. package/skills/claw-compactor/benchmark/data/sample_01_devops.json +82 -0
  86. package/skills/claw-compactor/benchmark/data/sample_02_trading.json +54 -0
  87. package/skills/claw-compactor/benchmark/data/sample_03_ml_short.json +38 -0
  88. package/skills/claw-compactor/benchmark/data/sample_04_mixed_long.json +318 -0
  89. package/skills/claw-compactor/benchmark/data/sample_05_sysadmin.json +56 -0
  90. package/skills/claw-compactor/benchmark/evaluate.py +278 -0
  91. package/skills/claw-compactor/benchmark/report.py +241 -0
  92. package/skills/claw-compactor/benchmark/results/benchmark_results.json +405 -0
  93. package/skills/claw-compactor/benchmark/run_benchmark.py +238 -0
  94. package/skills/claw-compactor/engram.yaml +49 -0
  95. package/skills/claw-compactor/proxy/README.md +87 -0
  96. package/skills/claw-compactor/proxy/dashboard.html +804 -0
  97. package/skills/claw-compactor/proxy/event-log.mjs +213 -0
  98. package/skills/claw-compactor/proxy/fair-queue.mjs +288 -0
  99. package/skills/claw-compactor/proxy/metrics-store.mjs +425 -0
  100. package/skills/claw-compactor/proxy/package-lock.json +125 -0
  101. package/skills/claw-compactor/proxy/package.json +15 -0
  102. package/skills/claw-compactor/proxy/portal.html +360 -0
  103. package/skills/claw-compactor/proxy/process-registry.mjs +447 -0
  104. package/skills/claw-compactor/proxy/rate-limiter.mjs +117 -0
  105. package/skills/claw-compactor/proxy/redis-client.mjs +75 -0
  106. package/skills/claw-compactor/proxy/retry.mjs +182 -0
  107. package/skills/claw-compactor/proxy/server.mjs +2100 -0
  108. package/skills/claw-compactor/proxy/session-affinity.mjs +177 -0
  109. package/skills/claw-compactor/proxy/start.sh +23 -0
  110. package/skills/claw-compactor/proxy/test/event-log.test.mjs +237 -0
  111. package/skills/claw-compactor/proxy/test/helpers.mjs +103 -0
  112. package/skills/claw-compactor/proxy/test/integration.test.mjs +297 -0
  113. package/skills/claw-compactor/proxy/test/metrics-store.test.mjs +243 -0
  114. package/skills/claw-compactor/proxy/test/process-registry.test.mjs +390 -0
  115. package/skills/claw-compactor/proxy/test/rate-limiter.test.mjs +121 -0
  116. package/skills/claw-compactor/proxy/test/redis-client.test.mjs +62 -0
  117. package/skills/claw-compactor/proxy/test/token-tracker.test.mjs +200 -0
  118. package/skills/claw-compactor/proxy/token-tracker.mjs +482 -0
  119. package/skills/claw-compactor/pyproject.toml +26 -0
  120. package/skills/claw-compactor/references/README.md +44 -0
  121. package/skills/claw-compactor/references/architecture.md +197 -0
  122. package/skills/claw-compactor/references/benchmarks.md +94 -0
  123. package/skills/claw-compactor/references/compression-prompts.md +39 -0
  124. package/skills/claw-compactor/references/compression-techniques.md +219 -0
  125. package/skills/claw-compactor/references/testing.md +160 -0
  126. package/skills/claw-compactor/scripts/audit_memory.py +216 -0
  127. package/skills/claw-compactor/scripts/compress_memory.py +236 -0
  128. package/skills/claw-compactor/scripts/compressed_context.py +280 -0
  129. package/skills/claw-compactor/scripts/dedup_memory.py +147 -0
  130. package/skills/claw-compactor/scripts/dictionary_compress.py +170 -0
  131. package/skills/claw-compactor/scripts/engram-auto.sh +152 -0
  132. package/skills/claw-compactor/scripts/engram_auto.py +695 -0
  133. package/skills/claw-compactor/scripts/engram_cli.py +474 -0
  134. package/skills/claw-compactor/scripts/estimate_tokens.py +131 -0
  135. package/skills/claw-compactor/scripts/generate_summary_tiers.py +292 -0
  136. package/skills/claw-compactor/scripts/lib/__init__.py +34 -0
  137. package/skills/claw-compactor/scripts/lib/config.py +289 -0
  138. package/skills/claw-compactor/scripts/lib/dedup.py +119 -0
  139. package/skills/claw-compactor/scripts/lib/dictionary.py +281 -0
  140. package/skills/claw-compactor/scripts/lib/engram.py +793 -0
  141. package/skills/claw-compactor/scripts/lib/engram_prompts.py +175 -0
  142. package/skills/claw-compactor/scripts/lib/engram_storage.py +254 -0
  143. package/skills/claw-compactor/scripts/lib/exceptions.py +24 -0
  144. package/skills/claw-compactor/scripts/lib/markdown.py +312 -0
  145. package/skills/claw-compactor/scripts/lib/rle.py +165 -0
  146. package/skills/claw-compactor/scripts/lib/tokenizer_optimizer.py +188 -0
  147. package/skills/claw-compactor/scripts/lib/tokens.py +68 -0
  148. package/skills/claw-compactor/scripts/mem_compress.py +788 -0
  149. package/skills/claw-compactor/scripts/observation_compressor.py +346 -0
  150. package/skills/claw-compactor/tests/__init__.py +0 -0
  151. package/skills/claw-compactor/tests/conftest.py +94 -0
  152. package/skills/claw-compactor/tests/test_audit_comprehensive.py +123 -0
  153. package/skills/claw-compactor/tests/test_audit_memory.py +67 -0
  154. package/skills/claw-compactor/tests/test_benchmark.py +122 -0
  155. package/skills/claw-compactor/tests/test_cli_commands.py +228 -0
  156. package/skills/claw-compactor/tests/test_compress_memory.py +109 -0
  157. package/skills/claw-compactor/tests/test_compress_memory_comprehensive.py +191 -0
  158. package/skills/claw-compactor/tests/test_compressed_context.py +145 -0
  159. package/skills/claw-compactor/tests/test_config.py +54 -0
  160. package/skills/claw-compactor/tests/test_dedup_memory.py +124 -0
  161. package/skills/claw-compactor/tests/test_dictionary.py +327 -0
  162. package/skills/claw-compactor/tests/test_dictionary_comprehensive.py +241 -0
  163. package/skills/claw-compactor/tests/test_engram.py +1091 -0
  164. package/skills/claw-compactor/tests/test_engram_auto.py +529 -0
  165. package/skills/claw-compactor/tests/test_error_handling.py +194 -0
  166. package/skills/claw-compactor/tests/test_estimate_tokens.py +99 -0
  167. package/skills/claw-compactor/tests/test_generate_summary_tiers.py +105 -0
  168. package/skills/claw-compactor/tests/test_integration.py +249 -0
  169. package/skills/claw-compactor/tests/test_lib_dedup.py +135 -0
  170. package/skills/claw-compactor/tests/test_lib_markdown.py +388 -0
  171. package/skills/claw-compactor/tests/test_lib_tokens.py +82 -0
  172. package/skills/claw-compactor/tests/test_main_entry.py +176 -0
  173. package/skills/claw-compactor/tests/test_markdown_advanced.py +284 -0
  174. package/skills/claw-compactor/tests/test_new_features.py +77 -0
  175. package/skills/claw-compactor/tests/test_observation_comprehensive.py +261 -0
  176. package/skills/claw-compactor/tests/test_observation_compressor.py +128 -0
  177. package/skills/claw-compactor/tests/test_performance.py +172 -0
  178. package/skills/claw-compactor/tests/test_pipeline.py +109 -0
  179. package/skills/claw-compactor/tests/test_real_workspace.py +161 -0
  180. package/skills/claw-compactor/tests/test_rle.py +114 -0
  181. package/skills/claw-compactor/tests/test_rle_comprehensive.py +151 -0
  182. package/skills/claw-compactor/tests/test_roundtrip.py +253 -0
  183. package/skills/claw-compactor/tests/test_roundtrip_comprehensive.py +192 -0
  184. package/skills/claw-compactor/tests/test_tiers_comprehensive.py +171 -0
  185. package/skills/claw-compactor/tests/test_token_economics.py +237 -0
  186. package/skills/claw-compactor/tests/test_tokenizer_optimizer.py +175 -0
  187. package/skills/claw-compactor/tests/test_tokenizer_optimizer_comprehensive.py +241 -0
  188. package/skills/claw-compactor/tests/test_tokens.py +27 -0
  189. package/skills/cmo/CHANGELOG.md +61 -0
  190. package/skills/cmo/SKILL.md +500 -0
  191. package/skills/cmo/references/ai-slop-patterns.md +56 -0
  192. package/skills/cmo/references/analytics-guide.md +152 -0
  193. package/skills/cmo/references/ideas-library.md +197 -0
  194. package/skills/cmo/rules/brand-file-map.md +198 -0
  195. package/skills/cmo/rules/brand-memory.md +158 -0
  196. package/skills/cmo/rules/cli-runtime-index.md +95 -0
  197. package/skills/cmo/rules/command-reference.md +167 -0
  198. package/skills/cmo/rules/communication.md +15 -0
  199. package/skills/cmo/rules/context-switch.md +101 -0
  200. package/skills/cmo/rules/ecosystem.md +125 -0
  201. package/skills/cmo/rules/error-recovery.md +98 -0
  202. package/skills/cmo/rules/learning-loop.md +170 -0
  203. package/skills/cmo/rules/monorepo.md +78 -0
  204. package/skills/cmo/rules/output-format.md +124 -0
  205. package/skills/cmo/rules/persona.md +15 -0
  206. package/skills/cmo/rules/playbooks.md +327 -0
  207. package/skills/cmo/rules/progressive-enhancement.md +231 -0
  208. package/skills/cmo/rules/publish-index.md +106 -0
  209. package/skills/cmo/rules/quality-gate.md +90 -0
  210. package/skills/cmo/rules/recency-grounding.md +124 -0
  211. package/skills/cmo/rules/safety.md +80 -0
  212. package/skills/cmo/rules/studio-api-index.md +138 -0
  213. package/skills/cmo/rules/studio-integration.md +147 -0
  214. package/skills/cmo/rules/sub-agents.md +167 -0
  215. package/skills/cold-email/SKILL.md +240 -0
  216. package/skills/cold-email/evals/evals.json +94 -0
  217. package/skills/cold-email/references/benchmarks.md +83 -0
  218. package/skills/cold-email/references/follow-up-sequences.md +81 -0
  219. package/skills/cold-email/references/frameworks.md +90 -0
  220. package/skills/cold-email/references/personalization.md +79 -0
  221. package/skills/cold-email/references/subject-lines.md +53 -0
  222. package/skills/competitive-intel/SKILL.md +433 -0
  223. package/skills/competitive-intel/references/competitive-frameworks.md +145 -0
  224. package/skills/competitor-alternatives/SKILL.md +362 -0
  225. package/skills/competitor-alternatives/evals/evals.json +93 -0
  226. package/skills/competitor-alternatives/references/content-architecture.md +271 -0
  227. package/skills/competitor-alternatives/references/templates.md +223 -0
  228. package/skills/concreteness-fixer/SKILL.md +483 -0
  229. package/skills/concreteness-fixer/scripts/validation/concreteness-validator.js +221 -0
  230. package/skills/concreteness-fixer/utils/execFileNoThrow.js +16 -0
  231. package/skills/content-atomizer/SKILL.md +424 -0
  232. package/skills/content-atomizer/references/hook-strategies.md +56 -0
  233. package/skills/content-atomizer/references/platform-specs.md +118 -0
  234. package/skills/content-atomizer/references/platforms/bluesky.md +64 -0
  235. package/skills/content-atomizer/references/platforms/instagram.md +77 -0
  236. package/skills/content-atomizer/references/platforms/linkedin.md +120 -0
  237. package/skills/content-atomizer/references/platforms/reddit.md +73 -0
  238. package/skills/content-atomizer/references/platforms/threads.md +64 -0
  239. package/skills/content-atomizer/references/platforms/tiktok.md +55 -0
  240. package/skills/content-atomizer/references/platforms/twitter.md +123 -0
  241. package/skills/content-atomizer/references/platforms/youtube.md +56 -0
  242. package/skills/content-atomizer/references/tweet-patterns.md +40 -0
  243. package/skills/content-repost-manager/SKILL.md +245 -0
  244. package/skills/content-repost-manager/scripts/content-repost-scan.py +133 -0
  245. package/skills/context-recovery/.clawdhub/origin.json +7 -0
  246. package/skills/context-recovery/SKILL.md +198 -0
  247. package/skills/context-recovery/_meta.json +6 -0
  248. package/skills/conversion-flow-cro/SKILL.md +248 -0
  249. package/skills/conversion-flow-cro/references/flow-benchmarks.md +158 -0
  250. package/skills/copy-editing/SKILL.md +474 -0
  251. package/skills/copy-editing/evals/evals.json +89 -0
  252. package/skills/copy-editing/references/plain-english-alternatives.md +394 -0
  253. package/skills/copywriting/SKILL.md +349 -0
  254. package/skills/copywriting/evals/evals.json +111 -0
  255. package/skills/copywriting/references/awareness-level-guide.md +227 -0
  256. package/skills/copywriting/references/copy-frameworks.md +389 -0
  257. package/skills/copywriting/references/natural-transitions.md +272 -0
  258. package/skills/creative/SKILL.md +365 -0
  259. package/skills/creative/modes/ad-creative.md +1748 -0
  260. package/skills/creative/modes/product-photo.md +1520 -0
  261. package/skills/creative/modes/product-video.md +1657 -0
  262. package/skills/creative/modes/social-graphics.md +1511 -0
  263. package/skills/creative/modes/talking-head.md +2208 -0
  264. package/skills/creative/references/VISUAL_INTELLIGENCE.md +1233 -0
  265. package/skills/deep-serp-article/SKILL.md +677 -0
  266. package/skills/deep-serp-article/SKILL.md.bak +530 -0
  267. package/skills/earned-media/SKILL.md +260 -0
  268. package/skills/email-sequences/SKILL.md +446 -0
  269. package/skills/email-sequences/references/sequence-templates.md +1217 -0
  270. package/skills/firecrawl/.skill-meta.json +13 -0
  271. package/skills/firecrawl/SKILL.md +154 -0
  272. package/skills/firecrawl/rules/install.md +63 -0
  273. package/skills/firecrawl/rules/security.md +26 -0
  274. package/skills/form-cro/SKILL.md +429 -0
  275. package/skills/form-cro/evals/evals.json +90 -0
  276. package/skills/free-tool-strategy/SKILL.md +325 -0
  277. package/skills/free-tool-strategy/evals/evals.json +90 -0
  278. package/skills/free-tool-strategy/references/tool-types.md +253 -0
  279. package/skills/frontend-slides/SKILL.md +248 -0
  280. package/skills/frontend-slides/STYLE_PRESETS.md +347 -0
  281. package/skills/frontend-slides/animation-patterns.md +110 -0
  282. package/skills/frontend-slides/html-template.md +347 -0
  283. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  284. package/skills/frontend-slides/viewport-base.css +153 -0
  285. package/skills/guardrail-framework/SKILL.md +319 -0
  286. package/skills/hook-generator/SKILL.md +438 -0
  287. package/skills/hook-generator/database/2026-PLATFORM-RESEARCH.md +211 -0
  288. package/skills/hook-generator/database/instagram-hooks.json +591 -0
  289. package/skills/hook-generator/database/linkedin-hooks.json +502 -0
  290. package/skills/hook-generator/database/medium-hooks.json +181 -0
  291. package/skills/hook-generator/database/tiktok-hooks.json +337 -0
  292. package/skills/hook-generator/database/twitter-hooks.json +567 -0
  293. package/skills/hook-generator/database/youtube-hooks.json +275 -0
  294. package/skills/hook-generator/package-lock.json +24 -0
  295. package/skills/hook-generator/package.json +5 -0
  296. package/skills/hook-generator/references/hook-generation-system.md +257 -0
  297. package/skills/hook-generator/references/hook-performance-analysis.json +153 -0
  298. package/skills/hook-generator/references/hooks-library.md +128 -0
  299. package/skills/hook-generator/references/platform-hook-frameworks.md +275 -0
  300. package/skills/hook-generator/scripts/generate-hooks-unified.js +722 -0
  301. package/skills/hook-generator/scripts/generate-hooks.js +225 -0
  302. package/skills/hook-generator/scripts/generate.sh +36 -0
  303. package/skills/hook-generator/scripts/ralph-hook-enhancer.js +864 -0
  304. package/skills/hook-generator/scripts/test-gemini-output.js +51 -0
  305. package/skills/humanizer/README.md +120 -0
  306. package/skills/humanizer/SKILL.md +699 -0
  307. package/skills/image-gen/SKILL.md +277 -0
  308. package/skills/image-gen/references/prompt-patterns.md +114 -0
  309. package/skills/image-gen/references/visual-metaphors.md +51 -0
  310. package/skills/impeccable/SKILL.md +86 -0
  311. package/skills/impeccable/reference/adapt.md +312 -0
  312. package/skills/impeccable/reference/adapt.native.md +58 -0
  313. package/skills/impeccable/reference/android.md +40 -0
  314. package/skills/impeccable/reference/animate.md +86 -0
  315. package/skills/impeccable/reference/audit.md +136 -0
  316. package/skills/impeccable/reference/audit.native.md +139 -0
  317. package/skills/impeccable/reference/bolder.md +31 -0
  318. package/skills/impeccable/reference/clarify.md +94 -0
  319. package/skills/impeccable/reference/colorize.md +86 -0
  320. package/skills/impeccable/reference/craft-floor.md +42 -0
  321. package/skills/impeccable/reference/craft.md +5 -0
  322. package/skills/impeccable/reference/critique.md +788 -0
  323. package/skills/impeccable/reference/degraded/asset-producer.md +90 -0
  324. package/skills/impeccable/reference/degraded/documenter.md +24 -0
  325. package/skills/impeccable/reference/degraded/finish-reviewer.md +37 -0
  326. package/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  327. package/skills/impeccable/reference/delight.md +70 -0
  328. package/skills/impeccable/reference/distill.md +111 -0
  329. package/skills/impeccable/reference/doctor.md +53 -0
  330. package/skills/impeccable/reference/document.md +416 -0
  331. package/skills/impeccable/reference/extract.md +69 -0
  332. package/skills/impeccable/reference/harden.md +336 -0
  333. package/skills/impeccable/reference/hooks.md +105 -0
  334. package/skills/impeccable/reference/init.md +125 -0
  335. package/skills/impeccable/reference/ios.md +45 -0
  336. package/skills/impeccable/reference/layout.md +84 -0
  337. package/skills/impeccable/reference/live-setup.md +102 -0
  338. package/skills/impeccable/reference/live.md +323 -0
  339. package/skills/impeccable/reference/new-work.md +110 -0
  340. package/skills/impeccable/reference/onboard.md +234 -0
  341. package/skills/impeccable/reference/operate.md +61 -0
  342. package/skills/impeccable/reference/optimize.md +258 -0
  343. package/skills/impeccable/reference/overdrive.md +127 -0
  344. package/skills/impeccable/reference/polish.md +97 -0
  345. package/skills/impeccable/reference/quieter.md +99 -0
  346. package/skills/impeccable/reference/routing.md +18 -0
  347. package/skills/impeccable/reference/shape.md +59 -0
  348. package/skills/impeccable/reference/typeset.md +80 -0
  349. package/skills/impeccable/reference/visualize.md +49 -0
  350. package/skills/impeccable/scripts/command-metadata.json +94 -0
  351. package/skills/impeccable/scripts/concept-seed.mjs +558 -0
  352. package/skills/impeccable/scripts/context-signals.mjs +334 -0
  353. package/skills/impeccable/scripts/context.mjs +1467 -0
  354. package/skills/impeccable/scripts/critique-storage.mjs +213 -0
  355. package/skills/impeccable/scripts/detect-csp.mjs +198 -0
  356. package/skills/impeccable/scripts/detect.mjs +21 -0
  357. package/skills/impeccable/scripts/detector/browser/injected/index.mjs +2023 -0
  358. package/skills/impeccable/scripts/detector/cli/main.mjs +438 -0
  359. package/skills/impeccable/scripts/detector/design-system.mjs +1046 -0
  360. package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +8283 -0
  361. package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
  362. package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +372 -0
  363. package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +1168 -0
  364. package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1186 -0
  365. package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +264 -0
  366. package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  367. package/skills/impeccable/scripts/detector/findings.mjs +18 -0
  368. package/skills/impeccable/scripts/detector/node/file-system.mjs +203 -0
  369. package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  370. package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +617 -0
  371. package/skills/impeccable/scripts/detector/rules/checks.mjs +5580 -0
  372. package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
  373. package/skills/impeccable/scripts/detector/shared/constants.mjs +112 -0
  374. package/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
  375. package/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  376. package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  377. package/skills/impeccable/scripts/doctor.mjs +336 -0
  378. package/skills/impeccable/scripts/embed-prompt.mjs +133 -0
  379. package/skills/impeccable/scripts/generate-image.mjs +240 -0
  380. package/skills/impeccable/scripts/hook-admin.mjs +801 -0
  381. package/skills/impeccable/scripts/hook-before-edit.mjs +508 -0
  382. package/skills/impeccable/scripts/hook-lib.mjs +2153 -0
  383. package/skills/impeccable/scripts/hook.mjs +78 -0
  384. package/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
  385. package/skills/impeccable/scripts/lib/composition-catalog.mjs +200 -0
  386. package/skills/impeccable/scripts/lib/concept-catalog.mjs +384 -0
  387. package/skills/impeccable/scripts/lib/design-parser.mjs +925 -0
  388. package/skills/impeccable/scripts/lib/impeccable-config.mjs +658 -0
  389. package/skills/impeccable/scripts/lib/impeccable-paths.mjs +137 -0
  390. package/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
  391. package/skills/impeccable/scripts/lib/provider.mjs +5 -0
  392. package/skills/impeccable/scripts/lib/roll-selection.mjs +362 -0
  393. package/skills/impeccable/scripts/lib/staleness-deep.mjs +478 -0
  394. package/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
  395. package/skills/impeccable/scripts/lib/staleness.mjs +457 -0
  396. package/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
  397. package/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  398. package/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
  399. package/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
  400. package/skills/impeccable/scripts/live/accept-css.mjs +617 -0
  401. package/skills/impeccable/scripts/live/accept-verify.mjs +60 -0
  402. package/skills/impeccable/scripts/live/browser-script-parts.mjs +55 -0
  403. package/skills/impeccable/scripts/live/completion.mjs +28 -0
  404. package/skills/impeccable/scripts/live/event-validation.mjs +199 -0
  405. package/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
  406. package/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +73 -0
  407. package/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
  408. package/skills/impeccable/scripts/live/frameworks/journal.mjs +197 -0
  409. package/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
  410. package/skills/impeccable/scripts/live/frameworks/nuxt.mjs +161 -0
  411. package/skills/impeccable/scripts/live/frameworks/script-src.mjs +17 -0
  412. package/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
  413. package/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
  414. package/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
  415. package/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
  416. package/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
  417. package/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
  418. package/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
  419. package/skills/impeccable/scripts/live/instructions.mjs +142 -0
  420. package/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
  421. package/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
  422. package/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
  423. package/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
  424. package/skills/impeccable/scripts/live/roots.mjs +508 -0
  425. package/skills/impeccable/scripts/live/session-store.mjs +563 -0
  426. package/skills/impeccable/scripts/live/source-lock.mjs +105 -0
  427. package/skills/impeccable/scripts/live/source-search.mjs +105 -0
  428. package/skills/impeccable/scripts/live/svelte-ast.mjs +961 -0
  429. package/skills/impeccable/scripts/live/svelte-component.mjs +1342 -0
  430. package/skills/impeccable/scripts/live/sveltekit-adapter.mjs +316 -0
  431. package/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
  432. package/skills/impeccable/scripts/live/ui-core.mjs +180 -0
  433. package/skills/impeccable/scripts/live/vocabulary.mjs +171 -0
  434. package/skills/impeccable/scripts/live-accept.mjs +954 -0
  435. package/skills/impeccable/scripts/live-browser-dom.js +146 -0
  436. package/skills/impeccable/scripts/live-browser-session.js +123 -0
  437. package/skills/impeccable/scripts/live-browser.js +12520 -0
  438. package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1244 -0
  439. package/skills/impeccable/scripts/live-complete.mjs +107 -0
  440. package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  441. package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  442. package/skills/impeccable/scripts/live-inject.mjs +503 -0
  443. package/skills/impeccable/scripts/live-insert.mjs +292 -0
  444. package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +368 -0
  445. package/skills/impeccable/scripts/live-poll.mjs +429 -0
  446. package/skills/impeccable/scripts/live-resume.mjs +123 -0
  447. package/skills/impeccable/scripts/live-server.mjs +1669 -0
  448. package/skills/impeccable/scripts/live-status.mjs +71 -0
  449. package/skills/impeccable/scripts/live-target.mjs +30 -0
  450. package/skills/impeccable/scripts/live-wrap.mjs +927 -0
  451. package/skills/impeccable/scripts/live.mjs +359 -0
  452. package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  453. package/skills/impeccable/scripts/palette.mjs +628 -0
  454. package/skills/impeccable/scripts/pin.mjs +221 -0
  455. package/skills/impeccable/scripts/serve-question.mjs +932 -0
  456. package/skills/impeccable/scripts/surface-brief.mjs +74 -0
  457. package/skills/inkstone-admin/SKILL.md +66 -0
  458. package/skills/jev-hook-gate/SKILL.md +111 -0
  459. package/skills/keyword-research/SKILL.md +503 -0
  460. package/skills/keyword-research/references/dr-cap-and-confidence.md +62 -0
  461. package/skills/keyword-research/references/keyword-examples.md +769 -0
  462. package/skills/landing-page-architect/SKILL.md +585 -0
  463. package/skills/landing-page-architect/references/architecture-reference.md +32 -0
  464. package/skills/launch-strategy/SKILL.md +384 -0
  465. package/skills/launch-strategy/evals/evals.json +91 -0
  466. package/skills/launch-strategy/references/launch-checklist.md +209 -0
  467. package/skills/launch-strategy/references/launch-timeline.md +159 -0
  468. package/skills/lead-email-craft/SKILL.md +522 -0
  469. package/skills/lead-magnets/SKILL.md +310 -0
  470. package/skills/lead-magnets/references/benchmarks.md +129 -0
  471. package/skills/lead-magnets/references/format-guide.md +196 -0
  472. package/skills/link-building-seo/SKILL.md +210 -0
  473. package/skills/lint-report.txt +1 -0
  474. package/skills/manifest.json +129 -0
  475. package/skills/marketing-demo/SKILL.md +249 -0
  476. package/skills/marketing-demo/references/remotion-examples.md +281 -0
  477. package/skills/marketing-ideas/SKILL.md +167 -0
  478. package/skills/marketing-ideas/evals/evals.json +90 -0
  479. package/skills/marketing-ideas/references/ideas-by-category.md +366 -0
  480. package/skills/marketing-psychology/SKILL.md +374 -0
  481. package/skills/marketing-psychology/evals/evals.json +88 -0
  482. package/skills/marketing-psychology/references/case-studies.md +148 -0
  483. package/skills/narrative-research-article/SKILL.md +469 -0
  484. package/skills/narrative-research-article/references/lanusse-patterns.md +166 -0
  485. package/skills/notebooklm/SKILL.md +674 -0
  486. package/skills/off-page-seo/SKILL.md +219 -0
  487. package/skills/onboarding-cro/SKILL.md +220 -0
  488. package/skills/onboarding-cro/evals/evals.json +92 -0
  489. package/skills/onboarding-cro/references/experiments.md +258 -0
  490. package/skills/original-research/SKILL.md +388 -0
  491. package/skills/page-cro/SKILL.md +269 -0
  492. package/skills/page-cro/references/cro-benchmarks.md +140 -0
  493. package/skills/paper-marketing/SKILL.md +448 -0
  494. package/skills/paper-marketing/references/agent-quality-rubric.md +68 -0
  495. package/skills/paper-marketing/references/brand-system-template.md +120 -0
  496. package/skills/paper-marketing/references/paper-mcp-rules.md +71 -0
  497. package/skills/paper-marketing/references/platform-conventions.md +43 -0
  498. package/skills/paywall-upgrade-cro/SKILL.md +227 -0
  499. package/skills/paywall-upgrade-cro/evals/evals.json +93 -0
  500. package/skills/paywall-upgrade-cro/references/experiments.md +164 -0
  501. package/skills/platform-formatting/SKILL.md +51 -0
  502. package/skills/popup-cro/SKILL.md +454 -0
  503. package/skills/popup-cro/evals/evals.json +94 -0
  504. package/skills/positioning-angles/SKILL.md +524 -0
  505. package/skills/positioning-angles/references/ad-matrix-and-examples.md +176 -0
  506. package/skills/positioning-angles/references/angle-frameworks.md +187 -0
  507. package/skills/positioning-angles/references/dunford-positioning.md +135 -0
  508. package/skills/positioning-angles/references/hormozi-offer.md +247 -0
  509. package/skills/positioning-angles/references/schwartz-sophistication.md +166 -0
  510. package/skills/positioning-angles/references/unique-mechanism.md +162 -0
  511. package/skills/pricing-strategy/SKILL.md +346 -0
  512. package/skills/pricing-strategy/evals/evals.json +90 -0
  513. package/skills/pricing-strategy/references/research-methods.md +152 -0
  514. package/skills/pricing-strategy/references/tier-structure.md +307 -0
  515. package/skills/programmatic-seo/SKILL.md +238 -0
  516. package/skills/programmatic-seo/evals/evals.json +94 -0
  517. package/skills/programmatic-seo/references/playbooks.md +308 -0
  518. package/skills/project-rag/SKILL.md +127 -0
  519. package/skills/quality-gate/SKILL.md +519 -0
  520. package/skills/quality-gate/judge-personas/buyer.md +47 -0
  521. package/skills/quality-gate/judge-personas/expert.md +47 -0
  522. package/skills/quality-gate/judge-personas/outsider.md +47 -0
  523. package/skills/quality-gate/judge-personas/scanner.md +41 -0
  524. package/skills/quality-gate/judge-personas/skeptic.md +40 -0
  525. package/skills/referral-program/SKILL.md +290 -0
  526. package/skills/referral-program/evals/evals.json +89 -0
  527. package/skills/referral-program/references/affiliate-programs.md +163 -0
  528. package/skills/referral-program/references/program-examples.md +143 -0
  529. package/skills/review-sites/SKILL.md +279 -0
  530. package/skills/revops/SKILL.md +343 -0
  531. package/skills/revops/evals/evals.json +91 -0
  532. package/skills/revops/references/automation-playbooks.md +290 -0
  533. package/skills/revops/references/lifecycle-definitions.md +278 -0
  534. package/skills/revops/references/routing-rules.md +203 -0
  535. package/skills/revops/references/scoring-models.md +247 -0
  536. package/skills/saas-product-seo/SKILL.md +324 -0
  537. package/skills/sales-enablement/SKILL.md +349 -0
  538. package/skills/sales-enablement/evals/evals.json +91 -0
  539. package/skills/sales-enablement/references/deck-frameworks.md +263 -0
  540. package/skills/sales-enablement/references/demo-scripts.md +355 -0
  541. package/skills/sales-enablement/references/objection-library.md +270 -0
  542. package/skills/sales-enablement/references/one-pager-templates.md +208 -0
  543. package/skills/schema-markup/SKILL.md +179 -0
  544. package/skills/schema-markup/evals/evals.json +87 -0
  545. package/skills/schema-markup/references/schema-examples.md +398 -0
  546. package/skills/self-improve/SKILL.md +166 -0
  547. package/skills/self-improving-agent/README.md +243 -0
  548. package/skills/self-improving-agent/SKILL.md +437 -0
  549. package/skills/self-improving-agent/scripts/__init__.py +16 -0
  550. package/skills/self-improving-agent/scripts/__pycache__/auto_detect.cpython-314.pyc +0 -0
  551. package/skills/self-improving-agent/scripts/__pycache__/nlm_curation.cpython-314.pyc +0 -0
  552. package/skills/self-improving-agent/scripts/__pycache__/self_improving_agent.cpython-314.pyc +0 -0
  553. package/skills/self-improving-agent/scripts/auto_detect.py +270 -0
  554. package/skills/self-improving-agent/scripts/init_expertise_registry.py +89 -0
  555. package/skills/self-improving-agent/scripts/nlm_curation.py +259 -0
  556. package/skills/self-improving-agent/scripts/self-improving-agent +113 -0
  557. package/skills/self-improving-agent/scripts/self_improving_agent.py +603 -0
  558. package/skills/self-improving-agent/scripts/test_curation_scorer.py +20 -0
  559. package/skills/self-improving-agent/scripts/test_self_improving.py +184 -0
  560. package/skills/send-email/SKILL.md +426 -0
  561. package/skills/send-email/references/batch-email-examples.md +807 -0
  562. package/skills/send-email/references/best-practices.md +453 -0
  563. package/skills/send-email/references/installation.md +123 -0
  564. package/skills/send-email/references/single-email-examples.md +470 -0
  565. package/skills/send-email/references/webhooks.md +221 -0
  566. package/skills/seo-audit/SKILL.md +362 -0
  567. package/skills/seo-audit/references/ai-writing-detection.md +200 -0
  568. package/skills/seo-audit/references/architecture-patterns.md +271 -0
  569. package/skills/seo-audit/references/schema-templates.md +427 -0
  570. package/skills/seo-content/SKILL.md +510 -0
  571. package/skills/seo-content/references/anti-ai-detection.md +184 -0
  572. package/skills/seo-content/references/content-structures.md +148 -0
  573. package/skills/seo-content/references/eeat-examples.md +235 -0
  574. package/skills/seo-content/references/on-page-seo.md +261 -0
  575. package/skills/seo-content/references/pseo-playbooks.md +226 -0
  576. package/skills/seo-content/references/schema-templates.md +104 -0
  577. package/skills/seo-content/references/serp-analysis-format.md +151 -0
  578. package/skills/seo-machine/SKILL.md +331 -0
  579. package/skills/seo-machine/assets/brand-template.md +73 -0
  580. package/skills/seo-machine/assets/link-inventory-template.md +74 -0
  581. package/skills/seo-machine/assets/roadmap-template.md +184 -0
  582. package/skills/seo-machine/references/api-stack-recipes.md +230 -0
  583. package/skills/seo-machine/references/exa-recipes.md +260 -0
  584. package/skills/seo-machine/references/manual-research.md +73 -0
  585. package/skills/seo-machine/references/methodology.md +87 -0
  586. package/skills/seo-machine/references/off-page.md +123 -0
  587. package/skills/seo-machine/references/patterns/alternatives.md +176 -0
  588. package/skills/seo-machine/references/patterns/compare.md +105 -0
  589. package/skills/seo-machine/references/patterns/playbooks.md +106 -0
  590. package/skills/seo-machine/references/patterns/use-case.md +109 -0
  591. package/skills/seo-machine/references/quality-bars.md +99 -0
  592. package/skills/seo-machine/references/stacks/astro.md +156 -0
  593. package/skills/seo-machine/references/stacks/detection.md +61 -0
  594. package/skills/seo-machine/references/stacks/markdown-fallback.md +181 -0
  595. package/skills/seo-machine/references/stacks/nextjs.md +108 -0
  596. package/skills/seo-machine/references/stacks/rails-inertia.md +99 -0
  597. package/skills/seo-machine/references/striking-distance.md +116 -0
  598. package/skills/seo-machine/references/technical-audit.md +153 -0
  599. package/skills/seo-machine/scripts/link_audit.py +265 -0
  600. package/skills/seo-machine/scripts/tech_audit.py +221 -0
  601. package/skills/seo-machine/scripts/word_count.py +154 -0
  602. package/skills/sharp-thesis-validator/SKILL.md +393 -0
  603. package/skills/sharp-thesis-validator/examples.md +186 -0
  604. package/skills/signup-flow-cro/SKILL.md +359 -0
  605. package/skills/signup-flow-cro/evals/evals.json +88 -0
  606. package/skills/site-architecture/SKILL.md +357 -0
  607. package/skills/site-architecture/evals/evals.json +88 -0
  608. package/skills/site-architecture/references/mermaid-templates.md +216 -0
  609. package/skills/site-architecture/references/navigation-patterns.md +305 -0
  610. package/skills/site-architecture/references/site-type-templates.md +293 -0
  611. package/skills/skill-self-improvement/SKILL.md +151 -0
  612. package/skills/slideshow-script/SKILL.md +274 -0
  613. package/skills/slideshow-script/references/content-spec-schema.md +77 -0
  614. package/skills/slideshow-script/references/frameworks.md +84 -0
  615. package/skills/slideshow-script/references/paips-framework.md +37 -0
  616. package/skills/social-campaign/SKILL.md +419 -0
  617. package/skills/social-campaign/references/paper-mcp-workflow.md +48 -0
  618. package/skills/social-content/SKILL.md +359 -0
  619. package/skills/social-content/evals/evals.json +92 -0
  620. package/skills/social-content/references/platforms.md +170 -0
  621. package/skills/social-content/references/post-templates.md +177 -0
  622. package/skills/social-content/references/reverse-engineering.md +195 -0
  623. package/skills/social-worker/SKILL.md +204 -0
  624. package/skills/startup-launcher/SKILL.md +252 -0
  625. package/skills/startup-launcher/references/file-router.md +64 -0
  626. package/skills/startup-launcher/references/platform-matrix.md +65 -0
  627. package/skills/startup-launcher/references/platforms/alternativeto.md +283 -0
  628. package/skills/startup-launcher/references/platforms/appsumo.md +495 -0
  629. package/skills/startup-launcher/references/platforms/auraplusplus.md +736 -0
  630. package/skills/startup-launcher/references/platforms/betalist.md +98 -0
  631. package/skills/startup-launcher/references/platforms/capterra.md +276 -0
  632. package/skills/startup-launcher/references/platforms/crunchbase.md +514 -0
  633. package/skills/startup-launcher/references/platforms/dealify.md +291 -0
  634. package/skills/startup-launcher/references/platforms/dealmirror.md +313 -0
  635. package/skills/startup-launcher/references/platforms/desifounder.md +490 -0
  636. package/skills/startup-launcher/references/platforms/devhunt.md +210 -0
  637. package/skills/startup-launcher/references/platforms/devpost.md +448 -0
  638. package/skills/startup-launcher/references/platforms/fazier.md +56 -0
  639. package/skills/startup-launcher/references/platforms/firsto.md +489 -0
  640. package/skills/startup-launcher/references/platforms/g2.md +226 -0
  641. package/skills/startup-launcher/references/platforms/hackernews.md +99 -0
  642. package/skills/startup-launcher/references/platforms/hackernoon.md +385 -0
  643. package/skills/startup-launcher/references/platforms/indiedeals.md +367 -0
  644. package/skills/startup-launcher/references/platforms/indiehackers.md +80 -0
  645. package/skills/startup-launcher/references/platforms/kenmoo.md +231 -0
  646. package/skills/startup-launcher/references/platforms/labstartups.md +618 -0
  647. package/skills/startup-launcher/references/platforms/launchboard.md +307 -0
  648. package/skills/startup-launcher/references/platforms/launchfast.md +560 -0
  649. package/skills/startup-launcher/references/platforms/launchigniter.md +56 -0
  650. package/skills/startup-launcher/references/platforms/launchingnext.md +674 -0
  651. package/skills/startup-launcher/references/platforms/launchit.md +574 -0
  652. package/skills/startup-launcher/references/platforms/launchyourapp.md +677 -0
  653. package/skills/startup-launcher/references/platforms/libhunt.md +220 -0
  654. package/skills/startup-launcher/references/platforms/ltdhunt.md +221 -0
  655. package/skills/startup-launcher/references/platforms/microlaunch.md +45 -0
  656. package/skills/startup-launcher/references/platforms/openalternative.md +195 -0
  657. package/skills/startup-launcher/references/platforms/peerlist.md +56 -0
  658. package/skills/startup-launcher/references/platforms/peerpush.md +64 -0
  659. package/skills/startup-launcher/references/platforms/primeclub.md +282 -0
  660. package/skills/startup-launcher/references/platforms/productcanyon.md +190 -0
  661. package/skills/startup-launcher/references/platforms/producthunt.md +98 -0
  662. package/skills/startup-launcher/references/platforms/rankinpublic.md +315 -0
  663. package/skills/startup-launcher/references/platforms/rockethub.md +374 -0
  664. package/skills/startup-launcher/references/platforms/saasgenius.md +175 -0
  665. package/skills/startup-launcher/references/platforms/saashub.md +205 -0
  666. package/skills/startup-launcher/references/platforms/saasmantra.md +221 -0
  667. package/skills/startup-launcher/references/platforms/saaspirate.md +287 -0
  668. package/skills/startup-launcher/references/platforms/saaswarrior.md +190 -0
  669. package/skills/startup-launcher/references/platforms/saaszilla.md +194 -0
  670. package/skills/startup-launcher/references/platforms/selected.md +925 -0
  671. package/skills/startup-launcher/references/platforms/sideprojectors.md +86 -0
  672. package/skills/startup-launcher/references/platforms/softonic.md +240 -0
  673. package/skills/startup-launcher/references/platforms/sourceforge.md +251 -0
  674. package/skills/startup-launcher/references/platforms/stacksocial.md +244 -0
  675. package/skills/startup-launcher/references/platforms/startupstash.md +326 -0
  676. package/skills/startup-launcher/references/platforms/theresanaiforthat.md +253 -0
  677. package/skills/startup-launcher/references/platforms/tinylaunch.md +70 -0
  678. package/skills/startup-launcher/references/platforms/tinystartups.md +72 -0
  679. package/skills/startup-launcher/references/platforms/toolfolio.md +291 -0
  680. package/skills/startup-launcher/references/platforms/trustmrr.md +194 -0
  681. package/skills/startup-launcher/references/platforms/trylaunch.md +531 -0
  682. package/skills/startup-launcher/references/platforms/uneed.md +57 -0
  683. package/skills/startup-launcher/references/templates/asset-checklist.md +218 -0
  684. package/skills/startup-launcher/references/templates/launch-tracker.md +195 -0
  685. package/skills/startup-launcher/references/templates/product-brief.md +98 -0
  686. package/skills/summarize/.skill-meta.json +13 -0
  687. package/skills/summarize/SKILL.md +170 -0
  688. package/skills/summarize/rules/install.md +157 -0
  689. package/skills/summarize/rules/usage.md +207 -0
  690. package/skills/topical-authority/SKILL.md +307 -0
  691. package/skills/topical-authority/references/jake-ward-framework.md +201 -0
  692. package/skills/topical-authority/references/serp-clustering-algorithm.md +325 -0
  693. package/skills/topical-authority/scripts/orchestrator.js +367 -0
  694. package/skills/topical-authority/scripts/seo/analyze-competitor-coverage.js +3 -0
  695. package/skills/topical-authority/scripts/seo/audit-internal-links.js +3 -0
  696. package/skills/topical-authority/scripts/seo/build-clusters-from-serp.js +3 -0
  697. package/skills/topical-authority/scripts/seo/extract-keywords-from-forums.js +3 -0
  698. package/skills/topical-authority/scripts/seo/extract-paa-questions.js +3 -0
  699. package/skills/topical-authority/scripts/seo/fetch-serp-urls.js +3 -0
  700. package/skills/topical-authority/scripts/seo/gemini-serp-clustering.js +3 -0
  701. package/skills/topical-authority/scripts/seo/identify-content-gaps.js +3 -0
  702. package/skills/topical-authority/scripts/seo/identify-research-gaps.js +3 -0
  703. package/skills/topical-authority/scripts/seo/scrape-quora-questions.js +3 -0
  704. package/skills/topical-authority/scripts/seo/scrape-reddit-pain-points.js +3 -0
  705. package/skills/topical-authority/scripts/seo/weave-internal-links.js +3 -0
  706. package/skills/visual-style/SKILL.md +199 -0
  707. package/skills/voice-brand-alignment/SKILL.md +70 -0
  708. package/skills/voice-brand-alignment/references/ai-slop-patterns.md +405 -0
  709. package/skills/voice-brand-alignment/scripts/validation/gemini-voice-validator.js +96 -0
  710. package/skills/voice-extraction/SKILL.md +234 -0
  711. package/skills/voice-extraction/references/extraction-prompt.md +155 -0
  712. package/skills/voice-extraction/references/voice-dna-template.md +168 -0
  713. package/skills/voice-extraction/references/voice-elements.md +259 -0
  714. package/skills/voice-extraction/scripts/build-corpus.js +120 -0
  715. package/skills/voice-extraction/scripts/collect-sources.sh +168 -0
  716. package/skills/warm-outbound/SKILL.md +299 -0
  717. package/skills/warm-outbound/templates/warm-message.md +39 -0
  718. package/skills/weekly-newsletter-digest/SKILL.md +78 -0
  719. package/skills/x-playwriter/SKILL.md +428 -0
  720. package/skills/x-playwriter/scripts/x-browser.js +185 -0
  721. package/skills/x-post-generator-openclaw/SKILL.md +138 -0
  722. package/skills/x-post-generator-openclaw/scripts/generate-x-post.js +537 -0
  723. package/skills/x-posting-playwriter/SKILL.md +203 -0
  724. package/skills/x-research/SKILL.md +129 -0
  725. package/skills/x-research/x-research.sh +85 -0
  726. package/skills/youtube-summarize/SKILL.md +90 -0
  727. package/skills/youtube-summarize/scripts/youtube-summarize.sh +143 -0
  728. package/src/cli.js +347 -172
  729. package/src/harness/deepseek-adapter.js +102 -0
  730. package/src/harness/deepseek.js +225 -0
  731. package/src/harness/opencode-adapter.js +174 -0
  732. package/src/harness/pi-adapter.js +172 -0
  733. package/src/harness/registry.js +121 -0
  734. package/src/harness/telemetry.js +102 -0
  735. package/src/harness/types.js +165 -0
  736. package/src/interview.js +36 -4
  737. package/src/postinstall.js +10 -12
  738. package/templates/AGENTS.md +17 -17
  739. package/templates/ORG.md +1 -1
  740. package/templates/TOOLS.md +7 -2
  741. package/templates/opencode.json +26 -29
  742. package/wiki/doctor.md +54 -0
  743. package/wiki/inkstone.md +4 -4
  744. package/wiki/opencode.md +3 -3
  745. package/skills/curated.txt +0 -68
@@ -0,0 +1,325 @@
1
+ # SERP Clustering Algorithm
2
+
3
+ **Purpose**: Prevent keyword cannibalization by grouping keywords with identical search intent
4
+
5
+ ## The Problem: Keyword Cannibalization
6
+
7
+ When multiple pages on your site target keywords with the same search intent, they compete against each other for rankings. Google will typically only rank one page from your site for a given search intent, so multiple pages dilute your authority instead of multiplying it.
8
+
9
+ **Example**:
10
+ - Page A targets "email marketing tools"
11
+ - Page B targets "best email marketing software"
12
+ - SERP overlap: 85% (same domains appear in top 10)
13
+ - Result: Pages compete, both rank lower than if you had one comprehensive page
14
+
15
+ ## The Solution: SERP-Based Clustering
16
+
17
+ Group keywords by analyzing their search results. If two keywords show the same URLs in their top 10 results, Google considers them to have the same search intent.
18
+
19
+ ## Algorithm
20
+
21
+ ### Step 1: Fetch SERP URLs
22
+ For each keyword in your universe:
23
+ 1. Query Google (or SERP API)
24
+ 2. Extract top 10 organic results
25
+ 3. Store: `[keyword → [url1, url2, ..., url10]]`
26
+ 4. Rate limit: 2-3 seconds between requests (avoid blocking)
27
+ 5. Cache results (SERPs don't change daily)
28
+
29
+ ### Step 2: Calculate Jaccard Similarity
30
+ For each pair of keywords, calculate URL overlap:
31
+
32
+ ```
33
+ Jaccard Similarity = |A ∩ B| / |A ∪ B|
34
+
35
+ Where:
36
+ - A = Set of domains in keyword A's top 10
37
+ - B = Set of domains in keyword B's top 10
38
+ - ∩ = Intersection (domains in both sets)
39
+ - ∪ = Union (all unique domains)
40
+ ```
41
+
42
+ **Example**:
43
+ ```
44
+ Keyword A top 10 domains: [zapier.com, buffer.com, hootsuite.com, hubspot.com, semrush.com, ahrefs.com, moz.com, ...]
45
+ Keyword B top 10 domains: [zapier.com, buffer.com, hootsuite.com, hubspot.com, mailchimp.com, sendgrid.com, activecampaign.com, ...]
46
+
47
+ Intersection: [zapier.com, buffer.com, hootsuite.com, hubspot.com] = 4 domains
48
+ Union: 13 unique domains
49
+
50
+ Jaccard Similarity = 4 / 13 = 0.31 (31% overlap)
51
+ ```
52
+
53
+ ### Step 3: Three-Tier Classification
54
+
55
+ **Tier 1: Obvious Same Intent (≥70% overlap)**
56
+ - Action: Group into same cluster automatically
57
+ - Reason: High overlap = Google sees these as identical intent
58
+ - Example: "email marketing tools" vs "best email marketing software" (85% overlap)
59
+ - Cost: Free (no AI needed)
60
+
61
+ **Tier 2: Ambiguous (30-69% overlap)**
62
+ - Action: Use Gemini/GPT-4 to analyze intent
63
+ - Reason: Medium overlap = unclear if intent is same or different
64
+ - Example: "content marketing tools" vs "social media marketing tools" (45% overlap)
65
+ - Cost: ~$0.001 per comparison
66
+ - Optimization: Only call AI for ambiguous cases (saves 70-80% of AI costs)
67
+
68
+ **Tier 3: Obvious Different Intent (<30% overlap)**
69
+ - Action: Keep in separate clusters automatically
70
+ - Reason: Low overlap = Google sees these as different intent
71
+ - Example: "email marketing" vs "email marketing automation" (25% overlap)
72
+ - Cost: Free (no AI needed)
73
+
74
+ ### Step 4: Gemini Intent Analysis (Tier 2 Only)
75
+
76
+ **Prompt Template**:
77
+ ```
78
+ You are an SEO search intent analyzer.
79
+ Compare these two keywords and determine if they have the SAME search intent (should be on same page) or DIFFERENT intent (need separate pages).
80
+
81
+ Keyword 1: "{keyword1}"
82
+ Keyword 2: "{keyword2}"
83
+
84
+ Return ONLY "SAME" or "DIFFERENT". No explanation.
85
+
86
+ SAME = Same topic, same user goal, same type of content expected
87
+ DIFFERENT = Different topics, different user goals, or different content types
88
+
89
+ Examples:
90
+ Q: "email marketing tools" vs "best email marketing software" → SAME
91
+ Q: "email marketing" vs "email marketing automation" → DIFFERENT
92
+ Q: "content calendar" vs "social media calendar" → SAME
93
+ Q: "seo tools" vs "seo strategy" → DIFFERENT
94
+ ```
95
+
96
+ **Response Parsing**:
97
+ - If response contains "SAME" → Group into same cluster
98
+ - If response contains "DIFFERENT" → Keep in separate clusters
99
+ - If error/timeout → Default to DIFFERENT (conservative approach)
100
+
101
+ ### Step 5: Cluster Merging
102
+
103
+ After pairwise comparisons, merge overlapping clusters:
104
+
105
+ ```javascript
106
+ // Cluster building algorithm
107
+ const clusters = [];
108
+
109
+ for (const [kw1, kw2] of keyword_pairs) {
110
+ const similarity = calculateJaccardSimilarity(kw1, kw2);
111
+ let shouldCluster = false;
112
+
113
+ if (similarity >= 0.7) {
114
+ shouldCluster = true; // Obvious same
115
+ } else if (similarity < 0.3) {
116
+ shouldCluster = false; // Obvious different
117
+ } else {
118
+ shouldCluster = analyzeIntentWithGemini(kw1, kw2); // Ambiguous
119
+ }
120
+
121
+ if (shouldCluster) {
122
+ // Find existing cluster or create new one
123
+ let cluster = clusters.find(c => c.keywords.includes(kw1) || c.keywords.includes(kw2));
124
+
125
+ if (cluster) {
126
+ // Add to existing cluster
127
+ if (!cluster.keywords.includes(kw1)) cluster.keywords.push(kw1);
128
+ if (!cluster.keywords.includes(kw2)) cluster.keywords.push(kw2);
129
+ } else {
130
+ // Create new cluster
131
+ clusters.push({ keywords: [kw1, kw2] });
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### Step 6: Singleton Handling
138
+
139
+ Keywords not clustered with any others become singleton clusters (one keyword = one page).
140
+
141
+ ## Cost Optimization
142
+
143
+ **Traditional approach**: Call SERP API + AI for every keyword pair
144
+ - 500 keywords = 124,750 pairs
145
+ - Cost: $0.01 per API call = $1,247.50
146
+ - Time: Hours to days
147
+
148
+ **Our optimized approach**: Jaccard similarity + selective AI
149
+ - Free: 70% obvious same (≥70% overlap)
150
+ - Free: 20% obvious different (<30% overlap)
151
+ - AI: 10% ambiguous (30-69% overlap)
152
+ - Cost for 500 keywords: ~$2-5 (only 12,475 AI calls)
153
+ - Time: 10-30 minutes
154
+
155
+ **Savings**: 99.5% cost reduction
156
+
157
+ ## Implementation Details
158
+
159
+ ### SERP Fetching Options
160
+
161
+ **Option 1: Free HTTP Requests** (Development)
162
+ ```javascript
163
+ async function fetchGoogleSERP(keyword) {
164
+ const url = `https://www.google.com/search?q=${encodeURIComponent(keyword)}`;
165
+ // Parse HTML, extract top 10 domains
166
+ // Rate limit: 2-3 seconds between requests
167
+ // Risk: Google may block after ~100 requests
168
+ }
169
+ ```
170
+
171
+ **Option 2: SERP APIs** (Production)
172
+ - DataForSEO: $0.002 per keyword
173
+ - SerpAPI: $0.004 per keyword
174
+ - ValueSERP: $0.003 per keyword
175
+ - Benefit: Reliable, no blocking, structured data
176
+
177
+ **Option 3: Browser Automation** (Alternative)
178
+ - Puppeteer/Playwright with rotating proxies
179
+ - Cost: Proxy fees (~$5/mo)
180
+ - Benefit: More reliable than raw HTTP
181
+
182
+ ### Caching Strategy
183
+
184
+ ```javascript
185
+ // Cache SERP results to avoid re-fetching
186
+ const cache = {
187
+ keyword: {
188
+ urls: [...],
189
+ fetchedAt: ISO_timestamp,
190
+ ttl: 30_days // SERPs don't change daily
191
+ }
192
+ };
193
+ ```
194
+
195
+ ### Checkpointing
196
+
197
+ For large keyword sets (1,000+), save progress every 100 keywords:
198
+ ```javascript
199
+ if (processedCount % 100 === 0) {
200
+ saveCheckpoint(clusters, processedCount);
201
+ }
202
+ ```
203
+
204
+ ## Output Format
205
+
206
+ ```json
207
+ {
208
+ "clusters": [
209
+ {
210
+ "id": "cluster-1",
211
+ "keywords": [
212
+ "email marketing tools",
213
+ "best email marketing software",
214
+ "top email marketing platforms"
215
+ ],
216
+ "size": 3,
217
+ "primaryKeyword": "email marketing tools",
218
+ "avgOverlap": 0.82
219
+ },
220
+ {
221
+ "id": "cluster-2",
222
+ "keywords": ["email marketing automation"],
223
+ "size": 1,
224
+ "primaryKeyword": "email marketing automation",
225
+ "avgOverlap": 0
226
+ }
227
+ ],
228
+ "summary": {
229
+ "totalKeywords": 500,
230
+ "totalClusters": 87,
231
+ "avgClusterSize": 5.7,
232
+ "singletons": 23,
233
+ "geminiCalls": 12,
234
+ "estimatedCost": "0.012"
235
+ }
236
+ }
237
+ ```
238
+
239
+ ## Validation
240
+
241
+ **Quality Checks**:
242
+ 1. No keyword appears in multiple clusters (mutual exclusivity)
243
+ 2. All keywords accounted for (clustered or singleton)
244
+ 3. Cluster sizes make sense (most 1-10 keywords, few outliers)
245
+ 4. Primary keyword is most generic in cluster
246
+
247
+ **Manual Spot Checks**:
248
+ - Sample 10 clusters
249
+ - Verify keywords have same intent
250
+ - Check if SERP overlap makes sense
251
+
252
+ ## Common Edge Cases
253
+
254
+ ### 1. Brand vs Generic Keywords
255
+ ```
256
+ "mailchimp" vs "email marketing software"
257
+ ```
258
+ - SERP overlap: 15% (mailchimp.com dominates first, not second)
259
+ - Action: Separate clusters (different intent: branded vs category)
260
+
261
+ ### 2. How-to vs What-is
262
+ ```
263
+ "how to do email marketing" vs "what is email marketing"
264
+ ```
265
+ - SERP overlap: 35% (ambiguous)
266
+ - Gemini: DIFFERENT (how-to = implementation, what-is = definition)
267
+ - Action: Separate clusters
268
+
269
+ ### 3. Singular vs Plural
270
+ ```
271
+ "email marketing tool" vs "email marketing tools"
272
+ ```
273
+ - SERP overlap: 95% (nearly identical)
274
+ - Action: Same cluster
275
+
276
+ ### 4. Year-Specific Keywords
277
+ ```
278
+ "email marketing tools 2024" vs "email marketing tools 2025"
279
+ ```
280
+ - SERP overlap: 60% (ambiguous)
281
+ - Gemini: SAME (same intent, just time-specific)
282
+ - Action: Same cluster, update content yearly
283
+
284
+ ## Integration with Hub Architecture
285
+
286
+ After clustering:
287
+ 1. Large clusters (5+ keywords) → Pillar pages
288
+ 2. Medium clusters (2-4 keywords) → Supporting cluster pages
289
+ 3. Singletons → Decide: Create page or merge into related cluster
290
+
291
+ ## Performance Benchmarks
292
+
293
+ **500 keywords**:
294
+ - SERP fetching: 5-10 minutes (with rate limiting)
295
+ - Jaccard calculation: <1 minute (local computation)
296
+ - Gemini calls: 2-5 minutes (only 10-15% of pairs)
297
+ - Total time: 10-20 minutes
298
+ - Total cost: $2-5
299
+
300
+ **1,000 keywords**:
301
+ - SERP fetching: 15-30 minutes
302
+ - Jaccard calculation: 2-3 minutes
303
+ - Gemini calls: 5-10 minutes
304
+ - Total time: 25-45 minutes
305
+ - Total cost: $5-10
306
+
307
+ ## Troubleshooting
308
+
309
+ **Issue**: Google blocking requests
310
+ - Solution: Use SERP API or browser automation with proxies
311
+
312
+ **Issue**: High Gemini costs
313
+ - Solution: Increase ambiguous threshold (30-69% → 40-60%)
314
+
315
+ **Issue**: Too many singletons
316
+ - Solution: Lower clustering threshold (70% → 60%)
317
+
318
+ **Issue**: Too few clusters
319
+ - Solution: Raise clustering threshold (70% → 80%)
320
+
321
+ ## References
322
+
323
+ - Jake Ward's SERP Clustering Method
324
+ - Jaccard Similarity Algorithm
325
+ - Implementation: `scripts/seo/gemini-serp-clustering.js`
@@ -0,0 +1,367 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Topical Authority Orchestrator
5
+ *
6
+ * Coordinates all 12 topical authority scripts using Gemini CLI for token efficiency.
7
+ * Delegates script execution to Gemini CLI, tracks progress, validates outputs.
8
+ *
9
+ * Usage:
10
+ * node .claude/skills/topical-authority/scripts/orchestrator.js --brand ai.withjai --phase all
11
+ * node .claude/skills/topical-authority/scripts/orchestrator.js --brand ai.withjai --phase discover
12
+ * node .claude/skills/topical-authority/scripts/orchestrator.js --brand ai.withjai --phase cluster
13
+ * node .claude/skills/topical-authority/scripts/orchestrator.js --brand ai.withjai --phase analyze
14
+ *
15
+ * Phases:
16
+ * discover - Forum discovery (scripts 1-5)
17
+ * cluster - SERP clustering (scripts 6-8)
18
+ * analyze - Gap analysis + linking (scripts 9-12)
19
+ * all - Run complete workflow
20
+ *
21
+ * Token Optimization:
22
+ * All script execution delegated to Gemini CLI = 95%+ token savings
23
+ */
24
+
25
+ const { spawnSync } = require('child_process');
26
+ const { fs, path, fromConfig, parseArgs, ensureDir } = require('../../../../scripts/utils/_utils');
27
+
28
+ const MODEL = process.env.GEMINI_MODEL || 'gemini-2.0-flash-exp';
29
+
30
+ const PHASES = {
31
+ discover: {
32
+ name: 'Forum Discovery & Keyword Extraction',
33
+ scripts: [
34
+ { id: 1, file: 'scripts/seo/scrape-reddit-pain-points.js', args: '--brand {brand}' },
35
+ { id: 2, file: 'scripts/seo/scrape-quora-questions.js', args: '--brand {brand} --topics "{topics}"' },
36
+ { id: 3, file: 'scripts/seo/extract-paa-questions.js', args: '--brand {brand} --seed-keywords "{seedKeywords}"' },
37
+ { id: 4, file: 'scripts/seo/analyze-competitor-coverage.js', args: '--brand {brand}' },
38
+ { id: 5, file: 'scripts/seo/extract-keywords-from-forums.js', args: '--brand {brand} --target {target}' }
39
+ ],
40
+ outputs: [
41
+ 'brands/{brand}/content/02-strategy/forum-data/reddit-pain-points.json',
42
+ 'brands/{brand}/content/02-strategy/forum-data/quora-questions.json',
43
+ 'brands/{brand}/content/02-strategy/forum-data/paa-questions.json',
44
+ 'brands/{brand}/content/02-strategy/forum-data/competitor-coverage.json',
45
+ 'brands/{brand}/content/02-strategy/keyword-universe.json'
46
+ ]
47
+ },
48
+ cluster: {
49
+ name: 'SERP Clustering & Hub Architecture',
50
+ scripts: [
51
+ { id: 6, file: 'scripts/seo/fetch-serp-urls.js', args: '--brand {brand} --limit {limit}' },
52
+ { id: 7, file: 'scripts/seo/gemini-serp-clustering.js', args: '--brand {brand} --threshold {threshold}' },
53
+ { id: 8, file: 'scripts/seo/build-clusters-from-serp.js', args: '--brand {brand} --min-cluster-size {minClusterSize}' }
54
+ ],
55
+ outputs: [
56
+ 'brands/{brand}/content/02-strategy/serp-data/serp-urls.json',
57
+ 'brands/{brand}/content/02-strategy/serp-data/keyword-clusters.json',
58
+ 'brands/{brand}/content/02-strategy/hub-architecture.json'
59
+ ]
60
+ },
61
+ analyze: {
62
+ name: 'Gap Analysis & Internal Linking',
63
+ scripts: [
64
+ { id: 9, file: 'scripts/seo/identify-content-gaps.js', args: '--brand {brand} --min-volume {minVolume}' },
65
+ { id: 10, file: 'scripts/seo/identify-research-gaps.js', args: '--brand {brand} --min-priority {minPriority}' },
66
+ { id: 11, file: 'scripts/seo/audit-internal-links.js', args: '--brand {brand} --min-links {minLinks}' },
67
+ { id: 12, file: 'scripts/seo/weave-internal-links.js', args: '--brand {brand} {autoInsert}' }
68
+ ],
69
+ outputs: [
70
+ 'brands/{brand}/content/02-strategy/content-gaps.json',
71
+ 'brands/{brand}/content/02-strategy/research-gaps.json',
72
+ 'brands/{brand}/content/02-strategy/internal-links-graph.json',
73
+ 'brands/{brand}/content/02-strategy/link-suggestions.md'
74
+ ]
75
+ }
76
+ };
77
+
78
+ function main() {
79
+ const args = parseArgs();
80
+ const { brand } = fromConfig(args.brand);
81
+
82
+ if (!brand) {
83
+ console.error('❌ Brand not specified. Use --brand {brand}');
84
+ process.exit(1);
85
+ }
86
+
87
+ const phase = args.phase || 'all';
88
+ const validPhases = ['discover', 'cluster', 'analyze', 'all'];
89
+
90
+ if (!validPhases.includes(phase)) {
91
+ console.error(`❌ Invalid phase: ${phase}`);
92
+ console.error(` Valid phases: ${validPhases.join(', ')}`);
93
+ process.exit(1);
94
+ }
95
+
96
+ // Collect parameters
97
+ const params = {
98
+ brand,
99
+ topics: args.topics || getDefaultTopics(brand),
100
+ seedKeywords: args['seed-keywords'] || getDefaultSeedKeywords(brand),
101
+ target: args.target ? Number(args.target) : 1000,
102
+ limit: args.limit ? Number(args.limit) : 100,
103
+ threshold: args.threshold ? Number(args.threshold) : 0.7,
104
+ minClusterSize: args['min-cluster-size'] ? Number(args['min-cluster-size']) : 3,
105
+ minVolume: args['min-volume'] ? Number(args['min-volume']) : 100,
106
+ minPriority: args['min-priority'] ? Number(args['min-priority']) : 2,
107
+ minLinks: args['min-links'] ? Number(args['min-links']) : 3,
108
+ autoInsert: args['auto-insert'] ? '--auto-insert' : ''
109
+ };
110
+
111
+ console.log('🎯 Topical Authority Orchestrator');
112
+ console.log('════════════════════════════════════════════════════════════');
113
+ console.log(`Brand: ${brand}`);
114
+ console.log(`Phase: ${phase}`);
115
+ console.log(`Model: ${MODEL}`);
116
+ console.log('════════════════════════════════════════════════════════════\n');
117
+
118
+ const phasesToRun = phase === 'all'
119
+ ? ['discover', 'cluster', 'analyze']
120
+ : [phase];
121
+
122
+ const startTime = Date.now();
123
+ const results = {};
124
+
125
+ phasesToRun.forEach((phaseName, idx) => {
126
+ console.log(`\n${'='.repeat(60)}`);
127
+ console.log(`Phase ${idx + 1}/${phasesToRun.length}: ${PHASES[phaseName].name}`);
128
+ console.log('='.repeat(60));
129
+
130
+ const result = runPhaseWithGemini(phaseName, params);
131
+ results[phaseName] = result;
132
+
133
+ if (!result.success) {
134
+ console.error(`\n❌ Phase "${phaseName}" failed. Stopping workflow.`);
135
+ process.exit(1);
136
+ }
137
+ });
138
+
139
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
140
+
141
+ console.log('\n' + '='.repeat(60));
142
+ console.log('✅ Topical Authority Workflow Complete');
143
+ console.log('='.repeat(60));
144
+ console.log(`Duration: ${duration}s`);
145
+ console.log(`\nPhase Results:`);
146
+
147
+ Object.entries(results).forEach(([phaseName, result]) => {
148
+ console.log(` • ${PHASES[phaseName].name}: ${result.success ? '✅' : '❌'}`);
149
+ if (result.summary) {
150
+ console.log(` ${result.summary}`);
151
+ }
152
+ });
153
+
154
+ console.log(`\n📊 Outputs saved to: brands/${brand}/content/02-strategy/`);
155
+ console.log(`\n💡 Next steps:`);
156
+
157
+ if (phase === 'all' || phase === 'analyze') {
158
+ console.log(` 1. Review research gaps: brands/${brand}/content/02-strategy/research-gaps.json`);
159
+ console.log(` 2. Review content opportunities: brands/${brand}/content/02-strategy/content-gaps.json`);
160
+ console.log(` 3. Review link suggestions: brands/${brand}/content/02-strategy/link-suggestions.md`);
161
+ console.log(` 4. Start content creation for GOLDEN opportunities`);
162
+ } else if (phase === 'discover') {
163
+ console.log(` Run SERP clustering: node .claude/skills/topical-authority/scripts/orchestrator.js --brand ${brand} --phase cluster`);
164
+ } else if (phase === 'cluster') {
165
+ console.log(` Run gap analysis: node .claude/skills/topical-authority/scripts/orchestrator.js --brand ${brand} --phase analyze`);
166
+ }
167
+ }
168
+
169
+ function runPhaseWithGemini(phaseName, params) {
170
+ const phase = PHASES[phaseName];
171
+
172
+ console.log(`\n🤖 Delegating to Gemini CLI for execution...`);
173
+ console.log(` Scripts to run: ${phase.scripts.length}`);
174
+
175
+ const prompt = buildGeminiPrompt(phaseName, phase, params);
176
+
177
+ const proc = spawnSync('gemini', ['-m', MODEL, '-p', prompt], {
178
+ encoding: 'utf8',
179
+ maxBuffer: 10 * 1024 * 1024, // 10MB
180
+ timeout: 600000 // 10 minutes
181
+ });
182
+
183
+ if (proc.error || proc.status !== 0) {
184
+ console.error(`\n❌ Gemini CLI error:`);
185
+ console.error(proc.stderr || proc.error?.message);
186
+ return { success: false, error: proc.stderr || proc.error?.message };
187
+ }
188
+
189
+ const output = proc.stdout;
190
+ console.log(`\n📋 Gemini CLI Output:`);
191
+ console.log(output);
192
+
193
+ // Validate outputs exist
194
+ const validationResult = validatePhaseOutputs(phaseName, params.brand);
195
+
196
+ if (!validationResult.success) {
197
+ console.error(`\n❌ Output validation failed:`);
198
+ console.error(` Missing: ${validationResult.missing.join(', ')}`);
199
+ return { success: false, error: 'Output validation failed', ...validationResult };
200
+ }
201
+
202
+ console.log(`\n✅ Phase "${phaseName}" completed successfully`);
203
+ console.log(` Outputs: ${validationResult.found.length}/${validationResult.expected.length}`);
204
+
205
+ return {
206
+ success: true,
207
+ outputs: validationResult.found,
208
+ summary: extractSummary(output)
209
+ };
210
+ }
211
+
212
+ function buildGeminiPrompt(phaseName, phase, params) {
213
+ const lines = [];
214
+
215
+ lines.push(`You are a topical authority automation assistant. Execute the following scripts sequentially and report results.`);
216
+ lines.push(``);
217
+ lines.push(`**Phase**: ${phase.name}`);
218
+ lines.push(`**Brand**: ${params.brand}`);
219
+ lines.push(``);
220
+ lines.push(`**Scripts to Execute**:`);
221
+ lines.push(``);
222
+
223
+ phase.scripts.forEach((script, idx) => {
224
+ const cmd = `node ${script.file} ${interpolateArgs(script.args, params)}`;
225
+ lines.push(`${idx + 1}. Script: ${script.file}`);
226
+ lines.push(` Command: ${cmd}`);
227
+ lines.push(``);
228
+ });
229
+
230
+ lines.push(`**Instructions**:`);
231
+ lines.push(`1. Execute each script in order using the Node.js runtime`);
232
+ lines.push(`2. Wait for each script to complete before starting the next`);
233
+ lines.push(`3. Capture stdout and stderr from each execution`);
234
+ lines.push(`4. If a script fails, stop and report the error`);
235
+ lines.push(`5. After all scripts succeed, report:`);
236
+ lines.push(` - Total execution time`);
237
+ lines.push(` - Summary statistics from each script`);
238
+ lines.push(` - Any warnings or errors encountered`);
239
+ lines.push(` - List of output files created`);
240
+ lines.push(``);
241
+ lines.push(`**Expected Outputs**:`);
242
+ phase.outputs.forEach(output => {
243
+ lines.push(`- ${interpolateArgs(output, params)}`);
244
+ });
245
+ lines.push(``);
246
+ lines.push(`**Important**:`);
247
+ lines.push(`- Use absolute paths from project root`);
248
+ lines.push(`- Ensure all output directories exist (scripts create them)`);
249
+ lines.push(`- Report success/failure for each script`);
250
+ lines.push(`- Include key metrics in summary (e.g., keywords found, clusters created, etc.)`);
251
+ lines.push(``);
252
+ lines.push(`Begin execution now. Report progress as you go.`);
253
+
254
+ return lines.join('\n');
255
+ }
256
+
257
+ function interpolateArgs(template, params) {
258
+ let result = template;
259
+
260
+ Object.entries(params).forEach(([key, value]) => {
261
+ result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
262
+ });
263
+
264
+ return result;
265
+ }
266
+
267
+ function validatePhaseOutputs(phaseName, brand) {
268
+ const phase = PHASES[phaseName];
269
+ const expected = phase.outputs.map(output =>
270
+ output.replace('{brand}', brand)
271
+ );
272
+
273
+ const found = [];
274
+ const missing = [];
275
+
276
+ expected.forEach(filePath => {
277
+ const fullPath = path.join(process.cwd(), filePath);
278
+ if (fs.existsSync(fullPath)) {
279
+ found.push(filePath);
280
+ } else {
281
+ missing.push(filePath);
282
+ }
283
+ });
284
+
285
+ return {
286
+ success: missing.length === 0,
287
+ expected: expected.length,
288
+ found,
289
+ missing
290
+ };
291
+ }
292
+
293
+ function extractSummary(output) {
294
+ // Extract key metrics from Gemini output
295
+ const lines = output.split('\n');
296
+
297
+ // Look for summary lines (lines with numbers and metrics)
298
+ const summaryLines = lines.filter(line =>
299
+ /✅|keywords|clusters|opportunities|gaps|health score/i.test(line)
300
+ );
301
+
302
+ return summaryLines.slice(0, 5).join(' | ') || 'Completed';
303
+ }
304
+
305
+ function getDefaultTopics(brand) {
306
+ // Load from ICP profiles if available
307
+ const icpFile = path.join(process.cwd(), 'brands', brand, 'content', '00-assets', 'icp-profiles.md');
308
+
309
+ if (fs.existsSync(icpFile)) {
310
+ const content = fs.readFileSync(icpFile, 'utf8');
311
+
312
+ // Extract topics from ICP (simple heuristic)
313
+ const topics = [];
314
+ if (/automation/i.test(content)) topics.push('automation');
315
+ if (/marketing/i.test(content)) topics.push('marketing');
316
+ if (/content/i.test(content)) topics.push('content marketing');
317
+ if (/ai/i.test(content)) topics.push('ai');
318
+ if (/productivity/i.test(content)) topics.push('productivity');
319
+
320
+ if (topics.length > 0) return topics.join(',');
321
+ }
322
+
323
+ // Fallback defaults by brand
324
+ const defaults = {
325
+ 'ai.withjai': 'ai automation,content marketing,productivity tools',
326
+ 'enchantents': 'luxury glamping,eco-tourism,boutique hospitality',
327
+ 'xelite-one': 'executive coaching,leadership development,business strategy',
328
+ 'voxcoach.online': 'public speaking,voice coaching,communication skills'
329
+ };
330
+
331
+ return defaults[brand] || 'business,marketing,productivity';
332
+ }
333
+
334
+ function getDefaultSeedKeywords(brand) {
335
+ // Load from business profile if available
336
+ const profileFile = path.join(process.cwd(), 'brands', brand, 'content', '00-assets', 'business-profile.md');
337
+
338
+ if (fs.existsSync(profileFile)) {
339
+ const content = fs.readFileSync(profileFile, 'utf8');
340
+
341
+ // Extract primary offering
342
+ const offeringMatch = content.match(/Primary Offering[:\s]+([^\n]+)/i);
343
+ if (offeringMatch) return offeringMatch[1].trim();
344
+ }
345
+
346
+ // Fallback defaults
347
+ const defaults = {
348
+ 'ai.withjai': 'ai content automation,automated newsletter,content workflow',
349
+ 'enchantents': 'luxury glamping,glamping business,eco-luxury tourism',
350
+ 'xelite-one': 'executive coaching,leadership coaching,business coaching',
351
+ 'voxcoach.online': 'voice training,public speaking coaching,communication skills'
352
+ };
353
+
354
+ return defaults[brand] || 'business automation,productivity,marketing';
355
+ }
356
+
357
+ if (require.main === module) {
358
+ try {
359
+ main();
360
+ } catch (err) {
361
+ console.error('❌ Orchestrator failed:', err.message);
362
+ console.error(err.stack);
363
+ process.exit(1);
364
+ }
365
+ }
366
+
367
+ module.exports = { runPhaseWithGemini, validatePhaseOutputs };
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ const path = require('path');
3
+ require(path.join(__dirname, '..', 'orchestrator.js'));
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ const path = require('path');
3
+ require(path.join(__dirname, '..', 'orchestrator.js'));