@opendirectory.dev/skills 0.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 (212) hide show
  1. package/.claude/skills/claude-md-generator/.env.example +7 -0
  2. package/.claude/skills/claude-md-generator/README.md +78 -0
  3. package/.claude/skills/claude-md-generator/SKILL.md +248 -0
  4. package/.claude/skills/claude-md-generator/evals/evals.json +35 -0
  5. package/.claude/skills/claude-md-generator/references/section-guide.md +175 -0
  6. package/dist/e2e.test.d.ts +1 -0
  7. package/dist/e2e.test.js +62 -0
  8. package/dist/fs-adapters.d.ts +4 -0
  9. package/dist/fs-adapters.js +101 -0
  10. package/dist/fs-adapters.test.d.ts +1 -0
  11. package/dist/fs-adapters.test.js +108 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +211 -0
  14. package/dist/transformers.d.ts +6 -0
  15. package/dist/transformers.js +2 -0
  16. package/package.json +25 -0
  17. package/registry.json +226 -0
  18. package/skills/blog-cover-image-cli/.github/workflows/publish.yml +19 -0
  19. package/skills/blog-cover-image-cli/LICENSE +15 -0
  20. package/skills/blog-cover-image-cli/README.md +126 -0
  21. package/skills/blog-cover-image-cli/SKILL.md +7 -0
  22. package/skills/blog-cover-image-cli/agent-skill/blog-cover-generator/README.md +30 -0
  23. package/skills/blog-cover-image-cli/agent-skill/blog-cover-generator/SKILL.md +72 -0
  24. package/skills/blog-cover-image-cli/bin/cli.js +226 -0
  25. package/skills/blog-cover-image-cli/examples/100x_UX_Research_AI_Agent.png +0 -0
  26. package/skills/blog-cover-image-cli/examples/Firecrawl-supabase-bolt.png +0 -0
  27. package/skills/blog-cover-image-cli/examples/Git-City_Case_study_Cover_Image.jpg +0 -0
  28. package/skills/blog-cover-image-cli/examples/THE DISTRIBUTION LAYER (2).png +0 -0
  29. package/skills/blog-cover-image-cli/examples/canva-perplexity-duolingo-cover-image.png +0 -0
  30. package/skills/blog-cover-image-cli/examples/gamma-mistral-veed.png +0 -0
  31. package/skills/blog-cover-image-cli/examples/server-survival-case-study-cover-image(1).png +0 -0
  32. package/skills/blog-cover-image-cli/examples/viral-meme-automation.png +0 -0
  33. package/skills/blog-cover-image-cli/index.js +2 -0
  34. package/skills/blog-cover-image-cli/package-lock.json +2238 -0
  35. package/skills/blog-cover-image-cli/package.json +37 -0
  36. package/skills/blog-cover-image-cli/src/geminiGenerator.js +126 -0
  37. package/skills/blog-cover-image-cli/src/imageValidator.js +54 -0
  38. package/skills/blog-cover-image-cli/src/logoFetcher.js +86 -0
  39. package/skills/claude-md-generator/.env.example +7 -0
  40. package/skills/claude-md-generator/README.md +78 -0
  41. package/skills/claude-md-generator/SKILL.md +254 -0
  42. package/skills/claude-md-generator/evals/evals.json +35 -0
  43. package/skills/claude-md-generator/references/section-guide.md +175 -0
  44. package/skills/cook-the-blog/README.md +86 -0
  45. package/skills/cook-the-blog/SKILL.md +130 -0
  46. package/skills/dependency-update-bot/.env.example +13 -0
  47. package/skills/dependency-update-bot/README.md +101 -0
  48. package/skills/dependency-update-bot/SKILL.md +376 -0
  49. package/skills/dependency-update-bot/evals/evals.json +45 -0
  50. package/skills/dependency-update-bot/references/changelog-patterns.md +201 -0
  51. package/skills/docs-from-code/.env.example +13 -0
  52. package/skills/docs-from-code/README.md +97 -0
  53. package/skills/docs-from-code/SKILL.md +160 -0
  54. package/skills/docs-from-code/evals/evals.json +29 -0
  55. package/skills/docs-from-code/references/extraction-guide.md +174 -0
  56. package/skills/docs-from-code/references/output-template.md +135 -0
  57. package/skills/docs-from-code/scripts/extract_py.py +238 -0
  58. package/skills/docs-from-code/scripts/extract_ts.ts +284 -0
  59. package/skills/docs-from-code/scripts/package.json +18 -0
  60. package/skills/explain-this-pr/README.md +74 -0
  61. package/skills/explain-this-pr/SKILL.md +130 -0
  62. package/skills/explain-this-pr/evals/evals.json +35 -0
  63. package/skills/google-trends-api-skills/README.md +78 -0
  64. package/skills/google-trends-api-skills/SKILL.md +7 -0
  65. package/skills/google-trends-api-skills/google-trends-api/SKILL.md +163 -0
  66. package/skills/google-trends-api-skills/google-trends-api/references/api-responses.md +188 -0
  67. package/skills/google-trends-api-skills/google-trends-api/scripts/discover_keywords.py +344 -0
  68. package/skills/google-trends-api-skills/seo-keyword-research/SKILL.md +205 -0
  69. package/skills/google-trends-api-skills/seo-keyword-research/references/keyword-placement-guide.md +89 -0
  70. package/skills/google-trends-api-skills/seo-keyword-research/references/tech-blog-examples.md +207 -0
  71. package/skills/google-trends-api-skills/seo-keyword-research/scripts/blog_seo_research.py +373 -0
  72. package/skills/hackernews-intel/.env.example +33 -0
  73. package/skills/hackernews-intel/README.md +161 -0
  74. package/skills/hackernews-intel/SKILL.md +156 -0
  75. package/skills/hackernews-intel/evals/evals.json +35 -0
  76. package/skills/hackernews-intel/package.json +15 -0
  77. package/skills/hackernews-intel/scripts/monitor-hn.js +258 -0
  78. package/skills/kill-the-standup/.env.example +22 -0
  79. package/skills/kill-the-standup/README.md +84 -0
  80. package/skills/kill-the-standup/SKILL.md +169 -0
  81. package/skills/kill-the-standup/evals/evals.json +35 -0
  82. package/skills/kill-the-standup/references/standup-format.md +102 -0
  83. package/skills/linkedin-post-generator/.env.example +14 -0
  84. package/skills/linkedin-post-generator/README.md +107 -0
  85. package/skills/linkedin-post-generator/SKILL.md +228 -0
  86. package/skills/linkedin-post-generator/evals/evals.json +35 -0
  87. package/skills/linkedin-post-generator/references/linkedin-format.md +216 -0
  88. package/skills/linkedin-post-generator/references/output-template.md +154 -0
  89. package/skills/llms-txt-generator/.env.example +18 -0
  90. package/skills/llms-txt-generator/README.md +142 -0
  91. package/skills/llms-txt-generator/SKILL.md +176 -0
  92. package/skills/llms-txt-generator/evals/evals.json +35 -0
  93. package/skills/llms-txt-generator/references/llms-txt-spec.md +88 -0
  94. package/skills/llms-txt-generator/references/output-template.md +76 -0
  95. package/skills/llms-txt-generator/test-output/genzcareer.in/llms.txt +31 -0
  96. package/skills/luma-attendees-scraper/README.md +170 -0
  97. package/skills/luma-attendees-scraper/SKILL.md +7 -0
  98. package/skills/luma-attendees-scraper/luma_attendees_export.js +223 -0
  99. package/skills/meeting-brief-generator/.env.example +21 -0
  100. package/skills/meeting-brief-generator/README.md +90 -0
  101. package/skills/meeting-brief-generator/SKILL.md +275 -0
  102. package/skills/meeting-brief-generator/evals/evals.json +35 -0
  103. package/skills/meeting-brief-generator/references/brief-format.md +114 -0
  104. package/skills/meeting-brief-generator/references/output-template.md +150 -0
  105. package/skills/meta-ads-skill/README.md +100 -0
  106. package/skills/meta-ads-skill/SKILL.md +7 -0
  107. package/skills/meta-ads-skill/meta-ads-skill/SKILL.md +41 -0
  108. package/skills/meta-ads-skill/meta-ads-skill/references/report_templates.md +47 -0
  109. package/skills/meta-ads-skill/meta-ads-skill/references/workflows.md +51 -0
  110. package/skills/meta-ads-skill/meta-ads-skill/scripts/auth_check.py +22 -0
  111. package/skills/meta-ads-skill/meta-ads-skill/scripts/formatters.py +46 -0
  112. package/skills/newsletter-digest/.env.example +20 -0
  113. package/skills/newsletter-digest/README.md +147 -0
  114. package/skills/newsletter-digest/SKILL.md +221 -0
  115. package/skills/newsletter-digest/evals/evals.json +35 -0
  116. package/skills/newsletter-digest/feeds.json +7 -0
  117. package/skills/newsletter-digest/package.json +15 -0
  118. package/skills/newsletter-digest/references/digest-format.md +123 -0
  119. package/skills/newsletter-digest/references/output-template.md +136 -0
  120. package/skills/newsletter-digest/scripts/fetch-feeds.js +141 -0
  121. package/skills/newsletter-digest/scripts/ghost-publish.js +147 -0
  122. package/skills/noise2blog/.env.example +16 -0
  123. package/skills/noise2blog/README.md +107 -0
  124. package/skills/noise2blog/SKILL.md +229 -0
  125. package/skills/noise2blog/evals/evals.json +35 -0
  126. package/skills/noise2blog/references/blog-format.md +188 -0
  127. package/skills/noise2blog/references/output-template.md +184 -0
  128. package/skills/outreach-sequence-builder/.env.example +12 -0
  129. package/skills/outreach-sequence-builder/README.md +108 -0
  130. package/skills/outreach-sequence-builder/SKILL.md +248 -0
  131. package/skills/outreach-sequence-builder/evals/evals.json +36 -0
  132. package/skills/outreach-sequence-builder/references/output-template.md +171 -0
  133. package/skills/outreach-sequence-builder/references/sequence-format.md +167 -0
  134. package/skills/outreach-sequence-builder/references/signal-playbook.md +117 -0
  135. package/skills/position-me/README.md +71 -0
  136. package/skills/position-me/SKILL.md +7 -0
  137. package/skills/position-me/position-me/SKILL.md +50 -0
  138. package/skills/position-me/position-me/references/EVALUATION_SOP.md +40 -0
  139. package/skills/position-me/position-me/references/REPORT_TEMPLATE.md +58 -0
  140. package/skills/position-me/position-me/scripts/extract_links.py +49 -0
  141. package/skills/pr-description-writer/README.md +81 -0
  142. package/skills/pr-description-writer/SKILL.md +141 -0
  143. package/skills/pr-description-writer/evals/evals.json +35 -0
  144. package/skills/pr-description-writer/references/pr-format-guide.md +145 -0
  145. package/skills/producthunt-launch-kit/.env.example +7 -0
  146. package/skills/producthunt-launch-kit/README.md +95 -0
  147. package/skills/producthunt-launch-kit/SKILL.md +380 -0
  148. package/skills/producthunt-launch-kit/evals/evals.json +35 -0
  149. package/skills/producthunt-launch-kit/references/copy-rules.md +124 -0
  150. package/skills/reddit-icp-monitor/.env.example +16 -0
  151. package/skills/reddit-icp-monitor/README.md +117 -0
  152. package/skills/reddit-icp-monitor/SKILL.md +271 -0
  153. package/skills/reddit-icp-monitor/evals/evals.json +40 -0
  154. package/skills/reddit-icp-monitor/references/icp-format.md +131 -0
  155. package/skills/reddit-icp-monitor/references/reply-rules.md +110 -0
  156. package/skills/reddit-post-engine/.env.example +13 -0
  157. package/skills/reddit-post-engine/README.md +103 -0
  158. package/skills/reddit-post-engine/SKILL.md +303 -0
  159. package/skills/reddit-post-engine/evals/evals.json +35 -0
  160. package/skills/reddit-post-engine/references/subreddit-playbook.md +156 -0
  161. package/skills/schema-markup-generator/.env.example +19 -0
  162. package/skills/schema-markup-generator/README.md +114 -0
  163. package/skills/schema-markup-generator/SKILL.md +192 -0
  164. package/skills/schema-markup-generator/evals/evals.json +35 -0
  165. package/skills/schema-markup-generator/references/json-ld-spec.md +263 -0
  166. package/skills/schema-markup-generator/references/output-template.md +556 -0
  167. package/skills/show-hn-writer/.env.example +14 -0
  168. package/skills/show-hn-writer/README.md +88 -0
  169. package/skills/show-hn-writer/SKILL.md +303 -0
  170. package/skills/show-hn-writer/evals/evals.json +35 -0
  171. package/skills/show-hn-writer/references/hn-rules.md +74 -0
  172. package/skills/show-hn-writer/references/title-formulas.md +93 -0
  173. package/skills/stargazer/README.md +79 -0
  174. package/skills/stargazer/SKILL.md +7 -0
  175. package/skills/stargazer/stargazer-skill/SKILL.md +58 -0
  176. package/skills/stargazer/stargazer-skill/assets/.env.example +18 -0
  177. package/skills/stargazer/stargazer-skill/scripts/convert_to_csv.py +63 -0
  178. package/skills/stargazer/stargazer-skill/scripts/count_emails.py +52 -0
  179. package/skills/stargazer/stargazer-skill/scripts/stargazer_deep_extractor.py +450 -0
  180. package/skills/tweet-thread-from-blog/.env.example +14 -0
  181. package/skills/tweet-thread-from-blog/README.md +109 -0
  182. package/skills/tweet-thread-from-blog/SKILL.md +177 -0
  183. package/skills/tweet-thread-from-blog/evals/evals.json +35 -0
  184. package/skills/tweet-thread-from-blog/references/output-template.md +193 -0
  185. package/skills/tweet-thread-from-blog/references/thread-format.md +107 -0
  186. package/skills/twitter-GTM-find-skill/README.md +43 -0
  187. package/skills/twitter-GTM-find-skill/SKILL.md +7 -0
  188. package/skills/twitter-GTM-find-skill/twitter-GTM-find/SKILL.md +37 -0
  189. package/skills/twitter-GTM-find-skill/twitter-GTM-find/references/icp-checklist.md +35 -0
  190. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/package.json +23 -0
  191. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/run_pipeline.sh +8 -0
  192. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/debug.ts +23 -0
  193. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/extractor.ts +79 -0
  194. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/icp-filter.ts +87 -0
  195. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/index.ts +94 -0
  196. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/scraper.ts +41 -0
  197. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/tsconfig.json +13 -0
  198. package/skills/yc-intent-radar-skill/README.md +39 -0
  199. package/skills/yc-intent-radar-skill/SKILL.md +7 -0
  200. package/skills/yc-intent-radar-skill/yc-jobs-scraper/SKILL.md +59 -0
  201. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/auth.js +29 -0
  202. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/db.js +62 -0
  203. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/export_radar_candidates.js +40 -0
  204. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/package-lock.json +1525 -0
  205. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/package.json +12 -0
  206. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/scraper.js +217 -0
  207. package/src/e2e.test.ts +35 -0
  208. package/src/fs-adapters.test.ts +91 -0
  209. package/src/fs-adapters.ts +65 -0
  210. package/src/index.ts +182 -0
  211. package/src/transformers.ts +6 -0
  212. package/tsconfig.json +8 -0
package/registry.json ADDED
@@ -0,0 +1,226 @@
1
+ [
2
+ {
3
+ "name": "blog-cover-image-cli",
4
+ "description": "A skill for blog-cover-image-cli",
5
+ "tags": [],
6
+ "author": "OpenDirectory",
7
+ "version": "1.0.0",
8
+ "path": "skills/blog-cover-image-cli"
9
+ },
10
+ {
11
+ "name": "claude-md-generator",
12
+ "description": "Read the codebase. Write a CLAUDE.md that tells Claude exactly what it needs: no more, no less.",
13
+ "tags": [],
14
+ "author": "OpenDirectory",
15
+ "version": "1.0.0",
16
+ "path": "skills/claude-md-generator"
17
+ },
18
+ {
19
+ "name": "cook-the-blog",
20
+ "description": "Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).",
21
+ "tags": [],
22
+ "author": "OpenDirectory",
23
+ "version": "1.0.0",
24
+ "path": "skills/cook-the-blog"
25
+ },
26
+ {
27
+ "name": "dependency-update-bot",
28
+ "description": "Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says \"check for outdated packages\", \"update my dependencies\", \"open PRs for dependency updates\", \"scan for CVEs\", or \"which packages need upgrading\".",
29
+ "tags": [],
30
+ "author": "OpenDirectory",
31
+ "version": "1.0.0",
32
+ "path": "skills/dependency-update-bot"
33
+ },
34
+ {
35
+ "name": "docs-from-code",
36
+ "description": "Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.",
37
+ "tags": [],
38
+ "author": "OpenDirectory",
39
+ "version": "1.0.0",
40
+ "path": "skills/docs-from-code"
41
+ },
42
+ {
43
+ "name": "explain-this-pr",
44
+ "description": "Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says \"explain this PR\", \"summarize this pull request\", \"what does this PR do\", \"add a comment explaining the PR\", or shares a GitHub PR URL and asks what it does.",
45
+ "tags": [],
46
+ "author": "OpenDirectory",
47
+ "version": "1.0.0",
48
+ "path": "skills/explain-this-pr"
49
+ },
50
+ {
51
+ "name": "google-trends-api-skills",
52
+ "description": "A skill for google-trends-api-skills",
53
+ "tags": [],
54
+ "author": "OpenDirectory",
55
+ "version": "1.0.0",
56
+ "path": "skills/google-trends-api-skills"
57
+ },
58
+ {
59
+ "name": "hackernews-intel",
60
+ "description": "Monitors Hacker News for user-configured keywords, deduplicates against a local SQLite cache, and sends Slack alerts for new matching posts. Use when asked to monitor Hacker News for mentions, track keywords on HN, get alerts when something is posted about a topic on Hacker News, or set up HN keyword monitoring. Trigger when a user mentions Hacker News alerts, HN monitoring, keyword tracking on HN, or wants to know when a topic appears on Hacker News.",
61
+ "tags": [],
62
+ "author": "OpenDirectory",
63
+ "version": "1.0.0",
64
+ "path": "skills/hackernews-intel"
65
+ },
66
+ {
67
+ "name": "kill-the-standup",
68
+ "description": "Reads yesterday's Linear issues and GitHub commits for the authenticated user, formats a standup update (done / doing / blockers), and posts it to Slack. Use when asked to write a standup, generate a standup update, post to the standup channel, summarize yesterday's work, or automate the daily standup. Trigger when a user says \"write my standup\", \"post standup\", \"generate standup update\", \"what did I do yesterday\", or \"kill the standup\".",
69
+ "tags": [],
70
+ "author": "OpenDirectory",
71
+ "version": "1.0.0",
72
+ "path": "skills/kill-the-standup"
73
+ },
74
+ {
75
+ "name": "linkedin-post-generator",
76
+ "description": "Converts any content, blog post URL, pasted article, GitHub PR description, or a description of something built, into a formatted LinkedIn post with proper hook, story arc, and formatting. Optionally posts directly to LinkedIn via Composio. Use when asked to write a LinkedIn post, turn a blog into a LinkedIn update, announce a shipped feature, share a case study on LinkedIn, or post something professionally. Trigger when a user mentions LinkedIn, wants to share content professionally, says \"post this to LinkedIn\", or asks to repurpose a blog/article/PR for social media.",
77
+ "tags": [],
78
+ "author": "OpenDirectory",
79
+ "version": "1.0.0",
80
+ "path": "skills/linkedin-post-generator"
81
+ },
82
+ {
83
+ "name": "llms-txt-generator",
84
+ "description": "Generates and maintains a standards-compliant llms.txt file for any website — either by crawling the live site OR by reading the website's codebase directly. Use this skill when asked to create an llms.txt, add AI discoverability to a site, improve GEO (Generative Engine Optimization), make a website readable by AI agents, generate an llms-full.txt, check if a site has llms.txt, or audit a site's AI readiness for generative search. Trigger this skill any time a user mentions llms.txt, AI discoverability, LLM site readability, or wants their site to appear in AI-generated answers. Also trigger when the user is inside a website codebase and asks about SEO, AI readiness, or content structure.",
85
+ "tags": [],
86
+ "author": "OpenDirectory",
87
+ "version": "1.0.0",
88
+ "path": "skills/llms-txt-generator"
89
+ },
90
+ {
91
+ "name": "luma-attendees-scraper",
92
+ "description": "A skill for luma-attendees-scraper",
93
+ "tags": [],
94
+ "author": "OpenDirectory",
95
+ "version": "1.0.0",
96
+ "path": "skills/luma-attendees-scraper"
97
+ },
98
+ {
99
+ "name": "meeting-brief-generator",
100
+ "description": "Takes a company name and optional contact, runs targeted research via Tavily, synthesizes a 1-page pre-call brief with Gemini, and optionally saves it to Notion. Use when asked to prepare for a meeting, research a prospect before a call, generate a company brief, create a pre-call summary, or write a meeting prep doc. Trigger when a user says \"prepare me for a meeting with\", \"research this company before my call\", \"generate a meeting brief for\", \"I have a call with X tomorrow\", or \"create a prospect brief for\".",
101
+ "tags": [],
102
+ "author": "OpenDirectory",
103
+ "version": "1.0.0",
104
+ "path": "skills/meeting-brief-generator"
105
+ },
106
+ {
107
+ "name": "meta-ads-skill",
108
+ "description": "A skill for meta-ads-skill",
109
+ "tags": [],
110
+ "author": "OpenDirectory",
111
+ "version": "1.0.0",
112
+ "path": "skills/meta-ads-skill"
113
+ },
114
+ {
115
+ "name": "newsletter-digest",
116
+ "description": "Aggregates RSS feeds from the past week, synthesizes the top stories using Gemini, and publishes a newsletter digest to Ghost CMS. Optionally outputs formatted Markdown for Substack or any other platform. Use when asked to generate a newsletter, create a weekly digest, summarize RSS feeds, compile top stories for a newsletter, or publish a digest to Ghost. Trigger when a user mentions newsletter digest, weekly roundup, RSS digest, compile top stories, or publish to Ghost.",
117
+ "tags": [],
118
+ "author": "OpenDirectory",
119
+ "version": "1.0.0",
120
+ "path": "skills/newsletter-digest"
121
+ },
122
+ {
123
+ "name": "noise2blog",
124
+ "description": "Turns rough notes, bullet points, voice transcripts, or tweet dumps into a polished, publication-ready blog post. Optionally enriches with Tavily research to add supporting data and credibility to claims. Use when asked to write a blog post from notes, turn rough ideas into an article, expand bullet points into a full post, clean up a voice transcript into a blog, or repurpose a tweet thread as an article. Trigger when a user says \"write a blog post from this\", \"turn these notes into a post\", \"expand this into an article\", \"make this publishable\", \"I have rough notes write a blog\", or \"clean up this transcript\".",
125
+ "tags": [],
126
+ "author": "OpenDirectory",
127
+ "version": "1.0.0",
128
+ "path": "skills/noise2blog"
129
+ },
130
+ {
131
+ "name": "outreach-sequence-builder",
132
+ "description": "Takes a buying signal and generates a personalized multi-channel outreach sequence across email, LinkedIn, and phone. Outputs 4-6 ready-to-send touchpoints over 10-14 days. Optionally drafts email touchpoints via Composio Gmail. Use when asked to write an outreach sequence, build a sales cadence, create a follow-up sequence, personalize outreach for a signal, or generate cold outreach messages. Trigger when a user says \"build an outreach sequence for\", \"write a sales cadence for\", \"create outreach based on this signal\", \"they just raised a round write me a sequence\", or \"generate personalized outreach for\".",
133
+ "tags": [],
134
+ "author": "OpenDirectory",
135
+ "version": "1.0.0",
136
+ "path": "skills/outreach-sequence-builder"
137
+ },
138
+ {
139
+ "name": "position-me",
140
+ "description": "A skill for position-me",
141
+ "tags": [],
142
+ "author": "OpenDirectory",
143
+ "version": "1.0.0",
144
+ "path": "skills/position-me"
145
+ },
146
+ {
147
+ "name": "pr-description-writer",
148
+ "description": "Read the current branch diff and write a complete GitHub pull request description. Create or update the PR with one command.",
149
+ "tags": [],
150
+ "author": "OpenDirectory",
151
+ "version": "1.0.0",
152
+ "path": "skills/pr-description-writer"
153
+ },
154
+ {
155
+ "name": "producthunt-launch-kit",
156
+ "description": "Generate every asset you need for a Product Hunt launch: listing copy, maker comment, and day-one social posts.",
157
+ "tags": [],
158
+ "author": "OpenDirectory",
159
+ "version": "1.0.0",
160
+ "path": "skills/producthunt-launch-kit"
161
+ },
162
+ {
163
+ "name": "reddit-icp-monitor",
164
+ "description": "Watches subreddits for people describing the exact problem you solve, scores their relevance to your ICP, and drafts a helpful non-spammy reply for each high-signal post. Use when asked to monitor Reddit for ICP signals, find prospects on Reddit, surface pain point posts, draft helpful Reddit replies, or scan subreddits for buying signals. Trigger when a user says \"monitor Reddit for my ICP\", \"find people on Reddit who need my product\", \"scan subreddits for pain points\", \"draft Reddit replies for prospects\", or \"check Reddit for buying signals\".",
165
+ "tags": [],
166
+ "author": "OpenDirectory",
167
+ "version": "1.0.0",
168
+ "path": "skills/reddit-icp-monitor"
169
+ },
170
+ {
171
+ "name": "reddit-post-engine",
172
+ "description": "Writes and optionally posts a Reddit post for any subreddit, following that subreddit's specific culture and rules. Drafts a title, body, and first comment using the 90/10 rule. Uses Composio Reddit MCP for optional direct posting. Use when asked to post on Reddit, draft a Reddit post, share a project on Reddit, write a subreddit post, or launch something on Reddit. Trigger when a user says \"post this on Reddit\", \"write a Reddit post for r/...\", \"help me launch on Reddit\", \"draft something for Reddit\", or \"how do I share this on Reddit without getting banned\".",
173
+ "tags": [],
174
+ "author": "OpenDirectory",
175
+ "version": "1.0.0",
176
+ "path": "skills/reddit-post-engine"
177
+ },
178
+ {
179
+ "name": "schema-markup-generator",
180
+ "description": "You are an SEO engineer specialising in structured data. Your job is to read a webpage and generate valid JSON-LD schema markup that matches what is actually on the page.",
181
+ "tags": [],
182
+ "author": "OpenDirectory",
183
+ "version": "1.0.0",
184
+ "path": "skills/schema-markup-generator"
185
+ },
186
+ {
187
+ "name": "show-hn-writer",
188
+ "description": "Draft a Show HN post title and body that follows the unwritten rules of Hacker News: specific, honest, first-person, no marketing.",
189
+ "tags": [],
190
+ "author": "OpenDirectory",
191
+ "version": "1.0.0",
192
+ "path": "skills/show-hn-writer"
193
+ },
194
+ {
195
+ "name": "stargazer",
196
+ "description": "A skill for stargazer",
197
+ "tags": [],
198
+ "author": "OpenDirectory",
199
+ "version": "1.0.0",
200
+ "path": "skills/stargazer"
201
+ },
202
+ {
203
+ "name": "tweet-thread-from-blog",
204
+ "description": "Converts a blog post URL or article into a Twitter/X thread with a strong hook, one insight per tweet, and a CTA. Optionally posts the full thread to X via Composio using a reply chain. Use when asked to turn a blog post into a tweet thread, repurpose an article for Twitter, create a thread from a blog, write a Twitter thread about a topic, or share a blog post as a thread. Trigger when a user mentions Twitter thread, X thread, tweet thread, or wants to repurpose blog content for X/Twitter.",
205
+ "tags": [],
206
+ "author": "OpenDirectory",
207
+ "version": "1.0.0",
208
+ "path": "skills/tweet-thread-from-blog"
209
+ },
210
+ {
211
+ "name": "twitter-GTM-find-skill",
212
+ "description": "A skill for twitter-GTM-find-skill",
213
+ "tags": [],
214
+ "author": "OpenDirectory",
215
+ "version": "1.0.0",
216
+ "path": "skills/twitter-GTM-find-skill"
217
+ },
218
+ {
219
+ "name": "yc-intent-radar-skill",
220
+ "description": "A skill for yc-intent-radar-skill",
221
+ "tags": [],
222
+ "author": "OpenDirectory",
223
+ "version": "1.0.0",
224
+ "path": "skills/yc-intent-radar-skill"
225
+ }
226
+ ]
@@ -0,0 +1,19 @@
1
+ name: Publish to NPM
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: actions/setup-node@v4
13
+ with:
14
+ node-version: '20'
15
+ registry-url: 'https://registry.npmjs.org'
16
+ - run: npm ci
17
+ - run: npm publish
18
+ env:
19
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026, Fariz Anjum
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,126 @@
1
+ # Blog Cover Image CLI
2
+
3
+ A modern, AI-powered CLI tool designed to automatically generate high-converting, minimalist blog cover images and thumbnails using **Gemini 3.1 Flash Image Preview**.
4
+
5
+
6
+ <img width="1280" height="640" alt="blog-cover-image-cli-cover" src="https://github.com/user-attachments/assets/20336e16-a838-4281-9c48-af023fc84b4c" />
7
+
8
+
9
+ It handles everything from fetching company logos to pixel-perfect typography integration, all from your terminal or directly via an AI Agent using the included OpenCode Skill.
10
+
11
+ ![Banner](https://img.shields.io/badge/AI-Gemini%203.1-blue)
12
+ ![Format](https://img.shields.io/badge/Format-16:9-success)
13
+ ![Platform](https://img.shields.io/badge/Platform-Node.js-green)
14
+
15
+ ---
16
+
17
+ ## Features
18
+ - **Full AI Generation**: Uses `gemini-3.1-flash-image-preview` to generate the entire image.
19
+ - **Smart Logo Fetching**: Pass a domain (like `vercel.com`) and the CLI automatically fetches the logo using `Brandfetch`, normalizes it to PNG via `sharp`, and injects it into the AI context.
20
+ - **Aesthetic Control**: Bundled with `examples/` that automatically guide the model to produce clean, white-background, heavy-typography styles.
21
+ - **Google Search Grounding**: The image generation is hooked into Google Search to pull real-time data if your title involves current events.
22
+ - **Agent Ready**: Includes an OpenCode `SKILL.md` so your favorite AI agents can use this CLI autonomously.
23
+ - **Self-Healing AI Generator**: Automatically validates generated images using Gemini Pro Vision to detect typos or layout issues, retrying up to 3 times with corrective feedback.
24
+ - **Automated Publishing**: Built-in CI/CD workflow for seamless NPM releases via GitHub Actions.
25
+
26
+ ---
27
+
28
+ ## Installation
29
+
30
+ You can install this globally via npm:
31
+
32
+ ```bash
33
+ npm install -g blog-cover-image-cli
34
+ ```
35
+
36
+ *(Note: Ensure you are using Node.js v18+)*
37
+
38
+ ---
39
+
40
+ ## Configuration
41
+
42
+ The CLI securely stores your API key on your local machine using the `conf` package so you don't have to export it every time.
43
+
44
+ ```bash
45
+ # 1. Set your Gemini API Key (Required for image generation)
46
+ blog-cover-cli config set-key <YOUR_GEMINI_API_KEY>
47
+
48
+ # 2. Set your Brandfetch Client ID (Required to fetch high-res logos)
49
+ blog-cover-cli config set-brandfetch-id <YOUR_BRANDFETCH_CLIENT_ID>
50
+
51
+ # Check your keys (masked)
52
+ blog-cover-cli config get-key
53
+ blog-cover-cli config get-brandfetch-id
54
+ ```
55
+
56
+ *If you run the generate command without a key, a secure, interactive prompt will ask you for it.*
57
+
58
+ ---
59
+
60
+ ## Usage
61
+
62
+ Generate a 16:9 cover image by providing a title and a domain name for the logo.
63
+
64
+ ```bash
65
+ # Example 1: Cursor
66
+ blog-cover-cli generate -t "Why Cursor is the Ultimate AI Code Editor" -l "cursor.com"
67
+
68
+ # Example 2: Lovable
69
+ blog-cover-cli generate -t "Building Apps in Minutes with Lovable" -l "lovable.dev"
70
+
71
+ # Example 3: X (Twitter)
72
+ blog-cover-cli generate -t "The Future of Real-time Information" -l "x.com"
73
+ ```
74
+
75
+ ### Options
76
+
77
+ | Flag | Full Name | Description | Required | Default |
78
+ |---|---|---|---|---|
79
+ | `-t` | `--title` | The exact text to render on the cover | **Yes** | |
80
+ | `-l` | `--logo` | The domain to fetch the logo from (e.g. `google.com`) | No | |
81
+ | `-o` | `--output` | The output path for the PNG file | No | `./output/<auto-name>.png` |
82
+
83
+ If you omit the `--output` flag, the CLI automatically creates an `output/` directory in your current path and names the file intelligently based on the logo domain or title (e.g., `output/cursor-cover.png`).
84
+
85
+ ---
86
+
87
+ ## For AI Agents (OpenCode Skill)
88
+
89
+ This package includes a structured OpenCode skill! Agents can install this package and read the instructions in `agent-skill/blog-cover-generator/SKILL.md` to learn how to generate cover images for users autonomously.
90
+
91
+ **Workflow for Agents:**
92
+ 1. Execute `npx -p blog-cover-image-cli blog-cover-cli config set-key $KEY`
93
+ 2. Execute `npx -p blog-cover-image-cli blog-cover-cli generate -t "Title" -l "domain.com"`
94
+ 3. Return the generated image to the user.
95
+
96
+ ---
97
+
98
+ ## Self-Healing AI Generator
99
+
100
+ The CLI features a built-in Automated QA (Critic) loop to ensure high-quality results.
101
+
102
+ 1. **Generation**: The tool generates an image based on your title and logo.
103
+ 2. **Validation**: It uses `gemini-3.1-pro-preview` to OCR the generated image and check for typos, layout issues, or missing elements.
104
+ 3. **Self-Correction**: If the validation fails, the CLI automatically retries (up to 3 times), passing the specific "critical feedback" back to the generator to fix the errors.
105
+
106
+ This ensures that common AI image generation issues, like misspelled words in typography, are caught and corrected before you even see the file.
107
+
108
+ ---
109
+
110
+ ## Automated Publishing (CI/CD)
111
+
112
+ This repository includes a GitHub Action workflow for automated NPM publishing. To set this up for your fork:
113
+
114
+ 1. **Generate Token**: Go to [npmjs.com](https://www.npmjs.com/), navigate to **Access Tokens**, and generate a new "Automation" token.
115
+ 2. **Add Secret**: In your GitHub repository, go to **Settings > Secrets and variables > Actions**.
116
+ 3. **Save Secret**: Create a new repository secret named `NPM_TOKEN` and paste your token.
117
+
118
+ The workflow will automatically publish a new version to NPM whenever you create a new GitHub Release.
119
+
120
+ ---
121
+
122
+ ## How it works under the hood
123
+ 1. **Logo Fetcher**: Hits `Brandfetch`, parses WebP/SVGs/AVIFs, and converts to strict PNGs.
124
+ 2. **Context Assembly**: Loads aesthetic examples from the `./examples` folder to ground the style.
125
+ 3. **Multimodal Prompting**: Assembles the exact text instructions, the visual examples, and the fetched logo into a single unified payload.
126
+ 4. **Google GenAI SDK**: Sends the payload with `tools: [{ googleSearch: {} }]` to the Gemini 3.1 Flash Image model.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: blog-cover-image-cli
3
+ description: A skill for blog-cover-image-cli
4
+ author: OpenDirectory
5
+ version: 1.0.0
6
+ ---
7
+
@@ -0,0 +1,30 @@
1
+ # Blog Cover Generator Skill
2
+
3
+ This directory contains an OpenCode Skill for the `blog-cover-image-cli`. It allows AI agents to automatically generate blog cover images using the CLI tool.
4
+
5
+ ## Overview
6
+
7
+ The skill provides a structured interface for agents to:
8
+ 1. Generate cover images with specific titles and subtitles.
9
+ 2. Use predefined themes (e.g., 'modern', 'minimal', 'tech').
10
+ 3. Handle output paths and file naming conventions.
11
+
12
+ ## Installation & Distribution
13
+
14
+ ### For Users
15
+ To use this skill in your OpenCode environment:
16
+
17
+ 1. **Direct Path**: Point your agent to this directory path in your configuration.
18
+ 2. **Skill Package**: Zip the contents of this folder (including `SKILL.md`) into a `.skill` file.
19
+ ```bash
20
+ zip -r blog-cover-generator.skill agent-skill/blog-cover-generator/*
21
+ ```
22
+ 3. **Import**: Use the OpenCode skill import command to add it to your library.
23
+
24
+ ### For Developers
25
+ - `SKILL.md`: This is the core definition file used by the AI agent to understand its capabilities. **Do not modify its structure unless you are updating the skill's logic.**
26
+ - `README.md`: This file (you are reading it) is for human developers and users to understand deployment.
27
+
28
+ ## Requirements
29
+ - `blog-cover-image-cli` must be installed and available in the system PATH.
30
+ - Node.js environment for running the CLI.
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: blog-cover-generator
3
+ description: Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.
4
+ ---
5
+
6
+ # Blog Cover Generator Skill
7
+
8
+ This skill provides AI agents with the ability to generate stunning, minimalist, technical blog cover images using the `blog-cover-image-cli`. The CLI leverages Gemini 3.1 Flash Image Preview, automatically fetches brand logos from domains, uses local aesthetic reference images, and employs Google Search grounding to inject real-time context.
9
+
10
+ ## Setup & Configuration
11
+
12
+ **Agent Pre-requisites:**
13
+ Before using this tool, verify it is installed. If `blog-cover-cli --help` fails, install it globally:
14
+ ```bash
15
+ npm install -g blog-cover-image-cli
16
+ ```
17
+
18
+ If the user wants you to generate an image and you haven't set up the API key yet, you must first configure the CLI using a Gemini API Key. The CLI stores this securely via the `conf` package.
19
+
20
+ ```bash
21
+ # 1. Set your Gemini API Key (Required for image generation)
22
+ npx -p blog-cover-image-cli blog-cover-cli config set-key <YOUR_GEMINI_API_KEY>
23
+
24
+ # 2. Set your Brandfetch Client ID (Required to fetch high-res logos)
25
+ npx -p blog-cover-image-cli blog-cover-cli config set-brandfetch-id <YOUR_BRANDFETCH_CLIENT_ID>
26
+
27
+ # Check your keys (masked)
28
+ npx -p blog-cover-image-cli blog-cover-cli config get-key
29
+ npx -p blog-cover-image-cli blog-cover-cli config get-brandfetch-id
30
+ ```
31
+
32
+ ## Usage: Generating an Image
33
+
34
+ When a user asks for a cover image (e.g., "Create a cover image for my blog about Vercel v0"), you should use the `generate` command.
35
+
36
+ ```bash
37
+ npx -p blog-cover-image-cli blog-cover-cli generate -t "The Title of the Blog Post" -l "example.com"
38
+ ```
39
+
40
+ ### Arguments
41
+ - `-t, --title <text>`: **(Required)** The title text to display on the cover image. Do not use excessively long titles (keep it under 3 lines of text visually).
42
+ - `-l, --logo <domain>`: **(Optional but recommended)** The domain to fetch the brand logo from (e.g., `vercel.com`, `google.com`, `cursor.com`). The CLI automatically converts WebP/SVG/AVIF to PNG for compatibility.
43
+ - `-o, --output <path>`: **(Optional)** The file path where the generated image will be saved. If omitted, the CLI automatically saves it to an `output/` directory in the current working folder (e.g., `./output/vercel-cover.png`).
44
+
45
+ ### Examples
46
+
47
+ **Example 1: Cursor**
48
+ ```bash
49
+ npx -p blog-cover-image-cli blog-cover-cli generate -t "Why Cursor is the Ultimate AI Code Editor" -l "cursor.com"
50
+ ```
51
+
52
+ **Example 2: Lovable**
53
+ ```bash
54
+ npx -p blog-cover-image-cli blog-cover-cli generate -t "Building Apps in Minutes with Lovable" -l "lovable.dev"
55
+ ```
56
+
57
+ **Example 3: Custom Output Path**
58
+ ```bash
59
+ npx -p blog-cover-image-cli blog-cover-cli generate -t "Mastering React in 2026" -l "reactjs.org" -o "./assets/react-cover.png"
60
+ ```
61
+
62
+ ## How It Works Under the Hood
63
+ As an agent, you should know what the CLI is doing so you can inform the user:
64
+ 1. **Logo Fetching**: It fetches logos from `Brandfetch` and processes them via `sharp`.
65
+ 2. **References**: It loads curated reference images from its `examples/` directory to ensure the output is always a clean, minimalist white background with bold typography.
66
+ 3. **Grounding**: It has `googleSearch` tools enabled, meaning if the title relates to a recent event, Gemini can look it up before generating the image.
67
+ 4. **Text Enforcement**: It forces Gemini to output the exact title string using typographic placement rules.
68
+
69
+ ## Edge Cases / Troubleshooting
70
+ - **No API Key Error**: If you see an API key error, run the `config set-key` command.
71
+ - **Logo Fetch Warning**: If the CLI says `Warning: Could not fetch logo`, it will still generate the image but without the logo. You do not need to crash or stop.
72
+ - **Strict Modality Limits**: Because it uses Gemini's experimental image models, generation may occasionally fail due to strict safety filters. If this happens, notify the user.