Rubric
Contents — domains, guide and mocks

Progressive discovery vs. monolithic context

CCAR-P 3.813 min read · checked 21 September 2026

Task statementEvaluate progressive discovery vs. monolithic context strategy

Two strategies for the same agent

Monolithic

  • Every tool schema, manual and rule sent on each request
  • Nothing to discover, so nothing is missed
  • One stable prefix that caches well
  • Cost, latency and distraction grow with every addition

Progressive discovery

  • Small always-on core plus names and descriptions
  • Full content loaded when the task needs it
  • Scales to thousands of tools or documents
  • Depends on good descriptions; adds lookup steps
Monolithic context puts everything in front of the model on every request. Progressive discovery keeps a small core plus an index, and loads the detail only when the task calls for it.

Why “just load everything” stops working

Anthropic’s context-engineering post treats context as a finite attention budget. It names the effect context rot: as the number of tokens grows, the model’s ability to recall any one piece of information from them falls. Every token attends to every other token, so relationships grow with the square of the context length, and attention is spread thinner. The post’s guiding principle is to find the smallest set of high-signal tokens that makes the outcome you want most likely.

Tools show the effect most sharply. The tool search documentation says Claude’s tool-selection accuracy degrades once more than about 30–50 tools are available, and that a typical multi-server setup costs around 55,000 tokens in definitions before any work starts. Instructions behave the same way. Claude Code’s docs warn that a bloated CLAUDE.md makes Claude ignore instructions, and suggest keeping it under 200 lines. A bigger context window raises the ceiling. It doesn’t change the fact that more material means more noise around the part that matters.

When monolithic context is the right call

Monolithic is not a mistake in itself. It is the right strategy when the material is small, stable and needed on almost every turn. It is also right when the task needs the whole of something at once, such as checking a 40-page agreement for internal consistency, where any piece left unloaded is a piece the model can’t compare. And it is right when latency matters more than tokens: every discovery step is an extra model decision and often an extra round trip.

Caching strengthens the case. A long, unchanging prefix is exactly what prompt caching rewards: cache reads are billed at a tenth of the base input price, with a five-minute default lifetime. Caching is strict about order, though. It runs toolssystemmessages, and changing tool definitions invalidates everything after them. A design that swaps tool sets in and out of the tools array on each request can throw away its cache every time. The tool search docs note that deferred tools are kept out of the cached prefix, so discovery and caching can work together.

Signal in the scenarioLeans monolithicLeans progressive
Size of the materialA few thousand tokensTens of thousands and growing
How often each part is usedNearly every requestA long tail, rarely used
Kind of reasoningNeeds the whole at onceNeeds one relevant piece
Rate of changeStable, cacheableFrequent additions and edits
Latency budgetTight; no room for lookupsTolerates an extra step
Must it always apply?Yes: safety, compliance rulesNo: reference, how-tos

How progressive discovery works in Claude’s tools

Progressive discovery has the same shape everywhere: a thin, always-loaded index (names and descriptions) and full content that loads only when chosen. The context-engineering post describes it as agents keeping lightweight identifiers such as file paths, queries and links, and loading data at runtime. Each step reveals context that informs the next decision.

Levels of disclosure, from always-on to never-loaded

  1. Always-on coresystem prompt, CLAUDE.md, hard rules
  2. Indexskill descriptions, tool names, file paths
  3. On-demand bodySKILL.md body, deferred tool schema
  4. Deep referencelinked files read only in specific cases
  5. Executed, not readscripts run; only output returns
Each level down costs nothing until the task reaches it. The top level is the only one the model is guaranteed to read.

Agent Skills are the clearest example. Anthropic’s Skills post describes the levels: a skill’s name and description sit in the system prompt from the start; the SKILL.md body loads when Claude judges the skill relevant; further linked files load only when a specific case needs them (the PDF skill keeps form-filling guidance in a separate forms.md); and bundled scripts run without their code entering context. The post concludes that the amount of context a skill can bundle is effectively unbounded.

Tool search does the same for tools. You send the full catalogue on every request, but mark most tools defer_loading: true. Only the non-deferred tools and the search tool enter Claude’s context. When Claude needs something else it searches, and the API expands matches into full definitions. The docs recommend it once you pass about ten tools or 10,000 tokens of definitions, and advise keeping the three to five most-used tools loaded. They advise against it when every tool is used on every request. Deciding which tools belong in the catalogue at all is 3.1.

A large catalogue with a small loaded corepython
tools = [
    # The search tool itself is never deferred.
    {"type": "tool_search_tool_bm25_20251119", "name": "tool_search_tool_bm25"},

    # Hot path: used on most requests, so always loaded.
    {"name": "get_account", "description": "...", "input_schema": {...}},
    {"name": "search_kb",   "description": "...", "input_schema": {...}},

    # Long tail: sent every time, but only loaded if Claude finds it.
    *[{**t, "defer_loading": True} for t in rare_tools],   # e.g. 140 tools
]

response = client.messages.create(
    model=MODEL, max_tokens=2048, tools=tools, messages=messages,
)
# Discovered tools arrive as tool_reference blocks the API expands itself.
# Pass the assistant content back unchanged on the next request.

Code execution pushes the idea furthest. Anthropic’s code-execution-with-MCP post presents MCP servers to the agent as files of code. The agent lists and reads only the tool files it needs, then filters large results in code before anything returns to the model. Its example drops from about 150,000 tokens to about 2,000. The price is a secure sandbox to run the code in.

Discovery is only as good as the index

Moving content behind a lookup creates a new failure mode: the model never looks. Claude Code’s docs say it plainly for skills: Claude matches the task against skill descriptions, and vague or overlapping descriptions lead it to load the wrong skill or miss one that would help. Tool search matches on tool names, descriptions and argument names, so a deferred tool called proc_v2 with a one-line description is effectively invisible. The context-engineering post adds two more costs. Runtime exploration is slower than retrieving pre-computed data, and without good tools and heuristics an agent can waste context chasing dead ends.

Placing one piece of context

Where should this piece of context live?
  • Must apply on every turn
    Always-on coreor enforce with a hook
  • Small and used on most turns
    Load up frontand cache the prefix
  • Large, needed occasionally
    Discover on demandskill, deferred tool, file
  • Bulky data to process
    Execute, don’t readcode filters it first

Hybrid is the usual answer

In practice the choice is rarely all one or all the other. The context-engineering post uses Claude Code as its model of a hybrid: CLAUDE.md files go into context up front, while tools such as glob and grep fetch files just in time. It suggests the hybrid suits work with less dynamic content, naming legal and finance. Claude Code’s own feature table shows the same layering, and it is a useful template for any agent you design.

Claude Code featureLoadsContext cost
CLAUDE.mdSession start, in fullEvery request
.claude/rules/ with pathsWhen matching files are openedOnly when relevant
SkillsDescriptions at start, body when usedLow until used
MCP serversTool names at start, schemas on demandLow until a tool is used
SubagentsFresh context when spawnedIsolated; only a summary returns
HooksOn their event, outside the modelZero unless they return output

Traps the wrong answers are built from

Tempting but wrongDo this instead
Loading every tool, manual and policy because the context window can hold themKeep a small always-on core and discover the long tail through skills, tool search or file access.
Putting must-follow rules behind a skill or lookup to save tokensKeep them in the always-on core, and enforce critical ones outside the model with hooks or permissions.
Deferring tools or skills that are used on nearly every requestKeep the few hot-path tools loaded; defer only the rarely used ones.
Writing vague names and descriptions for deferred tools and skillsWrite descriptions that say what, when and for which system, since discovery matches on them.
Swapping tool definitions in and out of the tools array on every requestUse deferred loading so the cached prefix stays stable.

You should now be able to

  • Explain context rot and why a larger window does not remove the cost of loading everything.
  • Identify when monolithic context is the right choice: small, stable, always needed, whole-document reasoning, tight latency.
  • Apply progressive discovery with skills, tool search, file references and code execution.
  • Keep must-follow rules in always-on context or enforce them outside the model.
  • Design descriptions and metadata so discoverable content is actually found.
  • Place each piece of context in a hybrid design, and account for prompt caching.

Practice questions

Original questions written for this lesson, in the exam’s style. Answer first, then open the reasoning — every option is explained, including why the wrong ones are tempting.

  1. Question 1

    An internal IT agent has grown to 210 tools across eleven MCP servers. Tool definitions now use most of each request, and the agent often calls a similarly named tool from the wrong server. About six tools handle most tickets.

    Which change best addresses both problems?

    1. AMove to a model with a larger context window so all definitions fit comfortably.
    2. BKeep the six common tools loaded, defer the rest behind tool search, and sharpen their descriptions.
    3. CDefer all 210 tools, including the common ones, so every request starts minimal.
    4. DMerge the eleven servers’ tools into one system-prompt document describing them all.
    Show answer and reasoning
    1. AIncorrect. More room doesn’t fix selection among 210 look-alike tools, and each request still pays for every definition.
    2. BCorrect. Deferral cuts the always-on load, a small visible set improves selection, and better descriptions make the long tail findable.
    3. CIncorrect. The docs advise keeping the most-used tools loaded; deferring them adds a search step to nearly every ticket.
    4. DIncorrect. That is still monolithic context, and a prose description doesn’t give the model callable tools.
  2. Question 2

    A healthcare provider’s assistant has a short rule set on handling patient identifiers that applies to every conversation. To reduce tokens, an engineer moves it into a skill with the description “PHI guidance”.

    What is the main problem with this change?

    1. ASkills cannot contain compliance content, only code.
    2. BThe skill will be loaded on every request anyway, so nothing is saved.
    3. CA rule that must always apply now depends on the model choosing to load it.
    4. DSkill descriptions are limited to one word, so the description is too short.
    Show answer and reasoning
    1. AIncorrect. Skills can hold instructions and reference material; that is most of what they are for.
    2. BIncorrect. A skill’s body loads only when judged relevant; that is exactly the risk here, not a saving.
    3. CCorrect. Discovery can miss. Rules that must hold on every turn belong in the always-on core, with hard enforcement outside the model where possible.
    4. DIncorrect. There is no such limit. A short, vague description does make discovery less reliable, but the deeper issue is putting a must-follow rule behind discovery at all.
  3. Question 3

    A contracts team uses Claude to check each 35-page master services agreement for internal inconsistencies, such as a liability cap in one clause contradicting an indemnity elsewhere. A proposal suggests indexing clauses and letting the agent look up only the clauses it thinks are relevant.

    Which strategy fits this task best?

    1. ALoad the whole agreement into context for each review.
    2. BIndex clauses and retrieve the top five most similar to the question.
    3. CSplit the agreement into a skill per clause type with descriptions.
    4. DHave the agent grep the agreement for the word “liability” only.
    Show answer and reasoning
    1. ACorrect. Finding contradictions needs every clause visible at once. The document is bounded and fits, and discovery would risk missing the clause that conflicts.
    2. BIncorrect. Inconsistencies often sit between clauses that don’t look similar, so a similarity lookup can miss exactly the pair that matters.
    3. CIncorrect. That adds lookups the model may not make, for a document that should simply be read whole.
    4. DIncorrect. Keyword lookups find one side of a conflict and miss related clauses written in other words.
  4. Question 4

    A team changes the contents of its tools array on every request, including only the tools a router predicts will be needed. Costs rose after the change. What is the most likely explanation?

    1. ATool search charges a separate fee for each search.
    2. BRouters always pick more tools than a single loaded list contains.
    3. CPrompt caching only works with the full tools array for Claude Code.
    4. DChanging tool definitions invalidates the cache for everything that follows.
    Show answer and reasoning
    1. AIncorrect. The docs say tool search has no separate metering; discovered tools count as ordinary input tokens. Nor is this team using tool search at all.
    2. BIncorrect. A router usually picks fewer tools. Its choices are not what drove costs up.
    3. CIncorrect. Caching is an API feature and doesn’t require any particular tool count.
    4. DCorrect. Caching runs tools → system → messages, so a different tools array each time means no cache hits. Deferred loading keeps the prefix stable instead.

Sources

Drafted with AI assistance and checked against the sources above; expert review is in progress. Spotted an error? Tell us and it gets fixed, dated and listed on how this is written.