blog-writer

$npx mdskill add microsoft/vscode-docs/blog-writer

Writes and reviews VS Code blog posts based on user input or GitHub content

  • Plans and drafts blog posts about VS Code features, issues, or PRs
  • Follows internal style guides and uses content from the blogs/ folder
  • Proposes outlines, asks clarifying questions, and waits for approval before writing
  • Delivers structured drafts or reviews with actionable suggestions

SKILL.md

.github/skills/blog-writerView on GitHub ↗
---
name: blog-writer
description: 'Plan, write, and review VS Code blog posts. ALWAYS use this skill when the user asks to "write a blog post", "draft a blog", "add a blog post for", "review this blog post", or provides a feature/issue/PR to announce on the VS Code blog. For new posts, it proposes an outline and asks clarifying questions first, and does not edit any files until you approve the plan.'
argument-hint: 'Topic to blog about (or a link to the relevant issue/PR), or a blog post to review.'
---

# Write or Review a Blog Post

Help author a new VS Code blog post or review an existing one in the `blogs/` folder. The skill has two modes:

* **Write mode** works in two phases: it first **researches the topic and proposes an outline**, then drafts the post **only after you approve**.
* **Review mode** evaluates an existing draft for clarity, conciseness, and style, and reports concrete suggestions without editing unless asked.

All work must follow the [blog-writing style guide](../../instructions/blog-writing.instructions.md), which in turn builds on the [docs-writing style guide](../../instructions/docs-writing.instructions.md).

## When to Use

Use this skill **whenever** the request maps to any of these:

* The user says "write a blog post", "draft a blog", "add a blog post for…", or "announce this on the blog".
* The user pastes a GitHub issue or PR link and asks you to turn it into a blog post.
* The user asks you to "review this blog post", check a draft, or improve an existing post in `blogs/`.
* Announcing or explaining a new or changed VS Code or GitHub Copilot feature in a narrative, conversational format.

For new posts, run the plan-first workflow rather than jumping straight to a draft, even when the topic seems small.

Do **not** use this skill for reference documentation, release notes, or API docs. Those are handled by other skills (`doc-writer`, `release-note-writer`) or direct edits. If the user wants reference docs rather than a narrative post, switch to `doc-writer`.

## Guardrails

* **Blogs only.** Limit changes to the `blogs/` folder. Do **not** update reference docs, release notes, or API docs as part of this skill.
* **Folder structure.** A new post MUST live in `blogs/<year>/<month>/<day>/` with each date level as its own subfolder. Store images and the social image alongside the post.
* **Frontmatter is required.** Every post needs the YAML frontmatter fields from the style guide (`Order`, `TOCTitle`, `PageTitle`, `MetaDescription`, `MetaSocialImage`, `Date`, `Author`). `Order` must be unique and higher than the most recent post, so check existing posts before assigning it.
* **Images and screenshots are human work.** When a hero image or screenshot is needed, insert a `TODO` comment for a human to capture and add it later. Do not fabricate image references or invent file names beyond the placeholder.
* **Style compliance.** Follow the [blog-writing style guide](../../instructions/blog-writing.instructions.md): engaging, conversational tone, active voice, first-person plural ("we"), contractions, and a closing call to action ending with `Happy coding! 💙`.

## Phase 1 — Research & Propose an Outline (no edits)

Do not modify any files in this phase.

1. **Understand the topic.** Read the feature description, issue, or PR provided. If it is ambiguous or lacks detail, ask clarifying questions (audience, angle, key takeaways, author name and social link) before continuing.
2. **Check the source if needed.** To understand the feature, inspect the source code in the `microsoft/vscode` and `microsoft/vscode-copilot-chat` repos. Use the `gh` CLI for all GitHub interactions (issues, PRs, code). See user memory `gh-cli-powershell.md` for PowerShell-specific `gh` patterns.

   | Area being written about | Primary source repo |
   |--------------------------|---------------------|
   | Core editor, workbench, debug, terminal, tasks, settings, commands, keybindings | `microsoft/vscode` |
   | Copilot Chat, inline chat, agent mode, chat tools, chat participants, MCP in chat | `microsoft/vscode-copilot-chat` |

3. **Determine placement and metadata.** Decide the target folder (`blogs/<year>/<month>/<day>/`) and the next available `Order` value by checking recent posts. Confirm the author name and social media profile link with the user if unknown.
4. **Present the outline.** Summarize:
   * The proposed title, target folder path, and draft frontmatter values.
   * A section-by-section outline (H2 headings) with a one-line description of each.
   * Any `TODO` image placeholders that will be needed (hero/social image, inline screenshots).
   * Open questions or assumptions.
5. **Stop and wait for approval.** Do not proceed to Phase 2 until the user explicitly approves the outline (or adjusts it).

## Phase 2 — Draft the Post (after approval)

Once the user approves the outline:

1. Create the post at `blogs/<year>/<month>/<day>/<slug>.md` with complete YAML frontmatter.
2. Write the body following the content structure from the style guide:
   * An H1 title, followed by a byline `<Month> <day>, <year> by [<author>](<social link>)` and a blank line.
   * A brief introduction that summarizes the main points.
   * H2 sections as outlined, in an engaging, conversational tone using active voice, "we", and contractions.
   * Images via relative paths with descriptive alt text. Use absolute URLs for links to documentation articles.
   * A closing call to action, ending with `Happy coding! 💙`.
3. Add `TODO` comments where images or screenshots need to be captured by a human.
4. Summarize the post you created and call out any remaining `TODO`s for the user.

## Review Mode

When the user asks you to review an existing blog post instead of writing one:

1. Read the draft and check it against the [blog-writing style guide](../../instructions/blog-writing.instructions.md):
   * Frontmatter completeness and correctness (all required fields, unique `Order`, `MetaDescription` under 160 chars, `TOCTitle` under 30 chars).
   * Folder structure (`blogs/<year>/<month>/<day>/`).
   * Content structure (H1 title, byline, intro, H2 sections, alt text on images, absolute URLs for doc links, closing call to action ending with `Happy coding! 💙`).
   * Writing style (engaging and conversational, active voice, first-person plural, contractions, clear language for a developer audience).
2. Verify technical claims against the source where practical (setting names, command IDs, version availability), using the `gh` CLI.
3. Report concrete, practical suggestions grouped by theme. **Do not edit the file** unless the user asks you to apply the changes.

More from microsoft/vscode-docs

SkillDescription
content-redirect'Create and manage redirects in VS Code documentation when pages are moved, renamed, or deleted. Use when moving docs pages, renaming files, restructuring content, or when the user asks about redirects.'
doc-writerPlan and write VS Code documentation for a new or updated feature. ALWAYS use this skill when the user asks to "document", "add docs for", "write docs for", or "update the docs for" a feature, or provides a GitHub issue/PR link to document — even if the change seems small. Proposes a documentation plan and asks clarifying questions first — it does not edit any files until you approve the plan.
docs-product-alignmentAudit and update docs/copilot/ documentation to accurately reflect current VS Code AI capabilities. Use when: competitive analysis reveals gaps, product launches new features, docs use outdated framing, or keyword coverage needs strengthening for discoverability by users and AI agents. Produces a gap analysis plus targeted edits across affected files.
frontmatter-description'Check and optimize MetaDescription frontmatter fields in VS Code documentation. Use when auditing, adding, or improving page descriptions for SEO and discoverability. Apply this when making content changes to markdown articles.'
pr-reviewVerify the technical accuracy of a vscode-docs pull request against the VS Code source code in microsoft/vscode and microsoft/vscode-copilot-chat. Use when reviewing a docs PR for factual correctness — setting names, command IDs, default values, API shapes, keybindings, versioned availability, and described behavior.
release-note-writerGuidelines for writing and reviewing Insiders and Stable release notes for Visual Studio Code. This also includes instructions for updating release notes for recovery releases.