Template. Replace placeholder values like {{YOUR_NAME}}, {{CONTENT_DIR}}, etc. with your own before using.
Content Creation
Substack Newsletter
Transform source content into intimate, essay-style Substack newsletters with compelling subject lines, personal narrative, and reply-driving CTAs.
MCP Required. This skill needs Playwright to run.
Save to
~/.claude/skills/substack/SKILL.mdSKILL.md
---
name: substack
description: "Convert source content into a Substack newsletter and publish via Playwright. Use when: creating newsletter content. Triggers on: substack, newsletter, write a newsletter, substack post."
---
# Substack Newsletter
Convert source content (blog, script, research, or fresh topic) into an intimate, essay-style Substack newsletter.
## Prerequisites
**Publishing uses Playwright MCP (`mcp__playwright__*`) — this is the ONLY method.**
Do NOT use Chrome extension tools (`mcp__claude-in-chrome__*`).
1. Verify Playwright MCP is connected (`mcp__playwright__browser_navigate` available)
2. User must be logged into Substack in the Playwright-controlled browser
3. If Playwright MCP unavailable after checking, fall back to saving as markdown
---
## Workflow
### Step 1: Source Content
Ask the user:
- **Option A: From existing content** → ask which folder in `{{CONTENT_DIR}}/`, then read all markdown files
- **Option B: From scratch** → ask for topic, key ideas, any stories or data points
### Step 2: Load Context
- Read `{{PROFILE_PATH}}` — identity, voice, experience
- Reference platform rules: intimate "letter to a smart friend" tone, first-person throughout
### Step 3: Analyze Source
Extract:
- **Core thesis** — the one idea this newsletter explores
- **Best story or anecdote** — personal or observed
- **Key data point** — if available
- **Why it matters** — the "so what" for the reader
### Step 4: Draft Newsletter
**Subject line:** <50 characters. Compelling, not clickbait. Makes you want to open.
- GOOD: "The 7-month follow-up that saved my business"
- BAD: "Newsletter #14: Thoughts on persistence"
**Preview text:** <100 characters. Complements subject line, adds curiosity.
**Body (800-1500 words):**
- Essay-style, not listicle
- One core idea explored deeply
- More personal and reflective than LinkedIn
- Can explore uncertainty — thinking out loud is welcome
- Longer narrative arcs, fewer bullet points
- Specific examples, real numbers, real stories
- End with reply-driving CTA
**CTA examples:**
- "Hit reply and tell me — have you ever had a deal that took months of follow-up to close?"
- "Reply with the one tool you'd never give up. I read every response."
- "What's your version of this story? I'd love to hear it."
**NON-NEGOTIABLE rules:**
- Humanizer pass - before presenting, scan for and fix all 24 AI writing patterns (see `humanizer` skill). Key offenders: significance inflation, AI vocabulary, copula avoidance, -ing analyses, filler phrases, hedging, generic conclusions.
- No false-contrast filler ("isn't X / it's Y" - say the real point directly)
- No revenue flex (never mention personal revenue/MRR/income)
- No em dashes (—) anywhere in content. Use regular dashes (-), commas, periods, or restructure the sentence instead. Em dashes are an obvious AI writing tell.
- Match {{YOUR_NAME}}'s voice: direct, data-driven, no fluff, no corporate speak
### Step 5: User Review
Display the full newsletter:
```
SUBJECT: [subject line] ([char count]/50)
PREVIEW: [preview text] ([char count]/100)
---
[Full newsletter body]
---
Word count: [X]
```
Ask: **"Approve / Edit / Regenerate?"**
### Step 6: Publish via Playwright
**Publish (default: save as draft on Substack):**
1. `browser_navigate` → `https://substack.com/home`
2. `browser_snapshot` → confirm logged in
3. `browser_click` → "New post" or compose button
4. `browser_snapshot` → confirm editor loaded
5. `browser_click` → title field → `browser_type` → subject line
6. `browser_click` → subtitle/preview field → `browser_type` → preview text
7. `browser_click` → body editor → `browser_type` → newsletter body
8. `browser_snapshot` → verify content looks correct
9. `browser_click` → "Save draft" (safe default — let user publish from Substack)
10. `browser_snapshot` → verify saved
Ask user: **"Draft saved. Want me to publish it now, or will you review on Substack first?"**
If publish: `browser_click` → "Publish" → confirm dialog → `browser_snapshot` → verify
**Fallback:** Save to file and display copy-ready output.
### Step 7: Save Output
Save as `substack-newsletter.md` in the source content folder or ask user where to save.
```markdown
# Substack Newsletter — [Topic]
**Subject:** [subject line]
**Preview:** [preview text]
**Status:** [Draft saved / Published / Ready for manual posting]
**Date:** [YYYY-MM-DD]
---
[Full newsletter body]
```
Display confirmation with status.