@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,184 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test script for Self-Improving Agent skill.
4
+ Tests all components without requiring external APIs.
5
+ """
6
+
7
+ import sys
8
+ from pathlib import Path
9
+
10
+ # Add project root
11
+ PROJECT_ROOT = Path(__file__).parent.parent.parent.parent
12
+ sys.path.insert(0, str(PROJECT_ROOT))
13
+
14
+ # Import directly from the script files
15
+ sys.path.insert(0, str(Path(__file__).parent))
16
+ from self_improving_agent import ExpertiseGapDetector, ResearchPipeline
17
+ from auto_detect import AutoExpertiseDetector, check_and_research
18
+
19
+ def test_expertise_detector():
20
+ """Test expertise gap detection."""
21
+ print("=" * 60)
22
+ print("TEST: ExpertiseGapDetector")
23
+ print("=" * 60)
24
+
25
+ detector = ExpertiseGapDetector("clawd")
26
+
27
+ # Test checking unknown topic
28
+ result = detector.check_expertise("quantum computing")
29
+ print(f"Unknown topic check: {result}")
30
+ assert result["needs_research"] == True
31
+ assert result["confidence"] == 0.0
32
+ print("✅ Unknown topic correctly identified as needing research")
33
+
34
+ # Test registry registration
35
+ slug = detector.register_expertise(
36
+ topic="quantum computing",
37
+ confidence=0.9,
38
+ notebook_id="nb-123",
39
+ source_count=25,
40
+ topics_mastered=["qubits", "superposition", "entanglement"]
41
+ )
42
+ print(f"Registered with slug: {slug}")
43
+
44
+ # Test checking known topic
45
+ result = detector.check_expertise("quantum computing")
46
+ print(f"Known topic check: {result}")
47
+ assert result["has_expertise"] == True
48
+ assert result["confidence"] >= 0.9
49
+ print("✅ Known topic correctly identified as mastered")
50
+
51
+ # Test expertise status
52
+ status = detector.get_expertise_status()
53
+ print(f"Expertise status: {status}")
54
+ assert status["total_topics"] == 1
55
+ print("✅ Expertise status shows registered topics")
56
+
57
+ # Test find best agent
58
+ best = detector.find_best_agent("quantum computing")
59
+ print(f"Best agent: {best}")
60
+ assert best["agent"] == "clawd"
61
+ print("✅ Find best agent works")
62
+
63
+ print("\n✅ All ExpertiseGapDetector tests passed!\n")
64
+
65
+ def test_research_pipeline():
66
+ """Test research pipeline (mock mode)."""
67
+ print("=" * 60)
68
+ print("TEST: ResearchPipeline (Mock)")
69
+ print("=" * 60)
70
+
71
+ pipeline = ResearchPipeline("clawd")
72
+
73
+ # Test question formulation
74
+ questions = pipeline._formulate_questions("Rust async patterns", "mindmap placeholder")
75
+ print(f"Generated {len(questions)} questions")
76
+ assert len(questions) >= 10
77
+ print("✅ Question formulation generates comprehensive questions")
78
+
79
+ # Test categorization
80
+ categories = set()
81
+ for q in questions:
82
+ cat = pipeline._categorize_question(q)
83
+ categories.add(cat)
84
+ print(f" [{cat}] {q[:60]}...")
85
+
86
+ expected_categories = {"foundational", "expert_patterns", "contrarian",
87
+ "implementation", "failure_modes", "evolution",
88
+ "integration", "metrics"}
89
+ assert expected_categories.issubset(categories)
90
+ print(f"✅ All {len(expected_categories)} expected categories covered")
91
+
92
+ # Test pattern extraction
93
+ mock_qa = [
94
+ {"question": "How to implement X?", "answer": "Implementation details...", "category": "implementation"},
95
+ {"question": "How to scale X?", "answer": "Scaling details...", "category": "scaling"},
96
+ {"question": "What is X?", "answer": "Definition...", "category": "foundational"}
97
+ ]
98
+ patterns = pipeline._extract_patterns(mock_qa)
99
+ print(f"Extracted patterns:\n{patterns}")
100
+ assert "Implementation Patterns" in patterns
101
+ assert "implementation" in patterns.lower()
102
+ print("✅ Pattern extraction works")
103
+
104
+ print("\n✅ All ResearchPipeline tests passed!\n")
105
+
106
+ def test_auto_detector():
107
+ """Test auto-detection integration."""
108
+ print("=" * 60)
109
+ print("TEST: AutoExpertiseDetector")
110
+ print("=" * 60)
111
+
112
+ detector = AutoExpertiseDetector("clawd", auto_research=False)
113
+
114
+ # Test query analysis
115
+ test_queries = [
116
+ "How do I set up a high-frequency trading bot with Rust?",
117
+ "What's the best way to optimize PostgreSQL queries?",
118
+ "Explain the transformer architecture in simple terms",
119
+ "Compare Kubernetes vs Docker Swarm for production",
120
+ "Hello, how are you today?" # Non-technical
121
+ ]
122
+
123
+ for query in test_queries:
124
+ print(f"\nQuery: {query}")
125
+ result = detector.analyze_query(query)
126
+ print(f" Topics detected: {result['topics_detected']}")
127
+ print(f" Gaps found: {len(result['gaps_found'])}")
128
+ for gap in result['gaps_found']:
129
+ print(f" - {gap['topic']} (confidence: {gap['confidence']})")
130
+
131
+ # Test stats
132
+ stats = detector.get_stats()
133
+ print(f"\nDetection stats: {stats}")
134
+
135
+ print("\n✅ All AutoExpertiseDetector tests passed!\n")
136
+
137
+ def test_integration():
138
+ """Test full integration flow."""
139
+ print("=" * 60)
140
+ print("TEST: Integration Flow")
141
+ print("=" * 60)
142
+
143
+ # Simulate agent receiving a query
144
+ agent_name = "clawd"
145
+ user_query = "How do I implement a vector database for RAG with Pinecone?"
146
+
147
+ print(f"Agent: {agent_name}")
148
+ print(f"User query: {user_query}")
149
+
150
+ # Check expertise
151
+ detector = ExpertiseGapDetector(agent_name)
152
+ expertise = detector.check_expertise("vector database RAG Pinecone")
153
+ print(f"Expertise check: needs_research={expertise['needs_research']}, confidence={expertise['confidence']}")
154
+
155
+ if expertise["needs_research"]:
156
+ print("🔬 Gap detected - would trigger research pipeline")
157
+ # In real use: pipeline.research_topic("vector database RAG Pinecone", "deep")
158
+
159
+ # Test auto-detection
160
+ auto_detector = AutoExpertiseDetector(agent_name, auto_research=False)
161
+ analysis = auto_detector.analyze_query(user_query)
162
+ print(f"Auto-detection: {len(analysis['gaps_found'])} gaps found")
163
+
164
+ print("\n✅ Integration flow test passed!\n")
165
+
166
+ def run_all_tests():
167
+ """Run all tests."""
168
+ print("\n" + "🧪" * 30)
169
+ print("SELF-IMPROVING AGENT SKILL - TEST SUITE")
170
+ print("🧪" * 30 + "\n")
171
+
172
+ test_expertise_detector()
173
+ test_research_pipeline()
174
+ test_auto_detector()
175
+ test_integration()
176
+
177
+ print("=" * 60)
178
+ print("🎉 ALL TESTS PASSED!")
179
+ print("=" * 60)
180
+ print("\nThe self-improving-agent skill is ready for use.")
181
+ print("Run with: self-improving-agent master 'your topic' --depth=deep")
182
+
183
+ if __name__ == "__main__":
184
+ run_all_tests()
@@ -0,0 +1,426 @@
1
+ ---
2
+ name: send-email
3
+ description: "Use when sending transactional emails (welcome messages, order confirmations, password resets, receipts), notifications, or bulk emails via Resend..."
4
+ category: distribution
5
+ layer: distribution
6
+ tier: must-have
7
+ reads:
8
+ - brand/voice-profile.md
9
+ writes: []
10
+ depends-on: []
11
+ triggers:
12
+ - send email
13
+ - transactional email
14
+ - welcome email
15
+ - Resend API
16
+ - password reset email
17
+ - receipt email
18
+ - notification email
19
+ allowed-tools:
20
+ - Bash
21
+ - Read
22
+ - Write
23
+ ---
24
+
25
+ # Send Email with Resend
26
+
27
+ This skill is primarily context-independent, but when `brand/voice-profile.md` exists, use it to inform email tone, vocabulary, and personality for any copy written within emails.
28
+
29
+ ## On Activation
30
+
31
+ 1. Detect project language from config files (package.json, requirements.txt, go.mod, etc.).
32
+ 2. Install Resend SDK if not present — see [references/installation.md](references/installation.md).
33
+ 3. Determine single vs batch send based on the user's needs (see decision matrix below).
34
+ 4. Implement with idempotency keys, error handling, and retry logic.
35
+
36
+ **Output:** Email sending code with production-grade error handling integrated into the user's project.
37
+
38
+ ## Overview
39
+
40
+ Resend provides two endpoints for sending emails:
41
+
42
+ | Approach | Endpoint | Use Case |
43
+ |----------|----------|----------|
44
+ | **Single** | `POST /emails` | Individual transactional emails, emails with attachments, scheduled sends |
45
+ | **Batch** | `POST /emails/batch` | Multiple distinct emails in one request (max 100), bulk notifications |
46
+
47
+ **Choose batch when:**
48
+ - Sending 2+ distinct emails at once
49
+ - Reducing API calls is important (by default, rate limit is 2 requests per second)
50
+ - No attachments or scheduling needed
51
+
52
+ **Choose single when:**
53
+ - Sending one email
54
+ - Email needs attachments
55
+ - Email needs to be scheduled
56
+ - Different recipients need different timing
57
+
58
+ ## Quick Start
59
+
60
+ 1. **Detect project language** from config files (package.json, requirements.txt, go.mod, etc.)
61
+ 2. **Install SDK** (preferred) or use cURL - See [references/installation.md](references/installation.md)
62
+ 3. **Choose single or batch** based on the decision matrix above
63
+ 4. **Implement best practices** - Idempotency keys, error handling, retries
64
+
65
+ ## Best Practices (Critical for Production)
66
+
67
+ Always implement these for production email sending. See [references/best-practices.md](references/best-practices.md) for complete implementations.
68
+
69
+ ### Idempotency Keys
70
+
71
+ Prevent duplicate emails when retrying failed requests.
72
+
73
+ | Key Facts | |
74
+ |-----------|---|
75
+ | **Format (single)** | `<event-type>/<entity-id>` (e.g., `welcome-email/user-123`) |
76
+ | **Format (batch)** | `batch-<event-type>/<batch-id>` (e.g., `batch-orders/batch-456`) |
77
+ | **Expiration** | 24 hours |
78
+ | **Max length** | 256 characters |
79
+ | **Duplicate payload** | Returns original response without resending |
80
+ | **Different payload** | Returns 409 error |
81
+
82
+ ### Error Handling
83
+
84
+ | Code | Action |
85
+ |------|--------|
86
+ | 400, 422 | Fix request parameters, don't retry |
87
+ | 401, 403 | Check API key / verify domain, don't retry |
88
+ | 409 | Idempotency conflict - use new key or fix payload |
89
+ | 429 | Rate limited - retry with exponential backoff (by default, rate limit is 2 requests/second) |
90
+ | 500 | Server error - retry with exponential backoff |
91
+
92
+ ### Retry Strategy
93
+
94
+ - **Backoff:** Exponential (1s, 2s, 4s...)
95
+ - **Max retries:** 3-5 for most use cases
96
+ - **Only retry:** 429 (rate limit) and 500 (server error)
97
+ - **Always use:** Idempotency keys when retrying
98
+
99
+ ## Single Email
100
+
101
+ **Endpoint:** `POST /emails` (prefer SDK over cURL)
102
+
103
+ ### Required Parameters
104
+
105
+ | Parameter | Type | Description |
106
+ |-----------|------|-------------|
107
+ | `from` | string | Sender address. Format: `"Name <email@domain.com>"` |
108
+ | `to` | string[] | Recipient addresses (max 50) |
109
+ | `subject` | string | Email subject line |
110
+ | `html` or `text` | string | Email body content |
111
+
112
+ ### Optional Parameters
113
+
114
+ | Parameter | Type | Description |
115
+ |-----------|------|-------------|
116
+ | `cc` | string[] | CC recipients |
117
+ | `bcc` | string[] | BCC recipients |
118
+ | `reply_to`* | string[] | Reply-to addresses |
119
+ | `scheduled_at`* | string | Schedule send time (ISO 8601) |
120
+ | `attachments` | array | File attachments (max 40MB total) |
121
+ | `tags` | array | Key/value pairs for tracking (see [Tags](#tags)) |
122
+ | `headers` | object | Custom headers |
123
+
124
+ *Parameter naming varies by SDK (e.g., `replyTo` in Node.js, `reply_to` in Python).
125
+
126
+ ### Minimal Example (Node.js)
127
+
128
+ ```typescript
129
+ import { Resend } from 'resend';
130
+
131
+ const resend = new Resend(process.env.RESEND_API_KEY);
132
+
133
+ const { data, error } = await resend.emails.send(
134
+ {
135
+ from: 'Acme <onboarding@resend.dev>',
136
+ to: ['delivered@resend.dev'],
137
+ subject: 'Hello World',
138
+ html: '<p>Email body here</p>',
139
+ },
140
+ { idempotencyKey: `welcome-email/${userId}` }
141
+ );
142
+
143
+ if (error) {
144
+ console.error('Failed:', error.message);
145
+ return;
146
+ }
147
+ console.log('Sent:', data.id);
148
+ ```
149
+
150
+ See [references/single-email-examples.md](references/single-email-examples.md) for all SDK implementations with error handling and retry logic.
151
+
152
+ ## Batch Email
153
+
154
+ **Endpoint:** `POST /emails/batch` (but prefer SDK over cURL)
155
+
156
+ ### Limitations
157
+
158
+ - **No attachments** - Use single sends for emails with attachments
159
+ - **No scheduling** - Use single sends for scheduled emails
160
+ - **Atomic** - If one email fails validation, the entire batch fails
161
+ - **Max 100 emails** per request
162
+ - **Max 50 recipients** per individual email in the batch
163
+
164
+ ### Pre-validation
165
+
166
+ Since the entire batch fails on any validation error, validate all emails before sending:
167
+ - Check required fields (from, to, subject, html/text)
168
+ - Validate email formats
169
+ - Ensure batch size <= 100
170
+
171
+ ### Minimal Example (Node.js)
172
+
173
+ ```typescript
174
+ import { Resend } from 'resend';
175
+
176
+ const resend = new Resend(process.env.RESEND_API_KEY);
177
+
178
+ const { data, error } = await resend.batch.send(
179
+ [
180
+ {
181
+ from: 'Acme <notifications@acme.com>',
182
+ to: ['delivered@resend.dev'],
183
+ subject: 'Order Shipped',
184
+ html: '<p>Your order has shipped!</p>',
185
+ },
186
+ {
187
+ from: 'Acme <notifications@acme.com>',
188
+ to: ['delivered@resend.dev'],
189
+ subject: 'Order Confirmed',
190
+ html: '<p>Your order is confirmed!</p>',
191
+ },
192
+ ],
193
+ { idempotencyKey: `batch-orders/${batchId}` }
194
+ );
195
+
196
+ if (error) {
197
+ console.error('Batch failed:', error.message);
198
+ return;
199
+ }
200
+ console.log('Sent:', data.map(e => e.id));
201
+ ```
202
+
203
+ See [references/batch-email-examples.md](references/batch-email-examples.md) for all SDK implementations with validation, error handling, and retry logic.
204
+
205
+ ## Large Batches (100+ Emails)
206
+
207
+ For sends larger than 100 emails, chunk into multiple batch requests:
208
+
209
+ 1. **Split into chunks** of 100 emails each
210
+ 2. **Use unique idempotency keys** per chunk: `<batch-prefix>/chunk-<index>`
211
+ 3. **Send chunks in parallel** for better throughput
212
+ 4. **Track results** per chunk to handle partial failures
213
+
214
+ See [references/batch-email-examples.md](references/batch-email-examples.md) for complete chunking implementations.
215
+
216
+ ## Deliverability
217
+
218
+ Follow these practices to maximize inbox placement.
219
+
220
+ For more help with deliverability, install the email-best-practices skill with `npx skills add resend/email-best-practices`.
221
+
222
+ ### Required
223
+
224
+ | Practice | Why |
225
+ |----------|-----|
226
+ | **Valid SPF, DKIM, DMARC record** | authenticate the email and prevent spoofing |
227
+ | **Links match sending domain** | If sending from `@acme.com`, link to `https://acme.com` - mismatched domains trigger spam filters |
228
+ | **Include plain text version** | Use both `html` and `text` parameters for accessibility and deliverability (Resend generates a plain text version if not provided) |
229
+ | **Avoid "no-reply" addresses** | Use real addresses (e.g., `support@`) - improves trust signals |
230
+ | **Keep body under 102KB** | Gmail clips larger messages |
231
+
232
+ ### Recommended
233
+
234
+ | Practice | Why |
235
+ |----------|-----|
236
+ | **Use subdomains** | Send transactional from `notifications.acme.com`, marketing from `mail.acme.com` - protects reputation |
237
+ | **Disable tracking for transactional** | Open/click tracking can trigger spam filters for password resets, receipts, etc. |
238
+
239
+ ## Tracking (Opens & Clicks)
240
+
241
+ Tracking is configured at the **domain level** in the Resend dashboard, not per-email.
242
+
243
+ | Setting | How it works | Recommendation |
244
+ |---------|--------------|----------------|
245
+ | **Open tracking** | Inserts 1x1 transparent pixel | Disable for transactional emails - can hurt deliverability |
246
+ | **Click tracking** | Rewrites links through redirect | Disable for sensitive emails (password resets, security alerts) |
247
+
248
+ **When to enable tracking:**
249
+ - Marketing emails where engagement metrics matter
250
+ - Newsletters and announcements
251
+
252
+ **When to disable tracking:**
253
+ - Transactional emails (receipts, confirmations, password resets)
254
+ - Security-sensitive emails
255
+ - When maximizing deliverability is priority
256
+
257
+ Configure via dashboard: Domain → Configuration → Click/Open Tracking
258
+
259
+ ## Webhooks (Event Notifications)
260
+
261
+ Track email delivery status in real-time using webhooks. Resend sends HTTP POST requests to your endpoint when events occur.
262
+
263
+ | Event | When to use |
264
+ |-------|-------------|
265
+ | `email.delivered` | Confirm successful delivery |
266
+ | `email.bounced` | Remove from mailing list, alert user |
267
+ | `email.complained` | Unsubscribe user (spam complaint) |
268
+ | `email.opened` / `email.clicked` | Track engagement (marketing only) |
269
+
270
+ **CRITICAL: Always verify webhook signatures.** Without verification, attackers can send fake events to your endpoint.
271
+
272
+ See [references/webhooks.md](references/webhooks.md) for setup, signature verification code, and all event types.
273
+
274
+ ## Tags
275
+
276
+ Tags are key/value pairs that help you track and filter emails.
277
+
278
+ ```typescript
279
+ tags: [
280
+ { name: 'user_id', value: 'usr_123' },
281
+ { name: 'email_type', value: 'welcome' },
282
+ { name: 'plan', value: 'enterprise' }
283
+ ]
284
+ ```
285
+
286
+ **Use cases:**
287
+ - Associate emails with customers in your system
288
+ - Categorize by email type (welcome, receipt, password-reset)
289
+ - Filter emails in the Resend dashboard
290
+ - Correlate webhook events back to your application
291
+
292
+ **Constraints:** Tag names and values can only contain ASCII letters, numbers, underscores, or dashes. Max 256 characters each.
293
+
294
+ ## Templates
295
+
296
+ Use pre-built templates instead of sending HTML with each request.
297
+
298
+ ```typescript
299
+ const { data, error } = await resend.emails.send({
300
+ from: 'Acme <hello@acme.com>',
301
+ to: ['delivered@resend.dev'],
302
+ subject: 'Welcome!',
303
+ template: {
304
+ id: 'tmpl_abc123',
305
+ variables: {
306
+ USER_NAME: 'John', // Case-sensitive!
307
+ ORDER_TOTAL: '$99.00'
308
+ }
309
+ }
310
+ });
311
+ ```
312
+
313
+ **IMPORTANT:** Variable names are **case-sensitive** and must match exactly as defined in the template editor. `USER_NAME` ≠ `user_name`.
314
+
315
+ | Fact | Detail |
316
+ |------|--------|
317
+ | **Max variables** | 20 per template |
318
+ | **Reserved names** | `FIRST_NAME`, `LAST_NAME`, `EMAIL`, `RESEND_UNSUBSCRIBE_URL`, `contact`, `this` |
319
+ | **Fallback values** | Optional - if not set and variable missing, send fails |
320
+ | **Can't combine with** | `html`, `text`, or `react` parameters |
321
+
322
+ Templates must be **published** in the dashboard before use. Draft templates won't work.
323
+
324
+ ## Testing
325
+
326
+ **WARNING: Never test with fake addresses at real email providers.**
327
+
328
+ Using addresses like `test@gmail.com`, `example@outlook.com`, or `fake@yahoo.com` will:
329
+ - **Bounce** - These addresses don't exist
330
+ - **Destroy your sender reputation** - High bounce rates trigger spam filters
331
+ - **Get your domain blocklisted** - Providers flag domains with high bounce rates
332
+
333
+ ### Safe Testing Options
334
+
335
+ | Method | Address | Result |
336
+ |--------|---------|--------|
337
+ | **Delivered** | `delivered@resend.dev` | Simulates successful delivery |
338
+ | **Bounced** | `bounced@resend.dev` | Simulates hard bounce |
339
+ | **Complained** | `complained@resend.dev` | Simulates spam complaint |
340
+ | **Your own email** | Your actual address | Real delivery test |
341
+
342
+ **For development:** Use the `resend.dev` test addresses to simulate different scenarios without affecting your reputation.
343
+
344
+ **For staging:** Send to real addresses you control (team members, test accounts you own).
345
+
346
+ ## Domain Warm-up
347
+
348
+ New domains must gradually increase sending volume to establish reputation.
349
+
350
+ **Why it matters:** Sudden high volume from a new domain triggers spam filters. ISPs expect gradual growth.
351
+
352
+ ### Recommended Schedule
353
+
354
+ **Existing domain**
355
+
356
+ | Day | Messages per day | Messages per hour |
357
+ |-----|---------------------|---------------------|
358
+ | 1 | Up to 1,000 emails | 100 Maximum |
359
+ | 2 | Up to 2,500 emails | 300 Maximum |
360
+ | 3 | Up to 5,000 emails | 600 Maximum |
361
+ | 4 | Up to 5,000 emails | 800 Maximum |
362
+ | 5 | Up to 7,500 emails | 1,000 Maximum |
363
+ | 6 | Up to 7,500 emails | 1,500 Maximum |
364
+ | 7 | Up to 10,000 emails | 2,000 Maximum |
365
+
366
+ **New domain**
367
+
368
+ | Day | Messages per day | Messages per hour |
369
+ |-----|---------------------|---------------------|
370
+ | 1 | Up to 150 emails | |
371
+ | 2 | Up to 250 emails | |
372
+ | 3 | Up to 400 emails | |
373
+ | 4 | Up to 700 emails | 50 Maximum |
374
+ | 5 | Up to 1,000 emails | 75 Maximum |
375
+ | 6 | Up to 1,500 emails | 100 Maximum |
376
+ | 7 | Up to 2,000 emails | 150 Maximum |
377
+
378
+ ### Monitor These Metrics
379
+
380
+ | Metric | Target | Action if exceeded |
381
+ |--------|--------|-------------------|
382
+ | **Bounce rate** | < 4% | Slow down, clean list |
383
+ | **Spam complaint rate** | < 0.08% | Slow down, review content |
384
+
385
+ **Don't use third-party warm-up services.** Focus on sending relevant content to real, engaged recipients.
386
+
387
+ ## Suppression List
388
+
389
+ Resend automatically manages a suppression list of addresses that should not receive emails.
390
+
391
+ **Addresses are added when:**
392
+ - Email hard bounces (address doesn't exist)
393
+ - Recipient marks email as spam
394
+ - You manually add them via dashboard
395
+
396
+ **What happens:** Resend won't attempt delivery to suppressed addresses. The `email.suppressed` webhook event fires instead.
397
+
398
+ **Why this matters:** Continuing to send to bounced/complained addresses destroys your reputation. The suppression list protects you automatically.
399
+
400
+ **Management:** View and manage suppressed addresses in the Resend dashboard under Suppressions.
401
+
402
+ ## Anti-Patterns
403
+
404
+ | Mistake | Fix |
405
+ |---------|-----|
406
+ | Retrying without idempotency key | Always include idempotency key - prevents duplicate sends on retry |
407
+ | Using batch for emails with attachments | Batch doesn't support attachments - use single sends instead |
408
+ | Not validating batch before send | Validate all emails first - one invalid email fails the entire batch |
409
+ | Retrying 400/422 errors | These are validation errors - fix the request, don't retry |
410
+ | Same idempotency key, different payload | Returns 409 error - use unique key per unique email content |
411
+ | Tracking enabled for transactional emails | Disable open/click tracking for password resets, receipts - hurts deliverability |
412
+ | Using "no-reply" sender address | Use real address like `support@` - improves trust signals with email providers |
413
+ | Not verifying webhook signatures | Always verify - attackers can send fake events to your endpoint |
414
+ | Testing with fake emails (test@gmail.com) | Use `delivered@resend.dev` - fake addresses bounce and hurt reputation |
415
+ | Template variable name mismatch | Variable names are case-sensitive - `USER_NAME` ≠ `user_name` |
416
+ | Sending high volume from new domain | Warm up gradually - sudden spikes trigger spam filters |
417
+
418
+ ## Notes
419
+
420
+ - The `from` address must use a verified domain
421
+ - If the sending address cannot receive replies, set the `reply_to` parameter to a valid address.
422
+ - Store API key in `RESEND_API_KEY` environment variable
423
+ - Node.js SDK supports `react` parameter for React Email components
424
+ - Resend returns `error`, `data`, `headers` in the response.
425
+ - Data returns `{ id: "email-id" }` on success (single) or array of IDs (batch)
426
+ - For marketing campaigns to large lists, use Resend Broadcasts instead