blogger

Create, edit, and publish blog posts with consistent voice and style. Helps build and maintain a style guide, write drafts, edit for quality, optimize SEO, and fact-check claims before publishing.

8 stars

Best use case

blogger is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Create, edit, and publish blog posts with consistent voice and style. Helps build and maintain a style guide, write drafts, edit for quality, optimize SEO, and fact-check claims before publishing.

Teams using blogger should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/blogger/SKILL.md --create-dirs "https://raw.githubusercontent.com/shaunandrews/agent-skills/main/skills/blogger/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/blogger/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How blogger Compares

Feature / AgentbloggerStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Create, edit, and publish blog posts with consistent voice and style. Helps build and maintain a style guide, write drafts, edit for quality, optimize SEO, and fact-check claims before publishing.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Blogger

A writing companion for maintaining a blog with consistent voice and quality.

## First-Run Check

**Before doing anything else**, check if a style guide exists:

```bash
# Check for style guide (adjust path as needed)
STYLE_GUIDE="${PROJECT_ROOT}/.blog-style/voice.md"
if [ ! -f "$STYLE_GUIDE" ]; then
  echo "NO_STYLE_GUIDE"
else
  echo "STYLE_GUIDE_EXISTS"
fi
```

**If no style guide exists:**
1. Offer to create one: "I don't see a style guide for this blog. Want me to analyze some existing posts and build one?"
2. If yes, run the post analyzer (see [Building a Style Guide](#building-a-style-guide))
3. If no, proceed but note that voice consistency won't be enforced

---

## Style Guide Location

Style guides live in the project root:

```
{project-root}/
├── .blog-style/
│   ├── voice.md           # Voice & tone document
│   ├── examples.md        # Links to exemplar posts
│   └── terminology.md     # Brand terms, jargon preferences
└── .credentials/
    └── wordpress.json     # API credentials (gitignored)
```

**Why project root?** The style guide is project-specific, not personal. It can be committed to git (it's not sensitive) and shared with collaborators or other tools.

---

## Building a Style Guide

### Automated Post Analysis

Run the analyzer to sample existing posts and extract patterns:

```bash
# Authenticated mode (recommended for your own blog - richer analysis)
node "{baseDir}/scripts/analyze-posts.js" \
  --site="https://example.com" \
  --credentials="${PROJECT_ROOT}/.credentials/wordpress.json" \
  --output="${PROJECT_ROOT}/.blog-style/"

# Public mode (any WordPress site - no auth required)
node "{baseDir}/scripts/analyze-posts.js" \
  --site="https://any-wordpress-site.com" \
  --output="${PROJECT_ROOT}/.blog-style/" \
  --public
```

**Modes:**
- **Authenticated:** Uses `context=edit` API, gets raw block content, analyzes block types used
- **Public:** Uses rendered HTML, works without credentials, basic text analysis only

The analyzer will:
1. Fetch recent posts (default: 20, varied by category/tag)
2. Analyze sentence structure, vocabulary, tone markers
3. Identify patterns (contractions, question usage, paragraph length)
4. Extract common phrases and stylistic signatures
5. Generate a draft `voice.md` for review

### Manual Style Guide Creation

If starting fresh or preferring manual setup, use the template:

```bash
cp "{baseDir}/templates/style-guide.md.template" "${PROJECT_ROOT}/.blog-style/voice.md"
```

Then fill in:
- **Voice characteristics** — Personality adjectives (friendly, authoritative, irreverent)
- **Tone variations** — How voice adapts to different content types
- **Grammar preferences** — Oxford comma, contractions, etc.
- **Formatting rules** — Heading styles, list preferences
- **Dos and Don'ts** — With concrete examples

See `{baseDir}/references/writing-guide.md` for guidance on each section.

---

## Workflows

### 1. Write a New Post

**Input needed:** Topic, target audience, key points (optional)

**Process:**
1. **Outline** — Generate structure with intro hook, main sections, conclusion
2. **Draft** — Write section by section, checking voice against style guide
3. **Headlines** — Generate 5+ title options using proven formulas
4. **Review** — Run through editing checklist

**Output:** Draft post ready for editing

```
/blogger write "Topic: Why I switched to Neovim"
```

### 2. Edit an Existing Draft

**Input needed:** Draft content (pasted or file path)

**Process:**
1. **Structure pass** — Does it flow logically? Are sections balanced?
2. **Clarity pass** — Simplify sentences, remove jargon, active voice
3. **Voice pass** — Compare against style guide, flag inconsistencies
4. **Technical pass** — Grammar, spelling, punctuation
5. **SEO pass** — Keywords, meta, internal/external links
6. **Fact-check pass** — Verify claims, check sources, flag unverified statements

**Output:** Edited draft with change suggestions and confidence notes

```
/blogger edit [paste draft or provide file path]
```

### 3. SEO Audit

**Input needed:** Draft content, target keyword

**Process:**
1. Check keyword in title, URL slug, first 100 words
2. Verify keyword density (aim for 1-2%, not stuffed)
3. Check for internal links to related content
4. Verify external links to credible sources
5. Generate meta description (≤155 characters)
6. Suggest related keywords and phrases

**Output:** SEO report with specific recommendations

```
/blogger seo "target keyword" [draft content]
```

### 4. Fact-Check

**Input needed:** Draft content

**Process:**
1. Extract all claims (statistics, quotes, dates, facts)
2. Categorize by verifiability:
   - **Verifiable** — Can be checked against sources
   - **Opinion** — Clearly stated as opinion, OK
   - **Unverified** — Stated as fact but no source
3. For verifiable claims:
   - Search for corroborating sources
   - Flag discrepancies or outdated info
   - Suggest citations

**Output:** Fact-check report with confidence levels

```
/blogger fact-check [draft content]
```

### 5. Publish

**Input needed:** Final draft, WordPress credentials

**Process:**
1. Final review checklist:
   - [ ] Title finalized
   - [ ] Meta description set
   - [ ] Categories/tags assigned
   - [ ] Featured image (if required)
   - [ ] Internal links added
   - [ ] Fact-check complete
2. Create draft in WordPress via REST API
3. Return preview URL for final review
4. On approval, publish (or schedule)

**Never auto-publish.** Always create as draft first.

```
/blogger publish [final draft]
```

---

## WordPress REST API

### Credentials Setup

```json
// .credentials/wordpress.json
{
  "site": "https://example.com",
  "rest_api": {
    "username": "your-username",
    "app_password": "xxxx xxxx xxxx xxxx xxxx xxxx"
  }
}
```

Generate an application password in WordPress: **Users → Profile → Application Passwords**

### Core Operations

```bash
# Load credentials
CREDS=$(cat "${PROJECT_ROOT}/.credentials/wordpress.json")
SITE=$(echo $CREDS | jq -r '.site')
USER=$(echo $CREDS | jq -r '.rest_api.username')
PASS=$(echo $CREDS | jq -r '.rest_api.app_password')
AUTH="$USER:$PASS"

# List recent posts
curl -s -u "$AUTH" "$SITE/wp-json/wp/v2/posts?per_page=10" | jq '.[] | {id, title: .title.rendered, status, date}'

# Create draft
curl -s -u "$AUTH" -X POST "$SITE/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -d '{"title":"Post Title","content":"...","status":"draft"}'

# Update post
curl -s -u "$AUTH" -X POST "$SITE/wp-json/wp/v2/posts/{id}" \
  -H "Content-Type: application/json" \
  -d '{"content":"Updated content..."}'

# Publish
curl -s -u "$AUTH" -X POST "$SITE/wp-json/wp/v2/posts/{id}" \
  -H "Content-Type: application/json" \
  -d '{"status":"publish"}'

# Get categories
curl -s "$SITE/wp-json/wp/v2/categories" | jq '.[] | {id, name, slug}'

# Get tags
curl -s "$SITE/wp-json/wp/v2/tags" | jq '.[] | {id, name, slug}'
```

### Block Format

WordPress uses Gutenberg blocks. Wrap content appropriately:

```html
<!-- wp:paragraph -->
<p>Regular paragraph text.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":2} -->
<h2>Section Heading</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul>
<li>List item one</li>
<li>List item two</li>
</ul>
<!-- /wp:list -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p>Quote text here.</p><cite>Attribution</cite></blockquote>
<!-- /wp:quote -->

<!-- wp:code -->
<pre class="wp-block-code"><code>code here</code></pre>
<!-- /wp:code -->

<!-- wp:image {"id":123} -->
<figure class="wp-block-image"><img src="..." alt="..." class="wp-image-123"/></figure>
<!-- /wp:image -->
```

---

## Reference Documents

- `{baseDir}/references/writing-guide.md` — Writing best practices, structure, hooks
- `{baseDir}/references/editing-checklist.md` — Multi-pass editing workflow
- `{baseDir}/references/seo-checklist.md` — SEO optimization reference
- `{baseDir}/references/headline-formulas.md` — Proven headline patterns
- `{baseDir}/references/fact-checking.md` — Verification workflow and sources

---

## Templates

- `{baseDir}/templates/style-guide.md.template` — Empty style guide to fill in
- `{baseDir}/templates/post-outline.md.template` — Blog post outline structure

---

## Tips

### Voice Consistency
- Read the style guide before every writing session
- When in doubt, check exemplar posts
- Flag any suggested edits that might change the voice

### Quality Over Speed
- Never skip the editing passes
- Fact-check anything that could be wrong
- Preview before publishing, always

### SEO Without Stuffing
- One primary keyword per post
- Write for humans first, then optimize
- Internal links help readers AND SEO

### When to Break the Rules
- Style guides are guidelines, not laws
- Some posts warrant a different tone (announcements, serious topics)
- Document exceptions in the style guide over time

Related Skills

wordpress-mockups

8
from shaunandrews/agent-skills

Build accurate WordPress/Gutenberg UI mockups using pre-extracted design tokens, icons, and components. Use when prototyping WordPress admin interfaces or Site Editor concepts.

skill-creator

8
from shaunandrews/agent-skills

Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.

project-setup

8
from shaunandrews/agent-skills

Set up a new project with standard structure, git, README, CLAUDE.md, and dev server config. Use when starting a new project or bootstrapping a workspace for a new initiative.

pressable

8
from shaunandrews/agent-skills

Manage Pressable WordPress hosting via API. Use when creating/cloning sites, managing backups, purging cache, updating PHP versions, managing plugins, checking site status, or any Pressable hosting operations.

headless-browser

8
from shaunandrews/agent-skills

Browse the web invisibly using a headless Chromium in Docker. Take screenshots, extract content, and generate PDFs without interrupting the user's screen.

design-mockups

8
from shaunandrews/agent-skills

Build and present HTML/CSS design mockups with a local preview server. Use when prototyping website designs, iterating on visual concepts, or presenting design options.

design-critique

8
from shaunandrews/agent-skills

Premium UI/UX design audit with Jobs/Ive philosophy. Evaluates hierarchy, whitespace, typography, color, motion, and responsiveness. Produces phased improvement plans without touching functionality.

design-atelier

8
from shaunandrews/agent-skills

End-to-end design pipeline from brief to coded prototypes. Gathers visual references, builds design systems, and produces HTML/CSS mockups via parallel sub-agents. Supports multi-prompt projects.

ddg-search

8
from shaunandrews/agent-skills

Search the web. Use for general lookups, research, and finding information online.

swe-cli-skills

12
from SylphAI-Inc/skills

Senior engineer CLI expertise for AI agents — workflows, safety guardrails, gotchas, and anti-patterns across cloud, IaC, containers, databases, dev tools, and platforms

DevOps & Infrastructure

PicoClaw Fleet

11
from EricGrill/agents-skills-plugins

Orchestrate a fleet of remote PicoClaw workers over SSH for fast, ephemeral one-shot tasks.

DevOps & Infrastructure

VibeCollab — Setup Instructions for AI Assistants

9
from flashpoint493/VibeCollab

You are helping a user set up VibeCollab in their project.

Workflow & Productivity