What you will be able to do
- Explain why giving an agent a large tool set makes it worse at choosing the right tool
- Restrict a subagent's tools to its role using tools and disallowedTools
- Replace a generic tool with a constrained one, and give an agent narrow cross-role access without handing over another role's whole toolset
Key concept
Scoped tool access — Each agent gets only the tools its role needs, so that it has fewer options to weigh and no ability to do work that belongs to another role. Any cross-role access is a deliberate, narrow exception. Agents do not simply inherit every tool by default.
1.Why fewer tools per agent means better tool selection
Every tool definition you give an agent is one more option it has to weigh on every turn. The more options there are, the harder the decision, and the more often the agent picks the wrong one. Anthropic's tool search documentation gives a concrete threshold: Claude's ability to pick the right tool degrades once you exceed 30–50 available tools. The fix it describes is to load a focused set: tool search works by loading only the 3–5 tools Claude needs for a given request, so accuracy stays high.
The exam guide puts this as roughly 18 tools versus 4–5. That figure of 18 does not appear in the vendor documentation available here. The documentation gives the 30–50 threshold and the 3–5 focused set. The principle is the same in both: a small toolset matched to the task beats a large general one. In a multi-agent system you don't need tool search to get there. You get the same effect by giving each agent a small toolset that matches its role.
The number of tools isn't the only problem. Overlap matters too. Anthropic's engineering guidance warns that when tools overlap in function or have a vague purpose, agents can get confused about which ones to use, and that too many tools or overlapping tools can also distract agents from pursuing efficient strategies. The tool definition guidance says the same thing from the other side: fewer, more capable tools reduce selection ambiguity and make your tool surface easier for Claude to navigate.
Checkpoint 1 of 4· Check yourself
A team's single research agent has 60 tools spread across five services, and it often calls the wrong one. Based on the documentation, what is the most direct cause?
The documentation says selection accuracy degrades past 30–50 available tools. At 60 tools, the agent has too many options to choose between reliably. Nothing in the sources mentions a hard cap of 18 or a ban on mixing services.
“Claude's ability to pick the right tool degrades once you exceed 30–50 available tools.”Source: platform.claude.com
2.Restrict each subagent to the tools its role needs
In a multi-agent design, the tool list you give each subagent is the main way to control what it does. An agent that holds a tool outside its specialty may use it even when it shouldn't. The exam guide's example is a synthesis agent that starts running its own web searches instead of working with the research it was given. The vendor documentation here doesn't describe that exact failure. What it does say is that subagents can be limited to specific tools, which reduces the risk of unintended actions. Its example is a doc-reviewer subagent that only has Read and Grep, ensuring it can analyze but never accidentally modify your documentation files. Claude Code lists the same benefit for subagents: enforce constraints by limiting which tools a subagent can use.
Watch the default. If you leave out the tools field, the subagent doesn't get a minimal set. It gets everything. The frontmatter reference says the field inherits every tool available to subagents if omitted. Scoping only happens if you write it down. You can do that two ways: an allowlist (tools) or a denylist (disallowedTools).
| Field | What it does | Watch out for |
|---|---|---|
| tools | Lists the tools the subagent can use, as a comma-separated string or a YAML list | If omitted, the subagent inherits every tool available to subagents |
| disallowedTools | Removes tools from the inherited or specified list | An entry with a specifier, such as Bash(git push *), still removes the whole tool |
| mcpServers | Lists the MCP servers available to this subagent, by name or inline config | Ignored for plugin subagents |
Checkpoint 2 of 4· Fill the gap
This read-only reviewer subagent is meant to have only three tools. Which frontmatter key restricts it to them?
---
name: code-improver
description: Scans files and suggests improvements for readability, performance, and best practices. Use after writing or modifying code.
? : Read, Grep, Glob
model: sonnet
---The tools key is the allowlist. disallowedTools would remove Read, Grep and Glob and keep everything else, which is the opposite of what's wanted.
Source: code.claude.com3.Constrained tools and narrow cross-role access
Choosing the right number of tools is only part of the job. You also choose which tools an agent gets. A generic tool such as fetch_url lets an agent do far more than its role needs. The exam guide's fix is a constrained replacement, such as a load_document tool that checks the URL really points to a document before fetching it. The documentation here doesn't include that example. It does teach the same principle. It warns against tools that merely wrap existing software functionality or API endpoints, and gives an address-book example: build a search_contacts or message_contact tool instead of a list_contacts tool. In both cases the tool itself does less, so the agent can't use it for the wrong thing.
Claude Code shows a version of this that is enforced outside the model. The db-reader subagent below gets only Bash, which on its own is very broad. A PreToolUse hook then runs a validation script before every Bash call. The script blocks SQL write keywords and allows only SELECT queries. The limit is enforced in code. It doesn't depend on the agent following instructions in its prompt.
---
name: db-reader
description: Execute read-only database queries
tools: Bash
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-readonly-query.sh"
---Strict scoping causes a problem when an agent has a frequent, small need that belongs to another role. The exam guide's example is a synthesis agent that keeps needing to check a fact. The exam's recommended pattern is a narrow cross-role tool, such as verify_fact, for that one common need, while anything more complex goes back to the coordinator. The synthesis agent doesn't get the research agent's full search toolset. The sources don't describe this pattern directly, so treat it as an application of the scoping principle. The closest documented mechanism is on the coordinator side: a coordinator's tools field can name which subagents it may spawn. Complex work is then routed only to the specialists you allow.
---
name: coordinator
description: Coordinates work across specialized agents
tools: Agent(worker, researcher), Read, Bash
---Checkpoint 3 of 4· Exam question
A classification subagent must always emit a structured label using one of its provided tools (e.g. tag_urgent, tag_normal, tag_spam) and must never return free-text commentary instead of a call, though which specific tag applies depends on the message content. Which tool_choice setting guarantees this behavior?
Correct answer: A — tool_choice: {"type": "any"}, which requires the model to call one of the provided tools without pinning it to a specific one
- A. Correct. "any" tells the model it must use one of the provided tools without forcing a particular one, guaranteeing a structured tool call while still letting the model pick the tag that matches the message.
- B. Incorrect. "auto" leaves the choice of calling a tool at all up to the model, which does not guarantee a structured tag is always produced, undermining the requirement for consistent structured output.
- C. Incorrect. Forcing a single named tool would apply the same tag on every message regardless of content, which contradicts the need for the correct tag to vary by message.
- D. Incorrect. "none" blocks tool calls entirely, so the model could only respond in prose, which is the opposite of the required structured-output guarantee.
Checkpoint 4 of 4· Check yourself
A subagent's job is to run read-only database queries, but its only tool is Bash. Which design matches the db-reader example in the Claude Code docs?
The documented db-reader keeps Bash and runs a validation script before every Bash call, blocking write operations. A disallowedTools entry with a specifier removes the whole tool, and leaving out tools means the subagent inherits every tool.
“An entry with a specifier, such as Bash(git push *), still removes the whole tool”Source: code.claude.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Giving every agent the full tool library makes the system more capable, because each agent can handle anything that comes up.Why is that wrong?
Selection accuracy drops as the number of available tools grows. A focused set of 3–5 relevant tools is what keeps tool choice reliable.
Covered in Why fewer tools per agent means better tool selection
2.If you don't list any tools for a subagent, it starts with no tools, or only a safe minimal set.Why is that wrong?
Leaving out the tools field gives the subagent every tool available to subagents. Scoping only happens if you set tools or disallowedTools explicitly.
Covered in Restrict each subagent to the tools its role needs
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“Claude's ability to pick the right tool degrades once you exceed 30–50 available tools.”
↩︎ Why fewer tools per agent means better tool selection“loading only the 3–5 tools Claude needs for a given request”
↩︎ Exam trap 1 - 2.https://www.anthropic.com/engineering/writing-tools-for-agentsSecondary source
“When tools overlap in function or have a vague purpose, agents can get confused about which ones to use.”
↩︎ Why fewer tools per agent means better tool selection“In the address book case, you might choose to implement a search_contacts or message_contact tool instead of a list_contacts tool.”
↩︎ Constrained tools and narrow cross-role access - 3.
“Fewer, more capable tools reduce selection ambiguity and make your tool surface easier for Claude to navigate.”
↩︎ Why fewer tools per agent means better tool selection - 4.https://code.claude.com/docs/en/agent-sdk/subagentsOfficial docs
“ensuring it can analyze but never accidentally modify your documentation files.”
↩︎ Restrict each subagent to the tools its role needs“Tool restrictions: subagents can be limited to specific tools, reducing the risk of unintended actions.”
↩︎ Key concept - 5.https://code.claude.com/docs/en/sub-agentsOfficial docs
“Enforce constraints by limiting which tools a subagent can use”
↩︎ Restrict each subagent to the tools its role needs“tools: Agent(worker, researcher), Read, Bash”
↩︎ Constrained tools and narrow cross-role access“Inherits every tool available to subagents if omitted.”
↩︎ Exam trap 2“An entry with a specifier, such as Bash(git push *), still removes the whole tool”
↩︎ Checkpoint