@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
@@ -0,0 +1,142 @@
1
+ # llms-txt-generator
2
+
3
+ <img width="1376" height="768" alt="llms-txt-generator" src="https://github.com/user-attachments/assets/7f549d0b-4d55-40a8-97c6-59510cc40b54" />
4
+
5
+ Generate a standards-compliant `llms.txt` file for any website. Makes your site fully readable and citable by AI agents the GEO (Generative Engine Optimization) equivalent of having a great sitemap.
6
+
7
+ ## What It Does
8
+
9
+ The skill crawls your website using Chrome DevTools, reads your actual pages, and produces a clean `llms.txt` file in the format specified by [Jeremy Howard's llms.txt standard](https://llmstxt.org). When AI agents (Claude, ChatGPT, Gemini) visit your site, they read `llms.txt` first to understand what you are and where to find authoritative content.
10
+
11
+ **Without llms.txt:** AI agents guess, hallucinate, or cite competitors instead.
12
+ **With llms.txt:** AI agents cite your product correctly and know exactly where your docs, blog, and key pages live.
13
+
14
+ ## Two Modes
15
+
16
+ ### Codebase Mode (no Chrome needed)
17
+ If you're inside a website's repo, the skill reads your source files directly pages, routes, blog posts, frontmatter, site config. It writes `llms.txt` straight to `public/` when you approve. No browser required.
18
+
19
+ Supported frameworks: **Next.js** (pages + app router), **Astro**, **Nuxt**, **Gatsby**, **SvelteKit**, **Hugo**, **Jekyll**
20
+
21
+ ### Live Site Mode (Chrome or fetch fallback)
22
+ If you only have the URL, the skill crawls the live site using Chrome DevTools MCP. Falls back to standard web fetch if Chrome isn't available.
23
+
24
+ ---
25
+
26
+ ## Requirements
27
+
28
+ **Codebase Mode:** No extra setup. Just be inside the repo directory.
29
+
30
+ **Live Site Mode:**
31
+ - Chrome with remote debugging enabled (or any live URL skill will fall back to web fetch)
32
+ - Chrome DevTools MCP server configured in your agent (optional, improves JS-rendered sites)
33
+
34
+ ## Setup
35
+
36
+ ### For Live Site Mode: Start Chrome with Remote Debugging
37
+
38
+ **Mac:**
39
+ ```bash
40
+ open -a "Google Chrome" --args --remote-debugging-port=9222
41
+ ```
42
+
43
+ **Linux:**
44
+ ```bash
45
+ google-chrome --remote-debugging-port=9222
46
+ ```
47
+
48
+ **Windows:**
49
+ ```bash
50
+ chrome.exe --remote-debugging-port=9222
51
+ ```
52
+
53
+ ### 2. Install Chrome DevTools MCP Server
54
+
55
+ Follow the setup at: https://github.com/ChromeDevTools/chrome-devtools-mcp
56
+
57
+ Add to your agent's MCP configuration:
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "chrome-devtools": {
62
+ "command": "npx",
63
+ "args": ["-y", "@chrome-devtools/mcp-server"],
64
+ "env": {
65
+ "CHROME_DEBUGGING_PORT": "9222"
66
+ }
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### 3. Configure Environment (Optional)
73
+
74
+ Copy `.env.example` to `.env` and fill in:
75
+ ```bash
76
+ cp .env.example .env
77
+ ```
78
+
79
+ `GITHUB_TOKEN` and `GITHUB_REPO` are only needed if you want the agent to automatically open a GitHub PR with the generated file.
80
+
81
+ ## How to Use
82
+
83
+ **Codebase Mode** just be inside your project and ask:
84
+ ```
85
+ "Generate an llms.txt for this site"
86
+ "Add llms.txt to this project"
87
+ "Make this site readable by AI agents"
88
+ ```
89
+
90
+ The agent will detect your framework, read your pages and blog posts from source, generate `llms.txt`, and write it to the right directory (e.g. `public/llms.txt`) after you confirm.
91
+
92
+ **Live Site Mode** provide a URL:
93
+ ```
94
+ "Generate an llms.txt for https://yoursite.com"
95
+ "Does https://yoursite.com have an llms.txt? If not, create one."
96
+ ```
97
+
98
+ The agent will:
99
+ 1. Check if `llms.txt` already exists at the domain
100
+ 2. Crawl homepage, docs, blog, about, pricing, and API pages
101
+ 3. Generate `llms.txt` following the official spec
102
+ 4. Optionally generate `llms-full.txt` with full page content
103
+ 5. Save the file locally and give you deployment instructions
104
+ 6. Optionally open a GitHub PR if configured
105
+
106
+ ## Where to Deploy the File
107
+
108
+ Place `llms.txt` at your web root so it's accessible at `https://yourdomain.com/llms.txt`:
109
+
110
+ | Platform | File Location |
111
+ |----------|--------------|
112
+ | Next.js / Vercel | `/public/llms.txt` |
113
+ | Astro | `/public/llms.txt` |
114
+ | Nuxt | `/public/llms.txt` |
115
+ | GitHub Pages | Repository root |
116
+ | Hugo | `/static/llms.txt` |
117
+ | WordPress | Upload via FTP to web root |
118
+
119
+ ## Output Files
120
+
121
+ | File | Description |
122
+ |------|-------------|
123
+ | `llms.txt` | Structured link map. LLMs follow links to find content |
124
+ | `llms-full.txt` | Full prose content of key pages. LLMs ingest everything at once |
125
+
126
+ ## Project Structure
127
+
128
+ ```
129
+ llms-txt-generator/
130
+ ├── SKILL.md # Agent instructions
131
+ ├── README.md # This file
132
+ ├── .env.example # Environment variables template
133
+ ├── evals/
134
+ │ └── evals.json # Test prompts for skill evaluation
135
+ └── references/
136
+ ├── llms-txt-spec.md # The llms.txt format specification
137
+ └── output-template.md # Exact output template with example
138
+ ```
139
+
140
+ ## License
141
+
142
+ MIT
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: llms-txt-generator
3
+ 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.
4
+ compatibility: [claude-code, gemini-cli, github-copilot]
5
+ author: OpenDirectory
6
+ version: 1.0.0
7
+ ---
8
+
9
+ # llms.txt Generator
10
+
11
+ You are an expert in Generative Engine Optimization (GEO) and the llms.txt standard. Your job is to crawl a website and produce a perfectly structured `llms.txt` file that makes the site fully readable and citable by AI agents.
12
+
13
+ **CRITICAL RULE: DO NOT INVENT CONTENT.** Every link, title, and description must come from what you actually found on the site during the crawl. Never fabricate URLs or describe content you did not visit.
14
+
15
+ **MANDATORY SETUP CHECK:** Before starting, confirm you have:
16
+ - Chrome running with remote debugging enabled (`chrome --remote-debugging-port=9222`)
17
+ - Chrome DevTools MCP server configured in your agent settings
18
+ - Target website URL from the user
19
+
20
+ If Chrome is not available, fall back to standard web fetch tools to retrieve page content. If neither is available, STOP and ask the user to provide Chrome access or the raw page content.
21
+
22
+ ---
23
+
24
+ ## Workflow
25
+
26
+ ### Step 1: Detect Source — Codebase or Live Site?
27
+
28
+ Before anything else, check whether you are inside a website codebase:
29
+
30
+ 1. Look for `package.json`, `astro.config.*`, `next.config.*`, `nuxt.config.*`, `gatsby-config.*`, `vite.config.*`, or `_config.yml` in the current working directory or its parent.
31
+ 2. If found → **Codebase Mode** (go to Step 2A).
32
+ 3. If not found → ask the user for the target URL and proceed to **Step 2B**.
33
+
34
+ ---
35
+
36
+ ### Step 2A: Codebase Mode — Read the Repo Directly
37
+
38
+ You have access to the source. Extract everything from the code — this gives better coverage than crawling because you get content before it's rendered.
39
+
40
+ **2A-1. Detect the framework and site config:**
41
+ - Read `package.json` → identify framework (next, astro, nuxt, gatsby, @sveltejs/kit, etc.) and the `name`/`description` fields
42
+ - Read framework config file (`next.config.*`, `astro.config.*`, etc.) for `basePath`, `site`, or `siteUrl`
43
+ - Check `public/` or `static/` or `dist/` for an existing `llms.txt` — if found, read it
44
+ - **QA:** What framework is this? What is the base URL? Does llms.txt already exist?
45
+
46
+ **2A-2. Discover all pages/routes:**
47
+
48
+ | Framework | Where to look |
49
+ |-----------|--------------|
50
+ | Next.js (pages router) | `pages/**/*.tsx`, `pages/**/*.jsx` — skip `_app`, `_document`, `api/` |
51
+ | Next.js (app router) | `app/**/page.tsx`, `app/**/page.jsx` — directory name = route |
52
+ | Astro | `src/pages/**/*.astro`, `src/pages/**/*.md` |
53
+ | Nuxt | `pages/**/*.vue` |
54
+ | Gatsby | `src/pages/**/*.tsx`, `src/pages/**/*.jsx` |
55
+ | SvelteKit | `src/routes/**/+page.svelte` |
56
+ | Hugo / Jekyll | `content/**/*.md`, `_posts/**/*.md` |
57
+
58
+ Read each page file and extract: page title (`<title>`, `export const metadata`, frontmatter `title:`), meta description, and main headings (H1, H2).
59
+
60
+ **2A-3. Find blog/content posts:**
61
+ - Check `content/`, `posts/`, `src/content/`, `_posts/`, `blog/` for markdown/MDX files
62
+ - Read frontmatter (`title`, `description`, `date`, `slug`) from each file
63
+ - List the 5–10 most recent or most important posts
64
+
65
+ **2A-4. Read the site's existing SEO/meta config:**
66
+ - `src/config.ts`, `src/site.config.ts`, `seo.config.*`, or any file exporting `siteTitle`, `siteDescription`, `siteUrl`
67
+ - `constants.ts`, `config/index.ts` — look for site-level metadata
68
+
69
+ **2A-5. Construct the base URL:**
70
+ - Prefer `siteUrl` or `site` from config files
71
+ - Fall back to asking the user: "What is your production URL? (e.g. https://yoursite.com)"
72
+ - **QA:** Is the base URL confirmed? All links in llms.txt must use the full absolute URL.
73
+
74
+ Then skip to **Step 4** to generate the file using codebase data.
75
+
76
+ ---
77
+
78
+ ### Step 2B: Live Site Mode — Get Target URL
79
+ If the user hasn't provided a URL, ask: "What website should I generate llms.txt for?"
80
+
81
+ ### Step 3: Check for Existing llms.txt (Live Site Mode only)
82
+ Before crawling, check if the site already has one:
83
+ 1. Navigate to `[URL]/llms.txt`
84
+ 2. If it exists: read it, note what's there, and plan to update/improve it rather than replace blindly
85
+ 3. If it doesn't exist: proceed to full crawl
86
+ - **QA:** Did you check the existing file? Note its status (missing / outdated / present and good).
87
+
88
+ ### Step 3B: Connect to Browser and Crawl
89
+ Use the Chrome DevTools MCP server to connect to the live browser. Follow the same connection pattern as the chrome-cdp-skill:
90
+ 1. Connect to `http://localhost:9222` via Chrome DevTools MCP
91
+ 2. Navigate to the homepage — take note of: site name, tagline, main navigation links, primary value proposition
92
+ 3. Navigate to each key page that exists (check nav links): `/docs`, `/blog`, `/api`, `/about`, `/pricing`, `/examples`, `/changelog`
93
+ 4. For each page: read the H1, main content sections, and any sub-navigation links
94
+ 5. For the blog: read titles and descriptions of the 5-10 most relevant/recent posts
95
+
96
+ If Chrome DevTools MCP is unavailable, fall back to fetching pages with standard web tools (curl, fetch). If the site returns 403, try adding a browser User-Agent header.
97
+ - **QA:** Did you successfully load and read each page? List which pages you visited and which returned 404. Do not include 404 pages.
98
+
99
+ ### Step 4: Read the Spec and Template
100
+ Before writing output, read both reference files:
101
+ - `references/llms-txt-spec.md` — the format rules and validation checklist
102
+ - `references/output-template.md` — the exact template to follow
103
+
104
+ Note which mode you used: **Codebase Mode** (data came from source files) or **Live Site Mode** (data came from browser crawl). Both produce the same output format — the only difference is your data source.
105
+
106
+ ### Step 5: Generate llms.txt
107
+ Using only content from your crawl, produce the `llms.txt` file:
108
+
109
+ 1. Write the H1 header (product/site name — factual, not tagline)
110
+ 2. Write the summary blockquote (1-3 sentences, factual, LLM-friendly — no marketing fluff)
111
+ 3. Add only the H2 sections that have real content on the site
112
+ 4. For each link: write a factual, content-dense description of what an LLM will find at that URL
113
+ 5. Apply the validation checklist from `references/llms-txt-spec.md` before finalizing
114
+ - **QA:** Is every URL real and verified from the crawl? Is every description factual, not marketing copy? Is the file under 5,000 words? Fix any issues before proceeding.
115
+
116
+ ### Step 6: Check for llms-full.txt
117
+ Ask the user: "Do you also want me to generate `llms-full.txt` with the full prose content of key pages included? This is larger but gives AI agents everything in one file."
118
+
119
+ If yes: revisit each key page and paste the full cleaned text content under each link entry, separated by `---`.
120
+
121
+ ### Step 7: Save and Output
122
+ 1. Save `llms.txt` to the current working directory (or the user's project root if known)
123
+ 2. If `llms-full.txt` was requested, save that too
124
+ 3. Print the full contents of `llms.txt` in the conversation so the user can review it
125
+ 4. If the user's site is on GitHub, offer to open a PR to add the file to the repo root
126
+ - **QA:** Is the file saved? Did you confirm the save path with the user?
127
+
128
+ ### Step 8: Placement Instructions
129
+
130
+ **If Codebase Mode:** You know the framework — place the file immediately:
131
+
132
+ | Framework | Action |
133
+ |-----------|--------|
134
+ | Next.js / Vercel | Write directly to `public/llms.txt` in the repo |
135
+ | Astro | Write directly to `public/llms.txt` |
136
+ | Nuxt | Write directly to `public/llms.txt` |
137
+ | Gatsby | Write directly to `static/llms.txt` |
138
+ | SvelteKit | Write directly to `static/llms.txt` |
139
+ | Hugo | Write directly to `static/llms.txt` |
140
+ | Jekyll | Write directly to root of repo as `llms.txt` |
141
+
142
+ Ask the user: "I can write `llms.txt` directly to `public/llms.txt` in your repo. Should I do that now, or do you want to review it first?"
143
+
144
+ If approved, write the file. Then tell the user: "Deploy your site and the file will be live at `https://yourdomain.com/llms.txt`."
145
+
146
+ **If Live Site Mode:** Tell the user where to add it:
147
+ ```
148
+ Place llms.txt at your web root so it's accessible at: https://yourdomain.com/llms.txt
149
+
150
+ - Next.js / Vercel: put in /public/llms.txt
151
+ - Astro / Nuxt / Gatsby / SvelteKit: put in /public/llms.txt
152
+ - GitHub Pages: put in root of repo
153
+ - Hugo / Jekyll: put in /static/llms.txt
154
+ - WordPress: upload to web root via FTP or use a rewrite rule
155
+ - Custom server: serve as a static file at /llms.txt
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Output Quality Standards
161
+
162
+ A great `llms.txt` file:
163
+ - Has a factual H1 and a clear 2-3 sentence summary that an LLM could quote directly
164
+ - Covers all major content areas the site actually has
165
+ - Uses link descriptions that explain WHAT IS THERE, not what the company wants you to think
166
+ - Is scannable in under 30 seconds
167
+ - Contains no broken links, no redirect chains, no CDN asset URLs
168
+ - Passes all checks in `references/llms-txt-spec.md`
169
+
170
+ A bad `llms.txt` file:
171
+ - Has marketing language ("our amazing API", "best-in-class docs")
172
+ - Contains invented or guessed URLs
173
+ - Is missing major sections of the site
174
+ - Has empty or vague descriptions ("info about our product")
175
+
176
+
@@ -0,0 +1,35 @@
1
+ {
2
+ "skill_name": "llms-txt-generator",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Generate an llms.txt file for opendirectory.dev — it's our product site and we want AI agents to be able to find and cite us in generative search results.",
7
+ "expected_output": "A valid llms.txt file with H1 header (OpenDirectory), a factual summary paragraph, and H2 sections for the site's actual content areas (Skills, Docs, About). All URLs verified from the real site. Descriptions are factual and information-dense, not marketing copy. File is under 5000 words.",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "Check if https://vercel.com has an llms.txt file. If it does, review it and suggest improvements. If not, generate one.",
13
+ "expected_output": "Agent first checks vercel.com/llms.txt. If present: reads it, identifies gaps or outdated links, and produces an improved version. If missing: crawls the site and generates a complete llms.txt covering their docs, blog, changelog, and about pages.",
14
+ "files": []
15
+ },
16
+ {
17
+ "id": 3,
18
+ "prompt": "My startup's website is at https://linear.app and I want to make sure AI models like Claude and ChatGPT can find us properly. Can you create the llms.txt and llms-full.txt files for us?",
19
+ "expected_output": "Agent generates both llms.txt (structured link map) and llms-full.txt (full prose content of key pages). llms.txt covers Linear's docs, changelog, about, and blog. llms-full.txt includes actual prose from key pages. Agent provides deployment instructions for placing the files at the web root.",
20
+ "files": []
21
+ },
22
+ {
23
+ "id": 4,
24
+ "prompt": "I'm inside my Next.js app router project. Can you generate an llms.txt for it?",
25
+ "expected_output": "Agent detects Next.js app router from package.json and next.config.*. Reads app/**/page.tsx files to discover routes. Extracts page titles from metadata exports and frontmatter. Reads src/content/ or posts/ for blog post frontmatter. Asks for or infers the production URL. Generates a valid llms.txt with all real pages. Offers to write it directly to public/llms.txt.",
26
+ "files": []
27
+ },
28
+ {
29
+ "id": 5,
30
+ "prompt": "I have an Astro blog at src/pages/ with markdown posts in src/content/blog/. Generate llms.txt and put it in the right place.",
31
+ "expected_output": "Agent detects Astro from astro.config.* and package.json. Reads src/pages/**/*.astro for routes. Reads src/content/blog/*.md frontmatter for blog post titles, descriptions, and slugs. Constructs absolute URLs from siteUrl in astro.config. Generates llms.txt. Writes the file directly to public/llms.txt without asking for manual steps.",
32
+ "files": []
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,88 @@
1
+ # llms.txt Specification
2
+
3
+ Proposed by Jeremy Howard (fast.ai / answer.ai). See: https://llmstxt.org
4
+
5
+ ## Purpose
6
+
7
+ `/llms.txt` is a markdown file at the root of a website that helps LLMs understand what the site is about and where to find authoritative content. It is the AI equivalent of `robots.txt` — but instead of telling crawlers what to avoid, it tells AI agents what to read.
8
+
9
+ ## Why It Matters
10
+
11
+ When an AI agent is asked about a company or product, it may visit the site. Without `llms.txt`, the agent has to infer structure from HTML, JavaScript-heavy pages, and noise. With `llms.txt`, the agent gets a clean, structured, LLM-optimized summary in seconds.
12
+
13
+ Missing `llms.txt` = invisible to AI agents and generative search (GEO failure).
14
+
15
+ ---
16
+
17
+ ## File Format
18
+
19
+ The file MUST be valid Markdown. MUST be served at exactly: `https://yourdomain.com/llms.txt`
20
+
21
+ ### Required Elements
22
+
23
+ **1. H1 Header — Site/Product Name**
24
+ ```markdown
25
+ # Product Name
26
+ ```
27
+
28
+ **2. Optional Summary Block (blockquote or plain paragraph)**
29
+ ```markdown
30
+ > One-paragraph plain-English description of what this site is about.
31
+ > Written for an LLM, not for marketing. Factual, concise, no fluff.
32
+ ```
33
+
34
+ **3. H2 Sections with Link Lists**
35
+ Each section is an H2 heading followed by a list of links with descriptions:
36
+ ```markdown
37
+ ## Section Name
38
+
39
+ - [Page Title](https://domain.com/page): One-sentence description of what this page contains.
40
+ - [Another Page](https://domain.com/other): What an LLM will find here.
41
+ ```
42
+
43
+ ### Recommended Sections (use only what exists on the site)
44
+
45
+ | Section | What to include |
46
+ |---------|----------------|
47
+ | `## Docs` | API reference, getting started, installation guides |
48
+ | `## API` | API endpoints, SDKs, developer reference |
49
+ | `## Blog` | Top 5-10 most relevant/recent blog posts |
50
+ | `## Examples` | Code examples, tutorials, demos |
51
+ | `## About` | Company, team, mission pages |
52
+ | `## Pricing` | Pricing page if public |
53
+ | `## Changelog` | Release notes, changelog |
54
+
55
+ ### Link Description Format
56
+
57
+ Keep descriptions factual and information-dense. Write what an LLM would find there:
58
+
59
+ **Good:**
60
+ ```markdown
61
+ - [API Authentication](https://api.example.com/docs/auth): How to obtain and use API keys, OAuth 2.0 flow, token refresh, and rate limit headers.
62
+ ```
63
+
64
+ **Bad:**
65
+ ```markdown
66
+ - [API Authentication](https://api.example.com/docs/auth): Learn about our amazing auth system!
67
+ ```
68
+
69
+ ---
70
+
71
+ ## llms-full.txt (Optional)
72
+
73
+ A second file at `/llms-full.txt` that contains the FULL prose content of key pages — suitable for LLMs that want to ingest everything at once rather than follow links.
74
+
75
+ Format: same as `llms.txt` but with full page content pasted inline under each link, separated by `---`.
76
+
77
+ ---
78
+
79
+ ## Validation Checklist
80
+
81
+ Before saving the output, check:
82
+ - [ ] File starts with an H1 (site/product name)
83
+ - [ ] Has at least one H2 section with links
84
+ - [ ] Every link description is factual (no marketing fluff)
85
+ - [ ] All URLs are absolute (https://...), not relative
86
+ - [ ] No broken links (verify URLs resolve during crawl)
87
+ - [ ] File is clean Markdown with no HTML tags
88
+ - [ ] Under 5,000 words (LLMs have context limits)
@@ -0,0 +1,76 @@
1
+ # llms.txt Output Template
2
+
3
+ Use this exact structure when generating the output. Fill in real content from the crawled site.
4
+
5
+ ---
6
+
7
+ ## Template
8
+
9
+ ```markdown
10
+ # [Site/Product Name]
11
+
12
+ > [1-3 sentence factual description of what this product/service does. Written for an AI agent.
13
+ > Include: what it is, who uses it, what problem it solves. No marketing language.]
14
+
15
+ ## Docs
16
+
17
+ - [Getting Started](https://domain.com/docs/getting-started): [What an LLM finds here — setup steps, prerequisites, first integration]
18
+ - [API Reference](https://domain.com/docs/api): [Endpoints, parameters, request/response formats, auth headers]
19
+ - [Configuration](https://domain.com/docs/config): [All configuration options, environment variables, defaults]
20
+
21
+ ## API
22
+
23
+ - [Authentication](https://domain.com/api/auth): [How to authenticate, API key format, OAuth if applicable]
24
+ - [Endpoints](https://domain.com/api/endpoints): [List of available endpoints, HTTP methods, rate limits]
25
+ - [SDKs](https://domain.com/docs/sdks): [Available SDKs, language support, installation commands]
26
+
27
+ ## Blog
28
+
29
+ - [Post Title](https://domain.com/blog/post-slug): [What this post covers — topic, key insight, who it's for]
30
+ - [Post Title](https://domain.com/blog/post-slug): [What this post covers]
31
+
32
+ ## Examples
33
+
34
+ - [Example Name](https://domain.com/examples/name): [What this example demonstrates, language/framework used]
35
+
36
+ ## About
37
+
38
+ - [About](https://domain.com/about): [Company background, founding year, mission statement if factual]
39
+ - [Pricing](https://domain.com/pricing): [Pricing tiers, free tier details, enterprise option]
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Rules for Filling This Template
45
+
46
+ 1. **Only include sections that actually exist on the site.** Skip Docs if there are no docs. Skip API if no public API.
47
+ 2. **Links must be real, verified URLs** from the crawl. Do not invent URLs.
48
+ 3. **Descriptions must be factual** — describe what content is there, not what the company claims it does.
49
+ 4. **Limit Blog section to top 5-10 posts** — most relevant or most recent. Do not list all posts.
50
+ 5. **Keep total file under 5,000 words.**
51
+ 6. **Do not include**: social media links, legal pages (ToS, Privacy) unless specifically relevant, redirect URLs, CDN asset URLs.
52
+
53
+ ---
54
+
55
+ ## Example: OpenDirectory.dev
56
+
57
+ ```markdown
58
+ # OpenDirectory
59
+
60
+ > OpenDirectory.dev is a unified directory of open-source agent skills and automation pipelines designed for autonomous AI agents. It provides a curated collection of pre-built skills that developers can integrate into Claude Code, Gemini CLI, and other AI agent environments. Skills are configured once and run autonomously without ongoing intervention.
61
+
62
+ ## Skills
63
+
64
+ - [Browse All Skills](https://opendirectory.dev/skills): Full directory of available agent skills, searchable by category (Agent, CLI, Content, SEO, Scraper, API).
65
+ - [cook-the-blog](https://github.com/Varnan-Tech/cook-the-blog): Autonomous pipeline that researches a company, generates cover images, writes MDX case studies, and pushes to a GitHub blog repository.
66
+ - [google-trends-api-skills](https://github.com/Varnan-Tech/google-trends-api-skills): SEO keyword research using Google Trends data via SerpApi for developer-focused blog content.
67
+
68
+ ## Docs
69
+
70
+ - [Documentation](https://opendirectory.dev/docs): How to install and use skills with Claude Code, Gemini CLI, and GitHub Copilot.
71
+ - [Skill Specification](https://opendirectory.dev/docs/spec): The SKILL.md format specification — frontmatter fields, directory structure, compatibility.
72
+
73
+ ## About
74
+
75
+ - [GitHub Repository](https://github.com/Varnan-Tech): Source code for all open-source skills.
76
+ ```
@@ -0,0 +1,31 @@
1
+ # GenZCareer
2
+
3
+ > GenZCareer (genzcareer.in) is an AI-powered career platform built for Gen Z job seekers — students, freshers, and early-career professionals. It provides tools to build ATS-optimized resumes, generate personalized cover letters, practice mock interviews with an AI voice interviewer, search job listings, and receive 24/7 AI career coaching. The platform combines AI content generation with job discovery and application tracking in a single workflow.
4
+
5
+ ## Tools
6
+
7
+ - [AI Resume Builder](https://www.genzcareer.in/resume-builder): Build professional, ATS-optimized resumes with AI assistance. Offers 6+ templates, real-time ATS feedback, and unlimited exports on paid plans. Designed for students and freshers entering the job market.
8
+ - [AI Cover Letter Generator](https://www.genzcareer.in/cover-letter): Generate personalized, ATS-optimized cover letters in minutes. Tailors each letter to the job description. Professional templates included.
9
+ - [ATS Resume Checker](https://www.genzcareer.in/ats-checker): Analyzes a resume against ATS (Applicant Tracking System) requirements. Identifies formatting issues, keyword gaps, and compatibility problems before submission.
10
+ - [AI Mock Interview](https://www.genzcareer.in/mock-interview): AI-powered voice interviewer that conducts practice job interviews. Provides real-time feedback and generates personalized questions based on the user's resume and target role. Covers technical, behavioral, and HR interview formats.
11
+ - [Job Search](https://www.genzcareer.in/find-job): Search thousands of job listings across industries. Covers internships, entry-level positions, and experienced roles matched to user skills and preferences.
12
+ - [AI Career Advice](https://www.genzcareer.in/career-advice): Personalized AI career coaching available 24/7. Covers resume optimization, interview preparation, salary negotiation, and career planning.
13
+ - [AI Portfolio Builder](https://www.genzcareer.in/portfolio-builder): Generates a developer portfolio in seconds by importing data from GitHub or an existing resume. No manual setup required.
14
+ - [Profile Image Generator](https://www.genzcareer.in/profile-image-generator): Generates professional profile photos suitable for LinkedIn and job applications.
15
+ - [Job Tracker](https://www.genzcareer.in/tracker): Tracks job applications — status, follow-ups, deadlines — in a centralized dashboard.
16
+ - [Recommended Jobs](https://www.genzcareer.in/recommended): AI-curated job recommendations matched to the user's profile, resume, and career goals.
17
+
18
+ ## Blog
19
+
20
+ - [Gen Z Job Search Strategy 2025: Complete Playbook + Free Tracker](https://www.genzcareer.in/blog/2025-gen-z-job-search-funnel-playbook): Step-by-step job search funnel guide used by 847 graduates in 2025. Includes a free application tracker, resume templates, and proven strategies for students worldwide.
21
+ - [ATS Resume Guide for Freshers 2025](https://www.genzcareer.in/blog/ats-resume-for-freshers-2025): ATS resume writing guide for Indian freshers with 25 bullet point examples, a free resume template, CGPA formatting guidelines, and campus placement tips.
22
+ - [15 Free AI Certificates for Students Resume 2025](https://www.genzcareer.in/blog/15-free-ai-certificates-students-resume-2025): Curated list of 15 free AI certifications from Google, Microsoft, IBM, and AWS that students can add to their resume. Includes credential verification details.
23
+
24
+ ## Pricing
25
+
26
+ - [Pricing](https://www.genzcareer.in/pricing): Three tiers — Free (20 AI credits/month, 3 resume exports, basic templates), Pro (200 AI credits/month, unlimited exports, 50 ATS analyses, all templates, priority support), Ultra Pro (unlimited everything, personal AI career coach, 1-on-1 consultations, expert resume review). 3-day free trial on all paid plans.
27
+
28
+ ## About
29
+
30
+ - [About](https://www.genzcareer.in/about): Company mission — built by a founder who experienced the broken job search process firsthand. GenZCareer uses AI-driven matching, personalized tools, and structured career guidance to bridge the gap between qualified candidates and job opportunities.
31
+ - [Contact](https://www.genzcareer.in/contact): Contact page for support and inquiries.