skills/content-writer/SKILL.md
Automated content writer. Takes topics from the Notion Topic Bank or Calendar and generates platform-specific copy for LinkedIn, Instagram, TikTok, and YouTube using parallel subagents. Handles slot assignment, conflict checking, and Notion status management. Runs on Thursday 9am cron or manual invocation. Use when the user says "write content," "draft posts," "content writer," "write this week's posts," or wants copy generated for social media calendar entries.
npx skillsauth add demtomi/social-media-agent-toolkit content-writerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the content writer. You take topics and produce ready-to-review platform-specific copy, media guides, and video scripts. You push everything to Notion and stop at Gate 1 (Needs Review).
You do NOT generate images, schedule posts, or publish. Those are separate skills (content-designer, content-distributor).
Before writing anything, read these three files. They are your brand guardrails.
./voice/context-packet-template.md -- positioning, portfolio, tools, pillars, banned words./voice/tone-of-voice.md -- voice principles, language rules, structural patterns, drift detection./voice/hooks-library.md -- hook frameworks + templatesQuery Notion for content that needs copy.
Source 1: Topic Bank (DB: YOUR_TOPIC_BANK_DB_ID)
Source 2: Calendar (DB: YOUR_CALENDAR_DB_ID)
If both sources return results, process Calendar entries first (they already have slots), then Topic Bank entries.
If nothing is found, report "No topics ready for writing" and stop.
Skip this step for items already in the Calendar (Source 2).
For each Topic Bank item:
Check the Format Fit multi-select property. This tells you which formats ideation recommended for this topic. Only create Calendar entries for formats listed in Format Fit.
Mapping:
If Format Fit is empty (older entries or manually added topics), fall back to default: LinkedIn Single Image + Instagram Carousel. Add Video only if the topic suits it (demos, reactions, tutorials, tool comparisons).
After creating Calendar entries from a Topic Bank item, update the Topic Bank entry:
datetime.weekday() <= 4 to verify. If the next open slot falls on Saturday or Sunday, skip to Monday. Instagram, TikTok, and YouTube Shorts are 7 days/week.Never double-book. Track slots assigned in the current batch.
LinkedIn (Mon-Fri only):
| Slot | Time (UTC) | Format | |---|---|---| | 1 | 07:00 | Single Image | | 2 | 13:00 | Multi-Image |
Instagram (7 days/week):
| Slot | Time (UTC) | Format | |---|---|---| | 1 | 11:00 | Reel | | 2 | 15:00 | Carousel or Single Image | | 3 | 19:00 | Reel |
TikTok (7 days/week):
| Slot | Time (UTC) | Format | |---|---|---| | 1 | 12:00 | Short-form video | | 2 | 20:00 | Short-form video |
YouTube Shorts (7 days/week):
| Slot | Time (UTC) | Format | |---|---|---| | 1 | 13:00 | Short-form video | | 2 | 21:00 | Short-form video |
For each Calendar entry that needs copy, launch a subagent matched to its platform and format. When processing multiple entries, launch agents in parallel (up to 6 at a time).
Each subagent receives:
Task: Write {format} copy for {platform}.
Topic: {topic title and any notes from Topic Bank}
Voice references (read these first):
./voice/tone-of-voice.md./voice/hooks-library.mdPlatform rules: Read
./platforms/rules.mdfor {platform} section.Instructions: {format-specific instructions from the section below}
Return: The copy, Media Guide (if applicable), hashtags (if applicable), hook framework used, and word count.
For entries with Format = "Short-Form Video", the subagent writes:
Script rules:
[SHOW: description] markers for screen recordings[TEXT ON SCREEN: "phrase"] for emphasis momentsRun this checklist against every draft before pushing to Notion. If any item fails, fix the draft.
Drift detection: If a paragraph could appear in a corporate press release, rewrite it.
For each entry, update the Notion Calendar with:
| Property | Value | |---|---| | LinkedIn Copy | (LinkedIn entries only) | | Instagram Caption | (Instagram entries only) | | TikTok Caption | (TikTok entries only) | | YT Shorts Title | (YouTube entries only) | | YT Shorts Description | (YouTube entries only) | | Media Guide | Image/slide descriptions for designer skill | | Hashtags | Platform-appropriate hashtags | | Hook Angle | Which hook framework was used | | Pillar | Content pillar tag | | Status | "Needs Review" |
For video scripts: write the full script into the page body content (not a property).
After pushing all entries to Notion:
List what was created:
STOP. Do not proceed to image generation or scheduling. Those are separate skills triggered after the user reviews and approves copy.
The user reviews copy in Notion. For each entry they will:
If entries come back as "Needs Rework":
When writing Media Guides, use this design vocabulary so the content-designer skill generates consistent visuals:
Media Guide format example:
Slide 1 (primary color background): Large text "Stop Using ChatGPT for Everything" in bold white. Lucide brain icon top-right.
Slide 2 (secondary color background): Left column: "The Problem" header. 3 bullet points with specific pain points. Right: Lucide alert-triangle icon.
Slide 3 (accent color background): "The Fix" header. 3 numbered steps. Clean layout.
Slide 4 (primary color background): CTA "Visit yourwebsite.com" centered. Lucide arrow-right icon.
| Database | ID |
|---|---|
| Topic Bank | YOUR_TOPIC_BANK_DB_ID |
| Social Media Calendar | YOUR_CALENDAR_DB_ID |
content-ideation -- feeds topics into the Topic Bank (runs Wed, before this skill)content-designer -- generates images for Approved posts (runs Thu 3pm, after this skill)content-distributor -- schedules and publishes posts (runs Fri)content-analytics -- measures performance (runs Mon)development
Scans trend sources via Perplexity API, generates topic ideas, scores them, and pushes to the Notion Topic Bank and Social Media Calendar. Runs on Wednesday 9am cron or manual invocation. Use when the user says "find topics," "content ideation," "what should I post about," "scan for trending topics," "fill the topic bank," or wants fresh content ideas for the week.
development
Schedules social media posts via Blotato API and verifies publishing. Processes posts at "Can Be Scheduled" status only. Handles post creation, status polling, and publish verification. Runs on Friday 9am cron or manual invocation. Use when the user says "schedule posts," "publish posts," "content distributor," "process scheduled," "verify published," or wants posts sent to Blotato for scheduling.
development
Generates images for approved social media posts using Gemini API, uploads to Blotato media hosting, stores URLs in Notion, and sets status to Ready. Processes posts at "Approved" status only. Runs on Thursday 3pm cron or manual invocation. Use when the user says "generate images," "process approved posts," "content designer," "create visuals," or wants images generated for approved calendar entries.
development
Weekly performance analytics. Pulls metrics for published posts, tags top and bottom performers, updates the Topic Bank with success data, and generates an HTML dashboard email. Runs on Monday 9am cron or manual invocation. Use when the user says "content analytics," "weekly report," "how did posts perform," "check analytics," "tag top posts," or wants a performance review of recent social media content.