@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,121 @@
1
+ /**
2
+ * registry — adapter registry + selection policy.
3
+ *
4
+ * Selection policy (Phase 1):
5
+ * 1. Explicit `task.preferred` wins if that adapter is ready.
6
+ * 2. Capability-matched: tasks requiring tools/files go to tool-capable adapters.
7
+ * 3. Cost-optimized: among ready adapters that satisfy capabilities, pick the
8
+ * lowest blended cost per task (local opencode = $0 API cost, so it usually
9
+ * wins on cost; DeepSeek wins when opencode is unavailable or policy pins it).
10
+ *
11
+ * The persisted default lives in ~/.huckleberry/harness.json ("default": "<id>").
12
+ */
13
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
14
+ import { join, dirname } from "node:path";
15
+ import { OpenCodeAdapter } from "./opencode-adapter.js";
16
+ import { DeepSeekAdapter } from "./deepseek-adapter.js";
17
+ import { PiAdapter } from "./pi-adapter.js";
18
+
19
+ /** @type {Map<string, import("./types.js").HarnessAdapter>} */
20
+ const adapters = new Map();
21
+
22
+ export function register(adapter) {
23
+ adapters.set(adapter.id, adapter);
24
+ }
25
+
26
+ /** Built-in adapters, registered once at import. */
27
+ register(new OpenCodeAdapter());
28
+ register(new DeepSeekAdapter());
29
+ register(new PiAdapter());
30
+
31
+ /** @returns {string[]} registered adapter ids in registration order */
32
+ export function listIds() {
33
+ return [...adapters.keys()];
34
+ }
35
+
36
+ export function get(id) {
37
+ return adapters.get(id) || null;
38
+ }
39
+
40
+ /**
41
+ * Read the persisted default adapter id.
42
+ * @param {string} [home] state root (defaults to process HOME / sandbox HOME via caller)
43
+ * @returns {string|null}
44
+ */
45
+ export function loadDefault(home) {
46
+ const p = harnessConfigPath(home);
47
+ if (!existsSync(p)) return null;
48
+ try {
49
+ const j = JSON.parse(readFileSync(p, "utf8"));
50
+ return j.default || null;
51
+ } catch { return null; }
52
+ }
53
+
54
+ /**
55
+ * Persist the default adapter id.
56
+ * @param {string} id
57
+ * @param {string} [home]
58
+ */
59
+ export function saveDefault(id, home) {
60
+ if (!adapters.has(id)) throw new Error(`unknown adapter: ${id} (available: ${listIds().join(", ")})`);
61
+ const p = harnessConfigPath(home);
62
+ mkdirSync(dirname(p), { recursive: true });
63
+ writeFileSync(p, JSON.stringify({ default: id, updatedAt: new Date().toISOString() }, null, 2));
64
+ }
65
+
66
+ export function harnessConfigPath(home) {
67
+ const h = home || process.env.HUCKLEBERRY_HOME || process.env.HOME || "";
68
+ return join(h, ".huckleberry", "harness.json");
69
+ }
70
+
71
+ /**
72
+ * Selection policy. See module doc for the ordering.
73
+ * @param {import("./types.js").TaskRequest & {preferred?:string}} task
74
+ * @param {string|null} [defaultId] persisted default (harness.json)
75
+ * @returns {Promise<{adapter: import("./types.js").HarnessAdapter, why: string}>}
76
+ */
77
+ export async function selectAdapter(task = {}, defaultId = null) {
78
+ const candidates = [];
79
+ // 1. explicit preference
80
+ if (task.preferred && adapters.has(task.preferred)) candidates.push([task.preferred, "explicit task preference"]);
81
+ if (defaultId && adapters.has(defaultId)) candidates.push([defaultId, "persisted default (harness set)"]);
82
+ // fallback order: cost-optimized (deepseek), then lean local agent (pi), then local default
83
+ candidates.push(["deepseek", "cost-optimized fallback"]);
84
+ candidates.push(["pi", "lean cold-start fallback"]);
85
+ candidates.push(["opencode", "local default fallback"]);
86
+
87
+ const needTools = task.requireTools === true;
88
+ for (const [id, why] of candidates) {
89
+ const a = adapters.get(id);
90
+ if (!a) continue;
91
+ const caps = a.capabilities();
92
+ if (needTools && !caps.tools) continue; // capability-matched gate
93
+ const st = await a.status();
94
+ if (st.ready) return { adapter: a, why };
95
+ }
96
+ throw new Error("no ready adapter — install opencode or set DEEPSEEK_API_KEY");
97
+ }
98
+
99
+ /**
100
+ * Table row data for `huckleberry harness list`.
101
+ * @param {string} [home]
102
+ */
103
+ export async function describeAdapters(home) {
104
+ const defaultId = loadDefault(home);
105
+ const rows = [];
106
+ for (const id of listIds()) {
107
+ const a = adapters.get(id);
108
+ const st = await a.status();
109
+ const caps = a.capabilities();
110
+ rows.push({
111
+ id,
112
+ label: a.label,
113
+ ready: st.ready,
114
+ reason: st.reason || null,
115
+ detail: st.detail || null,
116
+ caps,
117
+ isDefault: id === defaultId,
118
+ });
119
+ }
120
+ return { rows, defaultId };
121
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Telemetry — per-task token + cost recording as JSON lines.
3
+ *
4
+ * One JSONL file per harness run: tests/baseline/telemetry-<runId>.jsonl
5
+ * Each line: { ts, runId, taskId, adapterId, model, status, usage, costUsd, durationMs }
6
+ * Append-only; a run summary is written next to it on close (see writeSummary).
7
+ */
8
+ import { appendFileSync, writeFileSync, mkdirSync, readFileSync, existsSync } from "node:fs";
9
+ import { join, dirname } from "node:path";
10
+
11
+ export class Telemetry {
12
+ /**
13
+ * @param {string} filePath absolute path of the JSONL output
14
+ * @param {string} runId
15
+ */
16
+ constructor(filePath, runId) {
17
+ this.filePath = filePath;
18
+ this.runId = runId;
19
+ this.records = [];
20
+ mkdirSync(dirname(filePath), { recursive: true });
21
+ // header line makes each file self-describing
22
+ appendFileSync(filePath, JSON.stringify({
23
+ ts: new Date().toISOString(),
24
+ runId,
25
+ event: "run-start",
26
+ }) + "\n");
27
+ }
28
+
29
+ /**
30
+ * Record one task result.
31
+ * @param {{taskId:string, adapterId:string, model?:string, status:string,
32
+ * usage:{input:number, output:number, cacheHit?:number, cacheMiss?:number},
33
+ * costUsd:number, durationMs:number, error?:string}} r
34
+ */
35
+ record(r) {
36
+ const line = {
37
+ ts: new Date().toISOString(),
38
+ runId: this.runId,
39
+ taskId: r.taskId,
40
+ adapterId: r.adapterId,
41
+ model: r.model || null,
42
+ status: r.status,
43
+ usage: {
44
+ input: r.usage?.input || 0,
45
+ output: r.usage?.output || 0,
46
+ cacheHit: r.usage?.cacheHit ?? null,
47
+ cacheMiss: r.usage?.cacheMiss ?? null,
48
+ },
49
+ costUsd: Math.round((r.costUsd || 0) * 1e6) / 1e6,
50
+ durationMs: r.durationMs || 0,
51
+ };
52
+ if (r.error) line.error = r.error;
53
+ this.records.push(line);
54
+ appendFileSync(this.filePath, JSON.stringify(line) + "\n");
55
+ }
56
+
57
+ /**
58
+ * Write a run summary JSON alongside the JSONL and return it.
59
+ * @returns {{runId:string, telemetryFile:string, tasks:number, ok:number, failed:number,
60
+ * tokensIn:number, tokensOut:number, costUsd:number, byAdapter:Object}}
61
+ */
62
+ writeSummary() {
63
+ const byAdapter = {};
64
+ for (const r of this.records) {
65
+ const a = (byAdapter[r.adapterId] ||= { tasks: 0, ok: 0, failed: 0, tokensIn: 0, tokensOut: 0, costUsd: 0 });
66
+ a.tasks++;
67
+ if (r.status === "ok") a.ok++; else a.failed++;
68
+ a.tokensIn += r.usage.input;
69
+ a.tokensOut += r.usage.output;
70
+ a.costUsd = Math.round((a.costUsd + r.costUsd) * 1e6) / 1e6;
71
+ }
72
+ const summary = {
73
+ runId: this.runId,
74
+ finishedAt: new Date().toISOString(),
75
+ telemetryFile: this.filePath,
76
+ tasks: this.records.length,
77
+ ok: this.records.filter(r => r.status === "ok").length,
78
+ failed: this.records.filter(r => r.status !== "ok").length,
79
+ tokensIn: this.records.reduce((s, r) => s + r.usage.input, 0),
80
+ tokensOut: this.records.reduce((s, r) => s + r.usage.output, 0),
81
+ costUsd: Math.round(this.records.reduce((s, r) => s + r.costUsd, 0) * 1e6) / 1e6,
82
+ byAdapter,
83
+ };
84
+ const summaryPath = this.filePath.replace(/\.jsonl$/, "-summary.json");
85
+ writeFileSync(summaryPath, JSON.stringify(summary, null, 2));
86
+ return summary;
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Read back a telemetry JSONL file (used by comparison tooling).
92
+ * @param {string} filePath
93
+ * @returns {Array<Object>}
94
+ */
95
+ export function readTelemetry(filePath) {
96
+ if (!existsSync(filePath)) return [];
97
+ return readFileSync(filePath, "utf8")
98
+ .split("\n")
99
+ .filter(l => l.trim())
100
+ .map(l => { try { return JSON.parse(l); } catch { return null; } })
101
+ .filter(Boolean);
102
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * HarnessAdapter — the contract every execution harness implements.
3
+ *
4
+ * A "harness" is the thing that actually runs an agent task: the default is the
5
+ * local `opencode` CLI (existing behavior); alternatives route the same task to a
6
+ * different engine (e.g. the DeepSeek API) so cost/capability can be traded off
7
+ * per task. The interface is deliberately plain JSDoc so the repo stays build-free.
8
+ *
9
+ * Implementations live alongside this file (`opencode-adapter.js`,
10
+ * `deepseek-adapter.js`) and are registered in `registry.js`.
11
+ *
12
+ * @typedef {Object} TaskRequest
13
+ * @property {string} id Stable task id (e.g. golden task id).
14
+ * @property {string} prompt The instruction to run.
15
+ * @property {string} [cwd] Working directory the task should operate in.
16
+ * @property {string} [agent] Named agent for engines that support it (opencode).
17
+ * @property {string} [model] Model id override.
18
+ * @property {number} [maxTokens] Output token cap.
19
+ * @property {string} [system] Optional system prompt.
20
+ * @property {Record<string,string>} [meta] Free-form task metadata (tenant, client…).
21
+ *
22
+ * @typedef {Object} TaskResult
23
+ * @property {string} taskId Which task ran.
24
+ * @property {string} adapterId Which harness produced it.
25
+ * @property {"ok"|"error"|"cancelled"} status
26
+ * @property {string} output Final text output.
27
+ * @property {string} [error] Error message when status!=="ok".
28
+ * @property {string} [stderr] Diagnostic stderr (non-fatal engine log noise).
29
+ * @property {TokenUsage} usage
30
+ * @property {number} costUsd Estimated cost in USD.
31
+ * @property {number} durationMs
32
+ * @property {string} startedAt ISO timestamp.
33
+ * @property {string} [checkpointId] Resume handle when supported.
34
+ * @property {string[]} [files] Files produced by the task.
35
+ *
36
+ * @typedef {Object} TokenUsage
37
+ * @property {number} input
38
+ * @property {number} output
39
+ * @property {number} [cacheHit] Input tokens served from cache.
40
+ * @property {number} [cacheMiss] Input tokens billed at full rate.
41
+ *
42
+ * @typedef {Object} Capabilities
43
+ * @property {boolean} streaming Yields incremental output.
44
+ * @property {boolean} checkpoint Can snapshot/resume a run.
45
+ * @property {boolean} cancel Can abort an in-flight run.
46
+ * @property {boolean} files Can return produced files.
47
+ * @property {boolean} tools Runs tools / filesystem access.
48
+ * @property {boolean} modelChoice Supports per-call model selection.
49
+ * @property {number} costPerMTokIn Rough blended input price (USD / 1M tok).
50
+ * @property {number} costPerMTokOut Rough blended output price (USD / 1M tok).
51
+ *
52
+ * @typedef {Object} AdapterStatus
53
+ * @property {boolean} ready
54
+ * @property {string} [reason] Why not ready (e.g. missing credential).
55
+ * @property {string} [detail]
56
+ */
57
+
58
+ /**
59
+ * Marker base class. Adapters may extend it or merely satisfy the shape.
60
+ * Every method documented here is REQUIRED unless marked optional.
61
+ */
62
+ export class HarnessAdapter {
63
+ /** @param {Object} [opts] */
64
+ constructor(opts = {}) {
65
+ this.id = opts.id || "unnamed";
66
+ this.label = opts.label || this.id;
67
+ }
68
+
69
+ /** @returns {Capabilities} */
70
+ capabilities() {
71
+ throw new Error(`${this.id}: capabilities() not implemented`);
72
+ }
73
+
74
+ /** @returns {Promise<AdapterStatus>} readiness probe (creds, binaries, network) */
75
+ async status() {
76
+ throw new Error(`${this.id}: status() not implemented`);
77
+ }
78
+
79
+ /**
80
+ * Run a task to completion. REQUIRED.
81
+ * @param {TaskRequest} task
82
+ * @returns {Promise<TaskResult>}
83
+ */
84
+ async submit(_task) {
85
+ throw new Error(`${this.id}: submit() not implemented`);
86
+ }
87
+
88
+ /**
89
+ * Incremental output. OPTIONAL — callers fall back to submit() output.
90
+ * @param {TaskRequest} task
91
+ * @returns {AsyncIterable<string>}
92
+ */
93
+ async *stream(_task) {
94
+ throw new Error(`${this.id}: stream() not implemented`);
95
+ }
96
+
97
+ /**
98
+ * Snapshot an in-flight task so it can resume later. OPTIONAL.
99
+ * @param {string} _taskId
100
+ * @returns {Promise<string|null>} checkpoint id, or null if unsupported
101
+ */
102
+ async checkpoint(_taskId) {
103
+ return null;
104
+ }
105
+
106
+ /**
107
+ * Resume from a checkpoint id. OPTIONAL.
108
+ * @param {string} _checkpointId
109
+ * @returns {Promise<TaskResult>}
110
+ */
111
+ async resume(_checkpointId) {
112
+ throw new Error(`${this.id}: resume() not implemented`);
113
+ }
114
+
115
+ /**
116
+ * Cancel an in-flight task. OPTIONAL.
117
+ * @param {string} _taskId
118
+ * @returns {Promise<boolean>} true if a run was cancelled
119
+ */
120
+ async cancel(_taskId) {
121
+ return false;
122
+ }
123
+
124
+ /**
125
+ * Return files produced by a task. OPTIONAL.
126
+ * @param {string} _taskId
127
+ * @returns {Promise<string[]>} absolute paths
128
+ */
129
+ async downloadFiles(_taskId) {
130
+ return [];
131
+ }
132
+ }
133
+
134
+ /** @returns {string} ISO timestamp helper */
135
+ export function nowIso() {
136
+ return new Date().toISOString();
137
+ }
138
+
139
+ /**
140
+ * Round a USD cost to 6 decimal places (sub-cent precision, stable JSON output).
141
+ * @param {number} n
142
+ * @returns {number}
143
+ */
144
+ export function roundCost(n) {
145
+ return Math.round((Number.isFinite(n) ? n : 0) * 1e6) / 1e6;
146
+ }
147
+
148
+ /**
149
+ * Build a zeroed TaskResult with sane defaults, so adapters only fill what differs.
150
+ * @param {TaskRequest & {adapterId: string}} t
151
+ * @returns {TaskResult}
152
+ */
153
+ export function baseResult(t) {
154
+ return {
155
+ taskId: t.id,
156
+ adapterId: t.adapterId,
157
+ status: "ok",
158
+ output: "",
159
+ usage: { input: 0, output: 0 },
160
+ costUsd: 0,
161
+ durationMs: 0,
162
+ startedAt: nowIso(),
163
+ files: [],
164
+ };
165
+ }
package/src/interview.js CHANGED
@@ -1,8 +1,10 @@
1
1
  import { readFileSync, writeFileSync, existsSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import { homedir } from "node:os";
3
4
  import { createInterface } from "node:readline";
4
5
 
5
- const HB_DIR = join(process.env.HOME || process.env.USERPROFILE, ".huckleberry");
6
+ const HOME = homedir();
7
+ const HB_DIR = join(HOME, ".huckleberry");
6
8
 
7
9
  function ask(rl, question) {
8
10
  return new Promise((resolve) => {
@@ -11,9 +13,9 @@ function ask(rl, question) {
11
13
  }
12
14
 
13
15
  export async function runInterview() {
14
- console.log(`\n ╔══════════════════════════════════════════════════════════╗`);
15
- console.log(` ║ HUCKLEBERRY — First Run Setup ║`);
16
- console.log(` ╚══════════════════════════════════════════════════════════╝`);
16
+ console.log(`\n ╔════════════════════════════════════════════════════════════╗`);
17
+ console.log(` ║ HUCKLEBERRY — First Run Setup ║`);
18
+ console.log(` ╚════════════════════════════════════════════════════════════╝`);
17
19
  console.log(`\n I'll ask a few questions to set up your AI system.\n`);
18
20
 
19
21
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -32,6 +34,10 @@ export async function runInterview() {
32
34
 
33
35
  console.log(`\n Help areas (comma-separated): outreach, content, research, social, seo, marketing, ops, all`);
34
36
  answers.priorities = await ask(rl, ">");
37
+
38
+ console.log(`\n Optional keys (press Enter to skip — you can add them later in ~/.huckleberry/.env):`);
39
+ answers.typesafeKey = await ask(rl, "TypeSafe Jev API key (typesafe.ai)?");
40
+ answers.discordToken = await ask(rl, "Discord bot token?");
35
41
  rl.close();
36
42
 
37
43
  writeFileSync(join(HB_DIR, "USER.md"), [
@@ -73,6 +79,32 @@ export async function runInterview() {
73
79
  }
74
80
  }
75
81
 
82
+ // Write provided keys into ~/.huckleberry/.env (never overwrite existing values)
83
+ const envFile = join(HB_DIR, ".env");
84
+ let env = existsSync(envFile) ? readFileSync(envFile, "utf-8") : "DISCORD_BOT_TOKEN=\nTYPESAFE_API_KEY=\n";
85
+ const setIfEmpty = (key, val) => {
86
+ if (!val) return;
87
+ const re = new RegExp(`^${key}=.*$`, "m");
88
+ env = re.test(env) ? env.replace(re, `${key}=${val}`) : `${env}${key}=${val}\n`;
89
+ };
90
+ setIfEmpty("TYPESAFE_API_KEY", answers.typesafeKey);
91
+ setIfEmpty("DISCORD_BOT_TOKEN", answers.discordToken);
92
+ writeFileSync(envFile, env, "utf-8");
93
+
94
+ // Patch the Jev MCP env in ~/.opencode/opencode.json so judgment tools work out of the box
95
+ if (answers.typesafeKey) {
96
+ const ocFile = join(HOME, ".opencode", "opencode.json");
97
+ if (existsSync(ocFile)) {
98
+ try {
99
+ const cfg = JSON.parse(readFileSync(ocFile, "utf-8"));
100
+ if (cfg.mcp?.jev?.environment) cfg.mcp.jev.environment.TYPESAFE_API_KEY = answers.typesafeKey;
101
+ writeFileSync(ocFile, JSON.stringify(cfg, null, 2));
102
+ } catch { /* leave config untouched if invalid */ }
103
+ }
104
+ }
105
+
76
106
  console.log(`\n ✓ USER.md, evergreen.md, SOUL.md, IDENTITY.md generated`);
107
+ if (answers.typesafeKey) console.log(` ✓ Jev judgment layer configured`);
108
+ if (answers.discordToken) console.log(` ✓ Discord token saved to ~/.huckleberry/.env (see ~/.huckleberry/wiki/discord.md to finish wiring)`);
77
109
  console.log(` Next: type 'opencode' to start with your COS.\n`);
78
110
  }
@@ -1,22 +1,20 @@
1
- // Post-install script: runs after npm install -g @huckleberry/cli
2
- // Prints next steps for the user
3
-
1
+ // Post-install banner — runs after npm install -g @jairodri/huckleberry-cli
4
2
  console.log(`
5
- ╔══════════════════════════════════════════════════════════╗
6
- ║ HUCKLEBERRY AI SYSTEM INSTALLED ║
7
- ╚══════════════════════════════════════════════════════════╝
8
-
3
+ ╔════════════════════════════════════════════════════════════╗
4
+ ║ HUCKLEBERRY AI SYSTEM INSTALLED ║
5
+ ╚════════════════════════════════════════════════════════════╝
9
6
  Get started:
10
7
  1. huckleberry install — set up the system
11
8
  2. npm install -g opencode — install opencode
12
9
  3. npm install -g kimaki — install kimaki
13
10
  4. huckleberry interview — configure your agent
14
-
15
11
  Commands:
16
12
  huckleberry help — show all commands
13
+ huckleberry doctor — health check (run when anything feels off)
14
+ huckleberry packs — list skill packs
15
+ huckleberry install-pack all — deploy every skill pack
16
+ huckleberry cro <url> — CRO audit of a landing page
17
+ huckleberry review — weekly self-improvement review
17
18
  huckleberry update — update to latest version
18
- huckleberry install-pack — add agent packs
19
-
20
- Documentation:
21
- https://huckleberry.ai/docs
19
+ Documentation: https://huckleberry.ai
22
20
  `);
@@ -1,16 +1,23 @@
1
1
  # AGENTS.md — Workspace Rules & Protocols
2
2
 
3
3
  ## STARTUP RITUAL (MANDATORY)
4
+ **Bootstrap context files (VERIFY, do not assume injection):**
5
+ At session start, check whether your context already contains SOUL.md, USER.md, IDENTITY.md, COS_PROTOCOLS.md, TOOLS.md, and HEARTBEAT.md content (workspace root or your agent workspace). **If NOT present, read them yourself before doing any work.** These files define who you are, who the user is, your operating principles, and available tools. Operating without them = protocol breach. Never claim context you don't have, and never skip them because "bootstrap should have injected them."
6
+
4
7
  BEFORE responding to any message:
5
- 1. Run Inkstone pre-injection: `inkstone_memory_failures()` + `inkstone_memory_search(query, namespace, limit=5)`
6
- 2. Read `memory/YYYY-MM-DD.md` for today
7
- 3. Read `.huckleberry/taskmaster/tasks/tasks.json` — what's active
8
- 4. Read memory/corrections.md — active corrections
8
+ 1. Read `memory/YYYY-MM-DD.md` for today
9
+ 2. Read `.huckleberry/taskmaster/tasks/tasks.json` — what's active
10
+ 3. Read memory/corrections.md — active corrections
11
+
12
+ ## Inkstone Memory Tools
13
+ Inkstone holds 25K+ structured decisions, preferences, procedures, contacts, failures. Boot context is auto-injected by the plugin on startup.
9
14
 
10
- ## Inkstone Pre-Injection (MANDATORY)
11
- **Before any task:** run `inkstone_memory_failures()` + `inkstone_memory_search()`.
12
- If you see `[dedup:ref sha=...]` from any tool, the precheck hasn't been done yet — run it now.
13
- Soft dependency: if Inkstone MCP is down, skip and proceed.
15
+ Routing by task:
16
+ - Decision / preference / procedure → `inkstone_memory_search(query, namespace, limit=5)`
17
+ - Repeating a past mistake → `inkstone_memory_failures()`
18
+ - Broad archive / historical → `inkstone_memory_hybrid_answer` / `inkstone_memory_deep_query`
19
+
20
+ Soft dependency: if Inkstone MCP is down, skip and proceed. Do NOT block or loop.
14
21
 
15
22
  ## COS Operations
16
23
  - You are the Chief of Staff — an orchestrator, not a worker
@@ -60,13 +67,6 @@ Before responding to business tasks, read `evergreen.md` to know the business.
60
67
  - When blocked after 2 attempts, report: what tried, what failed, what's next
61
68
  - Prefer finished work over status updates
62
69
 
63
- ## Huckleberry MCP (when available)
64
- - `huckleberry_packs_list` — check available packs
65
- - `huckleberry_pack_install` — download and configure
66
- - `huckleberry_combos_check` — latest model combos
67
- - `huckleberry_update_check` — check for updates
68
- - `huckleberry_ideas_generate` — strategy suggestions
69
-
70
70
  ## Memory System
71
71
  - Write immediately when insight happens — not at session end
72
72
  - Source every claim: `(source: session X)` or `(source: user directive, YYYY-MM-DD)`
@@ -86,5 +86,5 @@ Before responding to business tasks, read `evergreen.md` to know the business.
86
86
 
87
87
  ## Kanban Workflows (optional)
88
88
  - Templates in `.huckleberry/kanban/templates/`
89
- - List: `bun src/cli.mjs templates` (if kanban sourcedir exists)
90
- - Stamp: `bun src/cli.mjs stamp <template> --var key=val`
89
+ - List: `bun ~/.huckleberry/kanban/src/cli.mjs templates` (if kanban sourcedir exists)
90
+ - Stamp: `bun ~/.huckleberry/kanban/src/cli.mjs stamp <template> --var key=val`
package/templates/ORG.md CHANGED
@@ -26,7 +26,7 @@
26
26
  ~/.opencode/
27
27
  ├── opencode.json # Main config
28
28
  ├── plugin/env-inject.ts # .env auto-loader
29
- ├── plugin/inkstone-gate.ts # Pre-injection gate
29
+ ├── plugin/inkstone-priority.ts # Inkstone boot-context injection (no gate)
30
30
  └── mcp/ # MCP server files
31
31
 
32
32
  ~/.claude/skills/ # Installed skills
@@ -16,8 +16,13 @@
16
16
  | Command | Purpose |
17
17
  |---------|---------|
18
18
  | `huckleberry install` | Install Huckleberry system |
19
+ | `huckleberry interview` | Personalize agents (name, business, keys) |
20
+ | `huckleberry doctor` | Health check — run when anything feels off |
21
+ | `huckleberry packs` | List available skill packs |
22
+ | `huckleberry install-pack <name>` | Deploy a skill pack (core, doctor, content, cro, web-design, research, outreach-sales, social, self-improvement, all) |
23
+ | `huckleberry cro <url>` | CRO audit of a landing page |
24
+ | `huckleberry review` | Weekly self-improvement review (proposals only) |
19
25
  | `huckleberry update` | Update to latest version |
20
- | `huckleberry install-pack <name>` | Install agent/skill pack |
21
26
  | `huckleberry version` | Show version |
22
27
 
23
28
  ## Inkstone (Memory)
@@ -63,4 +68,4 @@
63
68
  |--------|---------|
64
69
  | Inkstone MCP | Memory search, write, dream cycle, graph |
65
70
  | Context7 MCP | Documentation lookup for libraries/tools |
66
- | Gemini Codegen MCP | Free code generation via Gemini |
71
+ | Jev MCP | Fast judgment tools (classify, rerank, verify, gate) |
@@ -1,5 +1,16 @@
1
1
  {
2
2
  "$schema": "https://opencode.ai/config.json",
3
+ "harness-policy": {
4
+ "default": "opencode",
5
+ "selection": "capability-matched, then cost-optimized",
6
+ "rules": {
7
+ "toolsRequired": "opencode",
8
+ "costOptimized": "deepseek",
9
+ "requireApprovalAboveCostUsd": 5,
10
+ "requireApprovalAboveTokens": 50000,
11
+ "escalateOnConsecutiveFailures": 2
12
+ }
13
+ },
3
14
  "mcp": {
4
15
  "inkstone": {
5
16
  "type": "local",
@@ -14,27 +25,23 @@
14
25
  },
15
26
  "context7": {
16
27
  "type": "local",
17
- "command": ["npx", "-y", "@context7/server"],
28
+ "command": [
29
+ "npx",
30
+ "-y",
31
+ "@context7/server"
32
+ ],
18
33
  "enabled": true
19
34
  },
20
- "gemini_codegen": {
35
+ "jev": {
21
36
  "type": "local",
22
37
  "command": [
23
38
  "node",
24
- "{{USERPROFILE}}/.opencode/mcp/gemini-codegen-server.mjs"
39
+ "{{USERPROFILE}}/.huckleberry/mcp/jev-mcp/node_modules/@jkudish/jev-mcp/dist/index.js"
25
40
  ],
26
41
  "enabled": true,
27
42
  "environment": {
28
- "GEMINI_API_KEY": ""
43
+ "TYPESAFE_API_KEY": ""
29
44
  }
30
- },
31
- "huckleberry": {
32
- "type": "local",
33
- "command": [
34
- "huckleberry",
35
- "mcp"
36
- ],
37
- "enabled": true
38
45
  }
39
46
  },
40
47
  "permission": {
@@ -42,8 +49,7 @@
42
49
  },
43
50
  "plugin": [
44
51
  "./plugin/env-inject.ts",
45
- "./plugin/inkstone-gate.ts",
46
- "context-mode"
52
+ "./plugin/inkstone-gate.ts"
47
53
  ],
48
54
  "compaction": {
49
55
  "mode": "safeguard",
@@ -52,29 +58,20 @@
52
58
  },
53
59
  "agent": {
54
60
  "build": {
55
- "description": "Default executor. Runs tools, writes files, completes tasks.",
56
- "mode": "primary",
57
- "model": "omniroute/combo/freellmapi smart models"
61
+ "description": "Default executor. Runs tools, writes files, completes tasks."
58
62
  },
59
63
  "plan": {
60
- "description": "Read-only strategy and analysis. Research tasks only.",
61
- "mode": "primary",
62
- "model": "omniroute/combo/freellmapi smart models"
64
+ "description": "Read-only strategy and analysis. Research tasks only."
63
65
  },
64
66
  "researcher": {
65
- "description": "Web research, intelligence gathering, competitive analysis.",
66
- "mode": "primary",
67
- "model": "omniroute/combo/freellmapi smart models"
67
+ "description": "Web research, intelligence gathering, competitive analysis."
68
68
  },
69
69
  "hermes": {
70
- "description": "System administrator. Troubleshoots and repairs the Huckleberry stack.",
71
- "model": "omniroute/combo/freellmapi smart models",
72
- "instructions": [
73
- "./instructions/hermes.md"
74
- ]
70
+ "description": "System administrator. Diagnoses and repairs the Huckleberry stack (kimaki, Discord, opencode, Inkstone, Jev).",
71
+ "prompt": "You are Hermes, the Huckleberry system administrator. At session start, BEFORE any work, read: ~/.huckleberry/agents/hermes/SOUL.md, ~/.huckleberry/agents/hermes/AGENTS.md, ~/.huckleberry/agents/hermes/hermes-fixer.md, and the wiki files in ~/.huckleberry/wiki/ (kimaki.md, discord.md, opencode.md, inkstone.md, doctor.md). When something breaks: diagnose first (or run `huckleberry doctor`), fix the root cause, verify every fix with a live test, and never print secret values. Escalate after 3 real failed attempts with what you tried, exact errors, and your recommended next step."
75
72
  }
76
73
  },
77
74
  "instructions": [
78
- "./instructions/business-context-gate.md"
75
+ "{{USERPROFILE}}/.huckleberry/business-context-gate.md"
79
76
  ]
80
77
  }