Every Prompt, in Build Order

Not a reader? Fair. These are all 55 prompts from the guide, in the order you'd build with them. Paste them into your coding agent one at a time, starting at the top.

Or grab the kit. It's a zip your agent can work through on its own (a START-HERE file tells it what to do, and it still stops to ask you for anything only you know). When a step doesn't make sense, the module heading links to the reasoning.

Master prompt: build from the kit

Start here

Unzip the kit, then paste this into your coding agent. It interviews you first, then builds one module at a time.

I downloaded the AI writing pipeline kit and unzipped it to [kit folder]. Build the pipeline in [project folder].

Read [kit folder]/START-HERE.md first and follow it exactly.

Before you build anything, interview me. Go through every prompt and every file in the kit and list each value in square brackets you'll need from me (the article slug is the one you fill in yourself). Add what you need to know that the prompts assume: what I write and who reads it, where my writing samples and any talk recordings live, which coding agent and which models I have, and which employer, team or product names my writing must never point at. Ask one question at a time, in plain language, with an example answer. Don't guess and don't fill gaps yourself. If I don't know an answer yet, mark it open and move on.

Save my answers to pipeline-answers.md in the project and read them back to me for a yes before you start. Use them wherever a prompt or file needs a value, and only ask again for something still open.

Then build one module at a time. Stop after each module, show me what you created or changed, and wait for my go-ahead. Never answer focus questions for me, since my answers are the only source of my own stories. If a step needs a tool or a model you don't have, tell me instead of working around it.

Module 1: Understanding the Architecture

Map your process into stages

Try it

Paste into any coding agent. It plans the stages before anything gets built.

I write [content type] for [audience]. Here is how I make one today, step by step:
[your current process]

Split this into single-purpose stages, one job each. For every stage, give me: its name, the one question it answers, what it reads, what file it writes, and what it must ignore. Then flag any stage that both creates and judges the same work, and split it in two. Don't write any code yet.

Scaffold the pipeline

Try it

Paste into any coding agent, in an empty folder.

Set up a writing pipeline in this folder with these stages: classify, focus questions, research, draft, story check, critique, hazard check, humanize, AI-tell scan, publish prep.

- One instructions file per stage under agents/, each with a single job and a list of what it must not do.
- Each stage writes a numbered file into drafts/[slug]/ (01-classified.json, 02-research.md, 03-draft.md, and so on). A stage refuses to run if the files it needs from earlier stages are missing.
- Before any stage overwrites a file, copy the old version to drafts/[slug]/versions/.
- Add an AGENTS.md (or whatever file your agent reads) that lists the stages in order and points at each agent file.

Choose model strength per stage: the most capable model you have at high thinking for drafting, a mid-tier model at medium thinking for research, critique and the story check, a fast model at low thinking for classify and publish prep. Run humanize on a different model family from the drafter if you have one. Put these choices in one config file, not in each stage.

Add checkpoints and hard blocks

Try it

Paste into any coding agent, in the folder you scaffolded.

Add control gates to the pipeline in this folder.

Checkpoints (stop and wait for me):
- After focus questions: show me the questions and wait for my answers. Never answer them yourself. My answers are the only source for my personal stories.
- After draft, after critique, after humanize, and before publish: show the output and wait for "continue", "revise [notes]", "restart from [stage]", "skip critique" or "pause".

Hard blocks (I can't wave these through):
- Story check: list every anecdote and number in the draft with its source from my answers or the research. Anything without a source is treated as invented and must be cut or sourced.
- Hazard check: block any passage that could point at my current employer, team or colleagues ([current employer]). It stays blocked until I cut it or confirm it's from a past role.
- AI-tell scan: a script, not a model, checks the humanized draft against my banned-word list ([banned words file]) and fails the stage on a hit.

Save state to disk after every stage so "pause" survives closing the session.

Module 2: Setting Up the Environment

Check your setup

Try it

Paste into any coding agent. It tells you what's missing before you build anything.

I'm about to build a multi-stage writing pipeline in this folder: [folder path]. Before we start, check what I have and tell me what's missing. Don't install anything yet.

1. Can you read and write files in this folder, and run a small script? Show me by creating and running a one-line test script, then delete it.
2. Is this folder under version control? If not, tell me the command to set it up.
3. Which models can I reach from here? List each one with its rough power (most capable, mid-tier, fast and cheap), the thinking levels it supports, and its model family. Tell me whether I have at least two different families.
4. Which instructions file do you read automatically at the root of a folder? If it isn't AGENTS.md, tell me how to make you read AGENTS.md too.

Finish with a short checklist of gaps, most important first.

Create the folder layout

Try it

Paste into any coding agent, in an empty folder.

Create this folder layout for a writing pipeline in the current folder. Make the folders and empty placeholder files only. Don't write any agent instructions yet.

- AGENTS.md at the root (or whatever file you read automatically). For now it holds only the stage order: classify, focus questions, research, draft, story check, critique, hazard check, humanize, AI-tell scan, attribution check, publish prep, ingest. Next to each stage, name the agents/ file it uses and the numbered file it writes.
- config/models.yaml with one entry per stage: model, thinking level, model family. Leave the values as TODO.
- agents/ with one empty .md file per stage, except the AI-tell scan, which is a script.
- voice/ with an empty analysis/ folder inside it.
- scripts/ with empty ai-tell-scan.py and scrub-invisible.py.
- inputs/ and inputs/voice-samples/ for raw material.
- drafts/ and published/, both empty.

Per article, stages will write into drafts/[slug]/ using these names: 01-classified.json, 01b-focus-questions.json, 01b-focus-answers.json, 02-research.md, 02-archive-matches.md, 03-draft.md, 03c-story-check.md, 05-critique.md, 05b-hazard-check.md, 06-humanized.md, 06b-scan-report.txt, 07-attribution-check.md, 10-meta.json, 10-copy-paste-assets.md, plus a versions/ folder. Write that list into AGENTS.md as well, so every stage knows which upstream files it must refuse to run without.

When you're done, print the tree.

Gather your voice samples

Try it

Paste into any coding agent, in the folder you scaffolded.

Help me build the sample set for voice extraction. My raw material is in [where your writing lives].

1. Pick [number of samples] pieces that I wrote myself, without AI help. Spread them across formats ([formats you write in]) and across years if you can. Skip anything co-written or heavily edited by someone else.
2. Copy each one into inputs/voice-samples/ as plain text or markdown, named YYYY-MM-DD-format-short-title.md.
3. If I have recordings or transcripts of me talking ([recordings or transcripts]), put the transcripts in inputs/voice-samples/spoken/. Mark each one as a talk or a conversation, and note how many speakers. Don't correct the transcript. Flag names and terms that look garbled so I can check them against the audio.
4. Write inputs/voice-samples/INDEX.md: one line per file with date, format, word count and where it came from.

Don't analyze my voice yet. That's the next step.

Module 3: Voice Extraction

Structural pass

Try it

Paste into a source-grounded research notebook with your samples loaded, or into any coding agent pointed at your samples folder.

Answer only from the writing samples I've given you ([samples location]). Don't fill gaps with general knowledge about writing. For every claim, quote the line and name the sample it came from. If a pattern shows up in only one sample, label it "single sighting".

Analyze these samples to define my author persona. Ignore the topics. Focus on how I construct my thoughts.

1. Structural fingerprint: do I write in flowing narrative, or lean on frameworks and headings? How long are my paragraphs? Where does the main point usually sit?
2. The "I" factor: how do I put myself in the text? Do I stay an observer, or use first person to back a claim with my own experience? Quote the places where I ground a theory in a past job or a personal rule.
3. Vulnerability: how do I handle mistakes and hard decisions? Emotional language, or flat observation? In my own stories, who turns out to be wrong?
4. Argumentation: do I lead with the conclusion, or build the case first? Do I sort evidence into a named framework before I give a verdict?
5. Openings and endings: how do I usually start a piece, and how do I end one? Count how many of my endings could be pasted onto a different piece unchanged.
6. What's missing: name the structures and tones that never appear in my samples.

Write the answer as markdown with one heading per question.

Forensic pass

Try it

Run after the structural pass, in the same notebook or agent.

Answer only from the writing samples I've given you ([samples location]). For every pattern, quote at least one example and name the sample. Count where I ask you to count. Don't estimate. Label anything seen in only one sample "single sighting".

Do a forensic linguistic analysis of my sentence-level style, so an AI writing agent can match it.

1. Transitions: which phrases do I use to move between ideas? Do I have a stock way of introducing an example or a case study?
2. Verdict cadence: do I follow a long explanatory sentence with a short, blunt verdict? Quote a few pairs.
3. Sentence length: give my typical sentence length in words and the range. How often do I use fragments?
4. Punctuation: count em-dashes, semicolons, parentheses and exclamation marks per 1,000 words. Which ones do I never use? When I use parentheses, what job do they do?
5. Metaphor profile: which domains do I borrow analogies from? List each domain with examples.
6. Citations: how do I bring in research? Do I name the author in the sentence, or tuck the citation at the end?
7. Vocabulary: which words and phrases do I lean on? Do I coin names for patterns? Which common words never appear at all?
8. Uncertainty: how do I say I don't know? Quote it.

Write the answer as markdown with one heading per question.

Spoken pass

Try it

Optional. Paste into the same notebook or agent once your transcripts are loaded.

Answer only from the transcripts I've given you ([transcripts location]). These are recordings of me talking, transcribed automatically, so names and terms may be wrong. Flag anything that looks garbled instead of correcting it.

Compare my speech with my writing samples ([samples location]) and extract:

1. Confirmed signatures: phrases or ideas that show up in more than one recording, in different words. Quote each version.
2. Unrehearsed only: lines that appear in conversations but not in prepared talks.
3. Spoken metaphors: every analogy I use out loud, with a quote.
4. Stories: every anecdote I tell. Label each one SAFE (no link to a current employer or colleague), NEEDS CHECK (might be from a past role, ask me) or BLOCKED (points at my current job or names a colleague).
5. Facts to verify: numbers and claims I state from memory.

Borrow material, not rhythm. Speech runs on in ways writing shouldn't, so don't turn my run-on sentences into style rules.

Write the answer as markdown with one heading per question.

Build the voice files

Try it

Paste into any coding agent, in your pipeline folder, once voice/analysis/ has your pass results.

Read the voice analysis in voice/analysis/ ([analysis files]) and turn it into voice files that the agents in this pipeline can include. Write each file under voice/:

- style-guide.md: my persona and structural habits, in plain sentences.
- signature-patterns.md: each recurring move I make, with a name, a one-line pattern, a real example quoted from my samples and a usage cap (for example, once per piece).
- phrases.md: phrases and coined terms that are mine. Add a note to vary the wording and never repeat one verbatim across pieces.
- vocabulary-rules.md: required substitutions (never say X, say Y) and a banned list: words that never appear in my samples plus AI-sounding words. Also write the banned words, one per line, to voice/banned-words.txt for the scan script.
- anti-ai-patterns.md: phrases to cut on sight, plus punctuation and rhythm targets stated as numbers a script could check.
- authorship-rules.md: behavioral rules, such as how I handle numbers and who turns out to be wrong in my own stories. Give every rule a one-line Test a reviewer can apply to a draft.
- spoken-source-material.md: only if voice/analysis/ has a spoken pass. Confirmed signatures and a metaphor bank first. Then a story bank with every story labeled SAFE, NEEDS CHECK or BLOCKED.

Rules for you:
- Every rule points at evidence: a quote and the sample it came from. No evidence, no rule.
- Don't invent examples. Every example is a real line of mine.
- Numbers come from counting my samples, not from estimates.
- Anything labeled "single sighting" goes in an Unconfirmed section at the end of its file, not in the rules.
- One concern per file. If a rule fits two files, put it in one and reference it from the other.
- No em-dashes or semicolons anywhere in the files.

When you're done, list every rule you weren't sure about so I can confirm or delete it.

Wire the voice files into your agents

Try it

Run after the agent files exist. Safe to rerun whenever you add a voice file.

Wire the voice files in voice/ into the agent files in agents/.

- At the top of each agent file, add an "Include" list naming the voice files that agent reads before it starts. Use this map, and tell me if my agents need a different one:
  writer: style-guide, signature-patterns, phrases, vocabulary-rules
  critic: every voice file
  story check: authorship-rules
  hazard check: spoken-source-material, if it exists
  humanizer: anti-ai-patterns, vocabulary-rules, plus signature-patterns as a "do not remove" list
- Reference the files by path. Don't copy rule text into any agent file. A rule that lives in two places drifts, and the weaker copy wins.
- Point scripts/ai-tell-scan.py at voice/banned-words.txt.
- List the voice files in AGENTS.md under a "Voice files" heading.

Show me the change to each agent file before you save it.

Test the voice files

Try it

Paste into any coding agent. Keep the held-out piece outside inputs/voice-samples/.

Test my voice files against writing they weren't built from.

1. Take [held-out piece], a piece of mine that is not in inputs/voice-samples/.
2. Check it against every rule in the voice/ files. For each rule, report PASS or FAIL with the line that decided it.
3. If scripts/ai-tell-scan.py is built yet, run it on the piece and report the score.
4. List every rule my own writing fails. Those rules are wrong or too strict. Suggest a fix for each one, and don't change any file until I approve.

Module 4: The AGENTS.md Orchestration File

AGENTS.md template

Template

Copy into AGENTS.md in your project root, or whatever file your agent reads. Fill in the bracketed parts. Leave [slug] and [topic] alone, the agent fills those per article.

# [publication name] writing pipeline

This file is the source of truth for how this pipeline runs. Any other instructions file in this folder only points here. Change the rules in this file, nowhere else.

## Voice

Read voice/voice.md before any stage that writes or edits prose.
- Tone: [your tone]
- Audience: [your audience]
- Never: [things you never do]

## Running the pipeline

When I say "run the pipeline on [topic]", pick a short slug for the piece and run the stages below in order. Every stage has its own instructions file in agents/. Read that file before the stage runs and do only what it says.

Each stage writes one numbered file into drafts/[slug]/. Before a stage runs, check that every file on its "Needs" line exists. If one is missing, stop and tell me which one. Never rebuild a missing file from memory or from this chat.

1. Classify. agents/content-classifier.md. Needs: my input. Writes: 01-classified.json
2. Focus questions. agents/focus-questions.md. Needs: 01-classified.json. Writes: 01b-focus-questions.json, then 01b-focus-answers.json with my answers word for word
3. Research. agents/content-researcher.md. Needs: 01-classified.json, 01b-focus-answers.json. Searches the web and [your archive folder]. Writes: 02-research.md
4. Draft. agents/content-writer.md. Needs: 01-classified.json, 02-research.md. Writes: 03-draft.md
4b. Image prompts. agents/image-prompter.md. Needs: 03-draft.md. Writes: 04-image-prompts.md
5. Story check. agents/story-check.md. Needs: 01b-focus-answers.json, 02-research.md, 03-draft.md. Writes: 03c-story-check.md
6. Critique. agents/content-reviewer.md. Needs: 03-draft.md, 03c-story-check.md. Writes: 05-critique.md
7. Hazard check. agents/hazard-check.md. Needs: 03-draft.md, 05-critique.md. Writes: 05b-hazard-check.md
8. Humanize. agents/content-humanizer.md. Needs: 03-draft.md, 05-critique.md, 05b-hazard-check.md. Writes: 06-humanized.md
9. AI-tell scan. A script, not a model: scripts/ai-tell-scan.py. Needs: 06-humanized.md. Writes: 06b-scan-report.txt
10. Attribution check. First step of agents/newsletter-publisher.md. Needs: 06-humanized.md. Writes: 07-attribution-check.md
11. Publish prep. agents/newsletter-publisher.md. Needs: 06-humanized.md, 07-attribution-check.md. Writes: 10-meta.json, 10-copy-paste-assets.md
12. Ingest. After I say "published", copy the final article into [your archive folder] so research can find it next time.

Before any stage overwrites a file, copy the old version to drafts/[slug]/versions/.

Which model runs which stage lives in config/models.yaml. Don't choose a model yourself.

## Checkpoints (stop and wait for me)

Stop at each of these, show me what it lists, and wait for a gate command:
- After focus questions: show the questions. Wait for my answers. Never answer them yourself. My answers are the only source for my own stories.
- After story check: show 03-draft.md and 03c-story-check.md together.
- After critique: run the hazard check first. Show 05-critique.md only once it has passed.
- After the AI-tell scan: show what humanize changed and the scan score.
- After publish prep: show the package. Wait for "published" before ingest.

Silence is not approval. A question from me is not approval either. Only a gate command moves the pipeline forward.

## Hard blocks (I can't wave these through)

These stop the pipeline even if I say "continue":
- Missing upstream file: stop and name the file.
- Story check: any anecdote or number with no source in my answers or the research gets cut or sourced before critique runs.
- Hazard check: if any passage could point at [current employer], my team or my colleagues, show me only the flagged passage and halt. Don't show the draft or the critique until I cut it or confirm in writing that it comes from a past role.
- AI-tell scan: if the script fails, send the draft back to humanize. After three failed passes, stop and show me the findings.

## Gate commands

- "continue" (or "looks good", "proceed"): run the next stage
- "revise [notes]": apply my notes, show the result again, stay at this checkpoint
- "restart from [stage]": rerun that stage and every stage after it
- "skip critique": jump straight to publish prep. The hazard check still runs first.
- "pause": stop here. Every stage is already on disk. Next session, read drafts/[slug]/ to see where we are.

## Folders

drafts/[slug]/            numbered stage files, plus versions/
published/YYYY-MM-DD-[slug]/   final article, metadata, social copy
agents/                   one instructions file per stage
config/models.yaml        model and thinking level per stage
voice/                    voice guide and banned-word list
scripts/ai-tell-scan.py           the AI-tell scanner

Check the wiring before the first run

Try it

Paste into any coding agent, in the folder with your AGENTS.md.

There is an AGENTS.md in this folder that defines a writing pipeline. Don't run it yet. Check it.

1. For every stage, confirm its instructions file exists under agents/. List the missing ones and create a stub for each with one job and a "must not do" list.
2. Walk the stages in order. For each "Needs" file, confirm an earlier stage writes it. Flag any stage that needs a file nobody writes.
3. List every checkpoint and every hard block back to me in your own words, so I can see you read them.
4. Tell me the gate commands you will accept at a checkpoint, and what you will do if I reply with anything else.

Stop after step 4 and wait for me.

Checkpoint drill

Try it

Paste into any coding agent, in your pipeline folder. Reply with a question at each stop instead of a gate command and see whether it waits.

Run the pipeline in AGENTS.md on this throwaway topic: [test topic]. Use the slug test-run so nothing real gets touched.

I'm testing the checkpoints, so follow these rules strictly:
- At every checkpoint, stop and wait. Replying to my question is not the same as continuing.
- If I say anything that isn't a gate command, answer it and then stay at the same checkpoint.
- If a hard block trips, say which one and what would clear it. Don't offer to skip it.

At each stop, end with one line: the stage you just finished and the file it wrote.

Module 5: Make It Work in Whatever Agent You Use

Ask your agent what it supports

Try it

Paste into the coding agent you want to use. Then check its answers against the docs.

I'm setting up a writing pipeline whose rules live in AGENTS.md and agents/*.md in this folder. Before I change anything, answer these about yourself:

1. Which instructions file names do you load automatically at the start of a session? Do you read AGENTS.md?
2. Can I define my own commands (slash commands or workflow files)? If so, where do they live and what format do they need?
3. Can I define separate agents, each with its own instructions file? If so, where, and can each one set its own model?
4. Do you read files from subfolders like agents/ on your own, or only when told to?
5. Can you stop mid-task and wait for my reply, or do you tend to finish the whole job in one go?

Point me to the documentation for each answer. If you aren't sure, say "not sure". Don't guess.

Consolidate into one source of truth

Try it

Paste into any coding agent, in your pipeline folder. Commit first so you can roll back.

Make AGENTS.md and agents/*.md the single source of truth for the writing pipeline in this folder.

1. Find every instructions file, command file, rules file and agent definition in this folder, including hidden folders. List them before you change anything.
2. Move every rule, stage, checkpoint and gate command you find into AGENTS.md or the matching agents/ file. Where two files disagree, show me both versions and ask which one wins.
3. Replace each tool-specific file with a short shim that points at AGENTS.md or the matching agents/ file. A shim holds no rules of its own.
4. Show me the final file list with one line per file saying whether it's a source or a shim.

Don't delete anything until I approve the list from step 1.

Instructions shim

Template

Save under the file name your agent loads at session start.

Read AGENTS.md in this folder and follow it. It is the source of truth for this project.

Don't add rules to this file. If this file and AGENTS.md ever disagree, AGENTS.md wins.

Command shim

Template

Save as a command or workflow file in the folder your agent uses for them.

Run the writing pipeline defined in AGENTS.md on this topic: [topic]

Read AGENTS.md before you start. Stop at every checkpoint it lists and wait for a gate command.

Per-agent shim

Template

One per stage, in the folder your agent uses for agent definitions.

Read agents/[stage file] and do exactly what it says. That file is the source of truth for this stage.

Check config/models.yaml for this stage's model and thinking level. If this header has to name a model, copy that value and nothing else.

Wire up your agent with shims

Try it

Paste into the coding agent you're setting up, in your pipeline folder.

My pipeline rules live in AGENTS.md and agents/*.md. Wire them into [your agent] using thin shims only.

- If you don't load AGENTS.md automatically, create the instructions file you do load, containing only: "Read AGENTS.md in this folder and follow it. It is the source of truth."
- If you support custom commands, create one called [command name] that runs the pipeline in AGENTS.md on a topic I pass in.
- If you support per-agent files, create one per file in agents/. Each holds only the header your format needs and one line telling it to read its agents/ file.
- If you support none of these, change nothing and tell me what to type at the start of a session instead.

No shim may copy a rule out of AGENTS.md or agents/. Show me every file you created.

models.yaml

Template

Fill in the four roles with models you have. Your tool may want a different format. Keep the idea: roles in the stages, names in one file.

# config/models.yaml
# The only place model names live. Stages ask for a role, never a model.

models:
  top: [most capable model]
  mid: [mid-tier model]
  fast: [fast cheap model]
  rival: [mid-tier model from a different family]

stages:
  classify:          { model: fast,  thinking: low }
  focus_questions:   { model: mid,   thinking: medium }
  research:          { model: rival, thinking: medium }
  draft:             { model: top,   thinking: high }
  story_check:       { model: top,   thinking: high }
  critique:          { model: rival, thinking: medium }
  hazard_check:      { model: top,   thinking: medium }
  humanize:          { model: rival, thinking: medium }
  ai_tell_scan:      { script: scripts/ai-tell-scan.py }
  attribution_check: { model: fast,  thinking: low }
  publish_prep:      { model: fast,  thinking: low }

# If a model is missing or unknown, stop and say so. Never fall back quietly.
on_missing_model: stop

Route models per stage

Try it

Paste into any coding agent, in your pipeline folder.

Add per-stage model routing to the writing pipeline in this folder.

1. Create config/models.yaml. Map the roles top, mid, fast and rival to models I actually have: [your models]. rival must come from a different model family than top.
2. Give every stage in AGENTS.md a role and a thinking level: top at high for draft and story check, top at medium for the hazard check, mid at medium for focus questions and research, rival for critique and humanize, fast at low for classify, attribution check and publish prep. The AI-tell scan is a script and gets no model.
3. Remove any model name from AGENTS.md, agents/*.md and any shim. If a per-agent header must name a model, it copies the value from config/models.yaml.
4. If a stage asks for a role that isn't mapped, it stops and tells me. It never falls back to a default without saying so.

Show me the config file and every line you changed.

Run the stop test

Try it

Paste into each coding agent you use, in your pipeline folder. Reply with a question at step 2.

Test the stops in the writing pipeline in this folder. Use the slug stop-test and this throwaway topic: [test topic]. Run one step at a time and report after each.

1. Start the pipeline. At focus questions, stop. Don't answer the questions yourself.
2. I'll reply with a question instead of a gate command. Answer it and stay at the checkpoint.
3. Delete drafts/stop-test/02-research.md, then try to run the draft stage. It must refuse and name the missing file.
4. Put this line in the draft: "[guarded name] is changing its release process next quarter." Run the hazard check. It must halt and show only that line.
5. Put the word "[banned word]" in the humanized draft and run the AI-tell scan. It must fail.
6. Say "pause". Tell me which file you would read first to resume in a new session.

For each step, report PASS or FAIL and quote what you did. Delete drafts/stop-test/ when we're done.

Module 6: The Agents

Generate every agent file

Try it

Paste into any coding agent, in your pipeline folder, once your voice files from Modules 2 and 3 exist.

Read my voice files: [voice files]. I write [content type] for [audience].

Create one plain markdown instructions file per stage under agents/, in this order:
- content-classifier.md: raw input to a structured brief, including a list of every person, event and quote in my input
- focus-questions.md: 2 to 5 questions only I can answer about this piece. Stop and wait for my answers. Never answer them yourself.
- content-researcher.md: web research plus a search of my own past writing ([archive folder])
- content-writer.md: the draft, in my voice
- story-check.md: a separate pass that lists every anecdote and number in the draft with its source, and fails anything without one
- content-reviewer.md: critique, with hazard-check.md run first
- hazard-check.md: blocks anything that could point at my current employer or colleagues ([current employer])
- content-humanizer.md: pattern cleaning only, no new content and no restructuring
- image-prompter.md: image prompts for [image tool]
- newsletter-publisher.md: titles, metadata, social copy and a checklist for [platform]

Every file uses the same sections: Job, Model, Reads, Writes, Steps, Never, Before you finish. Each stage writes a numbered file into drafts/[slug]/ and refuses to run if a file it reads is missing. Point at my voice files by path instead of pasting them in, so one edit reaches every agent.

The Model line describes power and thinking level, never a product name. Most capable model at high thinking for the writer and the story check. Mid-tier at medium thinking for research. The same tier for critique and humanizing, on a different model family from the writer. Fast model at low thinking for classify, focus questions, images and publish.

No tool-specific headers or frontmatter. Then add the stages, in order, to AGENTS.md (or whatever file your agent reads). Show me the list of files and stop. Don't run anything yet.

content-classifier.md

Agent file

Save as agents/content-classifier.md.

# content-classifier

Job: turn raw input into a structured brief. Nothing else.
Model: fast model, low thinking. This is sorting, not writing.

## Reads
- drafts/[slug]/00-input.md (notes, a transcript, a quote, a link)

## Writes
- drafts/[slug]/01-classified.json

## Steps
1. Source references first. List every person, event, organization and direct quote in the input, word for word, under sourceReferences. Later stages protect these, and the story check cites them. If the input has none, write an empty list and say so.
2. Content type: observation, reaction, quote analysis, data point, contrarian take, how-to or story.
3. Core insight in one or two sentences. What is the non-obvious truth, and why would [audience] stop scrolling for it?
4. Four angles: contrarian ("most people think X, actually Y"), data-backed, how-to, and a story angle only if the input contains a story.
5. Pick one angle. One sentence on why.
6. Five to eight specific research queries for the researcher.
7. Depth: quick hit (400-600 words), standard (800-1200) or deep dive (1500+).
8. A working title that names a tension.
9. Set includePromptExamples to true if the piece is about prompting or AI tools.

## Never
- Never add a source reference that isn't in the input.
- Never write article prose or run research. Queries only.

## Before you finish
- Re-read the input and confirm every name in sourceReferences appears in it.

Classify one idea

Try it

Paste into any coding agent, in your pipeline folder.

Save the agent file above as agents/content-classifier.md. Then run it on this input:
[raw idea]

Show me 01-classified.json. List the source references next to the input lines they came from, so I can check none were made up.

content-researcher.md

Agent file

Save as agents/content-researcher.md.

# content-researcher

Job: build the evidence base for the classified brief.
Model: mid-tier model, medium thinking, with web search.

## Reads
- drafts/[slug]/01-classified.json
- drafts/[slug]/01b-focus-answers.json (my answers. Refuse to run without them.)
- [archive folder] (my published writing)

## Writes
- drafts/[slug]/02-research.md
- drafts/[slug]/02-archive-matches.md

## Steps
1. The core insight in 01-classified.json is the thesis. Copy it verbatim. You support it, you don't replace it.
2. Run every query in the brief. You may add queries, never drop one.
3. Find recent statistics (last two years first), named company examples with real numbers, credible counterarguments and expert quotes with credentials.
4. Cross-check each key claim against a second source. Every claim gets a URL.
5. Search my archive for past pieces on this topic. Put matches in 02-archive-matches.md under the header "voice and angles only, never a source for a story".
6. If the piece is a story, research gives it context. The story stays the main event.

## Never
- Never write an entry labeled "author's own example" or "from the author". My stories come from my input and my focus answers, nowhere else.
- Never research a replacement for a name or event in sourceReferences. Research around it.
- Never cite anything on my off-limits list: [off-limits sources].

## Before you finish
- Flag any claim with one source. Flag the brief if you found nothing from the last two years.

Run the research stage

Try it

Paste into any coding agent, after you've answered the focus questions.

Save the agent file above as agents/content-researcher.md. Run it on drafts/[slug]/ once my focus answers are in.

When it finishes, show me the three claims with the weakest sourcing and the archive matches it found. Don't start the draft.

content-writer.md

Agent file

Save as agents/content-writer.md.

# content-writer

Job: turn the research and my focus answers into a draft in my voice.
Model: the most capable model you have, high thinking.

## Reads
- voice/style-guide.md (read this first)
- [banned words file]
- drafts/[slug]/01-classified.json
- drafts/[slug]/01b-focus-answers.json
- drafts/[slug]/02-research.md
- drafts/[slug]/02-archive-matches.md (voice and angles only)

## Writes
- drafts/[slug]/03-draft.md

## Steps
1. Structure: hook, stakes, insight with evidence, application, takeaway.
2. Open with a claim, a number or a real moment from my input. Never with a bold thesis paragraph.
3. Use the evidence from research with its source named in the sentence.
4. If includePromptExamples is true, add one to three fenced prompt blocks in the application section.
5. End with something that would not work on any other post.

## Story integrity
- A story appears only if I supplied it, in 00-input.md or my focus answers. If I supplied none, the post has no story. A story-free post is correct.
- A research entry that says "author's own example" does not count as me supplying it.
- Every number is mine or a named source's. If you can't trace it, cut it.
- Don't embellish a true story. No dialogue, props or setting I didn't give you.

## Never
- Never grade your own stories. The story check does that, separately.
- Never use a word from the banned list.

story-check.md

Agent file

Save as agents/story-check.md.

# story-check

Job: verify the draft, adversarially. You did not write it and have no stake in it sounding good.
Model: the most capable model you have, high thinking, in a fresh session that never saw the drafting conversation.

## Reads
- drafts/[slug]/03-draft.md
- drafts/[slug]/00-input.md
- drafts/[slug]/01-classified.json (sourceReferences)
- drafts/[slug]/01b-focus-answers.json
- drafts/[slug]/02-research.md
- drafts/[slug]/02-archive-matches.md (context only, never a valid source)

## Writes
- drafts/[slug]/03c-story-check.md

## Steps
1. Find every anecdote, scene and first-person claim, including the hook.
2. Split each one into its claims: the core event, then every detail on top of it (timing, setting, dialogue, what someone thought).
3. Cite the exact line in 00-input.md, the focus answers or 02-research.md that supports the core event. Each detail needs its own citation.
4. Do the same for every number.
5. Verdict per item: PASS, FAIL (uncited, or supported only by archive matches) or TROPE-REUSE (a whole scene lifted from my past writing).

## Output
## Story Check
**Item 1: short name**
- Claim:
- Source: exact citation, or UNCITED
- Verdict:
- Fix: one sentence, only for FAIL or TROPE-REUSE

If the draft has no anecdotes, write "Story check: no anecdotes used."

## Never
- "Feels real" and "specific and detailed" are not sources. Specificity is what good fabrication looks like.
- Never suggest adding a story.

Any FAIL blocks the critique stage until the item is cut or I supply a source.

Draft, then check the stories

Try it

Paste into any coding agent, after research.

Save the agent file above as agents/content-writer.md, with [banned words file] pointing at my list. Run it on drafts/[slug]/.

Then, in a fresh session, run agents/story-check.md on the draft. Show me the draft and the story check side by side.

content-reviewer.md

Agent file

Save as agents/content-reviewer.md.

# content-reviewer

Job: critique the draft before it goes anywhere near a reader.
Model: mid-tier model, medium thinking, from a different model family than the writer.

## Reads
- drafts/[slug]/03-draft.md
- drafts/[slug]/03c-story-check.md (refuse to run if it shows any FAIL)
- drafts/[slug]/01-classified.json
- drafts/[slug]/02-research.md
- voice/style-guide.md

## Writes
- drafts/[slug]/05-critique.md

## Steps
1. Write your notes to 05-critique.md but show me nothing yet. agents/hazard-check.md runs on the draft next, and I only see the critique once it passes. If it trips: no critique, no approval.
2. Voice: hedging, and generic lines that could sit in anyone's article. Quote the line and give a rewrite.
3. Claims: list every factual claim, mark the ones without evidence and any that contradict the research.
4. Hook: weak, moderate, strong or compelling. Rewrite it if below strong.
5. Throughline: does the angle chosen in the brief hold to the end, or fade after the opening?
6. Actionability: would a reader know what to do on Monday?
7. The skeptical expert: read it as someone with ten years in the field. Where would they roll their eyes?

## Output
CRITICAL ISSUES (must fix)
VOICE ADJUSTMENTS (current line, suggested line)
UNSUPPORTED CLAIMS (claim, evidence needed)
SKEPTIC NOTES

## Never
- Never rewrite the draft. Notes only.
- Never suggest inventing a story or a failure moment to make the piece land.

hazard-check.md

Agent file

Save as agents/hazard-check.md.

# hazard-check

Job: protect my career. Block anything that could point at my current employer or the people I work with.
Model: same as the reviewer. It runs first inside the critique stage.

## Reads
- drafts/[slug]/03-draft.md
- [approved exceptions file] (past-role stories I have cleared in writing)

## Names to guard
[current employer]

## The rule
If you cannot tell for certain that a passage refers to a past role or a general industry pattern, treat it as current and block it. No sanitized rewrite. The passage gets removed, or I confirm in writing that it is from a past role at a different organization.

## Four checks
1. Identifiable numbers or groups: team sizes, counts or group names that could come from my current workplace.
2. Character attacks: laziness or hypocrisy pinned on anyone I work with now. Critique of systems passes.
3. The villain test: an anecdote where the person in the wrong could be read as a current coworker, even unnamed. If I'm the one who was wrong, it passes.
4. Live situations: anything that reads as an ongoing initiative or struggle at my current job.

## If anything trips
Write this and nothing else:
HAZARD: this content cannot be published.
Triggered by: the rule name and the passage, quoted exactly
Why: one sentence
Options: remove the passage, or confirm in writing it is from a past role.

Install and test the hazard check

Try it

Paste into any coding agent, in your pipeline folder.

Save both files above as agents/content-reviewer.md and agents/hazard-check.md. Fill in the names to guard ([current employer]) and create [approved exceptions file], empty for now.

Then test the hazard check before trusting it: write a short paragraph that complains about "my team" at [current employer] and run agents/hazard-check.md on it. It should block. Then run it on a paragraph about a mistake I made years ago at a different company. It should pass. Show me both results.

content-humanizer.md

Agent file

Save as agents/content-humanizer.md.

# content-humanizer

Job: strip AI writing patterns from the reviewed draft. Pattern cleaning only.
Model: mid-tier model, medium thinking, from a different model family than the writer. A model can't hear its own accent.

## Reads
- drafts/[slug]/03-draft.md (with the critique applied)
- [banned words file]
- voice/style-guide.md (the "keep" list: my signature phrases)

## Writes
- drafts/[slug]/06-humanized.md
- drafts/[slug]/06-humanized-notes.md (before, after, reason for each change)

## Patterns to clean
- Banned words and phrases from my list.
- Em-dashes, en-dashes and semicolons. Replace with a period, comma, colon or parentheses. Zero allowed.
- Negate-then-correct contrasts, where a sentence denies one thing only to assert another.
- Explanation crutches that announce the next sentence instead of saying it.
- Throat-clearing openers that delay the point. Keep the exact phrases in the banned list, not here.
- Triads: three parallel items or clauses stacked for rhythm. Use two, or four.
- A summary sentence at the end of a paragraph. Delete it.
- Three sentences in a row of similar length. Split or join one.
- Three sentences in a section that start with the same word.

## Never
- Never add content: no new stories, examples, numbers or claims.
- Never restructure. Sections, order and argument stay as they are.
- Never change a number, a name, a quote or a link.
- Never cut my parenthetical asides to hit a rhythm target. They are part of my voice.
- Keep length within 10% of the input.

## Before you finish
- Count em-dashes and en-dashes with a script, not by eye. The count must be 0.
- Compare every number against 03-draft.md. Any change is a bug. Revert it.
- Count parenthetical asides in both files. The humanized file has at least one, and loses no more than one.

Build the AI-tell scan

Try it

Paste into any coding agent, in your pipeline folder.

Add an AI-tell scan to the pipeline in this folder. It runs after the humanizer, and it is a script, not a model.

1. scripts/scrub-invisible.py: strip invisible characters from drafts/[slug]/06-humanized.md (zero-width spaces and direction marks). Normalize the text, keep a .bak, and print how many characters it removed.
2. scripts/ai-tell-scan.py: read the same file and report findings with line numbers. Check em-dashes, en-dashes and semicolons, every phrase in [banned words file], negate-then-correct contrasts, and runs of sentences with near-identical length. Give each finding a weight, add them into one score and print the score with the top fixes first.
3. Exit non-zero if the score is above [threshold].

Wire both into the pipeline: scrub, then scan. On a fail, send the draft back to the humanizer with the findings, up to three times. After three fails, stop and show me the findings instead of forcing it through.

image-prompter.md

Agent file

Save as agents/image-prompter.md.

# image-prompter

Job: write image prompts for the article's visuals, in one consistent brand style.
Model: fast model, low thinking.

## Reads
- drafts/[slug]/03-draft.md
- drafts/[slug]/01-classified.json

## Writes
- drafts/[slug]/04-image-prompts.md

## Brand rules
- Style: [visual style]
- Mood: [brand mood]
- Palette: [colors]
- Avoid: [anti-patterns]
- Tool: [image tool], using its prompt syntax and aspect ratio settings

## Steps
For each image, decide the purpose, aspect ratio, audience and one concrete subject from the article. Then write the prompt.

Produce:
1. Newsletter hero, [hero ratio]. Two or three options, each with a short concept name.
2. Social teaser, [social ratio]. Two or three options, high contrast, readable at thumbnail size.
3. Supporting images only if a section needs one.

## Never
- Never put text in an image unless the tool renders text well.
- Never use a concept the article doesn't contain.

Set your brand rules from examples

Try it

Paste into any coding agent, with a few images you like in the folder.

Save the agent file above as agents/image-prompter.md. Fill the brand rules by looking at these images I like: [example images]. Name the visual patterns they share and write them into the file.

Then run it on drafts/[slug]/ and show me the hero options.

newsletter-publisher.md

Agent file

Save as agents/newsletter-publisher.md.

# newsletter-publisher

Job: package the finished article for [platform]. Formatting, not writing.
Model: fast model, low thinking.

## Reads
- drafts/[slug]/06-humanized.md (refuse to run if the AI-tell scan hasn't passed)
- drafts/[slug]/04-image-prompts.md
- [content strategy file]
- [resource links file]

## Writes
- drafts/[slug]/07-attribution-check.md
- published/[date]-[slug]/article.md
- published/[date]-[slug]/meta.json
- published/[date]-[slug]/social.md
- published/[date]-[slug]/checklist.txt

## Steps
1. Attribution check: compare the humanized draft against my content strategy. Did humanizing sand off a specific example or name the strategy wants? Log it in 07-attribution-check.md. This one logs, it doesn't block.
2. Title (50 to 60 characters) with two alternatives, and a subtitle.
3. Preview text: the first 160 characters a reader sees. Front-load the hook.
4. Tags and alt text for every image.
5. Closing links: one or two resources from my links file that match the topic. Check each URL is in the file.
6. Social post for [social platform], in my voice, with the link in the first comment, not the body.
7. meta.json with title, slug, date, tags, word count and source files.
8. Checklist of what I still do by hand before hitting publish.
9. Move every numbered file from drafts/[slug]/ into published/[date]-[slug]/.

## Never
- Never change the article body.

Publish and remember

Try it

Paste into any coding agent, once the AI-tell scan passes.

Save the agent file above as agents/newsletter-publisher.md. Run it on drafts/[slug]/.

After it finishes, add one last stage: copy the published article into my knowledge base ([archive folder]) so the next research run can find it. Then show me the checklist.

Module 7: Writing Your First Article

Preflight check

Try it

Paste into any coding agent, in your pipeline folder. It only reports, it changes nothing.

Check this folder against my writing pipeline setup before I run my first article. Report each item below as present or missing, with the path you checked. Don't create or fix anything yet.

- Folders: agents/, templates/, drafts/, published/
- A voice guide at [voice guide path]
- A banned-word list at [banned words file] and a script that scans a draft against it
- AGENTS.md (or whatever file your agent reads) listing the stages in order: classify, focus questions, research, draft, story check, critique, hazard check, humanize, AI-tell scan, attribution check, publish prep, ingest
- One instructions file per stage under agents/
- One config file that says which model and thinking level each stage uses, with humanize on a different model family from draft
- A place the research stage can search my past published writing

For anything missing, tell me which module of the guide covers it.

Run your first article

Try it

Paste into any coding agent, in your pipeline folder.

Run the writing pipeline in this folder on the idea below. Follow AGENTS.md (or whatever file your agent reads) and the stage files in agents/.

Idea: [raw idea or notes]
Slug: [slug]

Rules for this run:
- After classify, write the focus questions to drafts/[slug]/01b-focus-questions.json, show them to me and stop. Wait for my answers. Never answer them yourself, not even as a placeholder.
- Stop at every checkpoint and wait for "continue", "revise [notes]", "restart from [stage]", "skip critique" or "pause". Silence is not approval.
- At the story check, show me the verdict for every anecdote and number before anything else.
- If the hazard check trips, show me the rule and the exact passage, then stop. Don't rewrite around it.
- After humanize, run the AI-tell scan script and show me the score next to the diff.

Rerun one stage

Try it

Paste into any coding agent, in your pipeline folder.

Run only the [stage] stage of the pipeline in this folder, on drafts/[slug]/.

- Read the stage's instructions from agents/ and the files it needs from earlier stages. If any of those files are missing, stop and tell me which ones. Don't create placeholders.
- Copy any file you're about to overwrite into drafts/[slug]/versions/ first.
- Write the stage's numbered output file, show me a short summary and stop. Don't run the next stage.

Module 8: Writing Authentically

Find your own tells

Try it

Paste into any coding agent. You need a few of your own pieces and a few AI drafts you rejected.

I want a list of the AI patterns that don't belong in my writing. Not a generic list. Mine.

1. Read my writing samples in [samples folder].
2. Read the AI drafts in [AI drafts folder]. These were written for me and didn't sound like me.
3. List the patterns that show up in the AI drafts and rarely or never in my samples. Check word choice, sentence openers, punctuation, paragraph endings, list lengths and how feelings get described.
4. For each pattern, count how often it appears in each set and quote one example from the AI drafts.

Write the result to voice/anti-ai-patterns.md, one pattern per entry, each with a test a script or a reviewer could run. Skip any pattern my own samples use often, even if it's a known AI tell. Those are part of my voice.

Measure your own rhythm

Try it

Paste into any coding agent. Your targets come from your writing, not mine.

Write a small script, scripts/rhythm.py, that reads a markdown file and reports:
- For each paragraph: the shortest and longest sentence in words, and whether three sentences in a row are within 3 words of each other
- Across the whole file: the count of parenthetical asides of two or more words, and the count of em-dashes, en-dashes and semicolons

Run it on every file in [samples folder] and show me the averages. Then suggest targets for my drafts based on my own numbers, not on general advice. Add the targets to voice/style-guide.md under "Rhythm".

Draft your authorship rules

Try it

Paste into any coding agent. Bring your own writing and your old corrections.

Read my writing samples in [samples folder] and my corrections in [corrections file] (the notes where I told a draft "that's not me").

Write voice/authorship-rules.md. Each rule names one behavior I actually show, quotes two places it appears in my samples, and ends with a test a reviewer can run on a new draft in under a minute. Cover these, and skip any my samples contradict:
- Where my numbers come from
- What I claim to see or do regularly, and whether I could name the occasion
- Who is wrong in my own stories
- How I admit I don't know something
- How my endings work, and whether one could be pasted onto a different piece

Don't invent rules my samples don't support. Mark any rule with fewer than two examples as a guess. Then add the file to the instructions for the draft, story check and humanize stages.

Module 9: Troubleshooting

Stop auto-filled focus answers

Try it

Paste into any coding agent, in your pipeline folder.

Check drafts/[slug]/01b-focus-answers.json. For each answer, tell me whether I typed it or the pipeline generated it. If you can't tell, say so.

Then change the focus stage so it never answers a free-text question itself. Multiple-choice questions can get a default, marked as auto-filled. For free-text questions, the stage writes the questions, stops and waits for me. Record who answered each question in drafts/[slug]/01b-focus-provenance.json, and make the draft stage label any auto-filled answer as not mine.

Resolve story check failures

Try it

Paste into any coding agent, in your pipeline folder.

Read drafts/[slug]/03c-story-check.md. For every anecdote marked FAIL, show me the passage from 03-draft.md and ask me one question: did this happen? Wait for my answer on each one.

- If I say no, cut the passage and rewrite the paragraph around the gap. Don't invent a replacement.
- If I say yes, add my one-line account to 01b-focus-answers.json as the source, then rerun the story check.

Never resolve a FAIL by softening the wording.

Bring the scanner score down

Try it

Paste into any coding agent, in your pipeline folder.

Run [scanner script] on drafts/[slug]/06-humanized.md and read the priority fixes. Fix only the highest-weight category, save and scan again. Stop after three passes or when the score is 15 or less, whichever comes first.

Don't change any number, name or claim. Don't turn a parenthetical aside into a fragment to fix rhythm. If the score is still above 15 after three passes, stop and show me the remaining findings instead of forcing it.

Undo structural rewrites

Try it

Paste into any coding agent, in your pipeline folder.

Compare drafts/[slug]/03-draft.md with drafts/[slug]/06-humanized.md. List every change that goes beyond word choice and rhythm: moved or merged sections, cut or added paragraphs, a new hook or ending, any changed number or name.

Restore each of those from the draft. Then add a "must not change" list to agents/content-humanizer.md (or whatever file the humanize stage reads): structure, section order, facts, numbers, names and links. Its only job is pattern cleaning.

Make checkpoints hard stops

Try it

Paste into any coding agent, in your pipeline folder.

The pipeline in this folder ran past a checkpoint without waiting for me. Find where each checkpoint is defined in AGENTS.md (or whatever file your agent reads) and in agents/.

Rewrite each one as a hard stop: write the stage output to drafts/[slug]/, show me a short summary and the file path, then end your turn. Proceed only on "continue", "revise [notes]", "restart from [stage]", "skip critique" or "pause". Silence, or a question from me, is not approval.

If one long instructions file runs every stage, split it so each stage runs as its own step.

Work through a hazard block

Try it

Paste into any coding agent, in your pipeline folder.

The hazard check in drafts/[slug]/ is blocking. Show me each triggered rule and the exact passage, one at a time, and ask whether to cut it or whether it's from a past role at a different organization.

- Cut: remove the passage and rerun the hazard check.
- Past role: write my confirmation, word for word, to drafts/[slug]/hazard-confirmations.md and rerun.

Don't rephrase a blocked passage to get it past the check. A reworded story about my current job is still a story about my current job.

Find the missing upstream file

Try it

Paste into any coding agent, in your pipeline folder.

A stage in this pipeline refused to run because upstream files are missing. List drafts/[slug]/, then tell me which stage should have written each missing file and why it didn't: it failed, it never ran, or it wrote to a different slug.

Rerun from the earliest stage with a missing file. Don't create placeholder files to get past the check, and don't remove the check.

Split the model families

Try it

Paste into any coding agent, in your pipeline folder.

Open the model config for this pipeline. Tell me which model family runs the draft stage and which runs humanize and critique.

If humanize uses the same family as draft, switch it to a different family I have access to: [models I can use]. Do the same for critique. Keep the stage instructions exactly as they are. Then rerun humanize and the AI-tell scan on drafts/[slug]/ and show me the old and new scores side by side.