Guillaume Rufenacht.
ServicesAboutWorkWritingContact
EN/FR
All writing
Claude Code|June 18, 2026|9 min read

Tool, Skill, or Subagent? Structuring Claude Code Agents That Scale

When an agent's prompt hits 400 lines and performance degrades, the fix isn't a smarter model, it's the right primitive. A decision framework for tools, skills, and subagents, drawn from Anthropic's own engineers.

GR

Guillaume Rufenacht

AI Product Manager · Lisbon

Every agent that survives contact with real requirements eventually rots the same way. You ship something that works, then bolt on capability after capability until the system prompt is 400 lines, there are a dozen tools, a handful of subagents, and performance quietly degrades. The fix isn’t a smarter model. It’s knowing which agentic primitive to reach for, and when.

Anthropic’s own engineers describe exactly this failure mode, and their decision framework for tools vs skills vs subagents is the clearest I’ve seen. It matches what I’ve learned running the agent pipelines behind Geonimo, so here it is, in the order you should actually reach for things.

Key takeaways

  • Start with human-like primitives: a file system, code execution, web search, a to-do list. Claude Code is essentially 'Claude with a computer.'
  • Use skills for progressive disclosure: package policies and procedures so the model pulls them in only when needed, instead of bloating the system prompt.
  • Use subagents for two jobs only: parallelizing work, or getting a fresh, independent perspective. Don't overuse them.
  • Reach for custom tools next, and MCP last, only when many agents need the same governed tools.
  • Keep the system prompt for what the model needs every time; everything else is a skill.

Start with human-like primitives

When you build an agent, start with the same primitives a person has at a desk: a file system, the ability to write and run code, web search, a to-do list. That’s the insight behind Claude Code, it’s not a thousand bespoke tools, it’s Claude given access to a computer. The payoff compounds: as better models ship, they use those same primitives more effectively, no rewrite required.

Code execution is the standout. If your agent needs to reason over a big CSV, don’t dump the whole thing into context, give it a bash tool and let it write a quick script. One real example cut token usage from over 200,000 to a fraction of that, with lower cost and latency, just by letting the agent compute instead of “reading” everything into its head. Start with primitives, remove the ones you don’t need, and only then add custom tools.

Use skills for progressive disclosure

The most common mistake is stuffing every policy and procedure into the system prompt. It grows to hundreds of lines, contradicts itself, and confuses the model, the cause of a lot of “the model hallucinated” bugs that are really context bugs. Skills fix this. A skill is packaged, composable information the model pulls into context only when it realizes it needs it. Move your forecasting guidelines, your brand rules, your testing process into skills, and the system prompt shrinks to the handful of things the model needs every time.

In one walkthrough this took a 400-line system prompt down to about 15, with the business logic relocated into skills, and eval scores climbed as a direct result. This is the same idea as the “directives” in my outbound system: encode the judgment once, load it on demand.

The rule of thumb

System prompt = what the model needs regardless of the task. Skill = what it needs only some of the time. If you can’t tell which is which, the model can’t either, and that ambiguity is what’s tanking your evals.

Use subagents for exactly two jobs

Subagents are powerful and over-reached for. There are really only two cases where they earn their complexity:

01

Parallelize: throw a lot of Claude at a problem

Deep research, broad codebase exploration, anything that benefits from many minds working at once. Subagents let you fan out and finish faster.
02

Get a fresh, independent perspective

You don’t want the same instance that wrote the code to review it. A separate reviewer with no prior context catches what the author can’t. Same logic for isolating a forecasting step so the main conversation can’t distort it.

Outside those, be skeptical. The hidden cost of subagents is communication: getting the hand-off between an orchestrator and its subagents right is hard, and a breakdown there is a classic, hard-to-debug failure. Frontier models can now hold more in a single context than they used to, so a lot of what used to need a subagent can just live in the main agent.

Custom tools next, MCP last

Only after primitives and skills should you add custom tools, and only for capability the primitives genuinely can’t cover. MCP comes last. It’s tempting to run toward MCP first, but you usually end up with a sprawl of overlapping servers that pollute context. Reserve it for when multiple agents or clients need the same standardized, governed set of tools. Increasingly, the leaner move is to let the agent call CLIs and APIs via code execution rather than wiring up an MCP server at all.

Measure it: hill-climb on evals

None of these decisions are guesses. The way to make them is to baseline your agent on a set of evals, change one thing, the architecture, the skills, the tools, and rerun, keeping what improves. Track both the deterministic metrics (turns, latency, tokens) and the fuzzy ones (tone, output quality, via an LLM judge). In the example I’m drawing on, this loop took an agent from a failing 62% to about 92%, mostly by simplifying: fewer tools, a short prompt, logic in skills. The discipline is the same one I bring to the systems I build: simplify, measure, repeat.

The takeaway

When an agent outgrows its prompt, don’t reach for a bigger prompt. Reach in order: primitives, then skills for progressive disclosure, then subagents for parallelism or a fresh perspective, then custom tools, then MCP. Simplify the architecture and let evals tell you it worked.

This is how I keep agents reliable in production. See the related habits Anthropic’s team uses and the prompting playbook, or get in touch if you want help building this way.

Frequently asked questions

When should I use a skill vs put something in the system prompt?

Keep the system prompt for what the model needs on every task. Move anything it needs only some of the time, policies, procedures, brand rules, into skills, which the model pulls into context on demand. That keeps the prompt short and the context clean.

When should I use a subagent?

Two cases: to parallelize work (deep research, codebase exploration), or to get a fresh, independent perspective (a separate reviewer for code another instance wrote). Outside those, prefer keeping capability in the main agent, subagent communication is a common failure point.

What tools should an agent start with?

Human-like primitives: a file system, code execution, web search, and a to-do list. Code execution especially, letting the agent write and run code to analyze data uses far fewer tokens than loading everything into context.

When should I use MCP?

Last. Reach for MCP only when multiple agents or clients need the same standardized, governed tools. Starting with MCP often creates a sprawl of overlapping servers that pollute context; primitives and custom tools come first.

Claude CodeAI agentsSkillsSubagentsAgent architectureContext engineering

Work with me

Want a system like this built for your pipeline?

I help teams take AI from a clever prototype to dependable production, outbound engines, lead intelligence, and the LLM pipelines underneath. See what I have shipped or get in touch.

Guillaume Rufenacht.

iBuildYourApp, the consulting practice of Guillaume Rufenacht. Websites, SEO, attribution, and automation that win small and mid-sized businesses more clients.

Navigate

ServicesAboutWorkContactWriting

Contact

EmailTelegramLisbon, Portugal

© 2026 Guillaume Rufenacht

Built with Next.js & Tailwind CSS