<?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: Garvit Surana</title>
    <description>The latest articles on DEV Community by Garvit Surana (@getburnd).</description>
    <link>https://dev.to/getburnd</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3874690%2Fa0ac2e21-0d75-4dd1-a99a-87f0c2fc3102.png</url>
      <title>DEV Community: Garvit Surana</title>
      <link>https://dev.to/getburnd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/getburnd"/>
    <language>en</language>
    <item>
      <title>I lost $14,502 to Claude Code in one month. Here's the autopsy.</title>
      <dc:creator>Garvit Surana</dc:creator>
      <pubDate>Wed, 13 May 2026 18:02:04 +0000</pubDate>
      <link>https://dev.to/getburnd/i-lost-14502-to-claude-code-in-one-month-heres-the-autopsy-1n1n</link>
      <guid>https://dev.to/getburnd/i-lost-14502-to-claude-code-in-one-month-heres-the-autopsy-1n1n</guid>
      <description>&lt;p&gt;Last spring I racked up a &lt;strong&gt;$14,502&lt;/strong&gt; invoice on Claude Code in 31 days.&lt;/p&gt;

&lt;p&gt;Anthropic's billing page told me the total. It didn't tell me where it went. There was no per-session breakdown, no "this retry storm cost you $612," no way to tell whether I was hitting Opus on tasks Sonnet would have nailed. Just one big number, paid, gone.&lt;/p&gt;

&lt;p&gt;So I wrote a CLI to read my own &lt;code&gt;~/.claude/projects/*.jsonl&lt;/code&gt; files and rank the leaks. The CLI is open source (&lt;a href="https://github.com/garvitsurana271/burnd" rel="noopener noreferrer"&gt;github.com/garvitsurana271/burnd&lt;/a&gt;) but this post isn't a pitch — it's the autopsy. Eight patterns, ranked by what they cost &lt;em&gt;me&lt;/em&gt; personally. Most of them generalize to any LLM-coding-agent setup; only two are Claude-specific.&lt;/p&gt;

&lt;p&gt;If you've ever paid an LLM bill and not known where it went, one of these is probably eating you alive too.&lt;/p&gt;

&lt;h3&gt;
  
  
  The damage, ranked
&lt;/h3&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;Pattern&lt;/th&gt;
&lt;th&gt;% of bill&lt;/th&gt;
&lt;th&gt;$ value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;retry-storm&lt;/td&gt;
&lt;td&gt;21.6%&lt;/td&gt;
&lt;td&gt;$3,140&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;wrong-model-on-task&lt;/td&gt;
&lt;td&gt;19.9%&lt;/td&gt;
&lt;td&gt;$2,890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;context-bloat&lt;/td&gt;
&lt;td&gt;14.7%&lt;/td&gt;
&lt;td&gt;$2,140&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;repeated-reads&lt;/td&gt;
&lt;td&gt;11.1%&lt;/td&gt;
&lt;td&gt;$1,610&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;tool-overuse&lt;/td&gt;
&lt;td&gt;9.4%&lt;/td&gt;
&lt;td&gt;$1,360&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;model-substitution&lt;/td&gt;
&lt;td&gt;7.7%&lt;/td&gt;
&lt;td&gt;$1,120&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;off-hours-spend&lt;/td&gt;
&lt;td&gt;5.9%&lt;/td&gt;
&lt;td&gt;$850&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;spend-creep&lt;/td&gt;
&lt;td&gt;4.5%&lt;/td&gt;
&lt;td&gt;$650&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;unclassified noise&lt;/td&gt;
&lt;td&gt;5.2%&lt;/td&gt;
&lt;td&gt;$742&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Now the parts.&lt;/p&gt;




&lt;h3&gt;
  
  
  1 · retry-storm — $3,140
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; Claude tries something, it fails, it tries again, fails again, tries a third time, and so on. Each retry pays full input-token cost for the (usually growing) context. If you don't notice, the loop can run six or seven turns deep before you intervene.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The session that hurt the most:&lt;/strong&gt; I asked Claude to "make this work with the new API." It tried four implementations across six turns; each turn re-read the same 14k-token codebase context. Total session: &lt;strong&gt;$612&lt;/strong&gt; for what should have been a $40 fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it looks like in the raw logs.&lt;/strong&gt; A JSONL turn from a retry storm typically has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "role": "assistant",
  "tool_use": [{ "name": "Edit", "input": { ... } }],
  "stop_reason": "tool_use",
  "usage": { "input_tokens": 14723, "output_tokens": 891 }
}
{
  "role": "tool_result",
  "is_error": true,
  "content": "TypeError: Cannot read property 'foo' of undefined"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three consecutive (assistant, tool-error) pairs with no user message in between = retry storm. The detector codifies this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isRetryStorm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Turn&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;consecutiveErrors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tool_result&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;is_error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;consecutiveErrors&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;consecutiveErrors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// user broke the loop&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;consecutiveErrors&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix that actually worked for me:&lt;/strong&gt; when Claude's first attempt fails, I now stop, read the error, and either give explicit guidance or rewrite the prompt. The retry loop is the single most expensive habit a Claude Code user has — and the one easiest to break once you see it.&lt;/p&gt;




&lt;h3&gt;
  
  
  2 · wrong-model-on-task — $2,890
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; running Opus on tasks Sonnet (or Haiku) would have nailed in seconds. This mostly happens because Claude Code's model selection is sticky — set Opus for one hard problem and you keep paying Opus rates for the next ten trivial ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concrete example:&lt;/strong&gt; a 142-token "rename this variable" task on Opus 4.7 billed &lt;strong&gt;$1.40&lt;/strong&gt;. Same task on Sonnet 4.6 would have been &lt;strong&gt;~$0.05&lt;/strong&gt;. That's a 28x markup for nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The heuristic&lt;/strong&gt; for classifying tasks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isOpusClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AssistantTurn&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;output_tokens&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;                     &lt;span class="c1"&gt;// generated significant code&lt;/span&gt;
      &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tool_uses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;                     &lt;span class="c1"&gt;// multi-tool reasoning&lt;/span&gt;
      &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;refactor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;               &lt;span class="c1"&gt;// architectural verb&lt;/span&gt;
      &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                     &lt;span class="c1"&gt;// complex prompt&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a turn used Opus but doesn't match &lt;code&gt;isOpusClass&lt;/code&gt;, the waste is the cost delta to Sonnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; I now explicitly set model per session, not per Claude Code preference: &lt;code&gt;claude --model sonnet&lt;/code&gt; for routine work, &lt;code&gt;claude --model opus&lt;/code&gt; for novel-architecture work. Saves ~70% on routine sessions, with effectively zero quality loss. The Opus-vs-Sonnet quality gap on a &lt;code&gt;rename this variable&lt;/code&gt; task is rounding error.&lt;/p&gt;




&lt;h3&gt;
  
  
  3 · context-bloat — $2,140
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; a session passes 60k tokens of conversation context, and now every new turn pays full input cost on the entire history. The cumulative effect is brutal — a 200k-context session pays roughly 50× the cost of an equivalent 4k-context session, even when your actual question is the same size.&lt;/p&gt;

&lt;p&gt;Most bloat comes from (a) Claude re-reading large files across turns, and (b) the user pasting big chunks of code that linger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; flags any session where input-tokens-per-turn exceeds a per-user baseline by 3σ. Per-user matters here — a researcher chewing through papers has a legitimately higher baseline than someone editing CSS, so an absolute threshold over-fires for the first group and under-fires for the second.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isBloated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userBaseline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userStdDev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avgInputPerTurn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;totalInputTokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;turnCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;avgInputPerTurn&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;userBaseline&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;userStdDev&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; start a new session more aggressively. Once you cross ~50k tokens, the cost-per-turn-to-value-of-turn ratio breaks. Better to ask Claude to summarize the session into a single "state" document and start fresh with that summary as the new context. Pays itself back within 2-3 turns.&lt;/p&gt;




&lt;h3&gt;
  
  
  4 · repeated-reads — $1,610
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; Claude reads the same file three or more times in a session because the conversation didn't preserve what it read. Each re-read pays full input-token cost for that file.&lt;/p&gt;

&lt;p&gt;This happened in a session where I asked questions about my Express routes file across 8 turns; Claude re-read it 5 times because each turn was somewhat independent and Claude's context-management decided "fresh read is safer."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; flags any file path appearing in tool-use input across 3+ non-consecutive turns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;repeatedReads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tool_uses&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Read&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reads&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??=&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reads&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(([,&lt;/span&gt; &lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isConsecutive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; explicitly tell Claude "you've already read &lt;code&gt;routes.ts&lt;/code&gt; — refer to it from context" — or ask it to summarize the file once into the session and refer back. Saves an entire re-read every time.&lt;/p&gt;




&lt;h3&gt;
  
  
  5 · tool-overuse — $1,360
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; agentic loops where Claude calls Read, Grep, ListFiles, etc. excessively, often duplicating work the previous turn already did. Each tool call costs input tokens to plan + output tokens to consume the result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heaviest session:&lt;/strong&gt; Claude ran &lt;strong&gt;47 separate Grep calls&lt;/strong&gt; across 12 turns. About 15 of those were variations of the same query (&lt;code&gt;User&lt;/code&gt;, &lt;code&gt;users&lt;/code&gt;, &lt;code&gt;User\\s+&lt;/code&gt;, &lt;code&gt;\\buser\\b&lt;/code&gt;, &lt;code&gt;Users&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; flags sessions with tool-call counts more than 2σ above the user's baseline AND with significant overlap in tool arguments (Levenshtein distance &amp;lt; 20% between calls). The Levenshtein check is what catches the "I keep grepping for variants of the same word" pattern that simple count-based detectors miss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; prompt-engineer the search step. "Before searching, list the queries you intend to run. I'll approve them. Then batch the searches." Turns 47 grep calls into one batched plan. Costs less in tokens; produces better answers because Claude reasons about coverage upfront.&lt;/p&gt;




&lt;h3&gt;
  
  
  6 · model-substitution — $1,120
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; subtle, and Claude-specific. Sometimes Claude Code falls back to a more expensive model than you requested due to availability throttling or model-routing quirks. You think you're paying Sonnet rates but the session logs show Opus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; compares the user's stated model preference (in &lt;code&gt;.claude/config.json&lt;/code&gt;) to the actual model used (parsed from the &lt;code&gt;model&lt;/code&gt; field in each JSONL turn). Flags any session where the cheaper model was requested but the more expensive one was used.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;modelSubstitution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;statedModel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actualModels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;turns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wrongModelTurns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;actualModels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class="nf"&gt;isExpensive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;isExpensive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;statedModel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;wrongModelTurns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;actualModels&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; spot-check session logs occasionally. This isn't your fault — it's an Anthropic-side sometimes-thing — but it's worth knowing about so you can report it or factor it into your monthly burn.&lt;/p&gt;




&lt;h3&gt;
  
  
  7 · off-hours-spend — $850
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; agentic sessions that ran while you weren't watching, drove up cost on autopilot, and you didn't notice until the next morning. Often these are "let it think for a while" sessions where you walked away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; clusters timestamps to derive your "active hours" envelope (heuristic: any 10-minute window with ≥3 short-turn-cadence interactions = human-in-the-loop), then flags spend during off-envelope hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; this is more of an awareness pattern than a fix. Nothing wrong with letting Claude work while you're away — but the detector tells you what it cost so you can make the trade explicitly. I cut my off-hours spend ~60% just by knowing the number.&lt;/p&gt;




&lt;h3&gt;
  
  
  8 · spend-creep — $650
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern:&lt;/strong&gt; a slow upward drift in average cost-per-session week-over-week, without a corresponding increase in productivity. Often caused by gradually larger context windows, gradually more tool calls, or gradually more aggressive model selection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The detector&lt;/strong&gt; compares each week's median cost-per-session to the previous 4-week rolling median. Flags weeks with &amp;gt;40% increase that aren't explained by a major workload change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; the early-warning value here is bigger than any specific fix. Knowing your spend is creeping lets you check in BEFORE the next $14k surprise. I now look at the trend chart on Sunday mornings — takes 30 seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  "But Anthropic shipped &lt;code&gt;/usage&lt;/code&gt; — isn't that enough?"
&lt;/h2&gt;

&lt;p&gt;Anthropic shipped &lt;code&gt;/usage&lt;/code&gt; in mid-April. It's good. It shows your current-session token usage in real time.&lt;/p&gt;

&lt;p&gt;It's also a different problem. &lt;code&gt;/usage&lt;/code&gt; answers &lt;em&gt;"what is this one session costing me right now?"&lt;/em&gt; The autopsy above answers &lt;em&gt;"which patterns across my whole month are bleeding money?"&lt;/em&gt; You need both.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/usage&lt;/code&gt; is your speedometer. The detector list is your annual mechanic inspection. They're complementary, not substitutes.&lt;/p&gt;

&lt;p&gt;The two practical differences:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cross-session.&lt;/strong&gt; A retry storm rarely happens in one session — the pattern is "every time you ask me to integrate a new API, you retry 4 times." That's only visible looking across N sessions of the same shape. &lt;code&gt;/usage&lt;/code&gt; is single-session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prescriptive.&lt;/strong&gt; &lt;code&gt;/usage&lt;/code&gt; tells you the dollar number. The detector list tells you &lt;em&gt;what to change in your CLAUDE.md so the leak stops returning.&lt;/em&gt; That's the difference between a dashboard and a fix.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What I changed after running the detectors on my own logs
&lt;/h2&gt;

&lt;p&gt;Three habits, ranked by impact:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;I check before I retry.&lt;/strong&gt; When Claude's first attempt fails, I read it before re-running. ~22% of my prior waste was retry storms; this habit alone got most of it back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I explicitly set model per session.&lt;/strong&gt; &lt;code&gt;claude --model sonnet&lt;/code&gt; for routine work, &lt;code&gt;claude --model opus&lt;/code&gt; for heavy lifting. Save the Opus tab for problems that genuinely need it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I start new sessions more aggressively.&lt;/strong&gt; When a session crosses 50k tokens, I summarize and reset. The summary loses ~5% of the context; the next 20 turns are 10× cheaper.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three months later my Claude Code spend is ~$2,300/month for the same volume of work. Not zero, but a hell of a lot less than $14,502.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reproducible: try it on your own logs
&lt;/h2&gt;

&lt;p&gt;The numbers above are from running &lt;a href="https://github.com/garvitsurana271/burnd" rel="noopener noreferrer"&gt;Burnd&lt;/a&gt; on my own &lt;code&gt;~/.claude/projects/*.jsonl&lt;/code&gt; for one calendar month. It's open source, MIT, local-first — nothing leaves your machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx getburnd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole free tier. It scans, ranks, shows you the same eight detectors with your own dollar amounts and the top sessions for each. No account, no signup, no telemetry.&lt;/p&gt;

&lt;p&gt;If you want it to also auto-apply CLAUDE.md fixes, run alerts when spend creeps, and produce weekly reports, there's a Pro tier ($89 lifetime, founding price until May 18) — but the free CLI is genuinely complete on its own and most people will never need anything more.&lt;/p&gt;

&lt;p&gt;Detector source is in &lt;a href="https://github.com/garvitsurana271/burnd/tree/main/src/cli/src/detectors" rel="noopener noreferrer"&gt;/src/cli/src/detectors&lt;/a&gt;. Each has unit tests with synthetic session data. If you disagree with a threshold, the tests show what would change at different cutoffs. PRs welcome — the detector list is meant to grow.&lt;/p&gt;

&lt;p&gt;If you've found patterns I missed, drop a comment or open an issue. I want this list to be the canonical "where LLM coding spend leaks" reference.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the author:&lt;/strong&gt; Garvit Surana is a 16-year-old developer in Guwahati, India. He shipped Burnd after losing $14,502 of Claude Code in one month. Find him on &lt;a href="https://github.com/garvitsurana271" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and at &lt;a href="https://garvit-surana.vercel.app" rel="noopener noreferrer"&gt;garvit-surana.vercel.app&lt;/a&gt;.&lt;/p&gt;




</description>
      <category>agents</category>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
    </item>
    <item>
      <title>I spent $13,631 on Claude Code in 6 months. Here's exactly where it went.</title>
      <dc:creator>Garvit Surana</dc:creator>
      <pubDate>Sun, 12 Apr 2026 10:02:16 +0000</pubDate>
      <link>https://dev.to/getburnd/i-spent-13631-on-claude-code-in-6-months-heres-exactly-where-it-went-m43</link>
      <guid>https://dev.to/getburnd/i-spent-13631-on-claude-code-in-6-months-heres-exactly-where-it-went-m43</guid>
      <description>&lt;p&gt;Six months ago I started using Claude Code seriously for side projects.&lt;/p&gt;

&lt;p&gt;I'm 16, Class 12 ISC, Guwahati. I've been building stuff since Class 9 — a crop disease classifier, a React Native app, various web projects. Claude Code was a game-changer for how fast I could ship.&lt;/p&gt;

&lt;p&gt;The Anthropic bill was also a game-changer. Final number after six months: &lt;strong&gt;$13,631&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's about ₹11.4 lakh at current exchange rates. More than my family spent on groceries in the same period. I'm not exaggerating.&lt;/p&gt;

&lt;p&gt;The maddening part: the Anthropic billing console showed me "total tokens: ~40M" with basically no breakdown of &lt;em&gt;why&lt;/em&gt;. I couldn't answer the most basic question: which sessions were eating the most? Which projects? Which patterns were costing me money that a different workflow would eliminate?&lt;/p&gt;

&lt;p&gt;So I built a tool to find out. It's called &lt;strong&gt;Burnd&lt;/strong&gt;. Here's what I found.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Burnd works
&lt;/h2&gt;

&lt;p&gt;Claude Code writes a &lt;code&gt;.jsonl&lt;/code&gt; file for every session to &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Each line is a structured event — tool calls, responses, token counts. I wrote parsers for 8 waste patterns that kept showing up in my data.&lt;/p&gt;

&lt;p&gt;To run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx getburnd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing leaves your machine. No account. No API key. It reads those local JSONL files and prints your top 3 leaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 8 patterns — and what they cost me
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Long Bash output (~$31/month)
&lt;/h3&gt;

&lt;p&gt;The biggest leak in my data. Test runners, build systems, and package installs were dumping 10,000–50,000 bytes of output into context on every call. That output stays in context for the rest of the session.&lt;/p&gt;

&lt;p&gt;The fix is one line: &lt;code&gt;| head -100&lt;/code&gt; at the end of your bash commands. I now save around $30/month from this single change.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Repeated file reads (~$10/month)
&lt;/h3&gt;

&lt;p&gt;Burnd found one session where the same file was read &lt;strong&gt;31 times&lt;/strong&gt;. The pattern: the agent reads a file, writes something new, then reads the same file again to verify. And again. And again.&lt;/p&gt;

&lt;p&gt;The fix: trust &lt;code&gt;Edit&lt;/code&gt; over &lt;code&gt;Read → Write → Read&lt;/code&gt;. One read, one write.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tool error storms (~$40/month)
&lt;/h3&gt;

&lt;p&gt;When Claude Code hits a broken environment — missing dependency, wrong Node version, broken test suite — it thrashes. It calls the same failing tool 15–20 times trying different variations. Every call costs tokens.&lt;/p&gt;

&lt;p&gt;I now spend 5 minutes fixing my environment &lt;em&gt;before&lt;/em&gt; starting a session. Saved ~$40/month.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Tool overuse (Bash trap) (~$15/month)
&lt;/h3&gt;

&lt;p&gt;One session had 80% of its tool calls as Bash. It was using &lt;code&gt;cat&lt;/code&gt; to read files, &lt;code&gt;find&lt;/code&gt; to locate things, &lt;code&gt;grep&lt;/code&gt; for search. All of these have cheaper native alternatives in Claude Code (&lt;code&gt;Read&lt;/code&gt;, &lt;code&gt;Glob&lt;/code&gt;, &lt;code&gt;Grep&lt;/code&gt;). The Bash calls bring 10× more output into context than necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Late-night coding (~$180/month — my biggest single fix)
&lt;/h3&gt;

&lt;p&gt;This one surprised me. My 00:00–05:00 sessions cost &lt;strong&gt;2.5× more per task&lt;/strong&gt; than my daytime sessions. Not because Claude charges more at night. Because &lt;em&gt;I&lt;/em&gt; write worse prompts when I'm tired, cause more re-dos, generate more error storms.&lt;/p&gt;

&lt;p&gt;After I started refusing to use Claude Code after midnight, I saved $180 in a single month.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. API retry storms (~$8/month)
&lt;/h3&gt;

&lt;p&gt;These are invisible from the UI. When Claude Code hits a rate limit or network hiccup, it retries. Each retry is a full context resend. Hidden in system records, impossible to see without parsing the JSONL directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Skills firing too aggressively (~$12/month)
&lt;/h3&gt;

&lt;p&gt;I had a skill with a trigger pattern that matched basically every message. 42% of tool calls in certain sessions were from that one skill. The fix: tighten trigger conditions, or scope skills to specific projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Project outliers (~$30/month)
&lt;/h3&gt;

&lt;p&gt;One project was costing 3.2× my session median. Burnd flagged it immediately. The culprit: a 40,000-token CLAUDE.md that was being loaded into context on every session. Trimmed it to 3,000 tokens, saved $30/month on that project alone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Total waste in my data: $76/month
&lt;/h2&gt;

&lt;p&gt;That's $76 in flagged, fixable waste from 6 months of bad habits. Real money, real fixes, all tested.&lt;/p&gt;

&lt;p&gt;To be clear: this doesn't mean Claude Code wasn't worth it. It was worth it. But $76/month in waste from fixable habits — that's a ₹6,300/month return on spending 30 seconds running a tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx getburnd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free, MIT, local. Prints top 3 leaks. No account, no data uploaded.&lt;/p&gt;

&lt;p&gt;For the full dashboard with all 8 detectors, spend charts, and per-project breakdown:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx getburnd serve
&lt;span class="c"&gt;# open http://localhost:4711&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/garvitsurana271/burnd" rel="noopener noreferrer"&gt;github.com/garvitsurana271/burnd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Landing: &lt;a href="https://getburnd.vercel.app" rel="noopener noreferrer"&gt;getburnd.vercel.app&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you use Claude Code, run &lt;code&gt;npx getburnd&lt;/code&gt; on your own data. Tell me what your top leak is — I'm curious whether the patterns generalize or whether my late-night-coding problem is uniquely mine.&lt;/p&gt;

&lt;p&gt;— Garvit&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>devtools</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
