- name
- medium-article-drafter
- description
- Use this skill when a topic has been selected and you need a full Medium-ready article draft. Research the topic with current sources, write a polished Markdown article with title, subtitle, featured-image prompt, sections, tags, and read time, save it to ~/drafts/, and send it over WhatsApp.
- user-invocable
- true
- cron-invocable
- false
# Medium Article Drafter
Take a selected topic and turn it into a strong, publication-ready Medium draft for a technical audience.
## When to Use This Skill
Use this skill when:
- the user selected a shortlist item by number or topic name
- the pipeline has a resolved topic and needs the full draft
- the user asks for a Medium-ready article rather than just research notes
Do not use this skill to discover topics or publish to Medium. Its job is research plus draft generation.
## Mission
Produce a full article draft that feels like it could be published with minimal edits by a serious tech writer. The article should be engaging, evidence-driven, conversational, SEO-friendly, and technically credible.
Your output must always be:
- complete
- clean Markdown
- readable in Medium with minimal cleanup
- grounded in current, verifiable research
## Accepted Inputs
You may receive:
- a topic name
- a topic number that maps to the latest shortlist
- a full shortlist entry from `tech-news-researcher`
- a user request that references "the second one", "draft #4", or similar phrasing
If the request is ambiguous, resolve it from shared memory. If ambiguity remains, ask a short clarification question instead of guessing.
## Shared Memory Contract
Read from the shared namespace:
- namespace: `tech-medium-pipeline`
- key: `latest_shortlist`
If a shortlist exists, map numeric references to the corresponding topic.
Write results back to:
- namespace: `tech-medium-pipeline`
- key: `selected_topic`
- namespace: `tech-medium-pipeline`
- key: `latest_draft`
- namespace: `tech-medium-pipeline`
- key: `conversation_state`
Use a structure equivalent to:
```json
{
"topic": {
"headline": "Selected topic",
"angle": "Chosen article angle",
"sources": [{"label": "Source", "url": "https://..."}]
},
"draft": {
"title": "Final title",
"subtitle": "Final subtitle",
"tags": ["tag1", "tag2"],
"read_time_minutes": 8,
"markdown_path": "/Users/.../drafts/2026-04-04-topic.md",
"featured_image_path": "/Users/.../drafts/images/2026-04-04-topic.png",
"featured_image_prompt": "The exact prompt used to generate the image"
}
}
```
Set `featured_image_path` to `null` if image generation was skipped or failed. Never store a path that does not point to an existing file.
```
Update conversation state to:
```json
{
"phase": "awaiting_publish_confirmation",
"last_action": "draft_sent",
"last_updated_at": "ISO-8601 timestamp"
}
```
## Defaults and Gotchas
- Default to the shortlist's stored angle unless the user explicitly requests a different angle.
- Default to a single coherent argument, not a grab-bag roundup.
- If current reporting is thin or conflicting, narrow the claim rather than padding the draft with generic commentary.
- If the selected topic is too weak for a high-quality article, stop and recommend choosing another topic instead of forcing a draft.
## Research Standard
Do real research before writing. Use `web_search`, `web_fetch`, and browser tools when needed.
Minimum expectations:
- validate the core story from multiple current sources
- collect concrete facts, dates, product details, or technical signals
- identify the deeper implication for builders, founders, engineers, or AI practitioners
- avoid single-source narratives whenever possible
When the topic is fast-moving:
- distinguish confirmed facts from interpretation
- note uncertainty internally and avoid overstating claims
- prefer language like "suggests", "signals", or "appears to indicate" when evidence is incomplete
## Writing Standard
Write like a top Medium tech writer:
- sharp opening hook
- clear point of view
- specific examples
- useful technical framing
- short to medium paragraphs
- scannable headings
- no robotic filler
- no generic hype language
The draft should feel opinionated but evidence-based.
## Required Output Structure
Every draft must contain all of the following in this order:
1. `# Title`
2. `## Subtitle`
3. `Featured image prompt:` followed by a high-quality image prompt
4. `Estimated read time:` in minutes
5. article introduction
6. 5 to 7 clearly titled sections
7. conclusion
8. `Tags:` with 6 to 8 Medium-friendly tags
### Title
The title should be catchy but precise. Aim for curiosity plus clarity, not clickbait.
### Subtitle
The subtitle should explain the promise of the article in one sentence.
### Featured Image Prompt
Create a polished prompt suitable for generating a hero image later. It should be visually specific and aligned with the article angle. One or two sentences is enough.
### Introduction
Open with why the story matters now. The first 2 to 4 paragraphs should create momentum and orient the reader quickly.
### Main Sections
Write 5 to 7 sections. Each section should advance the argument, not repeat the same point. Strong section types include:
- what happened
- why this matters
- technical implications
- product or market implications
- lessons for builders
- risks and counterarguments
- what to watch next
### Conclusion
End with a clear takeaway. The conclusion should make the article feel complete, not abruptly stopped.
### Tags
Provide 6 to 8 tags that are realistic for Medium discoverability. Use tags a reader or editor would actually search for.
## Markdown Format Rules
- Use clean Markdown only.
- Use `#`, `##`, and `###` headings appropriately.
- Do not emit HTML unless absolutely required.
- Do not include raw research notes in the final article.
- Do not include inline citations unless the topic truly demands them.
- Do not add placeholder text such as "insert screenshot here".
## Read Time Estimation
Estimate read time using approximately 200 words per minute. Round to the nearest whole minute, but do not show the word-count math.
## File Saving Rules
Save the finished draft to `~/drafts/` using a timestamped, slugified filename.
Preferred filename shape:
```text
~/drafts/YYYY-MM-DD-topic-slug.md
```
If the `~/drafts/` directory does not exist, create it.
## Featured Image Generation
After saving the Markdown draft, attempt to generate a hero image from the featured image prompt you wrote in the article.
### Generation process
1. Extract the `Featured image prompt:` line from the draft.
2. Use the runtime's image generation tool to produce a high-quality image from that prompt. Preferred settings when configurable: landscape aspect ratio (16:9), photorealistic or clean digital-illustration style, no text overlays.
3. Save the result to `~/drafts/images/` using the same slug and date as the Markdown file:
```text
~/drafts/images/YYYY-MM-DD-topic-slug.png
```
If `~/drafts/images/` does not exist, create it.
4. Store the absolute image path in the `featured_image_path` field in shared memory (see Shared Memory Contract).
### Fallback
If image generation is unavailable or fails:
- Do not block draft delivery.
- Store `null` as `featured_image_path` in memory.
- Note at the end of the WhatsApp message that no featured image was generated and the user can upload one manually before publishing.
Never store a fake or placeholder path. If the image was not saved to disk, the path must be `null`.
## WhatsApp Delivery Rules
Send the full Markdown draft to the user over WhatsApp after saving it.
The WhatsApp message should:
- include the full article body
- remain clean and readable
- end with a direct approval prompt
End with a short call to action such as:
```text
Reply "publish" to post this on Medium, or send edits if you want changes first.
```
If no featured image was generated, append:
```text
Note: no featured image was generated. Upload one manually in the Medium editor before publishing if you want one.
```
## Quality Filters
Before sending the draft, confirm that:
- the argument is coherent from start to finish
- the article is not just a news recap
- at least one non-obvious insight is present
- the title and subtitle match the actual content
- the article contains 5 to 7 sections, not fewer and not more
- the tone is human, not templated
## Guardrails
- Do not hallucinate usage numbers, revenue, users, benchmarks, or quotes.
- Do not present speculation as fact.
- Do not plagiarize source wording.
- Do not turn the article into a bullet-list memo unless the topic truly demands that structure.
- Do not write a shallow "Top 5 things to know" article unless explicitly requested.
- If the topic is too weak to support a high-quality article, say so and suggest choosing another shortlist item.
## Completion Checklist
Before ending:
1. Resolve the correct topic from direct input or shared memory.
2. Research the topic with multiple current sources.
3. Write the full Medium-ready Markdown draft.
4. Save the draft to `~/drafts/`.
5. Attempt to generate and save the featured image to `~/drafts/images/`.
6. Store draft metadata — including `featured_image_path` (or `null`) — in shared memory.
7. Send the full draft over WhatsApp.
8. Leave the pipeline in `awaiting_publish_confirmation` state.
View on GitHub