<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sam Stull</title>
    <description>The latest articles on DEV Community by Sam Stull (@samstull9007).</description>
    <link>https://dev.to/samstull9007</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4207497%2F4b85a085-0838-4d78-b526-5418ff578cb8.png</url>
      <title>DEV Community: Sam Stull</title>
      <link>https://dev.to/samstull9007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samstull9007"/>
    <language>en</language>
    <item>
      <title>Why a long idle pause costs you: Claude Code's prompt cache</title>
      <dc:creator>Sam Stull</dc:creator>
      <pubDate>Mon, 26 Oct 2026 03:39:26 +0000</pubDate>
      <link>https://dev.to/samstull9007/why-a-long-idle-pause-costs-you-claude-codes-prompt-cache-3jp4</link>
      <guid>https://dev.to/samstull9007/why-a-long-idle-pause-costs-you-claude-codes-prompt-cache-3jp4</guid>
      <description>&lt;p&gt;You leave a long Claude Code session for lunch, come back, type one short message, and the 5-hour meter jumps. Nothing went wrong:&lt;br&gt;
the prompt cache expired while you were away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After a pause, your next message re-sends the whole conversation as new tokens.&lt;/strong&gt; New tokens count about 67 times as much&lt;br&gt;
against the limit as cached ones (on my account), so by those rates the first message back into a 300k-token session costs about 1.8% of a 5-hour&lt;br&gt;
window, where the same message a minute earlier would have cost about 0.03%.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the prompt cache does
&lt;/h2&gt;

&lt;p&gt;Every Claude Code model call sends the whole conversation: instructions, tool definitions, every message and tool result so far. The&lt;br&gt;
part that hasn't changed since the last call is read back from Anthropic's prompt cache instead of being processed again. Cache reads&lt;br&gt;
are cheap, which is why a long session costs far less than its size suggests.&lt;/p&gt;

&lt;p&gt;The cache doesn't last forever. Anthropic's docs: "By default, the cache has a 5-minute lifetime. The cache is refreshed for no&lt;br&gt;
additional cost each time the cached content is used", and a 1-hour lifetime is available as an option&lt;br&gt;
(&lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching" rel="noopener noreferrer"&gt;Prompt caching&lt;/a&gt;). Each call keeps it warm. Stop&lt;br&gt;
for longer than its lifetime and it's gone.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the first message back costs
&lt;/h2&gt;

&lt;p&gt;With the cache gone, the next call writes the whole context to the cache again. Cache writes are new tokens, and new tokens are what&lt;br&gt;
the usage limit mostly counts. From my own fit (&lt;a href="https://limitcast.dev/blog/tokens-per-percent/" rel="noopener noreferrer"&gt;How many tokens is 1% of your limit?&lt;/a&gt;): 1% of&lt;br&gt;
the 5-hour window was about 166k new tokens or 11.2M cached ones.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context re-sent&lt;/th&gt;
&lt;th&gt;Cache still warm&lt;/th&gt;
&lt;th&gt;Cache expired&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100k tokens&lt;/td&gt;
&lt;td&gt;≈ 0.01%&lt;/td&gt;
&lt;td&gt;≈ 0.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300k tokens&lt;/td&gt;
&lt;td&gt;≈ 0.03%&lt;/td&gt;
&lt;td&gt;≈ 1.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;600k tokens&lt;/td&gt;
&lt;td&gt;≈ 0.05%&lt;/td&gt;
&lt;td&gt;≈ 3.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Share of the 5-hour window for the context alone (the reply adds a little), from one account's measurement: 6.04% per million new&lt;br&gt;
tokens and 0.09% per million cached ones. Your plan's numbers differ; the ratio is what matters.&lt;/p&gt;

&lt;p&gt;One message is a few percent. It adds up when you come back to several long sessions after a meeting, or when every subagent you&lt;br&gt;
start after a break has to rebuild its context too.&lt;/p&gt;
&lt;h2&gt;
  
  
  What to do about it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compact before you leave.&lt;/strong&gt; &lt;code&gt;/compact&lt;/code&gt; replaces the conversation with a summary, so the cold rebuild is small.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Or clear it.&lt;/strong&gt; If the next task is unrelated, &lt;code&gt;/clear&lt;/code&gt; and start fresh instead of paying to rebuild a context you don't need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Come back to one session at a time.&lt;/strong&gt; Each expired session rebuilds separately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watch your context size.&lt;/strong&gt; limitcast Pro puts a &lt;code&gt;/compact&lt;/code&gt; nudge in the status line once a session re-sends more than ~150k tokens per call.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  limitcast 0.11: a warning before the expensive message
&lt;/h2&gt;

&lt;p&gt;limitcast Pro now has a cold-cache warning. When a session that re-sends 100k+ tokens has sat idle past the cache lifetime (60 minutes&lt;br&gt;
by default, &lt;code&gt;LIMITCAST_CACHE_MINUTES&lt;/code&gt; to change it), it holds your first message once and tells you what it will cost against&lt;br&gt;
your own measured limit. Send it again to go ahead, or &lt;code&gt;/compact&lt;/code&gt; first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;limitcast: this session sat idle for 75 minutes, so its prompt cache has
expired. Your message re-sends 300k tokens of context: ≈1.8% of your
5-hour window (≈0.03% if the cache were still warm). Send it again to go
ahead, or run /compact first to shrink it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It comes with &lt;code&gt;limitcast install --guard&lt;/code&gt; (&lt;a href="https://limitcast.dev/#install" rel="noopener noreferrer"&gt;install&lt;/a&gt;); free installs record what it would have held.&lt;br&gt;
Already installed with &lt;code&gt;--guard&lt;/code&gt;? Run &lt;code&gt;limitcast doctor --fix&lt;/code&gt; to add it. &lt;a href="https://limitcast.dev/#f-cold" rel="noopener noreferrer"&gt;More on the warning&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure your own numbers
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; limitcast
limitcast &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="c"&gt;# records your limit readings from the status line&lt;/span&gt;
&lt;span class="c"&gt;# use Claude Code for a day or two, then:&lt;/span&gt;
limitcast results &lt;span class="c"&gt;# what 1% of your 5-hour window is, in new and cached tokens&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local only, never uses your Claude login. &lt;a href="https://limitcast.dev/#install" rel="noopener noreferrer"&gt;Install details&lt;/a&gt; · &lt;a href="https://limitcast.dev/#pricing" rel="noopener noreferrer"&gt;Pro plans&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;limitcast forecasts when each Claude Code and Codex window runs out, and its Pro plan stops runaway subagents before they burn the rest of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://limitcast.dev/" rel="noopener noreferrer"&gt;See what limitcast does&lt;/a&gt; · &lt;a href="https://limitcast.dev/blog/claude-code-usage-limits/" rel="noopener noreferrer"&gt;How the 5-hour and weekly limits work&lt;/a&gt; ·&lt;br&gt;
&lt;a href="https://limitcast.dev/blog/tokens-per-percent/" rel="noopener noreferrer"&gt;How many tokens is 1%?&lt;/a&gt; · &lt;a href="https://limitcast.dev/blog/subagents/" rel="noopener noreferrer"&gt;Subagents and your limit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Claude Code usage limit reached: how the 5-hour and weekly limits work</title>
      <dc:creator>Sam Stull</dc:creator>
      <pubDate>Mon, 26 Oct 2026 03:38:33 +0000</pubDate>
      <link>https://dev.to/samstull9007/claude-code-usage-limit-reached-how-the-5-hour-and-weekly-limits-work-3mn1</link>
      <guid>https://dev.to/samstull9007/claude-code-usage-limit-reached-how-the-5-hour-and-weekly-limits-work-3mn1</guid>
      <description>&lt;p&gt;"You've hit your limit" usually arrives in the middle of something. Here is how Claude Code's limits work on a Pro, Max or Team plan,&lt;br&gt;
what actually moves them, and how to see the end of a window coming instead of finding out from the error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are two limits.&lt;/strong&gt; A session limit that resets every five hours, and a weekly limit that resets at a fixed time each week.&lt;br&gt;
What fills them is mostly &lt;strong&gt;new&lt;/strong&gt; tokens: on my account, 1% of the 5-hour limit was about 166k new tokens but about 11 million&lt;br&gt;
cached ones.&lt;/p&gt;
&lt;h2&gt;
  
  
  The two windows
&lt;/h2&gt;

&lt;p&gt;-&lt;br&gt;
&lt;strong&gt;The 5-hour session limit.&lt;/strong&gt; Anthropic's help center: paid plans have "a session limit that resets every five hours, and weekly&lt;br&gt;
limits that reset once every week"&lt;br&gt;
(&lt;a href="https://support.claude.com/en/articles/11647753-how-do-usage-and-length-limits-work" rel="noopener noreferrer"&gt;How do usage and length limits work?&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;-&lt;br&gt;
&lt;strong&gt;The weekly limit.&lt;/strong&gt; It "reset[s] at a fixed time each week that is assigned to your account", whenever you started using Claude&lt;br&gt;
(&lt;a href="https://support.claude.com/en/articles/8325606-what-is-the-pro-plan" rel="noopener noreferrer"&gt;What is the Pro plan?&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;-&lt;br&gt;
&lt;strong&gt;Where to see them.&lt;/strong&gt; Settings → Usage on claude.ai shows both as progress bars, with the time left in the current session&lt;br&gt;
(&lt;a href="https://support.claude.com/en/articles/9797557-usage-limit-best-practices" rel="noopener noreferrer"&gt;Usage limit best practices&lt;/a&gt;). Claude Code also&lt;br&gt;
passes the same readings to your status line, which is how a tool can show them while you work.&lt;/p&gt;

&lt;p&gt;When either one is used up you wait for its reset, or keep going on paid extra usage if you've turned that on. A full weekly limit&lt;br&gt;
stops you even with room left in the 5-hour window.&lt;/p&gt;
&lt;h2&gt;
  
  
  What fills them: new tokens, not cached ones
&lt;/h2&gt;

&lt;p&gt;The meter is a percentage, and Anthropic doesn't say how many tokens a percent is. I measured it on my own account by comparing each&lt;br&gt;
rise of the 5-hour reading with the tokens my sessions used in between (61 observations, two days; the method is in&lt;br&gt;
&lt;a href="https://limitcast.dev/blog/tokens-per-percent/" rel="noopener noreferrer"&gt;How many tokens is 1% of your Claude Code limit?&lt;/a&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Tokens per 1% of the 5-hour limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;New tokens (input, cache writes, output)&lt;/td&gt;
&lt;td&gt;≈ 166k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached tokens (cache reads)&lt;/td&gt;
&lt;td&gt;≈ 11.2M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One account, one plan. A fit on the previous day gave about 200k and 10.7M, so read these as a range.&lt;/p&gt;

&lt;p&gt;A cached token counted roughly 1/67 as much as a new one. Claude Code re-sends your whole conversation on every model call, but most&lt;br&gt;
of it comes back from the cache, so a long session is cheaper than its size suggests. What runs a window out is anything that sends&lt;br&gt;
&lt;strong&gt;new&lt;/strong&gt; tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subagents.&lt;/strong&gt; Each one writes its own context from scratch. A typical one cost me about 2% of a 5-hour window (&lt;a href="https://limitcast.dev/blog/subagents/" rel="noopener noreferrer"&gt;Do subagents burn your limit faster?&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Coming back after a long pause.&lt;/strong&gt; Once the prompt cache expires, the next message re-sends the whole context as new tokens (&lt;a href="https://limitcast.dev/blog/prompt-cache-idle/" rel="noopener noreferrer"&gt;Why a long idle pause costs you&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Big tool output and file reads.&lt;/strong&gt; Everything new that enters the conversation is new tokens once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A large starting context.&lt;/strong&gt; Instructions, tool lists and skills are written once per session and every subagent, then re-read on every call.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How to see the runout coming
&lt;/h2&gt;

&lt;p&gt;The percentage alone doesn't say whether you'll make it to the reset. That depends on your pace: 70% with an hour left is fine at a&lt;br&gt;
slow pace and a lockout in twenty minutes during a burst of subagents. limitcast does that arithmetic for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ limitcast status
window used burn runs out resets today status
claude 5h 71% +18.2%/h 16:40 17:00 - AT_RISK
claude 7d 41% +0.6%/h - Sun 03:00 6% left OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The 5-hour window is forecast from the last hour's pace; &lt;strong&gt;AT_RISK&lt;/strong&gt; means it runs out before it resets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The weekly window uses your pace over the last full day, nights included, and shows today's even share of the week, so one busy hour doesn't cry wolf.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The same line sits in your Claude Code status line, from the readings Claude Code already passes to it. No login, nothing leaves your machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free version gives you the forecast and the status line. &lt;a href="https://limitcast.dev/#pricing" rel="noopener noreferrer"&gt;Pro&lt;/a&gt; also stops new subagents when a window is on&lt;br&gt;
pace to run out within 30 minutes, moves them to Sonnet while it's tight, and sends a desktop notification before you hit the limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do when you're close
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't start a fan-out near the end of a window.&lt;/strong&gt; Ten subagents at about 2% each are a fifth of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compact long sessions&lt;/strong&gt; before a pause, not after: &lt;code&gt;/compact&lt;/code&gt; shrinks what the next call has to re-send.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Queue the heavy job for after the reset&lt;/strong&gt; instead of starting it with 10% left.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check what loads before you type.&lt;/strong&gt; Unused MCP servers and skills are re-sent on every call and to every subagent: &lt;code&gt;limitcast trim&lt;/code&gt; measures them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  See your own numbers
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; limitcast
limitcast &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="c"&gt;# adds the forecast to your status line; backs up settings.json&lt;/span&gt;
limitcast status &lt;span class="c"&gt;# every window: used, burn rate, runout time, reset&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node 20+, macOS or Linux. &lt;a href="https://limitcast.dev/#install" rel="noopener noreferrer"&gt;Install details&lt;/a&gt; · &lt;code&gt;limitcast uninstall&lt;/code&gt; restores your settings.&lt;/p&gt;

&lt;p&gt;limitcast forecasts when each Claude Code and Codex window runs out, and its Pro plan stops runaway subagents before they burn the rest of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://limitcast.dev/" rel="noopener noreferrer"&gt;See what limitcast does&lt;/a&gt; · &lt;a href="https://limitcast.dev/#pricing" rel="noopener noreferrer"&gt;Pricing&lt;/a&gt; ·&lt;br&gt;
&lt;a href="https://limitcast.dev/blog/tokens-per-percent/" rel="noopener noreferrer"&gt;How many tokens is 1%?&lt;/a&gt; · &lt;a href="https://limitcast.dev/blog/subagents/" rel="noopener noreferrer"&gt;Subagents and your limit&lt;/a&gt; ·&lt;br&gt;
&lt;a href="https://limitcast.dev/blog/prompt-cache-idle/" rel="noopener noreferrer"&gt;Idle pauses and the prompt cache&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>How many tokens is 1% of your Claude Code limit?</title>
      <dc:creator>Sam Stull</dc:creator>
      <pubDate>Mon, 26 Oct 2026 01:26:25 +0000</pubDate>
      <link>https://dev.to/samstull9007/how-many-tokens-is-1-of-your-claude-code-limit-232n</link>
      <guid>https://dev.to/samstull9007/how-many-tokens-is-1-of-your-claude-code-limit-232n</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://limitcast.dev/blog/tokens-per-percent/" rel="noopener noreferrer"&gt;limitcast.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anthropic shows how much of your 5-hour and weekly limit you've used, as a percentage. It doesn't say how many tokens that percentage is, and it doesn't say how different kinds of tokens count. So I measured it on my own account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1% of the 5-hour limit was about 166,000 new tokens, or about 11 million cached tokens.&lt;/strong&gt; A cached token counted roughly 1/67 as much as a new one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That ratio changes what's worth optimizing. Over the two days I measured, new tokens were 2.5% of everything Claude Code sent, and they used about 63% of my limit.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Share of tokens&lt;/th&gt;
&lt;th&gt;Share of the limit they used (estimated)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;New tokens (input, cache writes, output)&lt;/td&gt;
&lt;td&gt;2.5%&lt;/td&gt;
&lt;td&gt;≈ 63%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached tokens (cache reads)&lt;/td&gt;
&lt;td&gt;97.5%&lt;/td&gt;
&lt;td&gt;≈ 37%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;My Claude Code usage, 23–25 October 2026: 53.7M new tokens and 2,103.5M cached tokens. The limit share applies the fit below to those totals.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured it
&lt;/h2&gt;

&lt;p&gt;Claude Code passes your limit readings to the status line: percent used of each window and when it resets. Its transcripts record every model call's tokens: input, cache writes, cache reads and output. Put the two side by side and you can see how many tokens it took to move the meter.&lt;/p&gt;

&lt;p&gt;Each time the 5-hour reading rose between two status-line updates, I took the rise and the tokens my sessions on that account used in between, split into &lt;strong&gt;new tokens&lt;/strong&gt; (input, cache writes and output) and &lt;strong&gt;cached tokens&lt;/strong&gt; (cache reads). Then a least-squares fit with no intercept:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rise in % ≈ a × new tokens + b × cached tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With 61 such observations, the fit gave:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;% of the 5-hour limit per million&lt;/th&gt;
&lt;th&gt;Tokens per 1%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;New tokens&lt;/td&gt;
&lt;td&gt;6.04%&lt;/td&gt;
&lt;td&gt;≈ 166k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached tokens&lt;/td&gt;
&lt;td&gt;0.090%&lt;/td&gt;
&lt;td&gt;≈ 11.2M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A fit on the previous day's readings gave about 200k and 10.7M, so treat these as a range rather than constants: roughly 165–200k new tokens, or 10.7–11.2M cached tokens, per 1%.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means in practice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Subagents are expensive.&lt;/strong&gt; Each subagent starts its own context and writes it into the cache from scratch. Subagents sent about a third of my tokens (33%), but nearly half of my new tokens (48%), and used an estimated 42% of my limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your starting context is cheap per call, but it adds up.&lt;/strong&gt; My sessions start at about 100k tokens before I type: system prompt, tools, MCP servers, skills, CLAUDE.md. Written once into the cache, that's about 0.6% of the limit. After that, each model call re-reads it from the cache for about 0.009%. A session with 300 model calls spends about 3% of a window re-reading that starting context. Trimming 4k tokens of unused skills and MCP servers from mine saved about 0.3% of a window over 1,100 calls: real, but small.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache misses are where it gets expensive.&lt;/strong&gt; This one is an inference from the ratio rather than something I measured directly: when the prompt cache expires (after a pause, for example), the next call writes the whole context again as new tokens. In a session that has grown to 200k tokens, that single call is more than 1% of the limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So the order of what to watch is:&lt;/strong&gt; how many subagents you start, how long your sessions run between pauses, and only then how big your CLAUDE.md is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The caveats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is one person's account on one plan, over about two days. Your numbers will differ.&lt;/li&gt;
&lt;li&gt;The fit doesn't separate models. If Anthropic weights Opus and Sonnet differently, my mix of the two is baked into these numbers.&lt;/li&gt;
&lt;li&gt;Cache writes are counted as new tokens. They may be weighted differently from input and output.&lt;/li&gt;
&lt;li&gt;The readings are whole percentages, so each observation is noisy. It takes dozens of them before the fit settles.&lt;/li&gt;
&lt;li&gt;Anthropic can change how limits are counted at any time; a measurement like this is a snapshot.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Measure your own
&lt;/h2&gt;

&lt;p&gt;I built this measurement into limitcast, a free command-line tool for Claude Code and Codex. It reads only the files Claude Code already writes on your machine and sends nothing anywhere.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; limitcast
limitcast &lt;span class="nb"&gt;install&lt;/span&gt;      &lt;span class="c"&gt;# records your limit readings from the status line&lt;/span&gt;
&lt;span class="c"&gt;# use Claude Code as normal for a day or two, then:&lt;/span&gt;
limitcast results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once it has about 30 observations, &lt;code&gt;limitcast results&lt;/code&gt; prints your own numbers: how many new and cached tokens move your meter by 1%. The fit is in &lt;a href="https://github.com/SamStull9007/limitcast/blob/main/src/calibrate.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;src/calibrate.mjs&lt;/code&gt;&lt;/a&gt; if you want to check it.&lt;/p&gt;

&lt;p&gt;I'd like to hear whether other people's ratios look similar, especially on different plans.&lt;/p&gt;

</description>
      <category>cli</category>
      <category>claudecode</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
