<?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: Ishwar</title>
    <description>The latest articles on DEV Community by Ishwar (@ishwar170695).</description>
    <link>https://dev.to/ishwar170695</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%2F3960939%2F21cc9745-e3d2-4cc1-82ac-11d456cd074a.jpg</url>
      <title>DEV Community: Ishwar</title>
      <link>https://dev.to/ishwar170695</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ishwar170695"/>
    <language>en</language>
    <item>
      <title>I Audited $753 of Coding-Agent Usage. I Found 94.5% Context Reuse.</title>
      <dc:creator>Ishwar</dc:creator>
      <pubDate>Fri, 19 Jun 2026 11:10:25 +0000</pubDate>
      <link>https://dev.to/ishwar170695/i-audited-753-of-coding-agent-usage-i-found-945-context-reuse-51ha</link>
      <guid>https://dev.to/ishwar170695/i-audited-753-of-coding-agent-usage-i-found-945-context-reuse-51ha</guid>
      <description>&lt;p&gt;I expected prompt caching to be one of the biggest cost optimizations for coding agents.&lt;/p&gt;

&lt;p&gt;After all, every request carries system prompts, tool definitions, and instructions that rarely change. Caching those felt like free money.&lt;/p&gt;

&lt;p&gt;I also expected a second lever: unused retrieved context. Agents constantly read files, fetch logs, inspect directories, and explore codebases. Surely a meaningful fraction of that context never actually influences the final output.&lt;/p&gt;

&lt;p&gt;So I built a small tool, &lt;strong&gt;context-audit&lt;/strong&gt;, and ran it across 27 real coding-agent sessions representing &lt;strong&gt;$753.24 of input spend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Both assumptions didn't survive the benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Measured
&lt;/h2&gt;

&lt;p&gt;Across 27 sessions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&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;Context Reuse&lt;/td&gt;
&lt;td&gt;94.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Novel Context&lt;/td&gt;
&lt;td&gt;5.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt Cache Savings&lt;/td&gt;
&lt;td&gt;1.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unused Context Cost&lt;/td&gt;
&lt;td&gt;0.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwda0tubup1761pof2u4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwda0tubup1761pof2u4.png" alt="token expenditure" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prompt caching accounted for only &lt;strong&gt;1.0%&lt;/strong&gt; of potential savings.&lt;/p&gt;

&lt;p&gt;Unused retrieved context accounted for just &lt;strong&gt;0.4%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Meanwhile, &lt;strong&gt;94.5% of all context tokens were repeated content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The dominant cost wasn't unused retrieval.&lt;/p&gt;

&lt;p&gt;It wasn't static prompts.&lt;/p&gt;

&lt;p&gt;It was accumulated conversation history.&lt;/p&gt;

&lt;p&gt;The same information kept appearing again and again as sessions grew longer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger the Session, the More Repetitive It Became
&lt;/h2&gt;

&lt;p&gt;Context reuse increased sharply with session size:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Final Context Size&lt;/th&gt;
&lt;th&gt;Avg Reuse&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt; 5k tokens&lt;/td&gt;
&lt;td&gt;66.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5k–20k tokens&lt;/td&gt;
&lt;td&gt;92.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20k–50k tokens&lt;/td&gt;
&lt;td&gt;96.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt; 50k tokens&lt;/td&gt;
&lt;td&gt;99.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The longer a session ran, the more repetitive it became.&lt;/p&gt;

&lt;p&gt;That was not what I expected to find.&lt;/p&gt;

&lt;p&gt;My optimization instincts were pointing at the wrong bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Insight: Coding Agents Have Two Memory Systems
&lt;/h2&gt;

&lt;p&gt;While digging through transcripts, I started thinking about coding agents differently from chatbots.&lt;/p&gt;

&lt;p&gt;They appear to operate with two distinct memory systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workspace Memory
&lt;/h3&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Terminal outputs&lt;/li&gt;
&lt;li&gt;Build artifacts&lt;/li&gt;
&lt;li&gt;Compiler errors&lt;/li&gt;
&lt;li&gt;Directory structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information often exists on disk.&lt;/p&gt;

&lt;p&gt;The agent can frequently reconstruct it by reading the workspace again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversational Memory
&lt;/h3&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User preferences&lt;/li&gt;
&lt;li&gt;Design decisions&lt;/li&gt;
&lt;li&gt;Rejected ideas&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Trade-offs&lt;/li&gt;
&lt;li&gt;Architectural rationale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information exists only inside the conversation.&lt;/p&gt;

&lt;p&gt;Once it's removed, it may be gone for good.&lt;/p&gt;

&lt;p&gt;That distinction changed how I think about context management.&lt;/p&gt;

&lt;p&gt;Not all context is equally disposable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Pruning Failure Mode
&lt;/h2&gt;

&lt;p&gt;Picture a long coding session.&lt;/p&gt;

&lt;p&gt;Early in the conversation, the user decides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No embeddings&lt;/li&gt;
&lt;li&gt;No LLM-as-a-judge&lt;/li&gt;
&lt;li&gt;No HTML dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team discusses alternatives and agrees on a simpler approach.&lt;/p&gt;

&lt;p&gt;Fifty turns later, those decisions may no longer exist anywhere except the conversation history.&lt;/p&gt;

&lt;p&gt;The workspace still contains the code.&lt;/p&gt;

&lt;p&gt;But it doesn't contain every rejected path.&lt;/p&gt;

&lt;p&gt;A naive pruning strategy removes what appears to be old conversation noise.&lt;/p&gt;

&lt;p&gt;Unfortunately, it may also remove the reasoning behind the project.&lt;/p&gt;

&lt;p&gt;The result is an agent that suddenly starts recommending ideas the user explicitly rejected earlier.&lt;/p&gt;

&lt;p&gt;Concretely, a summarizer that compresses primarily by recency may preserve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the latest file tree,&lt;/li&gt;
&lt;li&gt;recent command outputs,&lt;/li&gt;
&lt;li&gt;recent compiler logs,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while dropping a critical design decision made dozens of turns earlier.&lt;/p&gt;

&lt;p&gt;The expensive-looking context survives.&lt;/p&gt;

&lt;p&gt;The cheap-looking context that actually mattered disappears.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;If you're manually pruning, summarizing, or compressing long-running coding-agent sessions, you may be deleting the rationale behind decisions rather than the expensive parts of the context.&lt;/p&gt;

&lt;p&gt;Workspace state is often reconstructable.&lt;/p&gt;

&lt;p&gt;Conversational decisions frequently are not.&lt;/p&gt;

&lt;p&gt;That doesn't mean pruning is wrong.&lt;/p&gt;

&lt;p&gt;It means pruning needs to distinguish between:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Technical execution history that can be recovered from the workspace.&lt;/li&gt;
&lt;li&gt;Alignment history that only exists in the conversation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Treating both categories the same can produce subtle regressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Doesn't Prove
&lt;/h2&gt;

&lt;p&gt;This isn't a universal law.&lt;/p&gt;

&lt;p&gt;Twenty-seven sessions are enough for an interesting observation, not enough to claim every coding agent behaves this way.&lt;/p&gt;

&lt;p&gt;The benchmark covers coding-agent workflows with disk-backed state.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAG systems&lt;/li&gt;
&lt;li&gt;General chatbots&lt;/li&gt;
&lt;li&gt;Research agents&lt;/li&gt;
&lt;li&gt;Customer support agents&lt;/li&gt;
&lt;li&gt;Other non-coding workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The findings should be interpreted within that scope.&lt;/p&gt;

&lt;p&gt;But they were enough to overturn my expectations.&lt;/p&gt;

&lt;p&gt;I started this project expecting prompt caching and retrieval waste to dominate.&lt;/p&gt;

&lt;p&gt;In this dataset, they barely moved the needle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Audit a single transcript&lt;/span&gt;
context-audit run transcript.jsonl

&lt;span class="c"&gt;# Benchmark an entire directory&lt;/span&gt;
context-audit benchmark ~/.claude/projects
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context reuse ratios&lt;/li&gt;
&lt;li&gt;Estimated costs&lt;/li&gt;
&lt;li&gt;Repeated blocks&lt;/li&gt;
&lt;li&gt;Context growth patterns&lt;/li&gt;
&lt;li&gt;Potential caching savings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;GitHub: &lt;a href="//github.com/ishwar170695/context-audit"&gt;context-audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benchmark changed how I think about coding-agent memory.&lt;/p&gt;

&lt;p&gt;I started this project looking for waste in static prompts and retrieval.&lt;/p&gt;

&lt;p&gt;Instead, I found a system spending most of its context budget carrying forward its own history.&lt;/p&gt;

&lt;p&gt;If you're running long Claude Code, Cursor, Aider, or similar coding-agent workflows, I'd love to know whether you're seeing the same pattern.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Why your devcontainer fails on corporate networks (and how to fix it)</title>
      <dc:creator>Ishwar</dc:creator>
      <pubDate>Sun, 31 May 2026 09:06:56 +0000</pubDate>
      <link>https://dev.to/ishwar170695/why-your-devcontainer-fails-on-corporate-networks-and-how-to-fix-it-45dh</link>
      <guid>https://dev.to/ishwar170695/why-your-devcontainer-fails-on-corporate-networks-and-how-to-fix-it-45dh</guid>
      <description>&lt;p&gt;You set up a devcontainer, try to run &lt;code&gt;npm install&lt;/code&gt; or &lt;code&gt;pip install&lt;/code&gt;, and it just fails. SSL error. Certificate verify failed. You Google it for an hour and find nothing useful. If you're on a corporate network, this is almost certainly your company's proxy intercepting HTTPS traffic with its own certificate and your container has no idea that cert exists.&lt;/p&gt;

&lt;p&gt;Your host machine trusts that proxy cert because IT installed it in your OS cert store. But your devcontainer is a fresh Linux environment. It doesn't inherit anything from your host. So every HTTPS request your tools make inside the container fails verification.&lt;/p&gt;

&lt;p&gt;I kept seeing this problem come up in devcontainer issues and Discord threads with no clean fix. Every solution involved editing Dockerfiles or committing certs to repos. &lt;/p&gt;

&lt;p&gt;So I built CertSync to handle it properly. It scans your host cert store, detects corporate/MITM certs automatically, and injects them into your devcontainer, no Dockerfile changes, no committing certs to your repo. One command and your container trusts the same roots your host does.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ishwar170695/certsync" rel="noopener noreferrer"&gt;github.com/ishwar170695/certsync&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devcontainers</category>
      <category>devops</category>
      <category>go</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
