# Blog Post

> Submit a blog draft to waynesutton.ai. Use when the user says "blog this", "blog to wsai", "send to wsai", "write to wsai", "post this to my blog", "write this up for the blog", "turn this session into a blog post", "turn this session into a blog post wsai", "draft a post about", "wsai draft a post about", or asks to file session notes to waynesutton.ai. Drafts go to a review inbox and are never published without approval.

- Skill: `waynesutton/blog-post` (Agent Skill)
- Install (CLI): `npx skillmds@latest add waynesutton/blog-post`
- Raw SKILL.md: https://api.skillmd.com/api/skills/waynesutton/blog-post/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: waynesutton (https://skillmd.com/u/waynesutton)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/waynesutton/blog-post

---


# Blog post skill for waynesutton.ai

Turn the current session, notes, or a shared link into a blog draft on waynesutton.ai. Every draft lands in a review inbox. Nothing publishes without Wayne approving it.

## Trigger phrases

- "blog this"
- "blog to wsai"
- "send to wsai"
- "write to wsai"
- "post this to my blog"
- "write this up for the blog"
- "turn this session into a blog post"
- "turn this session into a blog post wsai"
- "draft a post about ..."
- "wsai draft a post about ..."

## Requirements

The environment variable `BLOG_POST_KEY` must be set. It holds a pipeline API key generated in the waynesutton.ai dashboard under API Keys. If it is missing, tell the user to generate a key in the dashboard and export it:

```bash
export BLOG_POST_KEY=wsa_xxxxxxxx
```

## How to submit a draft

POST to the drafts endpoint with the key in the `x-api-key` header:

```bash
curl -X POST https://waynesutton.ai/api/v1/drafts \
  -H "Content-Type: application/json" \
  -H "x-api-key: $BLOG_POST_KEY" \
  -d '{
    "title": "Optional working title",
    "rawInput": "The draft content goes here",
    "type": "session-summary",
    "mode": "rewrite",
    "source": "claude-code",
    "links": ["https://x.com/example/status/123"],
    "tags": ["convex", "ai"]
  }'
```

A `201` response returns `{ "draftId": "...", "status": "inbox" }`.

## Payload fields

| Field | Required | Values | Notes |
|-------|----------|--------|-------|
| rawInput | yes | string | Notes, session summary, or full article text |
| title | no | string | Working title hint |
| type | no | session-summary, link-commentary, article | Default article |
| mode | no | rewrite, as-is | rewrite runs the voice agent; as-is keeps text unchanged |
| source | no | string | Name your tool: claude-code, cursor, codex, chatgpt, grok |
| links | no | array of strings | X links get their post text pulled in via oEmbed |
| tags | no | array of strings | Suggested tags |

## Writing the rawInput

For a session summary, cover:

1. What was built or fixed and why it mattered
2. The interesting decisions and tradeoffs
3. Code snippets worth showing (short, real ones)
4. What broke and how it got fixed
5. What comes next

Write plainly. Skip filler. Do not oversell. The voice agent rewrites drafts in Wayne's voice when mode is rewrite, so focus on getting the facts and the story right, not the polish.

For link commentary, include the link in `links`, set `type` to `link-commentary`, and put your take or the user's take in `rawInput`.

## MCP alternative

If the MCP server is connected at `https://waynesutton.ai/mcp`, you can call `create_draft` instead of curl. Send the same `BLOG_POST_KEY` as `x-api-key` (or `Authorization: Bearer $BLOG_POST_KEY` when the server is not gated by `MCP_API_KEY`). Payload fields match the table above. Prefer curl when MCP is not configured.

## Rules

- Never publish directly. The endpoint only creates review drafts.
- One draft per request. Do not batch.
- If the request fails with 401, the key is wrong or revoked; tell the user.
- If it fails with 429, wait a minute and retry once.

