How to Build an AI Content Workflow in Claude Code, From Scratch
Tania Brown's pipeline gets articles to 95% of publication-ready. I rebuilt her design in Claude Code subagents, with the missing files and prompts.

Automating content production has become an obsession for anyone doing SEO in Brazil who needs to scale without hiring an entire editorial team. The temptation is obvious: throw the keyword at a model, ask for the article, publish it. But that route produces commodity content that doesn't hold up. Tania Brown, growth marketing manager at Victorious, spent months building and rebuilding a pipeline in Claude Code and reached a conclusion that changes the game: the hard part isn't getting the AI to write, it's defining what the finished article needs to be and building the workflow that gets there reliably.
Her system sustains production for a company blog and for external publications, getting pieces to around 95% of publication-ready. Below, I translate that design into Claude Code's actual syntax (subagents in .claude/agents/, context in CLAUDE.md, slash commands), because the original article describes the strategy but doesn't show the artifacts. I tested the structure by building a blog post pipeline from scratch.
Prerequisites
- Claude Code installed (
npm install -g @anthropic-ai/claude-code), authenticated with a Claude Pro/Max account or an API key. - An empty project directory. Run
claudeinside it once to initialize. - The context documents ready (more on these shortly). Without them, the workflow just automates the production of generic text.
In Claude Code, subagents are Markdown files with YAML frontmatter inside .claude/agents/. Each one runs in its own context window, which brute-forces a solution to the problem of mixing tasks. This context isolation is exactly what Tania discovered in practice (I'll come back to this in the stumble section).
Start From the End: Define What "Quality" Means
The mistake in almost every workflow is starting with the prompt. Tania recommends the opposite: start from the finished article. Once the target is defined (useful content, in the brand's voice, that describes the business accurately and has the potential to rank or be cited in AI answers), you list what you need to get there and split it into constants (true for every run) and variables (topic, angle, keyword, each round).
The constants become context files you reference. One structure that worked:
.claude/
agents/
researcher.md
outliner.md
writer.md
editor.md
fact-checker.md
ai-editor.md
context/
brand-explainer.md # who we are + ICP (industry, seniority, pain points)
voice-guide.md # with EXAMPLES, not a list of adjectives
best-practices.md # meta description, slug, natural keywords
offerings.md # products, services, methodology
first-party/ # proprietary research and case studies
sitemap.xml # or an export from Screaming Frog
CLAUDE.mdvoice-guide.md is the point most people get wrong. "Friendly but formal" means nothing to an LLM. Show excerpts of what to do and what to avoid. Don't have a guide? Ask the model itself to generate one from your best existing content.
CLAUDE.md at the root is automatically read by Claude Code in every session. This is where the orchestrator goes: the map of the workflow from start to finish and what each agent does. A lean example:
# Content pipeline orchestrator
When I run /novo-artigo <keyword> <angulo>:
1. Invoke the `researcher` subagent -> generates context/dossie.md
2. Invoke `outliner` with the dossie -> STOP for human review
3. After my OK, invoke `writer` -> draft.md
4. Run in separate windows: `editor`, then `fact-checker`, then `ai-editor`
5. Hand off for final human review. NEVER publish without it.
Required context at every step: context/brand-explainer.md,
context/voice-guide.md, context/best-practices.mdUpdate this file whenever responsibilities change. It's what prevents skipped steps.
Kickoff: A Slash Command
Instead of the local dashboard Tania uses, I created a slash command in .claude/commands/novo-artigo.md, which comes pre-filled when you type /novo-artigo:
---
description: Starts the blog post pipeline
argument-hint: <keyword> <angulo>
---
Start the pipeline described in CLAUDE.md for the keyword "$1"
with the angle "$2". Begin at step 1 (researcher).Her golden advice: start with a single content type and get it working well before adding formats. Trying to do everything at once results in a workflow that doesn't work well for anything.
The Subagents, One by One
Each subagent is a .md file with frontmatter. The Researcher's:
---
name: researcher
description: Researches the topic, existing coverage, and SERPs; generates a dossier
tools: WebSearch, Read, Write
---
You research the received topic and produce context/dossie.md with:
- Angle and gap the piece will fill
- What we've already published on this (check sitemap.xml)
- Who appears in AI Overviews for the keyword
- Citable sources from the industry (avoid listicle sites)
Use ONLY reliable sources. Mark every claim with its source.The Outliner generates the structure and is where the first human checkpoint comes in, the cheap point to decide whether to scrap, revise, or move forward, before spending tokens on the writing:
---
name: outliner
description: Generates a hierarchical outline from the dossie
tools: Read, Write
---
Read context/dossie.md and context/voice-guide.md.
Produce a hierarchical outline with the required sections.
When done, STOP and request human approval before proceeding.The Writer receives the dossier, outline, voice guide, ICP, and case studies. It's worth giving it a piece of good content written from an outline and asking it to analyze narrative flow and word choice. If you follow rules like BLUF (bottom line up front) or MECE, be explicit about when to apply them.
The Stumble That Taught Her to Separate the Agents
Tania started with a single editor handling structure, coverage, and style together. Splitting it into two, one for structure and coverage, another for phrasing and "AI tells", produced better output than asking a single context to fix everything. The same happened with fact-checking: asking the editor to also check facts resulted in two jobs done poorly.
This is exactly where Claude Code's context isolation helps: each subagent runs in a fresh window, so there's no way for one objective to contaminate another. The three-way split:
---
name: fact-checker
description: Checks for hallucinations with an adversarial bias
tools: WebSearch, Read
---
Assume EVERY claim in the draft is wrong.
Try to disprove each statistic and fact cited.
List what you couldn't confirm with independent sources.
DO NOT edit style. Your only job is accuracy.The editor checks compliance with the style guide, removes banned words, checks structure, logical order, vague sentences, and missing transitions. The ai-editor focuses exclusively on AI writing tells, without touching style. Run them in the order set by the orchestrator.
How to Check It Worked (and What to Do When It Doesn't)
After running /novo-artigo, check: was dossie.md generated with sources marked? Did the outliner actually stop for review instead of moving straight into writing? If it didn't pause, the problem is usually in CLAUDE.md, reinforce the word STOP and the approval criteria.
If the fact-checker comes out "clearing" everything without flagging anything, it probably doesn't have the WebSearch tool in its frontmatter, so it's "checking" using only the model's own knowledge. That was my mistake on the first run. Adding WebSearch made it start returning claims that were genuinely unconfirmed.
Tania runs two editor passes before handing off to a human. This reduces manual work, but doesn't get the piece to 100%, and she's emphatic about it: you should never want to publish something no human has touched.
Is It Worth It? And What Changes for the Brazilian Developer
Yes, the system maximizes resources. But it carries risk: according to her, with Google aggressively deindexing content that isn't commodity-grade, it may simply not make sense for your brand. And it's not a quick build.
For those doing technical SEO in Brazil and thinking about GEO, the lesson is this: the differentiator isn't in the model, it's in the context only you have, the stuff that lives in your context/ folder. Without a real ICP, examples of good content, and primary research, no workflow produces anything that resonates, and you just end up automating the generic-text factory.
If the whole pipeline seems like too much, start with one agent. The refresh process (updating old pieces with new stats) was one of the most important parts of her workflow and is a great isolated starting point, a single refresh.md subagent that reads the URL and suggests updates.
Translated from the Brazilian Portuguese original · Read the original
Search Console doesn't separate AI Overviews clicks, and there's no filter for that
Google Search Central documentation confirms that AI Overviews and AI Mode fall under the 'Web' search type in the Performance report, without their own segmentation. The viable approach is to observe aggregate trends and cross-reference with Analytics, not isolate the click.




