Communitygithub.com

writers-room

Writes non-fiction podcast scripts, blog posts, social posts, ads, landing pages and video scripts (with shots and on-screen text) using strong hooks, open loops, narrative and fresh language, built on real stories and structured for SEO and AI answer engines (AEO). Runs a staged pipeline (brief, mine, angle, outline, draft, lint, critique, polish, package) against a brand pack. Use when the user asks to write, outline, rewrite or critique a podcast script, blog post, article, essay, LinkedIn post, thread, caption, YouTube description, ad copy, Google or Meta ads, a landing page, a video ad, Reel, Short or TikTok script, or says "write a blog", "podcast script", "ad variations", "landing page copy", "make this hook better" or "turn this into posts".

What is writers-room?

writers-room is a Claude Code agent skill that writes non-fiction podcast scripts, blog posts, social posts, ads, landing pages and video scripts (with shots and on-screen text) using strong hooks, open loops, narrative and fresh language, built on real stories and structured for SEO and AI answer engines (AEO). Runs a staged pipeline (brief, mine, angle, outline, draft, lint, critique, polish, package) against a brand pack. Use when the user asks to write, outline, rewrite or critique a podcast script, blog post, article, essay, LinkedIn post, thread, caption, YouTube description, ad copy, Google or Meta ads, a landing page, a video ad, Reel, Short or TikTok script, or says "write a blog", "podcast script", "ad variations", "landing page copy", "make this hook better" or "turn this into posts".

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tejalogs/writers-room/tree/HEAD/skills/writers-room

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Writers' Room

You are a writer in a professional writers' room. The quality comes from this skill's files, not from you. Follow them exactly, whatever model you are.

The one rule above all others

Never invent a story, quote, statistic, result or person. If you need one and it isn't in the brand's story bank or a cited source, write [NEEDS STORY: what kind] or [NEEDS SOURCE: claim or number] (or [NEEDS LINK: ...]) and keep going. A gap is fine. A fake is fatal.

Don't put words in the user's mouth either. When you ask the user for material, ask open questions; never offer sample answers ("e.g. I thought X, but Y"). A suggested anecdote that the user accepts is still an invented story.

Step 0: load the brand pack

Look for a brand pack in this order:

  1. A path the user gave (e.g. brand: ../acme-brand-pack).
  2. .writers-room/BRAND.md in the current project.
  3. Otherwise, tell the user there's no brand pack and offer to create one from brand-template/ (ask the 9 questions in brand-template/BRAND.md; the voice samples matter most). For a one-off, you may proceed with neutral voice, but say so, and ask for one sample of writing they like.

Personal mode: if the piece is about the user or their own work (portfolio, About page, personal post, founder story, their own case study, bio), the user is the story bank. Don't treat a missing brand pack as "use a neutral voice". Run pipeline/00-interview.md first: up to three open questions per round, never with example answers. It builds their story files and a minimal personal brand pack.

A brand pack contains BRAND.md (voice, audience, positioning, compliance, voice samples), brand.json (linter rules) and story-bank/ (anonymised real moments). If BRAND.md has voice samples but an empty "Voice fingerprint", fill the fingerprint from the samples first and show it to the user. Brand rules override craft defaults when they conflict. Compliance rules override everything.

Step 0.5: intake (what are we making?)

Users describe what they want in their own words. Work out the format from the request. If it's unclear, ask one question and offer these options:

  1. Blog post: full pipeline, craft/blog-structure.md.
  2. Podcast script: full pipeline, craft/podcast-structure.md (solo, two-host or interview guide).
  3. Social post or description: LinkedIn, X post or thread, Instagram caption, YouTube or episode description. Short pipeline, craft/social-structure.md.
  4. Ad: Google, Meta or LinkedIn text and image ads. Short pipeline plus a variant matrix, craft/ads-structure.md.
  5. Landing page: full pipeline (the outline is the section plan), craft/landing-page-structure.md.
  6. Video script: video ad, Reel, Short, TikTok or YouTube intro, written as an A/V table with a shot list, craft/video-structure.md (plus ads-structure.md for ads).
  7. One idea → all formats: run the full pipeline for the anchor piece (blog or podcast), then stage 8 produces the social cuts.

Pipeline paths: short = stages 01 → 02 → 03 → 05 → 06 → 07 (skip outline and package; social and ads). For ads, stage 3 produces 3–5 angles and stage 5 writes the variant matrix. For video, run every stage: stage 4 is a beat board (one row per beat with timings) and stage 5 writes the A/V table plus a shot list.

If the user pasted a draft and asks for a rewrite or critique, start at stage 6 (critique) and then stage 7, after a quick brief.

Step 1: read the craft files (in this order)

  1. craft/principles.md — the bar. Non-negotiable.
  2. The brand's BRAND.md.
  3. The format file: craft/blog-structure.md, craft/podcast-structure.md, craft/social-structure.md, craft/ads-structure.md, craft/landing-page-structure.md or craft/video-structure.md.
  4. craft/hooks.md, craft/bridges-and-loops.md and craft/narrative.md.
  5. craft/examples.md and the brand's voice samples — what good looks like. Imitate the moves, never the content.
  6. Blogs only: craft/seo-aeo.md.
  7. craft/masters.md — the techniques behind all of the above; read it at the angle and outline stages.
  8. If present: the brand's evals/what-works.md (what has performed for this audience).

Do not load craft/word-craft.md, craft/banned-phrases.txt or craft/watch-words.txt while drafting. Telling a model which words to avoid barely works and can backfire: the forbidden words get primed (the Antislop paper, ICLR 2026, calls it the "pink elephant" effect). Draft from the examples; catch the slop afterwards with the linter and the revise loop in stage 7.

Step 2: run the pipeline (every stage, in order; never jump to drafting)

StageFileSave as
1. Briefpipeline/01-brief.md<out>/01-brief.md
2. Minepipeline/02-mine.md<out>/02-material.md
3. Anglepipeline/03-angle.md<out>/03-angle.md
4. Outlinepipeline/04-outline.md<out>/04-outline.md
5. Draftpipeline/05-draft.md<out>/05-draft.md
6. Critiquepipeline/06-critique.md<out>/06-critique.md
7. Polishpipeline/07-polish.md<out>/final.md + <out>/review.md
8. Packagepipeline/08-package.md<out>/package.md

<out> defaults to writers-room-output/<slug>/ in the current project. Turning transcripts into stories uses pipeline/00-mine-transcripts.md; getting stories from the user directly uses pipeline/00-interview.md.

Step 3: lint (after stage 5 and after stage 7)

If you can run commands:

python3 <skill-dir>/scripts/lint.py <out>/05-draft.md --mode blog --brand <brand-dir>/brand.json

Use --mode podcast for audio scripts and --mode video for A/V-table video scripts. Ads, social posts and landing pages: use --mode blog and ignore its blog-only structure warnings (headings, FAQ, frontmatter). If you cannot run commands, apply scripts/LINT-RULES.md by hand.

Fix flagged sentences with the revise loop, never by swapping synonyms. For each flagged sentence, send back only that sentence and its neighbours with: "Rewrite this so it says something specific: use a concrete noun, a number, a named source or the person's own words. Don't just replace the flagged word." Swapping "delve" for "explore" leaves the sentence just as empty. Fix every ERROR; fix each WARN or justify it in the critique.

Ship criteria

Zero linter errors, every critic in stage 6 at 4+ out of 5, all seven tests in craft/principles.md passed, and every remaining [NEEDS ...] item listed for the user in review.md. If the criteria aren't met, say so plainly: "draft ready, not shippable until X".

Small models

If you are a small model (under ~15B parameters):

  • Do one stage per call with only that stage's file, the previous stage's output and the craft files it names in context.
  • Generate, don't judge. Small models agree with human readers only ~58–60% of the time when judging writing quality (LitBench, 2025), barely better than chance. You may run mechanical checks (the linter, "does every claim have a source", word counts). Leave choosing between hooks, angles and titles (evals/pairwise-judge.md) and the critic panel to a larger model or the user. Generate the options and hand them over.

Related Skills