
Fixing Claude Code Web Limits: Search Refills and WebFetch Pagination
Lachlan and James break down Claude Code versions 2.1.290 and 2.1.291, highlighting new hourly refills for WebSearch budgets and pagination support for truncated WebFetch pages. They also cover critical regression fixes and expanded permission prompts for Bash commands with wildcards.
Chapter 1
WebSearch Refills and WebFetch Pagination in Claude Code 2.1.290
Lachlan Reed
Here's a small thing that quietly wrecks long sessions: Claude Code just stops searching the web, halfway through a big research job. This is the Claude Code Changelog, brought to you by Jellypod AI. I'm Lachlan.
James Turner
And I'm James. Today it's versions 2.1.290 and 2.1.291, released October 5th and 6th. Two changes: WebSearch now refills over time, and WebFetch no longer silently chops off long pages.
Lachlan Reed
WebSearch first. Before 2.1.290, an interactive session got a fixed budget of 200 searches. The changelog says the session ended after 200 calls, and you could adjust that cap with CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION, which came in around 2.1.212. Now the budget refills at 100 calls per hour, and a new variable sets that rate: CLAUDE_CODE_WEB_SEARCH_REFILLS_PER_HOUR.
James Turner
The practical effect is for long lived sessions. Say you've got a session doing deep research on a migration, or a /loop polling for something all day. Hitting the wall used to mean exiting and resuming. Now it just waits for the budget to come back. You don't have to do anything for the default. If you want faster, export CLAUDE_CODE_WEB_SEARCH_REFILLS_PER_HOUR equals 200. If you want a hard lid, set it to 0. The changelog says 0 turns it off. SessionWatcher reads that as turning refilling off, and Classmethod points out the changelog doesn't say whether it's the refilling or the quota itself. So test it before you rely on it in CI.
Lachlan Reed
And a caveat there. The announcement doesn't state a maximum the budget can build up to, and it doesn't split rates by plan. So if an agent burns a hundred searches in a burst, I'd expect to wait for the hourly refill to catch up, but that's my read, not something the release notes spell out. Also, this is a tool budget for interactive sessions. It's not your subscription message limit.
James Turner
Now WebFetch, which I think is the bigger deal. Previously it silently dropped page text past 100,000 characters. Silently is the problem. If the method you asked about lived at character 105,000 of an API reference, Claude had no signal anything was missing, so it could say the method doesn't exist. In 2.1.290 it tells Claude how much was unread, and it takes an offset parameter to continue from there.
Lachlan Reed
So with a huge OpenAPI spec or a long RFC, you can just say: fetch the next section of this spec using the offset parameter. Claude already knows how much is left, so it can page through. One watch out: every chunk is up to a hundred thousand characters going into your context. That will probably bring compaction on sooner, so ask for the next offset only when you need it.
James Turner
Important one: update straight to 2.1.291, with claude update. 2.1.290 had a regression where cloud sessions could drop answers to permission prompts. And 2.1.291 also fixes a 2.1.288 regression where the last messages of a session could be lost when you quit.
Lachlan Reed
A few smaller ones. claude attach and claude logs now accept part of a session name instead of the full id. Scheduled tasks, like an interval /loop, now survive compaction on conversations compacted from this version on.
James Turner
And on permissions: Bash checks now ask approval for read only looking commands like rg or git grep when the arguments contain wildcards the shell would expand. So rg TODO star dot txt prompts you, but rg TODO notes.txt still passes. pyright also now needs approval. Expect a few more prompts after you update.
Lachlan Reed
That's the update. Check your version, set the refill variable if you need it, and we'll catch you next time.