anti-ai
Anti-AI detection pass for any written text. Hard rules that strip the statistical fingerprints AI writing leaves behind —…
Channel-master writer for email newsletter. Weekly pipeline: scaffold structure, gather data, query the author, synthesize in their voice, review, send. Companion doc workflow. Voice-matched via the authors-voice skill. Works for any behind-the-scenes weekly newsletter built on
Claude Code
$ npx -y skills add travsteward/openwriter --skill newsletter-writer --agent claude-code
Codex
$ npx skills add travsteward/openwriter --skill newsletter-writer -a codex -y
Cursor
$ npx skills add travsteward/openwriter --skill newsletter-writer -a cursor -y
Gemini CLI
$ npx skills add travsteward/openwriter --skill newsletter-writer -a gemini-cli -y
GitHub Copilot
$ npx skills add travsteward/openwriter --skill newsletter-writer -a github-copilot -y
OpenCode
$ npx skills add travsteward/openwriter --skill newsletter-writer -a opencode -y
Windsurf
$ npx skills add travsteward/openwriter --skill newsletter-writer -a windsurf -y
name: newsletter-writer description: | Channel-master writer for email newsletter. Weekly pipeline: scaffold structure, gather data, query the author, synthesize in their voice, review, send. Companion doc workflow. Voice-matched via the authors-voice skill. Works for any behind-the-scenes weekly newsletter built on proven content. Use when: "/newsletter-writer", "newsletter", "draft newsletter", "scaffold newsletter", "newsletter gather", "newsletter review", "newsletter send", "newsletter status", "newsletter to blog", "convert newsletter". Requires: OpenWriter MCP server configured. metadata: author: travsteward version: "0.2.0" license: MIT
Weekly newsletter pipeline: scaffold structure, gather data, query the author, synthesize in their voice, review, send.
**Worked example throughout:** a fictional newsletter, **The Sleep Brief**, written by a popular-science sleep author whose community site is `deeprest.example.com` and whose X handle is `@sleepauthor`. Substitute your own newsletter name, brand, domain, and handle — they live in your project's `config.md` (see Configuration).
This newsletter is **behind the scenes**, not a content recap. Readers can go read the tweets and articles themselves. The newsletter gives them what they can't get anywhere else: WHY the author wrote it, what they were trying to achieve, the deeper reasoning that didn't fit in 280 characters, and how the author's project interacted with the world that week. Every section answers "what was I thinking?" not "what did I post."
**Format rules for newsletter documents (subject, preview line, body, images, cover, sending and scheduling) arrive from OpenWriter when the document is opened.** This skill keeps voice, structure, section strategy and the weekly pipeline.
1. **ALWAYS use the authors-voice protocol.** Load the voice profile/anchor, pull writing samples from the corpus, write with the profile as behavioral constraints, run anti-AI detection. Never skip this. Install the authors-voice skill with `claude install github:travsteward/authors-voice`. 2. **NEVER write the author's position for them.** You gather data and present structure. You ASK the author what they think. They tell you. You synthesize their input in their voice. The author's original thinking is the product — you are the editor, not the writer. 3. **Source article content from OpenWriter docs FIRST.** X Articles may not be readable via fxtwitter. The drafts live in OpenWriter. Search `list_documents` before trying external APIs. 4. **Every section headline is specific to that week's content.** No generic recurring labels like "This Week on X" or "The Author's Position." Each section gets a unique, attention-grabbing headline based on the actual topic. Example: "Why the 8-Hour Rule Is Wrong for Shift Workers" not "The Author's Position." "The Tweet That Got 1.75M Views About Sleep Debt" not "This Week on X." Specificity is what grabs attention. 5. **No outbound links except the footer CTA.** The newsletter summarizes and screenshots everything — readers don't need to leave. No "View the post →" or "Read the full article →" links to X or anywhere else. The only link in the entire newsletter is the footer CTA to your brand site. Every other link is a leak.
Create the newsletter document with the empty skeleton FIRST. The author sees the structure in OpenWriter before any ideation begins. This is the visceral starting point — the bones of the newsletter visible in the editor.
Check `list_newsletter_issues` for the latest sent issue number. Increment by 1.
1. create_document({ title: "The Sleep Brief #N", content_type: "newsletter" })
2. populate_document with the full skeleton belowUse a single `populate_document` call with this TipTap JSON structure. All section titles are placeholders — they get replaced during drafting after gather/query:
[
{"type": "heading", "attrs": {"level": 1}, "content": [{"type": "text", "text": "In this Issue:"}]},
{"type": "paragraph", "content": [
{"type": "text", "text": "Section 1"},
{"type": "hardBreak"},
{"type": "text", "text": "Section 2"},
{"type": "hardBreak"},
{"type": "text", "text": "Section 3"},
{"type": "hardBreak"},
{"type": "text", "text": "Section 4"},
{"type": "hardBreak"},
{"type": "text", "text": "Section 5"}
]},
{"type": "horizontalRule"},
{"type": "paragraph", "content": [
{"type": "text", "marks": [{"type": "italic"}], "text": "The Sleep Brief: Weekly current events and X highlights from the "},
{"type": "text", "marks": [{"type": "italic"}, {"type": "bold"}, {"type": "link", "attrs": {"href": "https://deeprest.example.com"}}], "text": "DeepRest"},
{"type": "text", "marks": [{"type": "italic"}], "text": " worldview."}
]},
{"type": "horizontalRule"},
{"type": "heading", "attrs": {"level": 2}, "content": [{"type": "text", "text": "Section 1"}]},
{"type": "paragraph", "content": [{"type": "text", "text": "[Current events or lead reflection]"}]},
{"type": "horizontalRule"},
{"type": "heading", "attrs": {"level": 2}, "content": [{"type": "text", "text": "Section 2"}]},
{"type": "paragraph", "content": [{"type": "text", "text": "[Tweet commentary]"}]},
{"tWrite 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.
Anti-AI detection pass for any written text. Hard rules that strip the statistical fingerprints AI writing leaves behind —…
Channel-agnostic writer for any piece of content that doesn't yet belong to a specific channel. Use when you have something to…
Channel-master writer for long-form blog posts. Owns the SHAPE of a post — beat structure, title/preview/slug commitments,…
Orchestration skill for book-scale long-form writing (fiction or nonfiction). Owns the SHAPE of a book project — chapter…
Polish copy to 90/100. Channel the top 10 advertising practitioners in history. Score, rewrite, score again. Don't stop until…
Writing format, image generation, and pipeline for X (Twitter) content. Paragraph-based medium form, Fischerian Hooks,…
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…