Parallel Blog Research with Subagents: Fan Out Investment, Technical, and Reader-Need Axes, Then Merge Into One Draft
A hands-on build log: split one blog post's research into investment, technical, and reader-need axes, run them as parallel Claude Code subagents, and merge into one draft. Reuse the MCP server from my last post as the investment subagent's data source.

A hands-on build log: split one blog post's research into investment, technical, and reader-need axes, run them as parallel Claude Code subagents, and merge into one draft. Reuse the MCP server from my last post as the investment subagent's data source.
Parallel Blog Research with Subagents: Fan Out Investment, Technical, and Reader-Need Axes, Then Merge Into One Draft
In my previous MCP post, I built a 30-minute MCP server that wires research notes, past proposals, and meeting minutes into Claude Code. I closed that post with a next-issue idea: "Parallel Blog Research with Subagents." So this time I actually build it. The premise comes straight from my Skill design post, where I argued that subagents are for isolated, parallel investigation — this is that role taken down to an implementation.
Whenever I write for this blog, my research splits three ways every single time: is it investable, what is actually happening technically, and what does the reader want to know. I used to do all three sequentially in my own head. But the three axes are nearly independent, so running them as separate subagents in parallel ought to be faster. This post turns that into a reusable pattern. For the investment subagent's data source, I reuse the MCP server from last time as-is (search_dd_memos / fetch_doc / list_recent).
Version note: This is based on Claude Code (Opus 4.8 line) and subagent definitions via
.claude/agents/as of May 2026. The subagent config schema, parallel-execution behavior, and CLI can change, so always check the official docs and release notes before relying on this in production.
TL;DR: What You'll Learn
| Topic | What you'll learn |
|---|---|
| Why split | Why splitting one post's research into 3 axes is faster |
| Subagent definitions | How to write the three .claude/agents/*.md files |
| MCP reuse | Wiring last post's MCP tools into the investment subagent |
| Parallel run | An orchestrator that fans out 3 agents and merges into one draft |
| Merging | How to fold disparate findings into one consistent article |
| Gotchas | What actually bites you in parallel research |
1. Why Splitting One Post's Research Into Three Axes Is Faster
The first thing to answer is whether splitting is even worth it. Standing up three agents for a single article looks like overkill. I thought so too at first.
But watching my own process, I noticed the three axes barely overlap — not in sources, not in tone. The investment axis pulls from internal knowledge over MCP plus public primary sources. The technical axis pulls from official docs, GitHub, and release notes. The reader-need axis pulls from search intent and how prior posts landed. Doing all three sequentially in one context means the early findings fade as you go. By the time you actually write, the tool results from step one have been crowded out of context. Anyone who has run a long session knows that feeling.
| Aspect | Sequential (one session, in order) | Parallel (fan out to 3 subagents) |
|---|---|---|
| Context pollution | All findings pile into the main context | Each subagent finishes in its own context and returns a summary |
| Speed | You wait per axis | All three advance at once |
| Specialization | One prompt does everything | Per-axis tool scopes, tone, and output format are fixed |
| Reproducibility | The procedure drifts each time | The pattern lives in definition files |
For me, the biggest win is not speed — it is context isolation. A subagent runs in its own context and returns only a summarized deliverable to the main session. That keeps the main session clean for the final merge and writing. This is still a matter of taste; for a light post, sequential is plenty. But the heavier the post — where all three axes need real depth — the more the split pays off. That, at this point, is how I read it.
2. Define Three Subagents: Investment, Technical, Reader-Need
Settle the division of labor before touching implementation. In Claude Code, a Markdown file under .claude/agents/ becomes a subagent definition: name / description / tools in frontmatter, and the system prompt in the body.
What helps here is exactly what I wrote in the Skill post: "the description should say when to call, not what it does." The orchestrator routes by reading each subagent's description. So I draw the boundaries sharply in the descriptions to keep the three responsibilities from colliding.
First, the investment axis. Only this one gets access to the MCP tools.
---
name: investment-researcher
description: >
Use to research the INVESTMENT angle of a blog topic: market size,
funded startups, valuations, prior internal research notes, and portfolio overlap.
Has access to the internal knowledge MCP server. Does NOT cover code-level
technical detail or reader/SEO intent.
tools: [search_dd_memos, fetch_doc, list_recent, WebSearch]
---
You are the investment-angle researcher for a CVC blog written by ZYL0.
Your job: given a blog topic, produce a tight investment brief.
Steps:
1. Call `list_recent(kind="memo", days=180)` to see what themes we touched recently.
2. Call `search_dd_memos(query=<topic>)` to find prior internal context.
3. For the 1-2 most relevant hits, call `fetch_doc(doc_id)` and pull only
the parts that bear on this topic. Do NOT dump full bodies.
4. Use WebSearch only for public facts (funding rounds, market sizing).
Output (Markdown, <= 400 words):
- "## Investment angle"
- 3-5 bullets: what's investable, who's funded, what we've already seen internally.
- Flag any NDA/restricted material as [internal-only] and summarize, never quote.
- End with one line: "Open question for the human:" (the judgment call we still owe).
Next, the technical axis. No MCP access here — keep it to verifying public facts.
---
name: tech-researcher
description: >
Use to research the TECHNICAL angle of a blog topic: how the technology
actually works, current versions, official docs, GitHub state, and a minimal
working code path. Does NOT cover investment/market or reader/SEO framing.
tools: [WebSearch, WebFetch, Read, Grep]
---
You are the technical-angle researcher for an implementation-focused blog.
Your job: verify what is TRUE and CURRENT, and find a minimal runnable path.
Steps:
1. Confirm the current version / release notes of every tool you mention.
2. Check official docs and the GitHub changelog/issues where relevant.
3. Identify ONE minimal code path the reader could actually run.
4. Note anything that recently changed or was deprecated.
Output (Markdown, <= 400 words):
- "## Technical angle"
- Version-pinned facts (no version, no claim).
- A short, copy-pasteable snippet if one is genuinely runnable.
- "Gotchas:" 2-3 bullets of things that bite in practice.
- Do NOT include uncertain API specs. If unsure, say "unverified".
Finally, the reader-need axis. It reads search intent and prior-post reception, and returns "how to frame this so it lands."
---
name: reader-need-researcher
description: >
Use to research the READER-NEED angle of a blog topic: search intent,
what the audience is actually stuck on, framing, and title candidates.
Does NOT verify code or cover investment/market detail.
tools: [WebSearch, Read, Grep]
---
You are the reader-need researcher for a bilingual JP/EN tech blog.
Your job: figure out what the reader actually wants and how to frame it.
Steps:
1. Identify the top 3 search intents behind this topic (problem-first).
2. Grep prior posts under content/blogs/ for related coverage to avoid overlap
and to find a natural internal link.
3. Note which prior post this should link back to.
Output (Markdown, <= 300 words):
- "## Reader-need angle"
- Top 3 reader questions, ranked.
- One suggested narrative hook (the opening tension).
- 3 title candidates (JP + EN), specific and searchable.
- The internal link this post should reference.
The key in all three is fixing the output format and a word ceiling. A subagent's deliverable returns wholesale into the orchestrator's context, so anything too long drowns the merge step. Just constraining each axis to "≤ 400 words, fixed headings" makes the later merge far easier.
3. Wiring the Investment Subagent to Last Post's MCP Server
This is the centerpiece. Instead of building a new data source, I point the investment subagent at the cvc-knowledge server I built in my previous MCP post. The nice thing about MCP is that once the server is up, the same tools are shared by both the main session and the subagents.
The project-root .mcp.json is reused verbatim from last time (repeated here).
{
"mcpServers": {
"cvc-knowledge": {
"command": "uv",
"args": ["run", "python", "server.py"],
"env": {
"KB_BASE_URL": "https://kb.internal.example.com",
"KB_API_TOKEN": "${env:KB_API_TOKEN}"
}
}
}
}
Because the investment subagent lists search_dd_memos / fetch_doc / list_recent in its tools:, only that subagent can use the MCP tools. The technical and reader-need agents do not list them, so they never touch internal knowledge. Scoping tool access per subagent is an unflashy but large benefit of splitting. The guard model from last post — "drop data before it reaches a form the LLM can see" — keeps working at the subagent level.
What the investment subagent actually calls is steered by the Steps in its system prompt. The flow looks like this.
# Typical call order inside the investment subagent
list_recent(kind="memo", days=180)
-> recent themes over the last six months (titles + IDs)
search_dd_memos(query="drone logistics last-mile", limit=5)
-> top 5 related memos: IDs, titles, snippets
fetch_doc(doc_id="memo-2025-0417")
-> body of just the 1-2 relevant ones (restricted docs collapse to a server-side summary)
The point is that the subagent does not fetch every body. The tool design from last time — search to triangulate, then fetch only the one or two you need — becomes the subagent's behavior contract directly. Since fetch_doc inspects classification and returns only a summary for restricted docs, even if the subagent goes rogue and tries to pull everything, the sensitive material is physically dropped server-side. The MCP-side guard is the insurance policy against a misbehaving subagent. That was a satisfying part to design.
4. The Orchestrator: Fan Out Three, Merge Into One
Once the roles are set, the main session becomes the orchestrator. It does only two things: dispatch the three subagents in parallel, and fold the three returned deliverables into one draft.
The instruction I actually use is a single prompt like this. Claude Code can launch multiple subagents in parallel in one turn, so I ask for it explicitly.
You are the orchestrator for this blog.
Topic: "Last-mile delivery in drone logistics"
Launch these three subagents IN PARALLEL and collect each deliverable:
- investment-researcher (investment-angle brief)
- tech-researcher (technical-angle brief)
- reader-need-researcher (reader-need-angle brief)
Once all three return, merge them into one article draft.
Merge rules:
1. Open with the reader-need hook; pick one of the title candidates.
2. Use only the technical axis's version-pinned facts. Drop anything "unverified".
3. Summarize the investment axis's [internal-only] items only. Never quote source text.
4. If the three axes conflict, do NOT assert in the body; list it under "Open questions" at the end.
5. Output to the bilingual content/blogs/ template (::lang-block ja / en).
What matters here is keeping the merge rules on the orchestrator side. Each subagent stays focused on "research my axis and return"; conflict resolution and accept/reject judgment are centralized in the orchestrator. If you instead tell the subagents to "stay consistent with the other axes," they start inventing information they cannot actually see, which causes more accidents, not fewer. I did exactly this at first — the tech subagent began filling in investment claims from imagination, and a falsehood nearly slipped through.
Another merge-stage trick: lay all three deliverables out side by side before you start writing. With all three briefs present in the orchestrator's context, only then decide what to adopt and what to drop. Start writing immediately and you get dragged toward whichever axis returned first. Unflashy, but pausing one beat here changes the merge quality. That is my hands-on takeaway.
5. Folding Disparate Findings Into One Consistent Article
Merging is not a mechanical join. The three axes ran independently, so you almost always get overlap, tonal mismatch, and contradictions. The fold I have settled on is three steps.
| Step | What you do | Decision rule |
|---|---|---|
| 1. Accept/reject | Sort each axis's claims into accept / hold / reject | Technical axis: only version-pinned claims. Investment confidential: summary only |
| 2. De-duplicate | If two axes surfaced the same fact, merge into one | Keep the one closest to a primary source |
| 3. Surface conflicts | Don't hide unresolved disagreements — put them under "Open questions" | Don't assert in the body; hedge |
The third step matters most. Findings researched independently in parallel sometimes collide head-on. Say the technical axis claims "this regulation makes drone logistics hard to commercialize," while the investment axis says "actually, PoCs are already running in this region." Forcing those into a single conclusion erodes the article's credibility. When that happens, I present both sides in the body and keep the disagreement honestly under "Open questions" at the end. The spot where the three axes diverge is often the most interesting point in the whole piece — that was a discovery in the writing itself.
The reverse risk: do not get too lazy in the merge. Pasting the three briefs together verbatim produces a "written by a committee" feel, with the tone all over the place. The step where the orchestrator rewrites everything in one first-person voice (ZYL0) cannot be skipped. Subagents gather material; the orchestrator writes in one voice. That division is where I have landed most comfortably.
6. Gotchas: What Actually Bites You in Parallel Research
The mechanism is simple, but operating it surfaces a few landmines. Here are the ones I stepped on.
- Subagent deliverables too long, drowning the main session: A subagent's output returns wholesale into the orchestrator's context. Without a word ceiling in the definition, each axis returns thousands of words and context bursts at the merge. Always write "≤ 300–400 words, fixed headings" into each definition.
- MCP tools get called from non-investment subagents: Forget the
tools:list and a subagent may default to broad access. List MCP tools that touch sensitive data ONLY in the investment subagent'stools:, never elsewhere. Even with the server-side guard from last post, scope twice to be safe. - Telling subagents to "stay consistent": Each subagent cannot see the other axes' results. Ask it to reconcile and it starts filling gaps from imagination. Centralize consistency judgment in the orchestrator.
- "Parallel" silently running sequential: Without an explicit "in parallel," agents may run one at a time, killing the speed benefit. Always write "launch in parallel" in the orchestrator prompt — and since behavior can change by version, verify in the trace that they truly ran concurrently.
- Investment subagent fetching full bodies: Without "only the 1-2 relevant ones" in the system prompt, it will fetch the body of every hit. Bake last post's tool design (search to triangulate, then fetch) explicitly into the subagent's Steps.
These are the "not in the official docs, but obvious once you hit them" kind. Writing them down for my future self.
Conclusion: A Subagent Is Not a Clone — It's a Research Boundary
A wider take to close. After standing up three subagents, what I noticed is that this is not about cloning myself into three people — it's about drawing boundaries around research.
Investment, technical, reader-need: those three axes have always been separate in my head. But doing them sequentially in one session let the axes bleed together, until even I was fuzzy on where verified ended and imagination began. Splitting them into subagents — with tool scopes and output formats fixed per axis — externalized that boundary into definition files. Not having to re-make the same judgment every time is, in the end, the same benefit I wrote about for Skills in the Skill post.
And being able to reuse last post's MCP server as the investment axis's data source was the most satisfying part to design. Build "a tap into internal knowledge" over MCP once, and it is shared by both the orchestrator and the subagents. Tools, once built, get reused — an obvious thing that really starts to pay off when combined with subagents.
You do not need perfect orchestration. Drop the three agent definitions into .claude/agents/ and run them in parallel on your next post. If it feels heavy, go back to sequential — that is all. Writing one post teaches you your own pattern far faster than designing a perfect auto-writing pipeline on a whiteboard.
Next Issue Ideas
- Idea 1: Validate Subagent Deliverables with Hooks Before Merging — Auto-check each axis's returned brief with PostToolUse/Stop hooks before the merge. Mechanically reject missing versions, over-length output, and quoted internal-only text so the orchestrator only ever receives clean material — built out as copy-pasteable templates.
- Idea 2: Let the Investment Subagent Analyze Public Primary Data — Have the investment subagent directly analyze public primary data (SEC EDGAR filings, FRED economic series) and combine it with the internal MCP server to thicken the investment brief. I'll cover a design that keeps fetch, preprocessing, and summarization inside the subagent.
- Idea 3: Package the Orchestration as a Reusable Skill — Bundle this post's orchestrator prompt and three subagent definitions into a single Skill so "parallel research" is one command away. I'll lay out how to split responsibilities across the Skill / subagent / MCP layers, from an implementer's view.
Related Posts
- Claude Skills, MCP, Website Generation, and Programmatic Video in Production: A Practical Engineer's Guide 2026 — Claude Code skills, MCP server building, website generation, and Remotion programmatic video — a practical engineer's …
- Running AI Agents as an Organization: A 12-Subagent, Neon-Backed Postgres Task Board Architecture for a One-Person Company — The era of letting one AI do everything is over.
- Claude Code 2026 Feature Roundup: Putting 1M Context, Skills, Hooks, Subagents, MCP, and Plan Mode to Real Work — Six Claude Code features ordered by adoption priority — 1M context, Skills, Hooks, Subagents, MCP, and Plan Mode — wit…
References
The factual and numerical assumptions in this article are anchored to primary or public materials that readers can revisit during AdSense review and future updates.
- Anthropic Claude Code documentation
- Model Context Protocol documentation
- Google Search quality and spam guidance
This article is for informational purposes only and does not constitute investment advice or a recommendation of any specific stock, service, or contract structure. The author may hold positions or interests related to companies or services mentioned. Generative AI was used for parts of research, translation, and proofreading, with final review by ZYL0. See the disclaimer for details.
































































