substack-autopilot
v1.0.0Automate Substack newsletter article drafting and publishing using OpenClaw native tools. Generate weekly articles from a topic queue, write brand-consistent long-form content, save drafts locally, open Substack in browser for final review, and notify via Telegram. Triggers on: "write this week's Su...
Installation
Substack Autopilot
Generate, draft, and prepare weekly Substack articles from a managed topic queue. Keeps a local article log and opens the browser for final human review before publishing.
File Structure
<workspace>/<brand>/substack/
├── article-topics.json — topic queue (see format below)
├── article-log.json — published article history
└── article-YYYY-MM-DD.md — generated draft files
Topic Queue Format (article-topics.json)
[
{
"id": 1,
"title": "How Creators Are Losing Money Without Knowing It",
"subtitle": "Platform fees, algorithm suppression, and what to do about it",
"angle": "platform-critique",
"used": false
}
]
Angle types: See references/article-angles.md for content frameworks per angle.
Weekly Article Generation Flow
- Pick next unused topic from
article-topics.json(first where"used": false) - Generate article — use angle framework from
references/article-angles.md - Quality check — score ≥ 70/100 before proceeding (see scoring below)
- Save draft to
article-YYYY-MM-DD.md - Mark topic as used in
article-topics.json - Log article to
article-log.json - Open browser to Substack new post editor for final review
- Notify via Telegram — "Draft ready at [path] — please review before publishing"
If all topics are used: notify user to add new topics, then exit.
Article Quality Scoring (min 70/100)
| Criterion | Weight |
|---|---|
| Hook strength (first paragraph) | 25 pts |
| Value density (actionable insights) | 25 pts |
| Brand consistency | 20 pts |
| CTA clarity | 15 pts |
| Structure / readability | 15 pts |
Rewrite once if below 70. Do not proceed if still failing after rewrite.
Article Format
# [Title]
[Subtitle / hook sentence]
---
[Body: 600–900 words]
[3–5 sections with H2 headers]
[Specific data, examples, or patterns — not vague claims]
[Final CTA: link to brand URL]
Opening Substack in Browser
browser open → https://<publication>.substack.com/publish/post/new (profile: user)
Wait for editor to load before notifying user. Do not auto-publish — always leave final approval to the human.
Cron Job Setup
Recommended schedule: Weekly, Wednesday UTC 13:00 (Stockholm 14:00)
schedule: { "kind": "cron", "expr": "0 13 * * 3", "tz": "UTC" }
sessionTarget: "isolated"
payload.kind: "agentTurn"
timeoutSeconds: 0
See references/cron-prompt-template.md for a ready-to-use agentTurn prompt.
Telegram Notifications
- ✅ Draft ready:
"📝 Substack draft saved: [path] — please review and publish" - ⚠️ All topics used:
"⚠️ Substack topic queue empty — please add new topics to article-topics.json" - ❌ Generation failed:
"❌ Substack draft failed: [error] — manual write needed"