I built an agent content agency
I built a content agency out of 27 Claude Code agents. What shipped in week one, what broke, and the bug that almost killed a carousel on slide 4.

Dioni
Updated:

27 agents. One dev. One week.
Four carousels shipped on Instagram. 27 Claude Code agents did the scaffolding. I did the cutting.
Here I am.
The idea sounds ridiculous when you say it out loud ... a 42 years old solo dev running a "content agency" out of the terminal. But that is exactly what I built. And week one of content is done. So this post is the honest receipt: what worked, what broke, and the bug that almost shipped a carousel with dead syntax highlighting.
This is not a tutorial. I am not here to sell you a course on "how to build your own AI agency in 3 days." I am writing down what I did, what happened, and what I learned. If it helps you, great. If you think it is dumb, also fine ... I probably agree with you 40% of the time.
Why I built a Claude Code content agency
I have been writing code for 20 years. Walmart, IKEA, Falabella, VTR, startups I can barely remember. Every product had someone else's… name on it.
In February I left. Not because "I bravely decided to quit my job" ... let's not pretend. Organizational politics ate the role. I took the exit and made a call: go all in on my own products instead of running another interview loop.
Hikari is live on the App Store. Zero tracking, zero subscriptions, $4.99 once. It works. It is beautiful. I am proud of it.
And it is almost invisible.
Here is the thing nobody tells you when you ship your first indie app at 42. Building was the easy part. Distribution is the game. And I am not a marketer. I never wanted to be a marketer. I cannot afford to hire one right now, and even if I could, the startup I am building with my partners needs that cash more than my Instagram does.
So I needed leverage.
Claude Code shipped subagent architecture. Suddenly the "AI content agency" thing people were tweeting about stopped being a fantasy and became wiring I could do in an afternoon. I had the tool. I had the blog (dioni.dev). I had a Hub and Spoke model on paper ... blog is the Hub, IG and X and LinkedIn are the Spokes. What I did not have was time, and what I refused to do was sacrifice the 6 AM gym, the school drop-off with Fran and Flo, the actual dev time on Hikari and my new startup.
So I built the agency. Here is what came out.
The architecture: 27 Claude Code agents in three layers
27 agents. Sounds absurd. It kind of is.
A Claude Code agent is a scoped skill with a single job and a rule file it must obey. It does not have a memory, a personality, or an agenda beyond the prompt. It is an intern with infinite time and zero ego. No meetings. No Slack. No "can we hop on a quick call?"
The system has 3 layers.
Capture ... 4 agents ... feed raw material into the pipeline.
Produce ... 21 agents ... turn raw material into posts (blog and IG).
Distribute ... 2 agents ... ship to channels and read the numbers back.
Capture is the fuel. Four agents whose only job is to feed the pipeline with raw material:
/changelog... scans git commits across every repo indioniFactory. Today's changelog is tomorrow's blog draft./intake... global command. I can run it from any console, throw a thought at it, and it lands injournal/raw/./intake-session... reads the current Claude Code conversation and extracts what was actually decided or learned./scan-projects... consolidates everything above into ranked content opportunities.
Produce is where the work happens. Two pipelines live here.
For the blog, 7 agents: /blog-strategist plans the calendar, /blog-writer drafts, /blog-editor cuts, /blog-seo makes it findable by Google and by ChatGPT, /spoke-decomposer breaks it into Instagram spokes, and /image-maker handles every visual asset across both channels. The orchestrator is /blog-pipeline.
For Instagram, fourteen agents. /strategist picks the angle. /hook-smith stress-tests the first 1.7 seconds. /writer does the captions and slide text in the 1/3/1 rhythm. /art-director picks the accent color from my anime color system (EVA Green, Naruto Orange, Kenshin Purple, Deku Green, Slam Dunk Red). /designer renders the actual PNGs and Shiki. /fact-checker is the paranoid one. /reviewer is the bouncer.
Distribute is /publisher and /analyst. The first one ships. The second one reads the numbers next week.
Every agent is defined as a markdown file with frontmatter. Nothing fancy. Here is what the Hook Smith looks like, trimmed down:
---
name: hook-smith
description: Generates scroll-stopping hooks for IG posts. Scores each hook on the 1.7-second test.
tools: Read, Grep
---
You are the Hook Smith for @dioni.dev.
Rules:
1. Read BRAND.md before writing anything.
2. Generate 15 hook variations per brief.
3. Reject any hook that could have been posted by a generic tech account.
4. Score each hook on curiosity, specificity, and stop-power (/10).
5. Return only the top 3.
That is the whole trick. One file, one job, one rulebook. Composability does the rest.
The orchestrator of it all is /content-hub. When I run /content-hub plan-cycle "idea", it kicks off the full chain across channels. When I run /pipeline alone, it just produces one Instagram post.
No agent works alone. The reviewer kills anything that scores below a threshold on twelve criteria. That is the whole point. I am not trusting the generation. I am trusting the gate.
Curation beats generation
This is the part I want you to take away if you take nothing else.
The agents generate a lot. Most of it is wrong. Not wrong like "factually incorrect" ... wrong like "this could have been written by any tech account on the internet." Generic. Hedged. Corporate. Dead on arrival.
That is not a bug. That is exactly the job.
Can a solo developer replace a content team with Claude Code agents? In week one, partially. The agents handle drafting, hooks, design, and fact-checking. The human (me) still curates, cuts, and ships. The system is not replacement. It is leverage.
What I actually do in front of the screen is not "write content." It is cut content. The hook smith gives me fifteen hook variations for a post. I keep one. I rewrite half of that one. The writer gives me a caption in 1/3/1 ... I cut 60% of it because it sounds like every "productivity for developers" carousel nobody saved last year.
Here is a real example from this week. The hook smith suggested:
"Are you tired of generic AI content flooding your feed? Here's how I took control."
That is slop. I would scroll past it. I wrote past it, too. I rewrote it to:
"27 agents. One dev. One week. This is what actually shipped."
Same idea. Different blood pressure. One of them could have been posted by any account on Instagram and nobody would know the difference. The other one could only come from me, this week, with these numbers.
The agents are a food court. I am the chef. They can hand me infinite ingredients. It is still my job to decide what goes on the plate and what gets thrown out.
If you ship whatever the agents write, you become the slop. If you curate, you become the signal. That is the whole philosophy. It fits in one sentence.
What worked in week one
Four Instagram carousels shipped. And more in coming….
Not "planned." Not "drafted." Shipped, on the grid, live, reviewed.
Monday was Month Two ... Naruto Orange, the persistence story of how month two of posting is actually harder than month one. Wednesday was Neuromarketing UX ... Kenshin Purple, craft-focused, why the save button is broken in most apps. Friday was Dark Mode First ... EVA Green, a hot take on why light mode is a compatibility layer. Sunday was CLAUDE.md ... Deku Green, my setup for how I run Claude Code across the factory.
And this blog post. Produced through the same pipeline the carousels came from. The Blog Writer agent drafted it, I cut the 30% that sounded off, I added the parts only I could add.
Other things that earned their keep:
BRAND.mdis a real file, not a vibes doc. It has the voice rules, the color system, and the hard ban on em-dashes. The agents read it before they write. That one file caught fourteen em-dashes across output in week one before anything shipped.The
/changelogagent scanning git commits means blog ideas come from actual shipped code, not from whatever topic was trending on X that morning.The Reviewer killed a carousel because one claim was close to true but not quite. I would have shipped it. The bouncer did its job.
I have reusable templates now. Hooks, slide anatomy, code blocks. Month one is always the slowest. I can feel it getting faster.
What broke (three honest failures)
Three things, out loud, no sugar.
The code-block bug. For two drafts, the designer agent was rendering code blocks with broken syntax highlighting. Shiki config mismatch ... the theme was loading but the language grammar was registering wrong, so every string looked like a comment. I did not catch it until slide 4 of the Wednesday carousel, where the rendered result was supposed to show a TypeScript snippet and instead showed what looked like a uniform gray blob. Fixed. Embarrassing. If I had published on autopilot, that would be live right now.
The em-dash war. Claude loves em-dashes. I mean loves. It puts them in every sentence it can. I banned them in BRAND.md. The agents kept smuggling them in. I added the ban to every individual agent prompt. They still sneaked through. I wrote a linter. Even the linter is not perfect yet ... I caught one in the draft of this very post and deleted it ten minutes ago. This is a war I am not winning. I am just winning more battles than I am losing.
The visual sameness problem. The first three carousels I generated all looked identical. Same accent color, same layout, same energy. The Art Director was treating "brand consistency" as "visual sameness" ... which is exactly the generic AI slop look I was trying to avoid. I fixed it by adding the rotation rule to BRAND.md: each post picks an accent color from the anime and sports system based on the theme, and the grid as a whole should show variety. Naruto Orange for persistence. Kenshin Purple for craft. EVA Green for hot takes. Deku Green for tool reviews. Slam Dunk Red for celebrations.
What all three failures taught me: the system will drift toward generic by default. The rules file is the only thing holding the line. Miss a rule, you get slop. Add a rule, you get another shot at standing out.
What I'm not claiming
Let me be honest about what this is not.
It is not a finished system. It is week one.
I do not have follower numbers to brag about. The account has 60 followers as I write this. Nothing went viral. I did not grow to 10K in 30 days, and if anyone tells you they did that with AI content, they are selling you a course.
It is not "automated." I am in the loop on every single post. The agents draft, I cut, I rewrite, I review, I ship. The day I let it ship without me in the loop is the day the slop wins.
It is not replacing a marketer. A good marketer would beat this system in month one. Maybe month six too. What it is doing is giving a solo dev with a family and two other products something between "post nothing" and "hire someone I cannot pay."
The actual metric I care about this week is not reach. It is sustainability. I shipped four carousels and this post without missing the 6 AM gym, without Flo and Fran getting less dad time, without stopping product work on Hikari or on the startup. That is the win. Not the algorithm. The life.
What's next for the Claude Code content system
Week two is measurement. Which carousel actually landed? Which hook stopped the scroll? The /analyst agent reads Instagram Insights, compares against benchmarks, sends the signal back to the Strategist. That is where the loop closes.
Week four is pruning. 27 agents is too many. Some of these are going to earn their keep. Some are going to get cut. The honest audit happens after a month of real usage, not before.
Month two I want to experiment with a Spanish language track for LATAM content. I grew up reading manga in Spanish. Some of my best ideas come out in Spanish first. The current system is English-primary by design ... but Chile is not Silicon Valley, and there is a real audience I am leaving on the table.
And an open invite. If you are a solo dev running your own version of this, DM me. @dioni.dev on Instagram, @dionidev on X. Not to sell you anything. I want to compare notes. I want to know what you cut, what you kept, what broke at 2 AM. This stuff is too new for any one of us to figure out alone.
Closing
Is 27 agents too many? Probably.
Is any of this certain? No.
But it is shipping. And in week one, that is the only metric that matters.