Blog Autopilot
Automated content pipeline: sources YouTube creators you follow, generates original articles in your voice, creates AI hero images, and auto-publishes via Git PR. Runs on a cron with zero manual steps.
How It Works
- Cron fires (Mon/Wed/Fri): Zero manual intervention · round-robin category
- Gather sources: gather.py: YouTube RSS → transcript → context JSON
- Claude writes article: Original draft in your voice + image prompt
- Generate hero image: generate_image.py → Leonardo AI · verify file exists
- Sanitize content: Leak guard on changed paths — no PII / infra
- Deliver as Git PR: deliver.py validates → PR → Discord alert
Invocation Triggers
blog-autopilotcontent pipelineauto-publishautomated bloggingUse Cases
- Automate your blog with 3 posts/week sourced from creators you follow
- Generate original articles in your voice from YouTube transcripts
- End-to-end pipeline: research → write → image → PR — no manual steps
The Problem
A blog dies the week you get busy. Consistency is the whole game, and consistency is exactly what a human cannot sustain three days a week on top of everything else. You either skip posts or you let an AI spew generic prose that reads like every other AI blog. Blog Autopilot sources real material, writes in a voice you actually trained on example paragraphs, makes the hero image, and drops it as a PR you can review — so the cadence holds whether or not you had time that day.
What It Does
- 1Gather sources
gather.py pulls transcripts and context from the YouTube channels you follow, rotating round-robin by category so no topic repeats until every category has run.
- 2Write the article
Claude writes an original article grounded in the gathered context, matched to your voice profile — real example paragraphs, not meta-instructions — and emits a matching image prompt.
- 3Generate the hero image
generate_image.py sends the prompt to Leonardo AI and produces the hero image. The next stage hard-checks the file exists because this step can fail silently.
- 4Deliver as a PR
deliver.py validates the article and image, commits to a branch, opens a Git PR against your blog repo, and fires a Discord alert. You review and merge.
- 5Track state
state.json records category rotation, consumed video IDs so nothing repeats, published slugs, and a last_run idempotency guard so a cron re-fire does not double-post.
What You Get / What It Doesn't Do
- An original article in your voice, grounded in fresh source material
- A Leonardo hero image matched to the article
- A Git PR against your blog repo, ready to review
- A Discord alert when the draft lands
- Rotated sources with no repeated videos or categories
- Publish to main — it opens a PR for you to review and merge
- Write in a voice you have not trained on example paragraphs
- Recover its own silent image failure beyond the file existence check
- Source from channels you did not list in sources.json
Tips
The voice profile is the most important file. Paste real paragraphs in your voice; Claude drifts to generic prose when fed instructions instead of examples.
The idempotency guard blocks a same-day re-fire. If you need to regenerate a post, clear last_run in state.json first.
generate_image.py fails silently. Never bypass deliver.py's file-exists check, or you will PR an article with a broken hero image.
Get the Skill
Unlock the full Blog Autopilot SKILL.md — drop it into ~/.claude/skills/ and trigger it by name.
- An original article in your voice, grounded in fresh source material
- A Leonardo hero image matched to the article
- A Git PR against your blog repo, ready to review
- A Discord alert when the draft lands
29 more production skills ready to install.