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
288 skills2 agents
Install
$ npx -y skills add travsteward/openwriter --skill beat-writer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/beat-writer

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

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
Ships withopenwriter

Your agent writes. You decide. The open-source writing surface for the agentic era. OpenWriter is a markdown-native rich text editor built for humans and agents working side by side. Your agent writes, and you review and approve every change before it lands.

Get the whole plugin
Stats
28
Stars
1
Forks
Active
Maintenance
TypeScript
Language
MIT
License
7d ago
Last commit
7mo ago
Created

Repo: travsteward/openwriter

Other skills on openwriter.