@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,167 @@
1
+ # Sequence Format
2
+
3
+ Writing rules, output format, and objection playbook for all outreach sequences.
4
+
5
+ ---
6
+
7
+ ## Channel Writing Rules
8
+
9
+ ### Email
10
+
11
+ - Body: 100 words maximum. Count them. Do not guess.
12
+ - Subject line: under 8 words. No question marks in subject lines.
13
+ - Two variants per email touchpoint (A/B test).
14
+ - First sentence is about the recipient, not your company.
15
+ - One ask per email. Not two. Not three.
16
+ - No "I hope this email finds you well."
17
+ - No "Just wanted to check in."
18
+ - No "Following up on my last email."
19
+ - Sign off: first name only, no title, no company tagline.
20
+
21
+ Subject line A/B patterns by touch:
22
+ - Touch 1: Signal-specific (name the trigger). "Series B + what it means for you"
23
+ - Touch 2: Value-led (new angle). State the outcome, not the feature.
24
+ - Touch 3: Social proof or objection. Name a company they know.
25
+ - Breakup: Low pressure. "Closing the loop" or "Should I stop reaching out?"
26
+
27
+ ### LinkedIn
28
+
29
+ - Connection note: 300 characters maximum. Count them.
30
+ - DM: treat as a shorter email. Same first-sentence rule applies.
31
+ - Do not paste your email into LinkedIn. Write natively for the channel.
32
+ - Do not pitch in the connection note. Build context, ask one question.
33
+ - LinkedIn messages are copy-paste only. No programmatic sending is available.
34
+
35
+ ### Phone
36
+
37
+ - Talk track: 3-5 bullets. Not a word-for-word script.
38
+ - Opening line: 20 words maximum.
39
+ - Voicemail: 20-25 seconds. Leave your name, company, one sentence on why you are calling, callback number.
40
+ - Gate: if no answer, leave voicemail and move to the next touch. Do not call twice.
41
+
42
+ Phone talk track format:
43
+ ```
44
+ Opening (under 20 words): [one sentence referencing the signal or previous touches]
45
+ Context (1-2 sentences): [what your product does, specific to their situation]
46
+ Ask: [one question. Are they the right person? Is this problem real for them?]
47
+ Voicemail: [20-25 second script if no answer]
48
+ ```
49
+
50
+ ---
51
+
52
+ ## Banned Words
53
+
54
+ Never use these in any touchpoint:
55
+
56
+ synergy, leverage, touch base, circle back, ping, loop in, alignment, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, bandwidth, deep dive, low-hanging fruit, move the needle, paradigm, holistic, robust, seamless, streamline, empower, unlock, transform, revolutionize, reimagine, comprehensive, scalable, end-to-end, best-of-breed
57
+
58
+ ---
59
+
60
+ ## Output Format
61
+
62
+ Each touchpoint follows this structure:
63
+
64
+ ```
65
+ ### Day X — [Channel]
66
+
67
+ **Subject A:** [subject line variant A]
68
+ **Subject B:** [subject line variant B]
69
+ [for email only]
70
+
71
+ [Message body]
72
+
73
+ ---
74
+ Word count: X words [for email]
75
+ Character count: X characters [for LinkedIn]
76
+ ```
77
+
78
+ Phone touchpoints:
79
+ ```
80
+ ### Day X — Phone
81
+
82
+ **Opening line:** [under 20 words]
83
+
84
+ **Talk track:**
85
+ - [context bullet]
86
+ - [value bullet]
87
+ - [ask bullet]
88
+
89
+ **Voicemail script:**
90
+ [20-25 second voicemail]
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Objection Playbook
96
+
97
+ Four objections to pre-empt. Weave the pre-emption into an existing touchpoint. Do not add a separate objection-handling message.
98
+
99
+ ### "We already have a solution"
100
+
101
+ Pre-emption approach: Acknowledge their current tool by name if you know it. Position yours as the next step or the missing piece, not a replacement. "Most teams using [competitor] add us when [specific gap]."
102
+
103
+ Best touchpoint to weave into: Touch 3 (email). By this point they have seen your framing twice and the objection is forming.
104
+
105
+ ---
106
+
107
+ ### "Not the right time"
108
+
109
+ Pre-emption approach: Tie the buying signal directly to timing. The signal is the reason now is the right time, not a coincidence. "The reason I reached out now specifically is [signal detail]."
110
+
111
+ Best touchpoint to weave into: Touch 1 (email). Address the timing question before it becomes an objection.
112
+
113
+ ---
114
+
115
+ ### "Too expensive"
116
+
117
+ Pre-emption approach: Frame around a number they care about, not your price. Use a reference point from the signal: headcount cost, time spent on the problem, revenue at stake. "The teams that make this work see [outcome] in [time frame] — the math usually works out."
118
+
119
+ Best touchpoint to weave into: Touch 3 (email) or Touch 5 (email). Not the first touch.
120
+
121
+ ---
122
+
123
+ ### "Need to involve more people"
124
+
125
+ Pre-emption approach: Offer a shareable resource before they ask. One-pager, recorded walkthrough, or a short case study. "Happy to send something you can share with the team — takes 3 minutes to read."
126
+
127
+ Best touchpoint to weave into: Touch 2 (LinkedIn DM) or Touch 3 (email). Offer the asset proactively.
128
+
129
+ ---
130
+
131
+ ## Breakup Message Rules
132
+
133
+ The final touchpoint is a breakup. Rules:
134
+
135
+ - 3-4 sentences only.
136
+ - No guilt. No "I understand you're busy." No "I've tried reaching out several times."
137
+ - Leave the door open. They may not be ready now but could be in 6 months.
138
+ - Offer to close the loop or come back later.
139
+ - Do not ask for a reason why they have not responded.
140
+
141
+ Good breakup template:
142
+ "{{first_name}}, I'll stop reaching out so I'm not cluttering your inbox. If [signal-relevant situation] changes, I'd love to reconnect. I'll leave it with you — my contact is below if you want to pick this up later."
143
+
144
+ Bad breakup signals to avoid:
145
+ - "I've sent a few emails now..."
146
+ - "I know you're probably busy..."
147
+ - "Is there a better person I should be talking to?"
148
+ - "Just wanted to make sure you got my last message."
149
+
150
+ ---
151
+
152
+ ## Self-QA Checklist
153
+
154
+ Run before presenting the sequence:
155
+
156
+ - [ ] Every message starts with a sentence about THEM
157
+ - [ ] Specific signal detail named in at least Touch 1
158
+ - [ ] No unfilled placeholders except {{first_name}}
159
+ - [ ] All email bodies under 100 words (word count stated)
160
+ - [ ] All LinkedIn notes under 300 characters (character count stated)
161
+ - [ ] Phone opener under 20 words
162
+ - [ ] No banned words in any message
163
+ - [ ] No "just following up" in any follow-up
164
+ - [ ] Each follow-up adds a new angle or value
165
+ - [ ] No same channel used twice in a row
166
+ - [ ] At least 2 objections pre-empted across the sequence
167
+ - [ ] Breakup is 3-4 sentences, friendly, no guilt
@@ -0,0 +1,117 @@
1
+ # Signal Playbook
2
+
3
+ Four elements for every signal type: Insight, Bridge, Opener, Ask.
4
+
5
+ ---
6
+
7
+ ## Post-Fundraise
8
+
9
+ **Insight:** A funding round means the company has money to spend and pressure to deploy it. New investors expect a plan. Headcount, tooling, and infrastructure decisions move fast in the first 30-90 days.
10
+
11
+ **Bridge:** Your product solves the scaling problem that comes immediately after the round closes. Teams that grew from seed to Series A without your product are now too big to run on the old way.
12
+
13
+ **Opener formula:** "Congrats on the [round size] [round stage] — [specific scaling challenge that typically follows this stage]."
14
+
15
+ Example: "Congrats on the $18M Series B — scaling the sales team past 20 reps usually creates an onboarding gap that kills ramp time."
16
+
17
+ **Ask:** "Worth 15 minutes to see if we can shorten ramp?"
18
+
19
+ **Cadence note:** Move fast. Day 1, 2, 4, 7, 10. The window closes when the budget is allocated.
20
+
21
+ ---
22
+
23
+ ## Hiring Signal
24
+
25
+ **Insight:** Job posts reveal strategic intent. Five or more open roles in one function means a team is being built or rebuilt. Where a company is hiring tells you where it is investing and where it is feeling pain.
26
+
27
+ **Bridge:** Your product either replaces the manual work they are trying to hire for, or it makes the new hires more effective from day one.
28
+
29
+ **Opener formula:** "Noticed [company] is hiring [number] [role titles] — that kind of growth in [function] usually creates [specific bottleneck]."
30
+
31
+ Example: "Noticed Acme is hiring 7 SDRs — that kind of growth in outbound usually creates a data hygiene problem before the ramp is even done."
32
+
33
+ **Ask:** "Have 20 minutes to show you how we handle that?"
34
+
35
+ **Cadence note:** Standard pacing. First touch within the week the job posts appear.
36
+
37
+ ---
38
+
39
+ ## Competitor Displacement
40
+
41
+ **Insight:** Frustration with a current tool is the highest-intent buying signal that exists. The contact has already done the mental work of deciding the status quo is not good enough.
42
+
43
+ **Bridge:** You are the credible alternative. Lead with the specific thing the competitor does badly, not your feature list.
44
+
45
+ **Opener formula:** "Saw your [post/comment/review] about [competitor] and [specific frustration they expressed]."
46
+
47
+ Example: "Saw your LinkedIn comment about HubSpot's reporting being unusable for pipeline reviews — that is the exact reason our last 3 customers switched."
48
+
49
+ **Ask:** "Can I show you what they built instead?"
50
+
51
+ **Cadence note:** Move fast. Frustration is a moment, not a sustained state. First touch within 24 hours of the signal.
52
+
53
+ ---
54
+
55
+ ## Product Launch
56
+
57
+ **Insight:** Launching a new product or major feature means the company is in motion. New products need distribution, infrastructure, tooling, and partners. The launch also signals where the company is betting its growth.
58
+
59
+ **Bridge:** Your product supports what their new product needs to succeed. Tie your value directly to the launch outcome, not to the company in general.
60
+
61
+ **Opener formula:** "Congrats on the launch of [product name] — [what that launch typically requires that you provide]."
62
+
63
+ Example: "Congrats on the launch of Acme Analytics — product-led growth plays like this one usually need a solid activation sequence to convert trial users."
64
+
65
+ **Ask:** "Do you have that wired up already?"
66
+
67
+ **Cadence note:** Standard pacing. Launch window is 2-4 weeks where the topic is still warm.
68
+
69
+ ---
70
+
71
+ ## Content Engagement
72
+
73
+ **Insight:** Liking, commenting, or sharing your content is a warm signal. The contact has seen your point of view, agreed enough to engage, and is now familiar with your brand. This is not cold outreach.
74
+
75
+ **Bridge:** Reference the specific content piece and what you think their engagement signals about their situation. Show you read the signal, not just saw the notification.
76
+
77
+ **Opener formula (LinkedIn):** Start with a reply or comment on the specific post before moving to DM or email.
78
+
79
+ Opener formula (email/DM): "You [liked/commented on] our post about [topic] — my guess is [specific interpretation of why that topic would matter to them]."
80
+
81
+ Example: "You commented on our post about the death of the MQL — my guess is you are dealing with a sales and marketing alignment problem right now."
82
+
83
+ **Ask:** "Am I close? Happy to share the framework we use."
84
+
85
+ **Cadence note:** Start on LinkedIn (the warm channel). Do not go straight to email.
86
+
87
+ ---
88
+
89
+ ## Event Follow-up
90
+
91
+ **Insight:** You were in the same room, session, or virtual event. There is a shared context that does not exist in cold outreach. The contact has already heard of you or your company.
92
+
93
+ **Bridge:** Reference what was discussed or what the event was about. Show you remember the interaction specifically. Generic "great to meet you at X" messages lose the advantage.
94
+
95
+ **Opener formula:** "Enjoyed [specific thing about the interaction or session] at [event name] — when you mentioned [specific thing they said], it connected to something we see a lot."
96
+
97
+ Example: "Enjoyed the roundtable at SaaStr on pipeline efficiency — when you mentioned your ops team spending 10 hours a week on forecasting, I wanted to follow up."
98
+
99
+ **Ask:** "Worth a 20-minute call to show you how we cut that in half?"
100
+
101
+ **Cadence note:** Start on LinkedIn (warmer channel). Follow up within 48 hours of the event.
102
+
103
+ ---
104
+
105
+ ## Job Change
106
+
107
+ **Insight:** A contact who just moved to a new company has budget authority problems at their old job solved, and a mandate to make their mark at the new one. The first 90 days are when new decisions get made.
108
+
109
+ **Bridge:** You helped them (or their type) at a previous company. Reference that. If you have no prior relationship, reference the problem the new company has that their background makes them the right person to fix.
110
+
111
+ **Opener formula:** "Congrats on the move to [new company] — your background in [relevant area] maps directly to a problem we see teams in [their new company's space] trying to solve."
112
+
113
+ Example: "Congrats on the move to Vercel — your background building PLG motions at Netlify maps directly to the activation gap most dev-tools companies hit at the Series B stage."
114
+
115
+ **Ask:** "Is that on your roadmap for the first 90 days?"
116
+
117
+ **Cadence note:** First touch within 2 weeks of the job change announcement. After 60 days the signal cools significantly.
@@ -0,0 +1,71 @@
1
+ # Position-Me
2
+
3
+ <img width="1376" height="768" alt="generated-image" src="https://github.com/user-attachments/assets/118fcd1f-1efc-4eca-b0b0-366a6f9ff5da" />
4
+
5
+ The Website Reviewer Agent Skill for AEO, GEO, SEO, UI/UX Psychology, and Direct Response Copywriting.
6
+
7
+ An open source skill that transforms modern AI Agents into rigorous positioning consultants. It forces the agent to use native vision capabilities to evaluate cognitive load and verify Generative Engine Optimization (GEO) compatibility.
8
+
9
+ ## Core Capabilities
10
+
11
+ When invoked, the skill commands the AI agent to conduct an exhaustive teardown of the target website through a rigid protocol:
12
+
13
+ * Autonomous Navigation: Crawl the homepage, about, pricing, and blog pages.
14
+ * Visual Psychology: Take full page screenshots and analyze visual friction, layout flow, and cognitive load using the LIFT model.
15
+ * Copywriting Critique: Rewrite generic text using the PAS (Problem, Agitation, Solution) framework.
16
+ * Deep Content Audits: Read actual blog posts to identify fluff, grade technical depth, and offer new content strategies.
17
+ * Technical Readiness: Verify the presence of llms.txt, sitemap.xml, and semantic JSON-LD Schema (FAQPage, SoftwareApplication, etc) for generative search optimization.
18
+
19
+ ## Requirements
20
+
21
+ The host AI agent must have access to:
22
+ 1. A multimodal LLM capable of analyzing screenshots natively.
23
+ 2. Chrome DevTools MCP Server (https://github.com/ChromeDevTools/chrome-devtools-mcp).
24
+ 3. Chrome CDP Skill (https://github.com/pasky/chrome-cdp-skill).
25
+ 4. Terminal access to run fallback Python scripts if browser automation fails.
26
+
27
+ To set up the required Chrome automation:
28
+ * Install and configure the Chrome DevTools MCP server in the agent MCP settings.
29
+ * Add the Chrome CDP skill to the agent skills directory.
30
+ * Ensure Chrome is running with remote debugging enabled (e.g., `chrome --remote-debugging-port=9222`).
31
+
32
+ ## Installation Instructions
33
+
34
+ ### For Developers (Manual Setup)
35
+
36
+ 1. Clone or download the `position-me` repository.
37
+ 2. Copy the `position-me/` directory into the agent designated skills directory.
38
+ 3. Alternatively, extract the raw `SKILL.md` and `references/` folder into the agent custom prompt configuration.
39
+
40
+ ### For AI Agents (Automated Setup)
41
+
42
+ 1. Clone or download the `position-me` repository into the active project workspace.
43
+ 2. Read directly from the `position-me/` source folder.
44
+ 3. Add the `SKILL.md` file to the active context window or skill registry.
45
+ 4. Verify access to the `references/EVALUATION_SOP.md` and `references/REPORT_TEMPLATE.md` files.
46
+
47
+ ## Execution Protocol for Agents
48
+
49
+ Once loaded, the AI agent must strictly follow this execution loop:
50
+
51
+ 1. Data Gathering: Prompt the user for the target URL.
52
+ 2. Connect to Browser: Use the Chrome DevTools MCP combined with the Chrome CDP skill.
53
+ 3. Multi-Page Crawl: Navigate to the homepage, pricing page, about page, and at least one blog post.
54
+ 4. Capture Vision Context: Take screenshots of every visited page and load them into memory.
55
+ 5. Extract DOM Context: Pull the accessibility tree, search for `llms.txt`, and verify JSON-LD schemas.
56
+ 6. Analyze: Apply the frameworks specified in `references/EVALUATION_SOP.md`.
57
+ 7. Report: Generate a scored, highly structured teardown using exactly the format in `references/REPORT_TEMPLATE.md`.
58
+
59
+ ## Project Structure
60
+
61
+ ```text
62
+ position-me/
63
+ ├── README.md # Documentation
64
+ └── position-me/ # Raw skill source code
65
+ ├── SKILL.md # Master protocol
66
+ ├── scripts/
67
+ │ └── extract_links.py # Fallback crawler script
68
+ └── references/
69
+ ├── EVALUATION_SOP.md # Evaluation frameworks
70
+ └── REPORT_TEMPLATE.md # Teardown report template
71
+ ```
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: position-me
3
+ description: A skill for position-me
4
+ author: OpenDirectory
5
+ version: 1.0.0
6
+ ---
7
+
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: position-me
3
+ description: Elite Website Reviewer Agent for AEO, GEO, SEO, UI/UX Psychology, and Copywriting. Use this skill when asked to review or evaluate a website's positioning. It conducts an EXHAUSTIVE, multi-page, psychologically-driven, and ruthless analysis of the entire website. Produces a massive, comprehensive, scored report with charts and actionable fixes. NO EMOJIS allowed.
4
+ ---
5
+
6
+ # Position-Me: The Elite Website Reviewer Agent
7
+
8
+ You are an absolute master of digital positioning. When this skill is invoked, you merge the expertise of a **10-year veteran SEO/AEO/GEO Specialist**, a **Lead UI/UX Psychologist**, and a **Ruthless Direct-Response Copywriter**.
9
+
10
+ **CRITICAL RULE 1: ZERO EMOJIS.** Maintain a highly professional, brutally honest, and elite consulting tone.
11
+ **CRITICAL RULE 2: DO NOT BE LAZY.** You are expressly forbidden from doing a surface-level scan. You MUST crawl the entire website, going page by page, section by section. You must look at the Header, Hero, Body, Footer, About page, Pricing page, and Blog content. You must synthesize ALL of it into a massive, detailed, "wow-factor" report.
12
+
13
+ ## Core Mindset & Personas
14
+
15
+ 1. **The UI/UX Psychologist**: You analyze cognitive load using the LIFT Model (Value, Relevance, Clarity, Anxiety, Distraction, Urgency) and Hick's Law.
16
+ 2. **The Ruthless Copywriter**: You evaluate the Hero section using the PAS (Problem-Agitation-Solution) framework. You rewrite bad copy on the spot.
17
+ 3. **The AI/Search Systems Engineer (AEO/GEO/SEO)**: You check for `llms.txt`, `sitemap.xml`, structured data (`FAQPage`, `SoftwareApplication`), semantic density, citation optimization, and AI fluency.
18
+ 4. **The Visual & Interaction Critic (Multimodal)**: You do not just read code. You *see* the website. You autonomously take screenshots of multiple pages, scroll to the bottom of pages, and analyze visual clutter and breathing room.
19
+ 5. **The Content Critic**: You read their actual blog posts. If they are writing generic, high-level fluff, call them out. Give them specific, lateral-thinking content ideas.
20
+
21
+ ## Workflow
22
+
23
+ When a user asks you to review a website, you must strictly follow this protocol:
24
+
25
+ ### Step 1: Data Gathering (Exhaustive Crawl & Visual Capture)
26
+ 1. If the user hasn't provided a URL, ask for it.
27
+ 2. **Browser Automation Connection:** You MUST use the `chrome-devtools` MCP server (https://github.com/ChromeDevTools/chrome-devtools-mcp) combined with the `chrome-cdp-skill` (https://github.com/pasky/chrome-cdp-skill) to connect to the live browser. Both are strictly required. Ensure Chrome is running with remote debugging enabled. If it critically fails, fallback to `playwright`.
28
+ 3. **MANDATORY MULTI-PAGE VISUAL CAPTURE:** You MUST autonomously interact with the site.
29
+ - Navigate to the homepage. Scroll from top to bottom. Take full-page or multi-part screenshots.
30
+ - Navigate to `/about`, `/pricing`, `/blog` (or equivalent). Take screenshots.
31
+ - Read these images into your context to perform a true visual UI/UX analysis.
32
+ 4. **Subpage & Content Analysis:** You MUST read at least one specific blog post or case study deeply.
33
+ 5. Look for explicit AI-readiness files: `[URL]/llms.txt` and `[URL]/sitemap.xml`. Check the DOM for JSON-LD.
34
+
35
+ ### Step 2: The Deep-Dive Analysis
36
+ You must execute the Standard Operating Procedure (SOP) outlined in `references/EVALUATION_SOP.md`.
37
+ *Do not skip steps. The SOP is exhaustive.*
38
+
39
+ ### Step 3: Reporting & Visualization
40
+ You will compile a masterful, massive report based strictly on `references/REPORT_TEMPLATE.md`.
41
+ Your report will be incredibly detailed, using:
42
+ - **Scoring Systems (0-100)**
43
+ - **ASCII/Markdown Visual Charts** (e.g., Spider/Radar charts, Bar charts)
44
+ - **Concrete "Problem -> Solution" Matrices**
45
+ - **ZERO EMOJIS.**
46
+
47
+ ## References to Read Immediately Before Proceeding
48
+ Before analyzing any website, you MUST read the following files located in the references folder:
49
+ 1. `references/EVALUATION_SOP.md` (The granular analysis frameworks)
50
+ 2. `references/REPORT_TEMPLATE.md` (The strict, exhaustive reporting format)
@@ -0,0 +1,40 @@
1
+ # Exhaustive Evaluation Standard Operating Procedure (SOP)
2
+
3
+ You are forbidden from skipping any of these frameworks. You must apply them to the ENTIRE website, section by section, page by page. Point to specific elements in the DOM and the visual screenshots. Be ruthless. Tell them exactly what works and exactly what fails.
4
+
5
+ ## 1. Advanced UI/UX Psychology & Formatting (Vision Analysis)
6
+ You MUST take screenshots of multiple pages, load them into your context, and apply your native multimodal vision to critique the design:
7
+ - **The LIFT Model Integration**:
8
+ - *Clarity*: Is the value proposition immediately obvious?
9
+ - *Relevance*: Does the page match the user's expected intent?
10
+ - *Distraction*: Are there too many competing CTAs or visual elements? (Hick's Law: more choices = higher cognitive load).
11
+ - *Anxiety*: What is stopping the user from clicking? Is there a lack of trust signals near the friction points (pricing, signup)?
12
+ - **Visual Clutter & Flow**: Does the page feel exhausting? Tell them exactly where the eye gets confused. Do they use the F-Pattern or Z-Pattern effectively?
13
+ - **Whitespace**: Is the layout suffocating the copy?
14
+
15
+ ## 2. The Copywriting Analysis (Hero & Body)
16
+ Evaluate using the **PAS Framework** (Problem, Agitation, Solution):
17
+ - **The Hook (Headline)**: Does it instantly state *what* it is and *who* it's for? If it's a generic feature list, REWRITE IT FOR THEM in your report.
18
+ - **The Agitator (Subhead)**: Does it bridge the gap between the headline and the CTA? Does it agitate a specific pain point?
19
+ - **Microcopy**: Are the buttons high-contrast? Do they use action verbs ("Start building" vs "Submit")? Is there a secondary, lower-friction CTA (Ghost button)?
20
+
21
+ ## 3. Deep Content & Blog Critique (The "Wow" Factor)
22
+ You MUST read their actual blog posts or case studies. Do not just look at the titles.
23
+ - **The Fluff Test**: Is the content generic AI-generated garbage, or does it have a unique point of view (POV)? If it's generic, call them out aggressively.
24
+ - **Actionability**: Do they provide actual frameworks, code snippets, or step-by-step guides?
25
+ - **New Angles (Lateral Thinking)**: Provide 3 hyper-specific, out-of-the-box content ideas that they are completely missing. Show them a perspective they haven't considered to crush their competitors.
26
+
27
+ ## 4. Generative Engine Optimization (GEO) Deep Dive
28
+ AI models synthesize data differently than traditional search engines index it. Apply advanced GEO metrics:
29
+ - **Citation Optimization**: Do they have high-density, factual statements (statistics, precise definitions) that an LLM can easily extract and cite?
30
+ - **Fluency Enhancement**: Is the text written in an authoritative, neutral tone that LLMs prefer to quote? (LLMs strip away marketing fluff).
31
+ - **Optimized FAQs**: Are questions formatted exactly how users prompt LLMs? Are the answers concise and factual?
32
+
33
+ ## 5. Technical AI-Readiness (The Deep Crawl)
34
+ - **llms.txt**: Access /llms.txt. Does it exist? Does it provide a clean, markdown-formatted identity declaration and site map for AI agents? If missing, this is a critical failure.
35
+ - **sitemap.xml**: Is it well-structured and prioritizing the right content?
36
+ - **Semantic Schema Markup**: Check the HTML for JSON-LD scripts. Are they using Organization, SoftwareApplication, FAQPage, or Article schemas? LLMs heavily weight structured data. If they are missing it, tell them they are bleeding generative visibility.
37
+
38
+ ## 6. Competitor Positioning & "Us vs. Them"
39
+ - Is it immediately clear why this product/service is better than the alternative?
40
+ - Identify their likely competitors based on their niche. Call out if their positioning makes them look exactly like everyone else. Suggest a specific wedge or moat.
@@ -0,0 +1,58 @@
1
+ # The Massive Position-Me Report Template
2
+
3
+ When delivering your final review, you MUST format your response exactly like this. You must act as the ultimate, ruthless consultant. Do not skip sections. Provide a massive, multi-page teardown.
4
+
5
+ CRITICAL RULE: DO NOT USE EMOJIS ANYWHERE IN THIS REPORT.
6
+
7
+ ---
8
+
9
+ # Elite Positioning & Architecture Analysis: [Website Name]
10
+
11
+ ## 1. Executive Summary (The Brutal Truth)
12
+ [Write a ruthless, highly detailed psychological breakdown of their current positioning. What is their core moat? What is completely failing them? Be direct, uncompromising, and highly specific to their exact niche.]
13
+
14
+ ## 2. Overall Positioning Scorecard
15
+ [Generate a detailed ASCII visual representation of their scores out of 100.]
16
+
17
+ ```text
18
+ =================================================
19
+ OVERALL POSITIONING SCORE: [XX]/100
20
+ =================================================
21
+ Visual Hierarchy (LIFT/Hick's Law): [██████░░░░] 60/100
22
+ Copywriting (PAS Framework) : [████████░░] 80/100
23
+ Content Quality & Actionability : [████░░░░░░] 40/100
24
+ Technical SEO & Schema : [█████░░░░░] 50/100
25
+ GEO & AEO Parseability : [██░░░░░░░░] 20/100
26
+ =================================================
27
+ ```
28
+
29
+ ## 3. Page-By-Page Teardown (The Deep Visual Crawl)
30
+
31
+ ### A. The Homepage (Top to Bottom)
32
+ - **The Hero & Hook:** [Critique the Headline, Subhead, and CTAs. If it's bad, provide an exact rewrite here.]
33
+ - **Visual Clutter & Cognitive Friction:** [Using your visual analysis of the screenshot, point out exactly where the layout fails, where the eye gets confused, and where anxiety points exist. Reference specific blocks or colors.]
34
+ - **The Lower Fold & Footer:** [Critique the trust signals, feature breakdowns, and internal linking structure in the footer.]
35
+
36
+ ### B. The Funnel Pages (About, Pricing, etc.)
37
+ - **Conversion Flow:** [Critique the specific secondary pages you crawled. Are they consistent with the brand? Is the pricing page causing friction?]
38
+
39
+ ## 4. Deep Content & Blog Analysis (The Wow Moment)
40
+ - **The Fluff Test:** [Provide your analysis of the specific blog post or case study you read. Was it generic? Did it actually provide value to the reader?]
41
+ - **Lateral Content Strategy (The Playbook):** [Provide 3 completely new, highly specific, out-of-the-box content frameworks or tools they should build to dominate their competitors. Give them the exact strategy.]
42
+
43
+ ## 5. Generative Engine Optimization (GEO & AEO) Deep Dive
44
+ - **Citation Optimization & Fluency:** [Analysis of how an LLM would summarize them. Do they have the factual density required to be cited by Perplexity/ChatGPT? Are they using a neutral, authoritative tone?]
45
+ - **FAQ Prompts:** [Are their FAQs formatted for LLMs?]
46
+ - **Technical Readiness (llms.txt & Schema):** [Status of llms.txt, sitemap.xml, and exact JSON-LD Schema deficiencies. Explain exactly why missing these is starving their AI visibility.]
47
+
48
+ ## 6. The Action Matrix (What To Do Next)
49
+ [Use a markdown table to provide concrete, actionable fixes. Include the Expected ROI.]
50
+
51
+ | Severity | Category | The Problem (What is Wrong) | The Fix (Exactly How to Improve It) | Expected ROI |
52
+ | :--- | :--- | :--- | :--- | :--- |
53
+ | CRITICAL | Tech SEO | No FAQPage JSON-LD schema found. | Wrap the existing FAQ section in structured data to secure AI Overviews. | Direct inclusion in Google AI Overviews |
54
+ | HIGH | Copywriting | Hero headline is generic feature-listing. | Rewrite using PAS framework: "Stop losing leads to slow load times. We build sub-second React apps." | +20% reduction in bounce rate |
55
+ | MODERATE | UX / LIFT | Secondary CTA competes visually with Primary CTA. | Ghost the secondary CTA to reduce Hick's Law cognitive overload. | Higher click-through on primary action |
56
+
57
+ ---
58
+ End of Report. Ask the user if they would like you to automatically generate the missing technical files (llms.txt, JSON-LD schemas) or rewrite specific secondary page copy based on these findings.
@@ -0,0 +1,49 @@
1
+ import sys
2
+ import urllib.request
3
+ from urllib.parse import urljoin, urlparse
4
+ import re
5
+
6
+
7
+ def extract_links(url):
8
+ print(f"[*] Crawling {url} to map website architecture...")
9
+ try:
10
+ req = urllib.request.Request(
11
+ url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
12
+ )
13
+ with urllib.request.urlopen(req) as response:
14
+ html = response.read().decode("utf-8")
15
+
16
+ # Extract hrefs
17
+ links = re.findall(r'<a\s+(?:[^>]*?\s+)?href="([^"]*)"', html, re.IGNORECASE)
18
+
19
+ domain = "{0.scheme}://{0.netloc}".format(urlparse(url))
20
+
21
+ unique_internal_links = set()
22
+ external_links = set()
23
+
24
+ for link in links:
25
+ if link.startswith("/") and not link.startswith("//"):
26
+ unique_internal_links.add(urljoin(domain, link))
27
+ elif link.startswith(domain):
28
+ unique_internal_links.add(link)
29
+ elif link.startswith("http"):
30
+ external_links.add(link)
31
+
32
+ print("\n=== INTERNAL LINKS (Site Structure) ===")
33
+ for l in sorted(unique_internal_links):
34
+ print(l)
35
+
36
+ print("\n=== EXTERNAL LINKS (Outbound/Socials) ===")
37
+ for l in sorted(external_links):
38
+ if "linkedin" in l or "github" in l or "twitter" in l or "calendly" in l:
39
+ print(l)
40
+
41
+ except Exception as e:
42
+ print(f"Error extracting links: {e}")
43
+
44
+
45
+ if __name__ == "__main__":
46
+ if len(sys.argv) > 1:
47
+ extract_links(sys.argv[1])
48
+ else:
49
+ print("Usage: python extract_links.py <url>")
@@ -0,0 +1,81 @@
1
+ # pr-description-writer
2
+
3
+ <img width="1280" height="640" alt="pr-description-writer" src="https://github.com/user-attachments/assets/485f5846-b621-40ac-8a99-2b50243fb454" />
4
+
5
+
6
+ Read your current git branch diff and generate a complete GitHub pull request description: summary, specific change bullets, and testing steps. Create or update the PR in one step.
7
+
8
+ ## What It Does
9
+
10
+ - Reads `git diff main...HEAD` to understand what changed
11
+ - Reads commit messages for context on why it changed
12
+ - Generates a structured PR description following a consistent format
13
+ - Creates a new PR with `gh pr create` or updates an existing one with `gh pr edit`
14
+
15
+ ## Requirements
16
+
17
+ | Requirement | Purpose | How to Set Up |
18
+ |------------|---------|--------------|
19
+ | `gh` CLI | Creating and updating PRs | https://cli.github.com, then run `gh auth login` |
20
+ | Git repo with a branch | Source diff | Run from inside the repo |
21
+
22
+ No API keys needed. The agent reads the diff directly and writes the description.
23
+
24
+ ## How to Use
25
+
26
+ Write a description for the current branch:
27
+
28
+ ```
29
+ "Write a PR description for my current branch"
30
+ "Draft my PR"
31
+ "Generate a PR description"
32
+ ```
33
+
34
+ Create the PR at the same time:
35
+
36
+ ```
37
+ "Create a PR for this branch with a good description"
38
+ "Open a PR and write the description"
39
+ ```
40
+
41
+ Update an existing PR's description:
42
+
43
+ ```
44
+ "Update my PR description"
45
+ "Rewrite the PR body based on the latest changes"
46
+ ```
47
+
48
+ Output only, no gh commands:
49
+
50
+ ```
51
+ "Write a PR description but just give me the text"
52
+ "Draft the PR description, I'll paste it myself"
53
+ ```
54
+
55
+ ## Output Format
56
+
57
+ Every generated description includes:
58
+
59
+ | Section | Content |
60
+ |---------|---------|
61
+ | Summary | 1-2 sentences on what this PR does and why |
62
+ | Changes | Specific bullets, one per logical change, starting with a verb |
63
+ | Testing | Actionable steps to verify the change works |
64
+ | Screenshots | Only for UI changes |
65
+ | Linked Issues | Only if the branch fixes a tracked issue |
66
+
67
+ ## Project Structure
68
+
69
+ ```
70
+ pr-description-writer/
71
+ ├── SKILL.md
72
+ ├── README.md
73
+ ├── evals/
74
+ │ └── evals.json
75
+ └── references/
76
+ └── pr-format-guide.md
77
+ ```
78
+
79
+ ## License
80
+
81
+ MIT