opencode-skills-collection 3.0.37 → 3.0.39

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 (73) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +13 -1
  2. package/bundled-skills/2slides-ppt-generator/SKILL.md +786 -0
  3. package/bundled-skills/2slides-ppt-generator/references/api-reference.md +499 -0
  4. package/bundled-skills/2slides-ppt-generator/references/mcp-integration.md +282 -0
  5. package/bundled-skills/2slides-ppt-generator/references/pricing.md +195 -0
  6. package/bundled-skills/2slides-ppt-generator/scripts/api_constants.py +87 -0
  7. package/bundled-skills/2slides-ppt-generator/scripts/create_pdf_slides.py +159 -0
  8. package/bundled-skills/2slides-ppt-generator/scripts/download_slides_pages_voices.py +157 -0
  9. package/bundled-skills/2slides-ppt-generator/scripts/generate_narration.py +197 -0
  10. package/bundled-skills/2slides-ppt-generator/scripts/generate_slides.py +247 -0
  11. package/bundled-skills/2slides-ppt-generator/scripts/get_job_status.py +106 -0
  12. package/bundled-skills/2slides-ppt-generator/scripts/search_themes.py +137 -0
  13. package/bundled-skills/anti-sycophancy/README.md +86 -0
  14. package/bundled-skills/anti-sycophancy/SKILL.md +40 -0
  15. package/bundled-skills/antigravity-agent-manager/SKILL.md +112 -0
  16. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  17. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  18. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  19. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  20. package/bundled-skills/docs/sources/sources.md +1 -0
  21. package/bundled-skills/docs/users/bundles.md +1 -1
  22. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  23. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  24. package/bundled-skills/docs/users/getting-started.md +1 -1
  25. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  26. package/bundled-skills/docs/users/usage.md +4 -4
  27. package/bundled-skills/docs/users/visual-guide.md +4 -4
  28. package/bundled-skills/event-staffing-compliance/SKILL.md +91 -0
  29. package/bundled-skills/event-staffing-ordering/SKILL.md +119 -0
  30. package/bundled-skills/examprep-ai/SKILL.md +446 -0
  31. package/bundled-skills/hasdata/SKILL.md +107 -0
  32. package/bundled-skills/hasdata/references/code-recipes.md +150 -0
  33. package/bundled-skills/hasdata/references/ecommerce.md +116 -0
  34. package/bundled-skills/hasdata/references/jobs.md +111 -0
  35. package/bundled-skills/hasdata/references/local-business.md +145 -0
  36. package/bundled-skills/hasdata/references/real-estate.md +84 -0
  37. package/bundled-skills/hasdata/references/scraper-jobs.md +252 -0
  38. package/bundled-skills/hasdata/references/search.md +154 -0
  39. package/bundled-skills/hasdata/references/travel.md +202 -0
  40. package/bundled-skills/hasdata/references/web-scraping.md +159 -0
  41. package/bundled-skills/hasdata/references/youtube.md +186 -0
  42. package/bundled-skills/hasdata-cli/SKILL.md +169 -0
  43. package/bundled-skills/hasdata-cli/references/all-commands.md +107 -0
  44. package/bundled-skills/hasdata-cli/references/ecommerce.md +106 -0
  45. package/bundled-skills/hasdata-cli/references/enrichment.md +227 -0
  46. package/bundled-skills/hasdata-cli/references/jobs.md +84 -0
  47. package/bundled-skills/hasdata-cli/references/local-business.md +123 -0
  48. package/bundled-skills/hasdata-cli/references/real-estate.md +126 -0
  49. package/bundled-skills/hasdata-cli/references/search.md +122 -0
  50. package/bundled-skills/hasdata-cli/references/travel.md +102 -0
  51. package/bundled-skills/hasdata-cli/references/web-scraping.md +181 -0
  52. package/bundled-skills/hasdata-cli/references/youtube.md +145 -0
  53. package/bundled-skills/linkedin-content-generator/SKILL.md +492 -0
  54. package/bundled-skills/linkedin-content-generator/scripts/generate_calendar.py +82 -0
  55. package/bundled-skills/linkedin-content-generator/scripts/generate_carousel.py +69 -0
  56. package/bundled-skills/linkedin-content-generator/scripts/generate_newsletter.py +64 -0
  57. package/bundled-skills/linkedin-content-generator/scripts/generate_post.py +77 -0
  58. package/bundled-skills/linkedin-content-generator/scripts/memory.md +49 -0
  59. package/bundled-skills/linkedin-content-generator/scripts/memory_manager.py +134 -0
  60. package/bundled-skills/linkedin-content-generator/scripts/utils.py +96 -0
  61. package/bundled-skills/permission-manager/README.md +22 -0
  62. package/bundled-skills/permission-manager/SKILL.md +54 -0
  63. package/bundled-skills/skill-suggester/README.md +14 -0
  64. package/bundled-skills/skill-suggester/SKILL.md +69 -0
  65. package/bundled-skills/smart-git-automation/README.md +31 -0
  66. package/bundled-skills/smart-git-automation/SKILL.md +96 -0
  67. package/bundled-skills/vercel-optimize/lib/cost-coverage.mjs +3 -1
  68. package/bundled-skills/vercel-optimize/lib/render-report.mjs +2 -2
  69. package/bundled-skills/vercel-optimize/lib/util.mjs +7 -0
  70. package/bundled-skills/vercel-optimize/lib/verify-claim.mjs +2 -7
  71. package/bundled-skills/vercel-optimize/lib/workspace-resolver.mjs +2 -1
  72. package/package.json +1 -1
  73. package/skills_index.json +268 -0
@@ -0,0 +1,492 @@
1
+ ---
2
+ name: linkedin-content-generator
3
+ description: "AI-powered LinkedIn content suite: generate posts, carousels, newsletters, and 30-day calendars with niche-specific SEO rules and a reinforcement-learning personal memory system."
4
+ category: marketing
5
+ risk: safe
6
+ source: community
7
+ source_repo: sarveshtalele/linkedin-content-skill
8
+ source_type: community
9
+ date_added: "2026-06-04"
10
+ author: sarveshkishortalele
11
+ tags: [linkedin, content-creation, social-media, marketing, newsletter, carousel, content-calendar, reinforcement-learning, seo, copywriting]
12
+ tools: [claude]
13
+ license: "MIT"
14
+ license_source: "https://github.com/sarveshtalele/linkedin-content-skill/blob/main/LICENSE"
15
+ ---
16
+
17
+ # LinkedIn Content Generator
18
+
19
+ ## Overview
20
+
21
+ A full LinkedIn content-creation suite for Claude Code that turns a topic and niche into
22
+ publish-ready posts, multi-slide carousels, long-form newsletter editions, and 30-day content
23
+ calendars — all wired through a personal reinforcement-learning memory system so every output
24
+ improves as you give feedback.
25
+
26
+ Seven coordinated commands cover the full content workflow:
27
+
28
+ | Command | Purpose |
29
+ |---|---|
30
+ | `/generate-post` | Single ready-to-publish LinkedIn post |
31
+ | `/generate-carousel` | Numbered slide content + caption |
32
+ | `/generate-newsletter` | Long-form newsletter edition |
33
+ | `/generate-calendar` | 30-day posting calendar with Markdown table |
34
+ | `/show-memory` | Display current preferences and feedback log |
35
+ | `/feedback` | Save what worked for future outputs |
36
+ | `/clear-memory` | Reset memory to factory defaults |
37
+
38
+ All helper scripts are bundled inside `skills/linkedin-content-generator/scripts/` and ship
39
+ alongside this `SKILL.md`. They build richly engineered prompts, inject your saved
40
+ preferences, and enforce LinkedIn SEO rules before Claude generates output.
41
+ A local `memory.md` file persists your style, tone, successful hooks, and top-performing
42
+ formats across every session.
43
+
44
+ ## When to Use This Skill
45
+
46
+ - Use when you need a ready-to-paste LinkedIn post with SEO-optimised hooks and hashtags.
47
+ - Use when building a multi-slide carousel deck for LinkedIn Documents.
48
+ - Use when writing a long-form LinkedIn Newsletter edition with structured sections.
49
+ - Use when planning an entire month of content with format variety and pacing rules.
50
+ - Use when you want content that adapts to your personal voice over time via saved feedback.
51
+ - Use when working in any niche (AI, SaaS, Marketing, Finance, Healthcare, etc.) and need
52
+ platform-native formatting that avoids common LinkedIn algorithmic pitfalls.
53
+
54
+ ## Prerequisites
55
+
56
+ **Python 3.8 or later** must be available in your shell path.
57
+
58
+ The skill is self-contained. Install it from the antigravity skills library:
59
+
60
+ ```bash
61
+ # Install via antigravity CLI (recommended)
62
+ antigravity install linkedin-content-generator
63
+
64
+ # Or copy manually into your Claude Code skills directory
65
+ cp -r skills/linkedin-content-generator ~/.claude/skills/
66
+ ```
67
+
68
+ All six Python scripts and the default `memory.md` are bundled inside the
69
+ `scripts/` subdirectory of this skill. No additional cloning or downloads are required.
70
+ No API keys, external services, or network access are needed.
71
+
72
+ ## How It Works
73
+
74
+ ### Architecture
75
+
76
+ ```
77
+ User command (/generate-post ...)
78
+
79
+
80
+ SKILL.md parses $ARGUMENTS
81
+
82
+
83
+ Python script builds prompt
84
+ • Injects LinkedIn SEO rules
85
+ • Injects memory.md preferences
86
+
87
+
88
+ Claude generates publish-ready output
89
+
90
+
91
+ /feedback saves what worked → memory.md
92
+ (loop — every future output improves)
93
+ ```
94
+
95
+ ### Step 1: Set Up Your Niche (One-Time)
96
+
97
+ Open `~/.claude/skills/linkedin-content-generator/scripts/memory.md` and update the
98
+ **Primary Niche** field:
99
+
100
+ ```markdown
101
+ ## Core Identity & Tone
102
+ - **Primary Niche:** AI & Technology ← change this
103
+ ```
104
+
105
+ This field is injected into every prompt. Without it, the skill defaults to
106
+ `"AI & Technology"`.
107
+
108
+ ### Step 2: Generate Content
109
+
110
+ Run any of the seven commands described in the **Commands Reference** section below.
111
+ Claude reads the script output and produces the final content directly in the chat.
112
+
113
+ ### Step 3: Save What Works
114
+
115
+ After each output, save successful patterns with `/feedback`:
116
+
117
+ ```
118
+ /feedback the storytelling hook in this post got 3x more comments than usual
119
+ ```
120
+
121
+ The feedback is appended to `memory.md` and automatically injected into all future
122
+ generation prompts.
123
+
124
+ ## Commands Reference
125
+
126
+ ### `/generate-post` — Single LinkedIn Post
127
+
128
+ Generates a scroll-stopping, SEO-optimised LinkedIn text post.
129
+
130
+ **Usage:**
131
+ ```
132
+ /generate-post <topic> [in <niche>] [tone: controversial|storytelling|educational|motivational|professional]
133
+ ```
134
+
135
+ **Parameters:**
136
+
137
+ | Parameter | Default | Options |
138
+ |---|---|---|
139
+ | `topic` | required | any subject |
140
+ | `niche` | `"AI & Technology"` | any industry |
141
+ | `tone` | `professional` | `professional` · `storytelling` · `controversial` · `educational` · `motivational` |
142
+ | `style` | `list-based` | `list-based` · `text-only` · `storytelling` · `data-driven` · `contrarian` |
143
+
144
+ **Examples:**
145
+
146
+ ```
147
+ /generate-post why most developers fail at time management in Software Engineering tone: storytelling
148
+ ```
149
+
150
+ ```
151
+ /generate-post the real cost of technical debt in SaaS tone: controversial
152
+ ```
153
+
154
+ ```
155
+ /generate-post 5 things I wish I knew before my first startup in Entrepreneurship tone: educational style: list-based
156
+ ```
157
+
158
+ **Output structure:**
159
+ 1. Scroll-stopping hook (2 lines, triggers "see more")
160
+ 2. Context / problem setup (2–3 short sentences)
161
+ 3. Core value (numbered list or bullets, max 7 items)
162
+ 4. Key takeaway (1–2 punchy sentences)
163
+ 5. Specific call to action
164
+ 6. 3–5 hashtags (broad + niche + community mix)
165
+
166
+ ---
167
+
168
+ ### `/generate-carousel` — LinkedIn Carousel
169
+
170
+ Generates numbered slide content plus a ready-to-use LinkedIn caption.
171
+
172
+ **Usage:**
173
+ ```
174
+ /generate-carousel <topic> [in <niche>] [<n> slides] [style: how-to|listicle|myth-busting|framework|story-arc]
175
+ ```
176
+
177
+ **Parameters:**
178
+
179
+ | Parameter | Default | Options |
180
+ |---|---|---|
181
+ | `topic` | required | any subject |
182
+ | `niche` | `"AI & Technology"` | any industry |
183
+ | `slides` | `7` | `3`–`12` |
184
+ | `style` | `listicle` | `how-to` · `listicle` · `myth-busting` · `framework` · `story-arc` |
185
+
186
+ **Style guide:**
187
+
188
+ | Style | Structure |
189
+ |---|---|
190
+ | `how-to` | Slide 1 = problem → slides 2–N = steps → last = result / CTA |
191
+ | `listicle` | Each slide = one item with bold title + 1–2 sentence explanation |
192
+ | `myth-busting` | Each slide = `MYTH: [belief]` → `TRUTH: [reality]` |
193
+ | `framework` | Introduce a proprietary framework; each slide = one component |
194
+ | `story-arc` | Slide 1 = before → middle = journey → last = after + CTA |
195
+
196
+ **Examples:**
197
+
198
+ ```
199
+ /generate-carousel 10 prompt engineering mistakes 8 slides style: myth-busting
200
+ ```
201
+
202
+ ```
203
+ /generate-carousel building a second brain in Knowledge Management 7 slides style: how-to
204
+ ```
205
+
206
+ ```
207
+ /generate-carousel the PARA method for productivity in Personal Development style: framework
208
+ ```
209
+
210
+ **Output:** Slides numbered `1` through `N`, followed by a LinkedIn caption with hook,
211
+ teaser context, "Swipe →" prompt, and hashtags.
212
+
213
+ ---
214
+
215
+ ### `/generate-newsletter` — LinkedIn Newsletter Edition
216
+
217
+ Generates a complete long-form newsletter edition structured for the LinkedIn Newsletter
218
+ editor.
219
+
220
+ **Usage:**
221
+ ```
222
+ /generate-newsletter <topic> [in <niche>] [length: short|medium|long] [title: "<series title>"]
223
+ ```
224
+
225
+ **Parameters:**
226
+
227
+ | Parameter | Default | Options |
228
+ |---|---|---|
229
+ | `topic` | required | any subject |
230
+ | `niche` | `"AI & Technology"` | any industry |
231
+ | `length` | `medium` | `short` (~700 w) · `medium` (~1,200 w) · `long` (~2,000 w) |
232
+ | `title` | auto-generated | optional series name |
233
+
234
+ **Examples:**
235
+
236
+ ```
237
+ /generate-newsletter how AI is reshaping hiring in HR & Recruiting length: medium
238
+ ```
239
+
240
+ ```
241
+ /generate-newsletter the state of developer tools in 2026 in DevTools length: long title: "Build Layer Weekly"
242
+ ```
243
+
244
+ **Output structure:**
245
+ 1. SEO-optimised H1 headline
246
+ 2. Opening hook (personal anecdote, statistic, or bold claim)
247
+ 3. Body sections with H2 subheadings
248
+ 4. Key takeaways (3–5 bullets)
249
+ 5. One specific action step for this week
250
+ 6. Engagement question to spark comments
251
+
252
+ ---
253
+
254
+ ### `/generate-calendar` — 30-Day Content Calendar
255
+
256
+ Generates a Markdown table calendar with monthly theme, SEO keywords, and format breakdown.
257
+
258
+ **Usage:**
259
+ ```
260
+ /generate-calendar [niche: <niche>] [days: <n>] [frequency: <freq>] [goal: awareness|engagement|leads|authority|growth]
261
+ ```
262
+
263
+ **Parameters:**
264
+
265
+ | Parameter | Default | Options |
266
+ |---|---|---|
267
+ | `niche` | required | any industry |
268
+ | `days` | `30` | any positive integer |
269
+ | `frequency` | `"3 times a week"` | any posting cadence |
270
+ | `goal` | `growth` | `awareness` · `engagement` · `leads` · `authority` · `growth` |
271
+
272
+ **Goal guide:**
273
+
274
+ | Goal | Strategy |
275
+ |---|---|
276
+ | `awareness` | Shareable, relatable, trending; heavy on carousels and contrarian takes |
277
+ | `engagement` | Opinion posts, polls, questions, storytelling to maximise comments |
278
+ | `leads` | Educational value posts + authority-building + clear DM CTAs |
279
+ | `authority` | Deep insights, data-backed posts, thought leadership, newsletters |
280
+ | `growth` | Mix viral formats (carousels, lists, contrarian) with high-value education |
281
+
282
+ **Examples:**
283
+
284
+ ```
285
+ /generate-calendar niche: Fintech days: 30 frequency: daily goal: authority
286
+ ```
287
+
288
+ ```
289
+ /generate-calendar niche: Marketing Agencies days: 14 frequency: 5 times a week goal: leads
290
+ ```
291
+
292
+ **Output:** Markdown table (`# | Day | Format | Topic / Angle | Hook | CTA`) + monthly theme +
293
+ top 5 SEO keywords + format breakdown summary.
294
+
295
+ ---
296
+
297
+ ### `/show-memory` — Display Preferences
298
+
299
+ Displays current memory contents: niche, tone, style, and all saved feedback entries.
300
+
301
+ **Usage:**
302
+ ```
303
+ /show-memory
304
+ ```
305
+
306
+ **Output:** Full `memory.md` content with entry count, primary niche, and tone summary.
307
+
308
+ ---
309
+
310
+ ### `/feedback` — Save Successful Patterns
311
+
312
+ Appends a labelled feedback entry to `memory.md`. Future outputs automatically incorporate
313
+ saved patterns.
314
+
315
+ **Usage:**
316
+ ```
317
+ /feedback <what worked well>
318
+ ```
319
+
320
+ **Examples:**
321
+
322
+ ```
323
+ /feedback the contrarian hook "everyone is wrong about X" drove 400% more impressions
324
+ ```
325
+
326
+ ```
327
+ /feedback myth-busting carousels in the DevOps niche get 3x more saves than listicles
328
+ ```
329
+
330
+ ```
331
+ /feedback storytelling tone with a personal failure story outperforms data-driven in my audience
332
+ ```
333
+
334
+ ---
335
+
336
+ ### `/clear-memory` — Reset Memory
337
+
338
+ Resets `memory.md` to factory defaults. The command asks for confirmation before
339
+ executing.
340
+
341
+ **Usage:**
342
+ ```
343
+ /clear-memory
344
+ ```
345
+
346
+ ## LinkedIn SEO Rules (Enforced Automatically)
347
+
348
+ The skill injects these rules into every prompt via the bundled `scripts/utils.py`. They are **not**
349
+ optional; they are part of the prompt engineering that makes outputs platform-native.
350
+
351
+ ### Hook Engineering
352
+ - Line 1 must be scroll-stopping (bold claim, surprising stat, provocative question, or
353
+ personal story opener).
354
+ - Line 2 must create a pattern interrupt that forces "see more".
355
+ - Forbidden openers: `"In today's..."`, `"I am excited to..."`, `"Happy to share..."`,
356
+ `"Thrilled to announce..."`.
357
+
358
+ ### Readability Rules
359
+ - Maximum 2 sentences per paragraph.
360
+ - Aggressive line breaks — white space wins on LinkedIn.
361
+ - Bold used sparingly, only for critical points.
362
+ - Target reading level: Grade 8 or below.
363
+
364
+ ### Hashtag Strategy
365
+ - 1 broad hashtag (`#AI`, `#Marketing`, `#Leadership`).
366
+ - 2 niche hashtags (`#AIAgents`, `#ContentMarketing`, `#StartupLife`).
367
+ - 1–2 community hashtags (`#LinkedInTips`, `#PersonalBranding`).
368
+ - Hard limit: **never more than 5** total.
369
+
370
+ ## Best Practices
371
+
372
+ - ✅ Set `Primary Niche` in `memory.md` before generating any content.
373
+ - ✅ Run `/feedback` after any post that performs well — the memory compounds over time.
374
+ - ✅ Use `/generate-calendar` first when planning a content sprint; it provides topics
375
+ for `/generate-post` and `/generate-carousel` runs.
376
+ - ✅ Mix carousel styles across a calendar period: listicle, myth-busting, and
377
+ story-arc perform differently and prevent audience fatigue.
378
+ - ✅ Test the `controversial` tone on topics where you have a genuine, defensible stance;
379
+ avoid it for topics where nuance is more valuable than edge.
380
+ - ❌ Do not skip the `/feedback` loop — without it, every output starts from generic
381
+ LinkedIn best practices rather than your specific audience data.
382
+ - ❌ Do not post more than 5 hashtags; LinkedIn's algorithm penalises hashtag stuffing.
383
+ - ❌ Do not use the `data-driven` style without real statistics to cite; fabricated
384
+ numbers destroy credibility faster than any other LinkedIn mistake.
385
+ - ❌ Do not generate a 30-day calendar without specifying `goal`; the default `growth`
386
+ goal mixes formats broadly and may not match a specific campaign objective.
387
+
388
+ ## Limitations
389
+
390
+ - This skill does not publish to LinkedIn directly. All output is copy-paste ready but
391
+ requires manual posting via the LinkedIn web or mobile app.
392
+ - The memory system is file-based and local. It is not shared across machines or team
393
+ members without manually syncing `memory.md`.
394
+ - The skill does not verify real-time LinkedIn algorithm changes. SEO rules are based on
395
+ documented best practices as of mid-2025 and may need manual updates as the platform
396
+ evolves.
397
+ - Calendar output does not auto-schedule posts or integrate with scheduling tools
398
+ (Buffer, Hootsuite, etc.). It produces a Markdown table for manual import.
399
+ - The `slides` parameter is clamped to the range `3–12`. Carousels outside this range
400
+ will silently be adjusted to the nearest boundary.
401
+ - `memory.md` grows unbounded as feedback accumulates. Very large memory files (500+
402
+ entries) may exceed prompt context limits and cause truncation. Periodically archive
403
+ old entries using `/clear-memory` and re-seed with your top learnings.
404
+ - Does not work in sandboxed environments where `python3` is unavailable or `Bash` tool
405
+ calls are blocked.
406
+
407
+ ## Security & Safety Notes
408
+
409
+ This skill uses the `Bash` allowed-tool to run Python scripts bundled at
410
+ `~/.claude/skills/linkedin-content-generator/scripts/`. All scripts are read-only
411
+ operations except `memory_manager.py`, which writes only to `memory.md` inside that
412
+ same bundled `scripts/` directory.
413
+
414
+ - No network requests are made by any script.
415
+ - No credentials, tokens, or secrets are read, written, or logged.
416
+ - No files outside `~/.claude/skills/linkedin-content-generator/scripts/` are modified.
417
+ - The `clear` command in `memory_manager.py` overwrites only the bundled `memory.md`;
418
+ it does not delete any other files.
419
+ - All `--feedback` and `--id` arguments passed to `memory_manager.py` are written
420
+ verbatim to `memory.md`. Do not pass shell metacharacters or sensitive data as
421
+ feedback strings.
422
+
423
+ All Bash commands in this skill are local Python invocations with no elevated privileges
424
+ required:
425
+
426
+ ```bash
427
+ # SKILL_SCRIPTS resolves to ~/.claude/skills/linkedin-content-generator/scripts
428
+ SKILL_SCRIPTS="${HOME}/.claude/skills/linkedin-content-generator/scripts"
429
+ python3 "${SKILL_SCRIPTS}/generate_post.py" --topic "..." --niche "..." --tone professional --style list-based
430
+ python3 "${SKILL_SCRIPTS}/memory_manager.py" add --id "..." --feedback "..." --tags "..."
431
+ python3 "${SKILL_SCRIPTS}/memory_manager.py" read
432
+ python3 "${SKILL_SCRIPTS}/memory_manager.py" clear
433
+ ```
434
+
435
+ <!-- security-allowlist: approved — all commands are local Python script invocations with no network access, no credential handling, and writes scoped to the skill's own bundled scripts/memory.md only -->
436
+
437
+ ## Common Pitfalls
438
+
439
+ - **Problem:** Script exits with `ModuleNotFoundError` or `No module named 'utils'`.
440
+ **Solution:** Each script uses `sys.path.insert(0, SCRIPT_DIR)` to locate `utils.py`
441
+ relative to itself, so they must be invoked with an absolute path — not from inside
442
+ the `scripts/` directory. Use
443
+ `python3 "${HOME}/.claude/skills/linkedin-content-generator/scripts/generate_post.py" ...`.
444
+
445
+ - **Problem:** Memory is not being applied to generated content.
446
+ **Solution:** Check that `memory.md` exists at
447
+ `~/.claude/skills/linkedin-content-generator/scripts/memory.md`. Run `/show-memory`
448
+ to confirm. If missing, run any generator command once — it auto-creates the file from
449
+ the bundled template.
450
+
451
+ - **Problem:** Calendar output is missing days or the table is malformed.
452
+ **Solution:** Verify the `--days` value is a positive integer and `--frequency` is
453
+ quoted if it contains spaces (e.g., `"3 times a week"`). The script passes these
454
+ values directly into the prompt string.
455
+
456
+ - **Problem:** Carousel slides exceed the requested count.
457
+ **Solution:** The `slides` value is clamped server-side to `[3, 12]`. If Claude
458
+ generates more slides than requested, it is following the style guide structure
459
+ (cover + content + CTA). Specify an exact count and style to get precise control.
460
+
461
+ - **Problem:** Generated post sounds generic despite feedback being saved.
462
+ **Solution:** Memory entries are injected as context, not as hard rules. Use specific,
463
+ actionable feedback: `"opening with a personal failure story outperforms stats for my
464
+ audience"` is more useful than `"storytelling was good"`.
465
+
466
+ - **Problem:** `python3` not found on Windows.
467
+ **Solution:** Install Python 3.8+ from python.org and ensure it is on PATH, or run via
468
+ `py "%USERPROFILE%\.claude\skills\linkedin-content-generator\scripts\generate_post.py" ...`. On Windows without WSL, the `Bash` tool invocation
469
+ may need adjustment in the SKILL.md `allowed-tools` context.
470
+
471
+ ## Related Skills
472
+
473
+ - `@content-creator` — Broader brand voice analysis, SEO optimisation, and
474
+ cross-platform content frameworks. Use when building a full content marketing system
475
+ beyond LinkedIn alone.
476
+ - `@content-strategy` — Topic cluster planning, editorial roadmap, and content mix
477
+ strategy. Use before running `/generate-calendar` when you need to define pillar topics
478
+ first.
479
+ - `@content-marketer` — Campaign-level content planning across channels. Complements
480
+ this skill when LinkedIn is one channel in a broader multi-platform launch.
481
+ - `@linkedin-automation` — Programmatic LinkedIn post publishing via the Composio/Rube
482
+ MCP. Use alongside this skill when you want to automate the publishing step after
483
+ generating content here.
484
+ - `@linkedin-profile-optimizer` — LinkedIn profile and personal brand optimisation.
485
+ Use before running this skill to align generated content voice with your profile's
486
+ headline, summary, and featured section.
487
+
488
+ ## Additional Resources
489
+
490
+ - [LinkedIn Algorithm Guide (Official)](https://www.linkedin.com/help/linkedin/answer/a522537)
491
+ - [LinkedIn Newsletter Best Practices](https://www.linkedin.com/help/linkedin/answer/a544800)
492
+ - [Source Repository — linkedin-content-skill](https://github.com/sarveshtalele/linkedin-content-skill)
@@ -0,0 +1,82 @@
1
+ """
2
+ generate_calendar.py — LinkedIn Content Calendar Prompt Builder
3
+
4
+ Usage:
5
+ python generate_calendar.py --niche "<niche>" [--days <n>] [--frequency "<freq>"] [--goal <goal>]
6
+
7
+ Goal: awareness | engagement | leads | authority | growth
8
+ """
9
+
10
+ import argparse
11
+ import sys
12
+ import os
13
+
14
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
15
+ sys.path.insert(0, SCRIPT_DIR)
16
+ from utils import get_base_prompt_context
17
+
18
+ GOAL_GUIDE = {
19
+ "awareness": "Maximise reach. Focus on shareable, relatable, trending content. Heavy on carousels and controversial takes.",
20
+ "engagement": "Maximise comments. Focus on opinion posts, polls, questions, and storytelling.",
21
+ "leads": "Generate DMs. Mix educational value posts with authority-building and clear CTAs to contact.",
22
+ "authority": "Position as expert. Deep insights, data-backed posts, newsletter content, thought leadership.",
23
+ "growth": "Grow followers fast. Mix viral formats (carousels, lists, contrarian) with high-value education.",
24
+ }
25
+
26
+ FORMAT_MIX = {
27
+ "Text Post": "Pure conversational text — personal story or insight",
28
+ "Carousel": "Multi-slide document — educational or list-based",
29
+ "Poll": "LinkedIn poll with 2-4 options — quick engagement spike",
30
+ "Newsletter Link": "Teaser post linking to your newsletter edition",
31
+ "Video Script": "Script outline for a talking-head video",
32
+ "Image + Caption": "Strong visual with punchy caption",
33
+ }
34
+
35
+
36
+ def main():
37
+ parser = argparse.ArgumentParser(description="Generate a LinkedIn Content Calendar prompt")
38
+ parser.add_argument("--niche", required=True)
39
+ parser.add_argument("--days", required=False, type=int, default=30)
40
+ parser.add_argument("--frequency", required=False, default="3 times a week")
41
+ parser.add_argument("--goal", required=False, default="growth", choices=list(GOAL_GUIDE.keys()))
42
+
43
+ args = parser.parse_args()
44
+
45
+ goal_instruction = GOAL_GUIDE.get(args.goal, GOAL_GUIDE["growth"])
46
+ formats_list = "\n".join([f" - **{k}**: {v}" for k, v in FORMAT_MIX.items()])
47
+ context = get_base_prompt_context(args.niche, "LinkedIn Content Calendar")
48
+
49
+ prompt = f"""{context}
50
+
51
+ <TASK>
52
+ Generate a {args.days}-day LinkedIn Content Calendar for the "{args.niche}" niche.
53
+
54
+ **Posting Frequency**: {args.frequency}
55
+ **Primary Goal**: {args.goal.upper()} — {goal_instruction}
56
+
57
+ Available formats (use a strategic mix):
58
+ {formats_list}
59
+
60
+ For each post entry provide a Markdown table row:
61
+ | # | Day | Format | Topic / Angle | Hook (First Line) | CTA |
62
+
63
+ Calendar rules:
64
+ 1. Never repeat the same format two days in a row
65
+ 2. For every 4 posts: 2 educational, 1 personal/story, 1 opinion/controversial
66
+ 3. Include at least 2 polls per month
67
+ 4. Space carousels and newsletters evenly across the month
68
+ 5. End each week with a reflection or motivational post
69
+
70
+ After the calendar table, provide:
71
+ - 📌 **Monthly Theme**: One overarching narrative tying the month together
72
+ - 🔑 **Top 5 SEO Keywords** to embed naturally across posts
73
+ - 📊 **Format Breakdown**: e.g., "8 Text Posts, 5 Carousels, 3 Polls..."
74
+
75
+ Output as a clean Markdown table. Ready to copy into Notion or Google Sheets.
76
+ </TASK>"""
77
+
78
+ print(prompt)
79
+
80
+
81
+ if __name__ == "__main__":
82
+ main()
@@ -0,0 +1,69 @@
1
+ """
2
+ generate_carousel.py — LinkedIn Carousel Prompt Builder
3
+
4
+ Usage:
5
+ python generate_carousel.py --topic "<topic>" --niche "<niche>" [--slides <n>] [--style <style>]
6
+
7
+ Style: how-to | listicle | myth-busting | framework | story-arc
8
+ """
9
+
10
+ import argparse
11
+ import sys
12
+ import os
13
+
14
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
15
+ sys.path.insert(0, SCRIPT_DIR)
16
+ from utils import get_base_prompt_context
17
+
18
+ CAROUSEL_STYLES = {
19
+ "how-to": "Step-by-step guide. Slide 1 = problem, slides 2-N = steps, last = result/CTA.",
20
+ "listicle": "Curated list. Each slide = one item with bold title + 1-2 sentence explanation.",
21
+ "myth-busting": "Each slide = one myth debunked. Format: 'MYTH: [belief]' → 'TRUTH: [reality]'.",
22
+ "framework": "Introduce a proprietary framework. Each slide = one component of the framework.",
23
+ "story-arc": "Transformation story. Slide 1 = before, middle = journey, last = after + CTA.",
24
+ }
25
+
26
+
27
+ def main():
28
+ parser = argparse.ArgumentParser(description="Generate a LinkedIn Carousel prompt")
29
+ parser.add_argument("--topic", required=True)
30
+ parser.add_argument("--niche", required=True)
31
+ parser.add_argument("--slides", required=False, type=int, default=7)
32
+ parser.add_argument("--style", required=False, default="listicle", choices=list(CAROUSEL_STYLES.keys()))
33
+
34
+ args = parser.parse_args()
35
+
36
+ slides = max(3, min(args.slides, 12))
37
+ style_instruction = CAROUSEL_STYLES.get(args.style, CAROUSEL_STYLES["listicle"])
38
+ context = get_base_prompt_context(args.niche, "LinkedIn Carousel")
39
+
40
+ prompt = f"""{context}
41
+
42
+ <TASK>
43
+ Generate a complete LinkedIn Carousel with exactly {slides} slides.
44
+
45
+ **Topic**: {args.topic}
46
+ **Niche**: {args.niche}
47
+ **Style**: {args.style.upper()} — {style_instruction}
48
+
49
+ Slide structure:
50
+ - Slide 1 (Cover): Massive hook headline (max 8 words) + optional 1-sentence sub-headline
51
+ - Slides 2–{slides-1}: Follow the "{args.style}" style. Bold Title + 2-3 lines per slide.
52
+ - Slide {slides} (CTA): One clear action (e.g., "Follow for more", "Save this for later")
53
+
54
+ After the slides, provide:
55
+ ---
56
+ 📝 LinkedIn Caption:
57
+ - Hook line (different wording from Slide 1, same energy)
58
+ - 2-3 lines of teaser context
59
+ - "Swipe to see all {slides} →"
60
+ - 3-5 hashtags
61
+
62
+ Output slides numbered clearly. No extra commentary.
63
+ </TASK>"""
64
+
65
+ print(prompt)
66
+
67
+
68
+ if __name__ == "__main__":
69
+ main()