<?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: Ethan</title>
    <description>The latest articles on DEV Community by Ethan (@thinhledev).</description>
    <link>https://dev.to/thinhledev</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%2F775422%2F5adf3918-817c-43fd-9e57-8597be41e5a6.png</url>
      <title>DEV Community: Ethan</title>
      <link>https://dev.to/thinhledev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thinhledev"/>
    <language>en</language>
    <item>
      <title>My AI coding agents read 1.2 billion tokens in 32 sessions. Most of it was text they'd already seen.</title>
      <dc:creator>Ethan</dc:creator>
      <pubDate>Fri, 23 Oct 2026 02:23:21 +0000</pubDate>
      <link>https://dev.to/thinhledev/my-ai-coding-agents-read-12-billion-tokens-in-32-sessions-most-of-it-was-text-theyd-already-seen-131k</link>
      <guid>https://dev.to/thinhledev/my-ai-coding-agents-read-12-billion-tokens-in-32-sessions-most-of-it-was-text-theyd-already-seen-131k</guid>
      <description>&lt;p&gt;I asked my coding agents a simple question: how much did you actually read while we built this project?&lt;/p&gt;

&lt;p&gt;The answer: &lt;strong&gt;about 1.2 billion tokens&lt;/strong&gt;, across 32 work sessions in Claude Code and Codex.&lt;/p&gt;

&lt;p&gt;A token is roughly ¾ of a word, so that's around 900 million words. About 10,000 novels. For one side project.&lt;/p&gt;

&lt;p&gt;The part that bothered me wasn't the size. It was that &lt;strong&gt;most of it wasn't new&lt;/strong&gt;. It was the same conversation being re-read turn after turn. The same test output. The same files. The same "so, how do you run the tests here?" that I had already answered on Friday.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/thinhledev/simem" rel="noopener noreferrer"&gt;&lt;strong&gt;simem&lt;/strong&gt;&lt;/a&gt;. It's free, MIT-licensed, and runs entirely on your machine. This post walks through the three problems it solves, with screenshots and numbers instead of vibes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every new session starts from scratch.&lt;/strong&gt; simem gives the agent a short summary of your project before you type anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory is stuck in one app, one account, one folder.&lt;/strong&gt; With simem it belongs to the project, and every Claude Code account, Codex and Cursor share it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents pay for the same text again and again.&lt;/strong&gt; simem trims noisy tool output before it lands in the conversation: 81–99% off a full test or install report, and it never drops a failure line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; two commands inside Claude Code or Codex, then say &lt;em&gt;"set up simem"&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Problem 1: Every new session is Groundhog Day
&lt;/h2&gt;

&lt;p&gt;You know this one.&lt;/p&gt;

&lt;p&gt;On Friday you and your agent spent two hours on the billing module. You picked Postgres over SQLite for a reason. You found out the test suite needs a flag to run. You agreed never to deploy from a laptop.&lt;/p&gt;

&lt;p&gt;On Monday you open a new session, and the agent knows none of it.&lt;/p&gt;

&lt;p&gt;So it does what any smart new hire would do. It lists folders, reads the README, opens &lt;code&gt;package.json&lt;/code&gt;, searches for "test", opens a dozen source files, and then asks you how the tests run. You can wait while it rediscovers your project (and pay for every page it reads), or you can type the whole explanation again.&lt;/p&gt;

&lt;p&gt;The worst version: it confidently undoes a decision you made last week, because nobody told it that decision existed.&lt;/p&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%2F14hid9ozvp60s0sfg230.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%2F14hid9ozvp60s0sfg230.png" alt="Without memory, the agent spends its first minutes rediscovering the project. With simem, it starts with a short primer of latest work, decisions and test commands." width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The right side of that image isn't a mockup. It's the real primer simem gave my agent at the start of a session in simem's own repo, trimmed to fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  What simem does about it
&lt;/h3&gt;

&lt;p&gt;What earlier sessions learned stays on your computer and comes back on its own, at three moments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;When a session starts&lt;/strong&gt;, the agent gets a short summary of the project: the latest work (from &lt;em&gt;any&lt;/em&gt; agent), the decisions still in force, the build and test commands that worked, and how the code is laid out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With each message you send&lt;/strong&gt;, simem adds the saved notes that clearly match what you wrote. Mention the database, and the reason you chose it comes along.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whenever you ask&lt;/strong&gt; ("what did we decide about payments?"), it searches everything earlier sessions saved.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To be clear about what it doesn't do: the agent still opens files to do the real work. What it stops doing is re-learning the project every morning.&lt;/p&gt;

&lt;p&gt;Three details that matter if you care about cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Building memory costs zero tokens.&lt;/strong&gt; simem pulls decisions, constraints and preferences out of what &lt;em&gt;you&lt;/em&gt; said using local rules, plus the apps' own session summaries. No model calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It knows your project on day one.&lt;/strong&gt; On install it imports your past sessions for the project, again without spending a token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It plays nicely with prompt caching.&lt;/strong&gt; The primer stays byte-identical while your memory hasn't changed, so the provider's cache keeps hitting.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Problem 2: Your memory is locked in one app, one account, one folder
&lt;/h2&gt;

&lt;p&gt;It's 4 PM. You hit the usage limit on your Claude account. You have a second account, or Codex, with plenty of quota left.&lt;/p&gt;

&lt;p&gt;You switch, and you're back to a stranger who has never seen your code.&lt;/p&gt;

&lt;p&gt;The same thing happens in quieter ways all the time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you open a &lt;strong&gt;new git worktree&lt;/strong&gt; to run agents in parallel,&lt;/li&gt;
&lt;li&gt;you &lt;strong&gt;re-clone&lt;/strong&gt; the repo,&lt;/li&gt;
&lt;li&gt;you &lt;strong&gt;rename&lt;/strong&gt; the project folder,&lt;/li&gt;
&lt;li&gt;you try &lt;strong&gt;Cursor&lt;/strong&gt; for one task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each agent keeps its memory inside its own app, and often ties it to the folder path. Switch any of those, and the memory stays behind.&lt;/p&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%2Ff3i6icstpkeo12pgxuqr.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%2Ff3i6icstpkeo12pgxuqr.png" alt="Claude Code on two accounts, Codex, Cursor and new worktrees all read and write one memory, stored on your machine and identified by your repo's first commit." width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;simem's memory belongs to the &lt;strong&gt;project&lt;/strong&gt;, not to an app or a login. The project ID is your repo's first commit, so it's the same in every clone and every worktree.&lt;/p&gt;

&lt;p&gt;The best part in daily use: open Codex after Claude Code (or the other way round), type &lt;strong&gt;"continue"&lt;/strong&gt;, and the primer already holds the other app's latest work. No handoff doc and no copy-paste.&lt;/p&gt;

&lt;p&gt;Moving to a new machine? Use &lt;code&gt;simem memory export&lt;/code&gt; / &lt;code&gt;import&lt;/code&gt;, or point simem at a folder you already sync (iCloud, Dropbox), optionally encrypted.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem 3: Your agent pays for the same text again and again
&lt;/h2&gt;

&lt;p&gt;This is the one most people don't see, so here's the mental model I use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think of a conversation with your coding agent as a stack of paper.&lt;/strong&gt; Every time you send a message, the &lt;em&gt;whole stack&lt;/em&gt; goes to the AI, and the AI reads all of it again. Every page it reads costs money or eats into your plan's limit. Pages only leave the stack when the app compacts the conversation.&lt;/p&gt;

&lt;p&gt;So what's on the stack? In my project, the biggest thing by far was &lt;strong&gt;reports from tools the agent ran&lt;/strong&gt;: about 1.2 million tokens from 1,743 commands. Next came files the agent opened, about 430,000 tokens.&lt;/p&gt;

&lt;p&gt;And tool reports are mostly noise. Run your tests and you get hundreds of lines of &lt;code&gt;✓ passed, ✓ passed, ✓ passed…&lt;/code&gt; with the one line you care about buried in the middle.&lt;/p&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%2Fb6nsrz4gspu63we6022r.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%2Fb6nsrz4gspu63we6022r.png" alt="A jest run printed 112 lines and 4,082 characters. After simem's filter, the agent reads 12 lines and 341 characters, and every failure line is kept." width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's a jest run with one failing test out of 341, put through simem's actual filter. 112 lines in, 12 lines out. The failure, the expected and received values, the stack location and the summary are all still there, word for word. Everything else is saved on your disk in case the agent needs it later (&lt;code&gt;simem out &amp;lt;id&amp;gt;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Now remember the stack of paper. That report doesn't get read once. It gets read again &lt;strong&gt;on every turn after it&lt;/strong&gt;:&lt;/p&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%2Fs419wg3yv0pijo2jydoa.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%2Fs419wg3yv0pijo2jydoa.png" alt="One test report re-read for 30 turns costs about 34,000 tokens without simem and about 2,850 with it. About 31,000 tokens from a single report are never sent." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's a single test run. A real session has dozens of them, plus installs, builds and big file reads. &lt;strong&gt;Every page simem keeps off the stack is saved again on every later turn.&lt;/strong&gt; The longer the conversation, the bigger the saving.&lt;/p&gt;

&lt;p&gt;Here's how much each kind of report shrinks:&lt;/p&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%2Fycal7c769tth1pu0wvnq.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%2Fycal7c769tth1pu0wvnq.png" alt="simem trims npm install and vitest output by 99%, node:test and go test by 98%, jest by 92% and pytest by 81%. Compiler errors are kept whole because every line is a failure." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at the last row. A wall of compiler errors gets &lt;strong&gt;0%&lt;/strong&gt; trimmed, on purpose. The rule is simple: &lt;strong&gt;simem never drops a failure line.&lt;/strong&gt; If every line is an error, every line stays.&lt;/p&gt;

&lt;p&gt;It also guards the other big item on the stack, files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large-read guard:&lt;/strong&gt; when the agent tries to read a file over 800 lines in full, it gets the outline first, once. If it asks again, it gets the whole file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-read guard:&lt;/strong&gt; reading an unchanged file that's already in context gets flagged once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local code search:&lt;/strong&gt; &lt;code&gt;code_search&lt;/code&gt; returns &lt;code&gt;path:line-range&lt;/code&gt; plus the signature, and &lt;code&gt;code_read&lt;/code&gt; returns one function instead of the whole file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The honest numbers
&lt;/h3&gt;

&lt;p&gt;I don't trust tools that only show their best case, so here's the full picture. I took about 1,700 real tool reports from my own 32 sessions and ran them through simem:&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;Before&lt;/th&gt;
&lt;th&gt;After simem&lt;/th&gt;
&lt;th&gt;Shorter by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All tool reports&lt;/td&gt;
&lt;td&gt;1.16M tokens&lt;/td&gt;
&lt;td&gt;0.90M tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;22%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test reports&lt;/td&gt;
&lt;td&gt;26k tokens&lt;/td&gt;
&lt;td&gt;14k tokens&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;46%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why only 22%?&lt;/strong&gt; In my project the agent was already cutting most reports short itself, so there was less left to trim. When a report arrives in full, like a complete test run or package install, simem cuts &lt;strong&gt;81–99%&lt;/strong&gt; of it. Your numbers will depend on your work, and the repo includes a script that measures them on your own sessions (&lt;code&gt;node scripts/replay-filters.mjs&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  What it looks like in a real session
&lt;/h3&gt;

&lt;p&gt;I didn't go looking for this one. In Claude Code, simem shows a short notice on its own (once per session, when it has saved at least 1k tokens that day). I asked the question it suggested, and the agent answered from simem's own records:&lt;/p&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%2Fzzgx2po7lz8hd8z43cgv.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%2Fzzgx2po7lz8hd8z43cgv.png" alt="Claude Code session: the agent reports ~310k tokens kept out of context (measured) and ~22.9M tokens not re-sent (estimate), broken down by filtered command output, outline-instead-of-full-read and memory previews." width="800" height="764"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;~310k tokens kept out of context, measured&lt;/strong&gt;, across every agent session in the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Six commands did most of it.&lt;/strong&gt; Just 6 runs through &lt;code&gt;simem exec&lt;/code&gt; kept out ~222k tokens, about 37k each. One large-read guard stopped a ~75k-token file read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~22.9M tokens not re-sent, estimated&lt;/strong&gt;, because whatever stays out of context isn't sent again on every later turn.&lt;/li&gt;
&lt;li&gt;The agent also pointed out where the rest of the savings are: command output filled ~4.1M tokens over 8,799 calls, and only 6 of those went through &lt;code&gt;simem exec&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every figure simem reports says whether it's &lt;strong&gt;measured&lt;/strong&gt; or an &lt;strong&gt;estimate&lt;/strong&gt;. I'd rather under-promise.&lt;/p&gt;




&lt;h2&gt;
  
  
  What simem doesn't do
&lt;/h2&gt;

&lt;p&gt;Anything that touches your coding agent deserves suspicion, so here are the limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No proxy.&lt;/strong&gt; simem never sits between you and the model provider. It works through the apps' own hooks and tool (MCP) interfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No credentials.&lt;/strong&gt; It never reads your API keys or logins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No server.&lt;/strong&gt; Memory lives in &lt;code&gt;~/.simem&lt;/code&gt; on your machine. Nothing is uploaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets stay out.&lt;/strong&gt; API keys, tokens, private keys and passwords are redacted from everything simem stores or shows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your permission settings stay in charge.&lt;/strong&gt; It only trims a command's output automatically when your settings would have allowed that command anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy to undo.&lt;/strong&gt; &lt;code&gt;simem init --remove&lt;/code&gt; restores every file it touched. Deleting &lt;code&gt;~/.simem&lt;/code&gt; removes all memory.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Install it in about a minute
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; (desktop app or CLI):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add thinhledev/simem
/plugin install simem@simem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex plugin marketplace add thinhledev/simem
codex plugin add simem@simem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then start a new session and say &lt;strong&gt;"set up simem"&lt;/strong&gt;. The agent asks before each step, installs the CLI, shows you what &lt;code&gt;simem init&lt;/code&gt; will change, and runs it once you agree. You do this once per machine, not per project.&lt;/p&gt;

&lt;p&gt;Prefer the terminal? &lt;code&gt;npm install -g @simem/cli &amp;amp;&amp;amp; simem init&lt;/code&gt; (Node.js 22.5+), or with Homebrew and no Node.js needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap thinhledev/simem
brew trust &lt;span class="nt"&gt;--formula&lt;/span&gt; thinhledev/simem/simem
brew &lt;span class="nb"&gt;install &lt;/span&gt;simem
simem init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Day to day, you just talk to it
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Say to your agent&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;"Why did we pick Postgres?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Searches every agent's past sessions, by keyword and by meaning.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;"Remember that we deploy only from CI."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Saved as a decision. Every agent and account sees it from now on.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;"Forget that."&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Archived for good, even if old transcripts mention it again.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;"How much did simem save this week?"&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Your real token usage and what simem kept out, measured vs estimated.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;"Continue."&lt;/em&gt; (in the other app)&lt;/td&gt;
&lt;td&gt;Picks up the other agent's latest work.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Try it, then tell me your number
&lt;/h2&gt;

&lt;p&gt;Here's my ask. Install simem, work normally for a day, then ask your agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How much did simem save?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Post your number in the comments. I'm curious how it looks across different stacks, and especially where it &lt;em&gt;doesn't&lt;/em&gt; help, because that's what I'll fix next.&lt;/p&gt;

&lt;p&gt;If it saves you tokens (or just saves you from explaining your test setup one more time), a ⭐ on &lt;a href="https://github.com/thinhledev/simem" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; helps other developers find it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/thinhledev/simem" rel="noopener noreferrer"&gt;thinhledev/simem&lt;/a&gt; · &lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@simem/cli" rel="noopener noreferrer"&gt;&lt;code&gt;@simem/cli&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hit Your Claude Code Usage Limit? Switch to Codex Without Losing Context</title>
      <dc:creator>Ethan</dc:creator>
      <pubDate>Sat, 15 Aug 2026 04:08:22 +0000</pubDate>
      <link>https://dev.to/thinhledev/hit-your-claude-code-usage-limit-switch-to-codex-without-losing-context-mid</link>
      <guid>https://dev.to/thinhledev/hit-your-claude-code-usage-limit-switch-to-codex-without-losing-context-mid</guid>
      <description>&lt;p&gt;It was 4:07 PM. I was three files deep into a refactor, the agent finally understood the weird shape of my billing module, and then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You've reached your usage limit. Try again at 6:00 PM.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I had two other coding agents installed and signed in. Both had quota left. Neither had the faintest idea what I'd spent the last two hours doing.&lt;/p&gt;

&lt;p&gt;So I did what everyone does. I opened the second agent, re-explained the goal, pasted the plan, watched it read twenty files to rebuild context I had &lt;em&gt;already paid for&lt;/em&gt;, and then watched it cheerfully undo a decision I'd made on Tuesday - because nobody told it that decision existed.&lt;/p&gt;

&lt;p&gt;That afternoon is the reason I built &lt;a href="https://github.com/thinhledev/mixai" rel="noopener noreferrer"&gt;&lt;strong&gt;mixai&lt;/strong&gt;&lt;/a&gt;.&lt;/p&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%2Fiqyke17xx6yithizteft.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%2Fiqyke17xx6yithizteft.png" alt="Switch AI coding agents without losing context"&gt;&lt;/a&gt;&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; mixai-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The actual problem isn't the limit. It's that context is trapped.
&lt;/h2&gt;

&lt;p&gt;Most of us now have more than one AI coding agent installed. A Claude Code subscription. Codex through a ChatGPT plan. Cursor's free tier. Antigravity's free tier. On paper that's a lot of capacity.&lt;/p&gt;

&lt;p&gt;In practice it behaves like four separate, amnesiac contractors who refuse to talk to each other. Every one of them keeps its context in its own private session format, in its own directory, and none of them can read the others'. So the moment one stops - quota, rate limit, or just "I'd like a second opinion on this" - you personally become the integration layer. You're the one carrying the objective, the constraints, and the "no, we tried that, it didn't work" across the gap.&lt;/p&gt;

&lt;p&gt;That's the expensive part. Not the limit - the &lt;strong&gt;re-explaining&lt;/strong&gt;.&lt;/p&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%2F51m55z46mp7n1wc1dija.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%2F51m55z46mp7n1wc1dija.png" alt="Without mixai vs with mixai"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What mixai does
&lt;/h2&gt;

&lt;p&gt;mixai is a small command-line tool that sits &lt;em&gt;beside&lt;/em&gt; the agents you already use. It doesn't replace them, doesn't proxy your requests, doesn't touch your API keys, and doesn't send anything to a server. It does two things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It hands your work off between agents in one command.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mixai switch codex &lt;span class="nt"&gt;--from&lt;/span&gt; claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That writes a checkpoint of your current session to a local &lt;code&gt;.mixai/&lt;/code&gt; folder - the objective, the conversation, your branch and HEAD, a patch of your uncommitted changes, and the project's accumulated decisions - then opens Codex with a continuation prompt pointing straight at it. You type "continue." That's the whole ritual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It gives every agent a shared memory of your project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Decisions, constraints, and preferences get captured once and are available to &lt;em&gt;all&lt;/em&gt; of them. Ask any agent "why did we drop the queue?" and the answer is already in context, because a different agent recorded it three weeks ago.&lt;/p&gt;

&lt;p&gt;The part I care about most: &lt;strong&gt;creating a handoff never calls a model.&lt;/strong&gt; It's file parsing and file writing. It costs zero tokens, which is exactly what you need, because the moment you most want to switch agents is the moment you have no tokens left to spend on switching.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters if you're optimizing for cost
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody says out loud: &lt;strong&gt;your quotas don't run out at the same time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude's window resets on its own clock. Codex is tied to your ChatGPT plan. Cursor and Antigravity have their own free tiers. They are four independent budgets, and most developers burn one to zero and then just... stop for the day, because moving to another agent has felt more expensive than waiting.&lt;/p&gt;

&lt;p&gt;Make the handoff free and the math flips completely. You stop treating "AI coding capacity" as one bucket you can empty, and start treating it as four buckets you rotate through.&lt;/p&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%2Fhzcxnul7yy9fawvg5g4i.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%2Fhzcxnul7yy9fawvg5g4i.png" alt="One workday, four free tiers, zero context lost"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every one of those arrows is one command, and none of them costs a token. You're not sharing credentials or pooling accounts - each agent signs in the normal way, with its own login, under its own plan. mixai just makes moving &lt;em&gt;between&lt;/em&gt; them cost nothing.&lt;/p&gt;

&lt;p&gt;For a hobbyist on free tiers, that's the difference between a 90-minute coding session and an all-day one. For a team paying for seats, it's the difference between "wait for the reset" and "keep shipping."&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually moves between agents
&lt;/h2&gt;

&lt;p&gt;I want to be specific here, because "it transfers your context" is the kind of sentence that means nothing.&lt;/p&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%2Fgur0pi0wmgzkkfmvdnfb.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%2Fgur0pi0wmgzkkfmvdnfb.png" alt="What actually moves between agents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;mixai switch&lt;/code&gt;, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reads the source agent's own local session log&lt;/strong&gt; - the real conversation, not a summary you had to write.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snapshots the workspace&lt;/strong&gt; - branch, HEAD, &lt;code&gt;git status&lt;/code&gt;, and a diff of your tracked changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes a checkpoint&lt;/strong&gt; to &lt;code&gt;.mixai/checkpoints/&amp;lt;id&amp;gt;/&lt;/code&gt; and mirrors it to &lt;code&gt;.mixai/current/&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;BRIEF.md&lt;/code&gt; - a deliberately tiny file: current objective + git state&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HANDOFF.md&lt;/code&gt; - objective, last outcome, recent conversation, relevant memory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TRANSCRIPT.md&lt;/code&gt; - the full extracted conversation, for when more detail is needed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WORKSPACE.patch&lt;/code&gt; - your uncommitted changes as a diff&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Launches the target agent&lt;/strong&gt; with a continuation prompt that says, in effect: read this checkpoint, inspect the live git state, and continue the unfinished objective - don't redo completed work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your repository stays the source of truth. The checkpoint is just a portable bundle that any agent can read, because it's plain Markdown and a patch file. If mixai vanished tomorrow, you could open &lt;code&gt;HANDOFF.md&lt;/code&gt; yourself and paste it anywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  The memory half: agents that stop starting from scratch
&lt;/h2&gt;

&lt;p&gt;Handoff solves the moment of switching. Memory solves everything after it.&lt;/p&gt;

&lt;p&gt;Every checkpoint gets indexed into a local SQLite database and distilled into durable facts - decisions, constraints, preferences - plus a short summary. Then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recent history stays verbatim.&lt;/strong&gt; Older history folds into compact digests, and those digests fold into a project-level digest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durable facts never expire.&lt;/strong&gt; A constraint you set in month one is still there in month six, even after the raw conversation that produced it has been compressed away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search works out of the box&lt;/strong&gt; using SQLite's FTS5 full-text index with BM25 ranking. If you happen to have &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; running locally, it layers in semantic search automatically. If you don't, it just works with keyword search.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mixai memory search &lt;span class="s2"&gt;"why did we pick Postgres over Mongo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Any agent can ask that. Not just the one that was there.&lt;/p&gt;

&lt;p&gt;Once you run &lt;code&gt;mixai integrate&lt;/code&gt; in a project, this stops being something you have to remember to do. It wires into each agent's lifecycle hooks: relevant memory is injected per prompt, context is restored after a compaction or reset, and agents that speak &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; get direct tools (&lt;code&gt;memory_search&lt;/code&gt;, &lt;code&gt;memory_save&lt;/code&gt;, &lt;code&gt;context_brief&lt;/code&gt;, &lt;code&gt;list_handoff_targets&lt;/code&gt;, &lt;code&gt;switch_to_provider&lt;/code&gt;) instead of shelling out.&lt;/p&gt;

&lt;p&gt;That last pair matters more than it sounds: it means an agent that notices it's hitting a limit can check which &lt;em&gt;other&lt;/em&gt; agents are ready and offer to hand off - and only after you say yes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Smaller prompts, and honest numbers
&lt;/h2&gt;

&lt;p&gt;Context windows are the other place tokens quietly evaporate. mixai is fairly aggressive about staying small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory search returns &lt;strong&gt;previews&lt;/strong&gt;, not full records. You drill into the full text only when you actually want it.&lt;/li&gt;
&lt;li&gt;Older summaries are &lt;strong&gt;rolled up&lt;/strong&gt; into digests instead of accumulating forever.&lt;/li&gt;
&lt;li&gt;Everything injected into a prompt is &lt;strong&gt;hard-capped&lt;/strong&gt; by a character budget.&lt;/li&gt;
&lt;li&gt;Two on-demand code-map tools - &lt;code&gt;code_outline&lt;/code&gt; and &lt;code&gt;code_find_references&lt;/code&gt; - let an agent jump to the right lines instead of reading (and re-reading) whole files. Unlike an always-loaded "repo map," they add nothing to every message.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then there's the part I'm oddly proud of: &lt;strong&gt;mixai refuses to make up savings numbers.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mixai memory savings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;disclosure: 2 event(s), ~549 tokens (2197 chars)
Total: ~549 tokens (2197 chars) across 2 event(s).
This counts only exact, measured deltas mixai can prove from its own
compression - it does not estimate what re-exploring the repo without
mixai would cost.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every number there is a real measured delta between what would have been sent and what was actually sent. There is no "saves you 80% of your tokens!" mechanism, because measuring that honestly would require knowing what a from-scratch agent &lt;em&gt;would&lt;/em&gt; have spent re-exploring your repo - and mixai can't observe that. There's also &lt;code&gt;mixai memory spend&lt;/code&gt; for a full per-agent, per-purpose cost breakdown.&lt;/p&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%2Fpxno00nfhq402p1te8so.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%2Fpxno00nfhq402p1te8so.png" alt="mixai in the terminal"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started (about two minutes)
&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;# 1. install&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; mixai-cli

&lt;span class="c"&gt;# 2. see what you've actually got installed and signed in&lt;/span&gt;
mixai status

&lt;span class="c"&gt;# 3. once per project: wire it into your agents&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
mixai integrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# hand off when you hit a limit&lt;/span&gt;
mixai switch codex &lt;span class="nt"&gt;--from&lt;/span&gt; claude
mixai switch cursor &lt;span class="nt"&gt;--from&lt;/span&gt; codex
mixai switch claude &lt;span class="nt"&gt;--from&lt;/span&gt; cursor

&lt;span class="c"&gt;# branch a separate conversation, leaving the original alone&lt;/span&gt;
mixai fork codex

&lt;span class="c"&gt;# save a checkpoint without opening anything&lt;/span&gt;
mixai &lt;span class="nb"&gt;export&lt;/span&gt;

&lt;span class="c"&gt;# route a one-off task to whichever agent is available&lt;/span&gt;
mixai run &lt;span class="s2"&gt;"Explain the architecture and flag the riskiest module"&lt;/span&gt;
mixai run &lt;span class="nt"&gt;--write&lt;/span&gt; &lt;span class="s2"&gt;"Add input validation and tests"&lt;/span&gt;

&lt;span class="c"&gt;# ask your project's memory a question - costs nothing&lt;/span&gt;
mixai memory search &lt;span class="s2"&gt;"why did we drop the queue"&lt;/span&gt;
mixai brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;mixai brief&lt;/code&gt; is the one I reach for most often, honestly. After a context compaction, it reloads the objective, live git state, and the most relevant project memory - without the agent re-reading your repository to figure out where it was.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 22.5+&lt;/strong&gt; is required for the persistent-memory features (it uses Node's built-in SQLite).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt; gets one-click desktop handoffs. On other platforms you use the agents' terminal CLIs via &lt;code&gt;--surface interactive&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For desktop handoffs, mixai prints a short instruction to paste into the app it just opened. It's a copy-paste, not magic.&lt;/li&gt;
&lt;li&gt;You need at least one supported agent installed and signed in: &lt;strong&gt;Claude Code, Codex, Cursor, or Antigravity&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm install -g&lt;/code&gt; does not wire mixai into your projects. &lt;code&gt;mixai integrate&lt;/code&gt; is a separate, per-project step - and &lt;code&gt;mixai integrate --remove&lt;/code&gt; cleanly undoes every change it made.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And what it deliberately is &lt;em&gt;not&lt;/em&gt;: it's not a proxy, not a model router in front of an API, and not a place you put credentials. Each agent uses its own local login. Everything lives in &lt;code&gt;.mixai/&lt;/code&gt; inside your project, gitignored by default. Nothing is uploaded.&lt;/p&gt;




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

&lt;p&gt;If you've ever stared at a "usage limit reached" message with two other perfectly good agents sitting idle on your machine, this is for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/mixai-cli" rel="noopener noreferrer"&gt;&lt;code&gt;npm install -g mixai-cli&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/thinhledev/mixai" rel="noopener noreferrer"&gt;github.com/thinhledev/mixai&lt;/a&gt; - MIT licensed, and a ⭐ genuinely helps&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Issues and ideas:&lt;/strong&gt; &lt;a href="https://github.com/thinhledev/mixai/issues" rel="noopener noreferrer"&gt;github.com/thinhledev/mixai/issues&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd especially like to hear which agent combinations you rotate through, and where the handoff still loses something it shouldn't. That's the part I'm still tuning.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's your current workaround when an agent hits its limit mid-task? I'm genuinely curious - drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I Improved My Verbal English with NativeSpeech 🤯</title>
      <dc:creator>Ethan</dc:creator>
      <pubDate>Tue, 07 Oct 2025 09:06:27 +0000</pubDate>
      <link>https://dev.to/thinhledev/how-i-improved-my-verbal-english-in-tech-meetings-with-nativespeech-131b</link>
      <guid>https://dev.to/thinhledev/how-i-improved-my-verbal-english-in-tech-meetings-with-nativespeech-131b</guid>
      <description>&lt;h2&gt;
  
  
  MOTIVATION
&lt;/h2&gt;

&lt;p&gt;I still remember the first time I froze during a live architecture walkthrough. My hands were shaking, the cursor blinked, and instead of explaining the tradeoffs I muttered “um” and “so” until the meeting drifted. As a non-native English developer, those moments cost me: unclear PR feedback, awkward stakeholder demos, and missed callbacks after interviews.&lt;/p&gt;

&lt;p&gt;I wanted something practical, not generic chitchat drills, but targeted practice for explaining systems, debugging live, and answering interview follow-ups. That pressure to communicate clearly drove me to find a tool I could use every day between sprints, not just on weekends.&lt;/p&gt;

&lt;p&gt;“I wanted to explain my microservice design in three minutes, without sounding like a translator.”&lt;/p&gt;

&lt;h2&gt;
  
  
  SOLUTION
&lt;/h2&gt;

&lt;p&gt;My problems were concrete: I stumbled over technical vocabulary when under pressure, I couldn’t narrate a live debug session succinctly, and asynchronous standups turned into vague messages because I lacked concise phrasing.&lt;/p&gt;

&lt;p&gt;I evaluated a few solutions (language courses, meetups, and mock interviews). Then I found &lt;a href="https://nativespeech.app/" rel="noopener noreferrer"&gt;&lt;strong&gt;NativeSpeech&lt;/strong&gt;&lt;/a&gt; and decided to try it because it has some awesome features: interactive, AI-driven speaking practice with real-time feedback, AI-evaluated scores so I could track progress, and built-in exercises/stories to practice different contexts. The site also mentions a Chrome extension for practicing in other web tab (e.g you can use the extension on ChatGPT website).&lt;/p&gt;

&lt;p&gt;What convinced me most: the app isn’t just about repeating phrases, it offers an interactive mode and a pronunciation checker, plus translation/listen features that help me map technical terms to natural phrasing. That was exactly what I needed: targeted, measurable practice that fits between meetings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My 30-Day, Developer-Focused Routine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Below is the exact routine I followed. I treated it like a sprint: measurable goal, daily standups with myself, and metrics to measure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set the goal (Day 0)&lt;/strong&gt;: “Explain my microservice architecture + a recent bug root cause in under 3 minutes, with &amp;lt;10 filler words.”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Block time (Daily, 20 minutes)&lt;/strong&gt;: I reserved a 20-minute slot after lunch. Consistency beat duration, 20 minutes every weekday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warm up&lt;/strong&gt;: Pick an AI-generated short story or prompt in NativeSpeech’s library to loosen pronunciation and rhythm. This warmed my mouth and reduced initial stumbles.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fwd1t2p9shrdw6srs8lhm.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.amazonaws.com%2Fuploads%2Farticles%2Fwd1t2p9shrdw6srs8lhm.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roleplay: system design&lt;/strong&gt;: I used Interactive Mode to roleplay, “You’re a PM. Explain the microservice flow and why we chose eventual consistency.” I focused on intent and tradeoffs, not code lines. The AI teacher provided instant feedback and maintained a continuous interactive conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Record a bug explanation&lt;/strong&gt;: I narrated a recent bug fix: what happened, root cause, and the patch. Then I replayed it, counting filler words and noting sentences where technical phrases broke my flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example dev scenario&lt;/strong&gt;: “We had a N+1 query in the notification service; I explained how a missing index plus lazy loading caused a cascade. I practiced summarizing the root cause in one sentence, then the mitigation in two bullet sentences.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review &amp;amp; log metrics&lt;/strong&gt;: I recorded words per minute (rough measure), number of filler words, fluency score from the app, and my pronunciation score. I saved the generated bug story along with the pronunciation scores. The AI-evaluated scores helped me measure progress objectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apply in real life&lt;/strong&gt;: After day 7, I used the practiced 3-minutes microservice summary in a sprint planning demo. On day 10 I presented to a stakeholder and noticed ~60% fewer filler words compared to my first recording, I timed it and compared counts. That confidence changed the tone of the meeting: fewer interruptions, clearer questions, faster buy-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iterate weekly&lt;/strong&gt;: Each Sunday I reviewed my saved progress, picked the weakest area (pronunciation of a key library name, or long-winding sentences), and built the next week’s prompts around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bold outcome&lt;/strong&gt;: After 30 days, my PR descriptions became shorter, async standups were clearer, and technical interviews felt like conversations instead of tests.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fyx4nqdh6mee7eos2swy1.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.amazonaws.com%2Fuploads%2Farticles%2Fyx4nqdh6mee7eos2swy1.png" alt=" " width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keep practicing each word until your overall speech reaches the maximum pronunciation score (ideally 100). Repeat this every day with a different generated story to improve your speaking skills and help your mouth stay familiar with English. You can even save your stories and share them with your friends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it yourself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re a developer who wants clearer design walkthroughs, less stalling in interviews, or smoother async updates, try the same 14–30 day routine I used. NativeSpeech gives instant pronunciation feedback, AI-evaluated scores, an interactive teacher, and a Chrome extension for quick browser practice, everything I used to make my daily 20-minute habit stick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;: Try 14 days of 15 minutes daily. Track filler words and app scores. Report back, I’d love to hear which dev scenario improved most for you.&lt;/p&gt;

&lt;p&gt;Start here: &lt;a href="https://nativespeech.app/" rel="noopener noreferrer"&gt;https://nativespeech.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pronunciation</category>
      <category>englishspeaking</category>
      <category>nativespeech</category>
      <category>texttospeech</category>
    </item>
  </channel>
</rss>
