CLAUDE LABJP
FORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as OctoberFORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as October
Articles/Claude Code
Claude Code/2026-05-20Intermediate

Pruning Custom Subagents in Claude Code: After Six Months, Five Became Two

I built five custom subagents in Claude Code, ran them across six sites for six months, and ended up keeping only two. Here are the notes I took along the way — what worked, what didn't, and how I learned to write subagent descriptions that actually get called.

Claude Code197Subagents8Operations NotesIndie Developer9

I built my first custom subagent around the autumn of 2025. At the time, I had just started running six websites in parallel — four technical blogs and two long-form sites — and I was looking for any way to stop being the only person bouncing between repositories every single day.

Six months later, the lineup of custom subagents inside .claude/agents/ had shrunk from five to two. Pruning, rather than adding, turned out to be the direction I drifted in. I want to write down what happened along the way.

I'm Masaki Hirokawa (Dolice), an indie developer who has been shipping apps since 2014.

The First Three Months: Believing More Subagents Was Better

For the first three months, I added one whenever I thought of one.

  • An SEO audit subagent for articles
  • A subagent that wrote release notes from repository diffs
  • A subagent that compared schedule task configurations across four sites and flagged inconsistencies
  • A subagent that read older articles and suggested rewrite candidates
  • A subagent that read AdMob eCPM reports and proposed mediation orderings

When I opened .claude/agents/, there were five files, some of which I couldn't even remember creating.

It sounded reasonable on paper — "I have a small team of specialists on call." In practice, none of it ran as cleanly as I had imagined. The subagent's output wasn't as good as I expected, or it was faster to do the work directly in the main session. That gap built up slowly over the first three months.

Survivor #1: The "Just Go Read" Explore-Style Subagent

The first one that survived is the one that does nothing but read. It's a lightly tuned version of the Explore role that comes with Cowork out of the box.

The reason this one worked was clear. The wider the surface area it has to read, the more I benefit from not polluting the main context. My workspace has six site repositories, operational documents, SEO data, and SKILL.md files scattered around. When I want to trace something like "which subagent wrote this article" or "which document is the source of truth for AdMob priority settings," reading everything in the main session burns context fast. Asking a dedicated Explore-style subagent to go wide, read shallow, and only bring back a report keeps the main side moving.

The thing I learned over six months is that I had to fix the prompt to this subagent into a very simple shape: "You may read anything you need to in order to answer the following question, but report back in 300 characters or less." That was it. Narrowing both the role and the exit shape made it actually useful.

Survivor #2: The "Design Review" Plan-Style Subagent

The second survivor is the one I call during design — to borrow a pair of eyes that isn't mine.

One of the hardest parts of working solo is that I rarely get to show a design to another person. The experience behind 50 million cumulative app downloads since 2014 is real, but that same experience is also where my blind spots come from. It's hard to notice my own habits.

I gave this subagent a single role: "Given my design proposal, point out up to three angles I'm likely to have missed." Not suggestions. Angles. I don't ask it to write anything — I ask it to shine a light on what I've overlooked.

The implementation trick was to cleanly separate it from the main conversation. If I drop a design proposal into the main chat, my own assumptions leak into the framing and the subagent ends up seeing things through my eyes. I deliberately strip context away before handing the document to the subagent, so it reads the proposal as a first-time reader.

It looks like a detour, but six months in, this is what fits me.

The Three I Threw Out: Why They Didn't Work

Now the honest part — the three that didn't survive.

The first was the SEO audit subagent. The structural problem was that the audit report that came back still had to be read by me in the main session before I could act on it. A subagent isn't worth the split if the main session can't trust the conclusion and move on. That principle came from this one.

The second was the release notes generator. It could write release notes well enough, but the actual judgment — "what counts as part of this release" — required context about the whole site that only the main session was holding. I kept rewriting the output, which meant the split was costing more than it saved. Tasks where the scope decision can't be separated belong in Plan Mode, not in a subagent.

The third was the AdMob mediation order proposer. I dropped this one for a different reason. Combining the AdMob dashboard with Claude in Chrome turned out to fit my real workflow better than wrapping it inside a single subagent. From that one I drew a rule for myself: before building a new subagent, try the Chrome-integration path first and see if that's enough.

What I Learned About Writing the description

Lining the survivors and the dropouts up next to each other, the dividing line was the description field.

The descriptions on the survivors all wrote when to call them, not what they do. The three I dropped described the role — "an expert in X" or "produces a report on Y" — but didn't say when the main session should reach for them. From the main session's point of view, a subagent without a calling occasion is one that doesn't get called.

Here's roughly what the surviving Explore-style subagent's description looks like:

Use when you need to investigate facts that span multiple repositories,
documents, or SKILL.md files without burning main-session context.
Report back as a summary of 300 characters or less, never as full text.

Writing the negative condition ("never as full text") was the key. It lets the main session decide whether to call this subagent without hesitating.

One Tool, Used Well

Both of my grandfathers were temple carpenters. They didn't keep adding new tools — they sharpened the few they had, every day. The same plane, sharpened every morning, finished the wood with a surface only that plane could leave.

Six months of running custom subagents pointed me toward the same direction. Adding new ones wasn't paying back as much as maintaining the two I had. Against the reality of running six sites, that was the choice that worked.

What's Next

In the near term, I'm planning to add a small logging mechanism to each of the two remaining subagents that records the days they weren't called. A subagent that goes uncalled for a stretch is a signal to revisit its description, not a signal that it has earned its place.

If you're starting with custom subagents, I'd recommend building exactly one and running it for three weeks. If, after those three weeks, there were at least three moments where you genuinely felt "I'm glad I called this one," it's a keeper. If not, the right place to start is rewriting one line of its description.

I'm still in the middle of figuring this out myself. I hope the notes help.

Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

Claude Code2026-07-18
Branch with /fork, Delegate with /subtask — Two Commands That Traded Jobs
In Claude Code 2.1.212, /fork now clones your conversation into a background session, and in-session subagents moved to /subtask. Here is how I decide between them, and the budgets worth setting before you start branching freely.
Claude Code2026-07-17
My Nightly Subagents Ran, and I Couldn't Retrace Them — Trimming the Logs That --forward-subagent-text Unleashed
Subagent text and thinking can now flow into stream-json output, and unattended log volume climbs sharply with it. Here are measured numbers, a three-tier retention filter that keeps only what postmortems need, and a correlation ID design that survives missing fields.
Claude Code2026-06-14
A SubagentStop Hook That Grades Subagent Output and Sends It Back to Be Redone
When a Claude Code subagent occasionally returns rule-breaking work, a SubagentStop hook can grade it automatically and ask for a redo. Here is a working setup with code and field notes.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →