Skip to content
Content
Skill

/beat-writer

Channel-agnostic writer for any piece of content that doesn't yet belong to a specific channel. Use when you have something to say but don't know where it goes — could become a blog post, X thread, newsletter section, web copy, journal entry, or just stay as a plain doc. Runs

From plugin
openwriter
367 skills2 agents1 MCP

Claude Code

$ npx -y skills add travsteward/openwriter --skill beat-writer --agent claude-code

SKILL.md

beat-writer.SKILL.md
name: beat-writer
description: |
  Channel-agnostic writer for any piece of content that doesn't yet belong
  to a specific channel. Use when you have something to say but don't know
  where it goes — could become a blog post, X thread, newsletter section,
  web copy, journal entry, or just stay as a plain doc. Runs the beat
  extraction + shaping discipline, pours prose via /authors-voice (with
  the operator's default anchor — personal voice), polishes, and leaves
  a clean draft in OpenWriter. The draft can later be refactored into a
  specific channel via /blog-writer, /x-writer, or /newsletter-writer.

  Use when: "/beat-writer", "write this", "draft something", "I have an
  idea but don't know where", "extract beats", "write me a draft",
  "pour this in voice", "I want to think this through in writing",
  "plain doc", "just open a doc", "uncommitted draft", "I'll figure out
  where it goes later".

  NOT for: known-channel work (use the channel-master directly —
  /blog-writer for blogs, /x-writer for tweets, /newsletter-writer for
  emails, /book-writer for chapters).

  Requires: OpenWriter MCP server configured + /authors-voice set up
  with at least Tier 1 anchor.
metadata:
  author: travsteward
  version: "0.1.0"
license: MIT

Beat Writer

Channel-agnostic, beats-first writer for uncommitted drafts. Owns extraction + shaping; delegates prose to `/authors-voice` (operator's default anchor — personal voice). Output is a plain OpenWriter doc that can stay generic OR get refactored later into a specific channel via a channel-master writer.

**4-layer model:**

1. **EXTRACT** — pull beats out of the operator. Same query-first, 5-pass discipline used by `/book-writer`. Channel-agnostic CATEGORY tags (CLAIM / REFRAME / MECHANISM / EVIDENCE / STORY / APHORISM / PIVOT / OBJECTION). `docs/extraction.md` 2. **SHAPE** — order beats by reader flow, lock as commitments (no content prescription). No channel template — just a sequenced beats list. `docs/beat-method.md` 3. **VOICE** — `/authors-voice` Apply Protocol with the operator's DEFAULT anchor (personal voice). Same machinery as every other writer; no anchor swap. The piece sounds like the operator. 4. **POLISH** — `/polish` to 90/100, then `/anti-ai`, then a naive-reader pass (`/congruence` if installed, otherwise inline). Delegated, not duplicated.

Firm rules

1. **Single entry point.** Invoked as `/beat-writer` only. No subcommands, no flag-syntax args. Internal dispatch from context.

2. **EXTRACT before WRITE.** Same query-first discipline as `/book-writer`. AI never invents beats; the operator's head is the source.

3. **Beats are commitments, not content.** Each beat names the OUTCOME (what the reader registers / what shift lands). The voice layer brings the words.

4. **No channel template.** This skill deliberately does NOT impose a page structure, thread shape, post format, or chapter container. The draft is shapeless-by-design (just a sequenced beat list) so any channel-master can later re-shape it.

5. **Voice = `/authors-voice` Apply Protocol with operator's DEFAULT anchor.** Same machine, default fuel. The piece sounds like the operator. Editor never writes prose directly; every pour is a minion dispatch. Same Rule 1 as `/authors-voice`.

6. **OpenWriter is the writing surface.** One container per draft; Beats doc + Draft doc inside (same convention as `/blog-writer`). Workspace: `[Project] Drafts` (or reuse the operator's existing writing workspace if present).

7. **Refactor is optional.** When a draft's destination becomes obvious, hand off to the appropriate channel-master (`/blog-writer`, `/x-writer`, `/newsletter-writer`, `/book-writer`). Refactor doesn't move the draft; the channel-master reads the Beats + Draft docs and re-shapes into its own container. See `docs/refactor.md`.

8. **Polish is delegated.** `/polish` → `/anti-ai` → naive-reader pass (`/congruence` if installed, otherwise read as a first-time reader and fix inline). Do not duplicate their logic.

Architecture

beat-writer/
├── SKILL.md                          (this file — router + firm rules + 4-layer model)
└── docs/                             (loaded on routing match)
    ├── extraction.md                 (5-pass — channel-agnostic CATEGORY tags)
    ├── beat-method.md                (beat = type + job + slot; commitments-not-content)
    ├── pipeline.md                   (extract → write → polish → anti-ai → congruence)
    ├── openwriter-surface.md         (Drafts workspace + container + Beats/Draft doc pattern)
    └── refactor.md                   (handoff to /blog-writer, /x-writer, /newsletter-writer, /book-writer)

Routing

| User intent | Action | |---|---| | "/beat-writer" with no context | Ask ONE clarifying question: what are we writing about? | | "draft something about X" / "write this" | Extract → shape → voice → polish | | "I have this idea: [seed]" | Operator's dump = seed → 5-pass extraction → shape → write | | "extract beats from [topic]" | Pass 1–5 only — no draft pour | | "pour these beats: [list]" | Skip extraction; load beats; voice pour via /authors-voice | | "polish this draft" | Skip extraction + write; run polish/anti-ai/congruence only | | "make this into a blog/tweet/newsletter/page" | Refactor handoff — load draft + Beats, route to channel-master per `docs/refactor.md` |

Output contract

{
  "status": "draft-ready" | "needs-input" | "blocked",
  "artifact": { "doc_id": "...", "workspace_id": "...", "container_id": "..." },
  "next_steps": ["polish", "anti-ai", "refactor-to-<channel>", "publish-via-channel-master"],
  "notes": "<optional>"
}

Companion skills

  • **/authors-voice** — REQUIRED. Every prose pour delegates to its Apply Protocol with operator's default anchor.
  • **/polish** — REQUIRED for the 90/100 push.
  • **/anti-ai** — final fingerprint scrub after polish.
  • **/congruence** — naive-reader pass for jargon / broken flow (optional; if not installed, do this pass
Read more
@travsteward
Ships withopenwriter

Write and publish with your agent. A Markdown editor where your agent drafts and you review every change, then publish to your site, newsletter, X and LinkedIn.

367 skills2 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
36
Star history of travsteward/openwriter on GitHub, a chart by star-history.com

Other skills on openwriter.

anti-ai

anti-ai

Anti-AI detection pass for any written text. Hard rules that strip the statistical fingerprints AI writing leaves behind —…

blog-writer

blog-writer

Channel-master writer for long-form blog posts. Owns the SHAPE of a post — beat structure, title/preview/slug commitments,…

book-writer

book-writer

Orchestration skill for book-scale long-form writing (fiction or nonfiction). Owns the SHAPE of a book project — chapter…

newsletter-writer

newsletter-writer

Channel-master writer for email newsletter. Weekly pipeline: scaffold structure, gather data, query the author, synthesize in…

polish

polish

Polish copy to 90/100. Channel the top 10 advertising practitioners in history. Score, rewrite, score again. Don't stop until…

x-writer

x-writer

Writing format, image generation, and pipeline for X (Twitter) content. Paragraph-based medium form, Fischerian Hooks,…

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli11d33k
@iofficeai@iofficeaiInstall Skill

Questions about beat-writer.

Which coding agents can use beat-writer?
beat-writer installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.