feat(web): web/search + web/fetch native — the persona can forage the web - #2467
Merged
Conversation
… like I do (score lever) Joel (2026-08-25): 'think of the stuff you use and make sure we have it.' I forage the web constantly — library APIs, error messages, docs — and on SWE/ terminal tasks that knowledge often isn't in the repo. But web/search and web/fetch were catalog-only, and a NATIVE-tool-call model (Ornith) can ONLY emit calls for tools in its offered specs (unlike a text model, it has no reach-by-name affordance). So her hands literally could not touch the web mid-task. Declaring native:true puts web foraging in her bounded per-turn surface — offered in full, budget-protected by describe_tool_tokens like every native tool. The backend already works keyless (duckduckgo) or with a BRAVE_API_KEY. Direct capability parity with the agent she's replacing. Battery: web:: + persona_tools + native surface + ratchets green (58 passed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
joelteply
enabled auto-merge (squash)
August 25, 2026 15:31
…eiling (regression the ratchet caught) The native-web change (#2467) grew the agentic surface 8623 → 9513 tokens, over the 8650 ceiling — the #333 ratchet doing its job ('careful not to regress', Joel). SHRUNK FIRST: trimmed both web DESCRIPTIONs to one line each (detail lives in the param docs + commands/help) → 9350. The rest (+727) is the irreducible param schemas of two real tools. Per the ratchet's own contract, re-pinned the ceiling 8650 → 9400 with the addition stated plainly. Not a new overflow: the surface already exceeded the 8192 tight-test window (the budget trims volatile context to fit, specs reserved up front) — this raises the reserved floor. Ornith serves at 166k where the ceiling is irrelevant; the tight-window LCD persona pays with less recall room, a conscious trade for web foraging. Battery: tool_surface + prompt_shaping + ratchets green (25 passed, EXIT=0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
The name_and_description test pinned the OLD verbose DESCRIPTION (brave/ duckduckgo/no-API-key) — but the surface-ceiling fix deliberately moved that detail OUT of DESCRIPTION (which rides the token-budgeted native surface) INTO the adapter param doc. Test now asserts the concise contract: DESCRIPTION says what it does (search web) + points at web/fetch; the adapter/keyless guidance is asserted on the WebSearchParams schema, its new home. A premise change from the ceiling fix, stated as such — not a weakening. Battery: web::search + web::fetch + ratchet green (4 passed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Capability parity: I use web lookup constantly on exactly this kind of task, but a native-call model couldn't reach catalog-only web verbs. native:true puts foraging in her per-turn surface, budget-protected. Keyless backend works out of the box.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo