<?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: Mayur Agnani</title>
    <description>The latest articles on DEV Community by Mayur Agnani (@theaicommit).</description>
    <link>https://dev.to/theaicommit</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%2F2280575%2F3c36a1b6-308f-429b-a971-c39346a9c238.jpg</url>
      <title>DEV Community: Mayur Agnani</title>
      <link>https://dev.to/theaicommit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theaicommit"/>
    <language>en</language>
    <item>
      <title>How a Coding Agent Finds Code: Grep Versus an Embedding Index</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Sat, 07 Nov 2026 13:14:39 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-a-coding-agent-finds-code-grep-versus-an-embedding-index-2cpl</link>
      <guid>https://dev.to/theaicommit/how-a-coding-agent-finds-code-grep-versus-an-embedding-index-2cpl</guid>
      <description>&lt;p&gt;A coding agent only sees the files its search turns up. Grep finds them when your request uses the words in the code, and an index finds them by meaning, so each one misses the requests the other catches.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is the site search that returns nothing for "refund" because the code says "reverse charge". A coding agent searches your repo the same way. Grep needs the exact word, and each miss costs the agent another turn. An embedding index matches by meaning, so it catches the plain-English requests grep misses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; Your coding agent finds code by guessing words, and plain-English requests make it guess wrong more often. Give it the names your code uses, or a second search that matches by meaning.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;You ask a helper to fetch a book from a huge library. The helper can only read the words on the spines. So they guess a word and pull every book with that word on it.&lt;/p&gt;

&lt;p&gt;If your word is on the spine, they find it fast. If you said "the one about sad dogs" and the spine says "Old Yeller", they guess again, and again. Each guess is another trip down the aisles.&lt;/p&gt;

&lt;p&gt;A second helper has read every book. They walk straight to the one that is about what you meant. Sometimes they bring a book that only sounds right, so the best team uses both.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your store's search box returned nothing for "refund". The page existed. It was titled "Reverse a charge", because that is what the billing team called it. The search worked exactly as written. It matched words, and your customers did not use your words. You fixed it with a list of synonyms.&lt;/p&gt;

&lt;p&gt;A coding agent searching your repo is that search box, run by a model. You type "refunding twice when the customer retries". Most terminal coding agents search with grep, the command that lists files containing a word. So the model has to guess a word that is in the file. If your code says &lt;code&gt;reverse_charge&lt;/code&gt;, its first guess misses. It tries another word, and gets back 40 files that mention payments. It narrows, and tries again.&lt;/p&gt;

&lt;p&gt;Every one of those guesses is a search round: one search, then the model reads the result. Each round resends the whole conversation, so a search that takes four rounds costs four times the reading. The worse case is quiet: the agent stops at a file that looks right, edits it, and you review the wrong change.&lt;/p&gt;

&lt;p&gt;I replayed 400 real Django commits as requests to a scripted grep searcher. When the request named the code, grep found the file within three rounds 75% of the time. When it was plain English, 45%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: give the agent the names your code uses, and give it a second search that matches by meaning, then measure how many search rounds it spends before its first edit.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-07-how-a-coding-agent-finds-code-grep-versus-an-embedding-index/" rel="noopener noreferrer"&gt;How a Coding Agent Finds Code: Grep Versus an Embedding Index&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-07-how-a-coding-agent-finds-code-grep-versus-an-embedding-index/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-07-how-a-coding-agent-finds-code-grep-versus-an-embedding-index/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-07/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Predict Each User's Token Speed on a Shared GPU</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Fri, 06 Nov 2026 12:03:51 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-predict-each-users-token-speed-on-a-shared-gpu-7jf</link>
      <guid>https://dev.to/theaicommit/how-to-predict-each-users-token-speed-on-a-shared-gpu-7jf</guid>
      <description>&lt;p&gt;A model server reads the whole model once per step for everyone, so an extra user is cheap. It also rereads each user's conversation every step, so one long agent session slows every chat on the same GPU.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is capacity planning by request count on a link that is limited by bytes. A model server reads its weights once per step for all users. It also reads each user's stored conversation every step. A few long agent sessions use up that read budget, and every chat on the GPU streams slower.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; Every user on a GPU waits for the same shared step, and that step gets longer with the total conversation everyone holds. Plan capacity in tokens in flight, not in users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;A librarian answers everyone's letters, one word at a time. Each round, she rereads her big rulebook once. That takes the same time whether five people are waiting or fifty.&lt;/p&gt;

&lt;p&gt;Then she rereads each person's letter so far, so she knows what word comes next. Short letters are quick. One person with a hundred-page letter makes every round slower, for everyone.&lt;/p&gt;

&lt;p&gt;So the number of people is not what slows her down. The number of pages she has to reread is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;You sized an API gateway by requests per second. The load test sent small payloads, and it passed with room to spare. Then one customer started uploading large files. The request count barely moved, but the network link filled up. Every request slowed, including the tiny ones. The fix was to meter bytes, not requests.&lt;/p&gt;

&lt;p&gt;A model server has the same bug. Say you load-tested Qwen3 8B on one H100 GPU with 40 chat users. Each chat held about 2,000 tokens, and each user saw about 71 tokens per second. That passed.&lt;/p&gt;

&lt;p&gt;Then your team shipped an agent feature. Its sessions hold 100,000 tokens of code and tool output. Two of them join the 40 chats. The dashboard shows 42 running requests, only two more than the test. Every user now streams at about 35 tokens per second. Nothing crashed, and GPU memory still has room.&lt;/p&gt;

&lt;p&gt;The GPU did not run out of memory. It ran out of reads per step. Your capacity plan counted users, and the cost is in tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: plan capacity in tokens in flight across all users, and admit each request against a speed budget, not a memory budget.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-06-how-to-predict-each-users-token-speed-on-a-shared-gpu/" rel="noopener noreferrer"&gt;How to Predict Each User's Token Speed on a Shared GPU&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-06-how-to-predict-each-users-token-speed-on-a-shared-gpu/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-06-how-to-predict-each-users-token-speed-on-a-shared-gpu/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-06/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Stop a Model Picking the Wrong Fact From a Long Prompt</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Thu, 05 Nov 2026 11:44:20 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-stop-a-model-picking-the-wrong-fact-from-a-long-prompt-n8l</link>
      <guid>https://dev.to/theaicommit/how-to-stop-a-model-picking-the-wrong-fact-from-a-long-prompt-n8l</guid>
      <description>&lt;p&gt;A long prompt rarely gives a wrong answer just because it is long. It goes wrong because the extra text includes passages that look like the answer, and the model picks the one that best matches your question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is a search ranking bug. Your site search returns the page that matches the query's words best, even when that page is out of date. A model reading a long prompt does the same thing. A passage that echoes your question can beat the true one. Every extra chunk you send adds rivals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A model reading a long prompt favors the passage that best matches your question, true or not. Long prompts hurt mostly because they carry more look-alikes, so keep those out and ask questions only the right passage answers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;You lost a blue umbrella, so you go to the lost-and-found desk. You say, "I lost a blue umbrella."&lt;br&gt;
The clerk looks in the box and hands you the blue umbrella that best fits your words.&lt;/p&gt;

&lt;p&gt;If the box holds one blue umbrella, you get yours. If it holds five, you may get someone else's.&lt;br&gt;
A bigger box full of shoes does not confuse the clerk much. More blue umbrellas do.&lt;/p&gt;

&lt;p&gt;So you do two things. You tell the clerk what only yours has: "the one with a broken handle." And&lt;br&gt;
you ask them to set aside the umbrellas that clearly belong to other people.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;A customer types "refund window" into your help center. Search returns last year's refund page,&lt;br&gt;
not the current one. Both pages match the words. The old one matches a little better, because it&lt;br&gt;
says "refund window" twice. Nobody notices until a support ticket quotes a 14-day rule you&lt;br&gt;
dropped in March.&lt;/p&gt;

&lt;p&gt;A long prompt has the same bug inside it. Your agent's context holds tool results, retrieved&lt;br&gt;
chunks and old turns. The model has to find the one passage that answers the question. It leans&lt;br&gt;
toward the passage that best matches the question's wording, and it can be fooled by a passage&lt;br&gt;
that only looks right.&lt;/p&gt;

&lt;p&gt;Chroma tested 18 models this way in its report on what it calls context rot. Accuracy fell as&lt;br&gt;
input grew, even on easy tasks. Adding one near-miss passage hurt, and four hurt more. On a memory&lt;br&gt;
benchmark, every model scored much higher on a 300-token prompt than on the same task in 113,000&lt;br&gt;
tokens.&lt;/p&gt;

&lt;p&gt;I tried to break the length part on a current small model. Length alone did nothing to one easy&lt;br&gt;
fact, out to 110,000 tokens. Four look-alikes cost 4 answers in 10, at 4,000 tokens and at 55,000.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: keep look-alikes out of the prompt, ask questions that name what only the true passage&lt;br&gt;
has, and test your own task with a length and look-alike sweep.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-05-how-to-stop-a-model-picking-the-wrong-fact-from-a-long/" rel="noopener noreferrer"&gt;How to Stop a Model Picking the Wrong Fact From a Long Prompt&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-05-how-to-stop-a-model-picking-the-wrong-fact-from-a-long/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-05-how-to-stop-a-model-picking-the-wrong-fact-from-a-long/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-05/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>How to Send Claude Only the New Messages in a Long Agent Loop</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Wed, 04 Nov 2026 12:54:33 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-send-claude-only-the-new-messages-in-a-long-agent-loop-had</link>
      <guid>https://dev.to/theaicommit/how-to-send-claude-only-the-new-messages-in-a-long-agent-loop-had</guid>
      <description>&lt;p&gt;Every turn of an agent loop uploads the whole conversation again. Claude can now keep it on the server, but only for five idle minutes, so your code has to be ready to send it all again.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is a sticky session. A load balancer pins a user to a server that keeps their session in memory, and the app breaks when that server restarts. A message thread is the API keeping your agent's conversation in memory. Treat it as a cache, or one restart loses the agent's work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; Claude can now hold an agent's conversation on its side, so each turn sends only what is new. The server can forget it at any time, so you keep the full copy and send it again when asked.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;You are telling a friend a long story over the phone, one piece a day. Every day you start again&lt;br&gt;
from the very beginning, because you are not sure they remember. The story gets longer, so the&lt;br&gt;
calls get longer.&lt;/p&gt;

&lt;p&gt;Then your friend says: "I will remember. Just tell me the new part." That is much faster.&lt;/p&gt;

&lt;p&gt;But your friend forgets if you wait too long between calls. So you keep the whole story written&lt;br&gt;
down. When your friend says "sorry, I forgot," you read it all out again, and carry on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;A web app kept each user's cart in the memory of one server. A load balancer sent the user back to&lt;br&gt;
that server every time. It was fast, because nothing had to be loaded. Then a deploy restarted the&lt;br&gt;
server, and every cart on it vanished. The fix was not a longer-lived server. It was writing the&lt;br&gt;
cart to the database and treating memory as a cache.&lt;/p&gt;

&lt;p&gt;An agent loop has the opposite habit today. The Messages API is stateless, so every turn sends the&lt;br&gt;
whole conversation: the system prompt, every tool definition, and every file the agent has read so&lt;br&gt;
far. Turn 40 of a coding agent uploads turn 1 to 39 again. The API then validates and tokenizes&lt;br&gt;
all of it again before the model starts. In my simulated 40-turn loop, with a 6 KB file read per&lt;br&gt;
turn, that came to 5.6 MB of uploads for one task.&lt;/p&gt;

&lt;p&gt;Claude's API now has a beta called message threads. The server keeps the conversation, and later&lt;br&gt;
turns send only what is new. It is the cart in memory again, with a five-minute timer on it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: send only the new messages on a thread, keep your own full copy of the conversation,&lt;br&gt;
and write the replay path before the happy path.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-04-how-to-send-claude-only-the-new-messages-in-a-long-agent/" rel="noopener noreferrer"&gt;How to Send Claude Only the New Messages in a Long Agent Loop&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-04-how-to-send-claude-only-the-new-messages-in-a-long-agent/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-04-how-to-send-claude-only-the-new-messages-in-a-long-agent/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-04/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Choose How Many Search Results a Reranker Should Rescore</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Tue, 03 Nov 2026 10:38:03 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-choose-how-many-search-results-a-reranker-should-rescore-25ol</link>
      <guid>https://dev.to/theaicommit/how-to-choose-how-many-search-results-a-reranker-should-rescore-25ol</guid>
      <description>&lt;p&gt;A vector search often ranks the right passage 20th or 30th. A reranker can lift it to first, but only if you handed it at least that many results, and every extra result costs time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is the bug where you fetch ten rows with LIMIT, then filter them in app code, and the row you needed was eleventh. A reranker only reorders the results your vector search returned. If it gets too few, the right passage never reaches it. If it gets too many, you pay latency for distractors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A reranker reads the question and each search result together, so it can fix an order the vector search got wrong. It can only fix what it was shown, so measure how deep the right answers sit before you choose how many to send.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;Imagine a librarian who sorts books by a one-line summary on each spine. You ask a question. The&lt;br&gt;
librarian grabs the shelf of books whose summaries look closest and hands you a stack.&lt;/p&gt;

&lt;p&gt;Then a careful reader opens each book in the stack and checks it against your question. The reader&lt;br&gt;
is slow, but almost never wrong.&lt;/p&gt;

&lt;p&gt;The careful reader can only check the books in the stack. If the right book was left on the shelf,&lt;br&gt;
nobody finds it. And a taller stack means a longer wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;A page showed a user's ten newest documents. The query ran with &lt;code&gt;LIMIT 10&lt;/code&gt;. Then the app removed the&lt;br&gt;
ones the user was not allowed to see. Some pages came back with three items, and support asked&lt;br&gt;
where the rest went. The rows existed. They were rows eleven to forty, and the filter never saw&lt;br&gt;
them. The fix was not a smarter filter. It was fetching enough rows for the filter to work with.&lt;/p&gt;

&lt;p&gt;Retrieval for a model has the same shape. Your app embeds the question, asks the vector database&lt;br&gt;
for the nearest chunks, and puts the top few into the prompt. Many teams add a reranker in&lt;br&gt;
between, a second model that rescores those chunks. What the reranker receives is decided by one&lt;br&gt;
number, usually picked once and never measured.&lt;/p&gt;

&lt;p&gt;I measured it on a public set of 300 science claims over 5,183 abstracts, using a common small&lt;br&gt;
embedding model. For about one claim in seven, the right abstract sat below rank 20. For one claim in&lt;br&gt;
fourteen it was below rank 100. Here is one claim: &lt;em&gt;"Insulin increases risk of severe kidney&lt;br&gt;
failure."&lt;/em&gt; The search ranked the right abstract 28th. The reranker moved it to first. With the&lt;br&gt;
common setting of 20 candidates, it would never have seen it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: measure how deep your right answers sit, then send the reranker the smallest number of&lt;br&gt;
candidates past which quality stops rising, and keep only a handful for the prompt.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-03-how-to-choose-how-many-search-results-a-reranker-should/" rel="noopener noreferrer"&gt;How to Choose How Many Search Results a Reranker Should Rescore&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-03-how-to-choose-how-many-search-results-a-reranker-should/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-03-how-to-choose-how-many-search-results-a-reranker-should/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-03/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Fix Jargon in Speech-to-Text Without Adding Words Nobody Said</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Mon, 02 Nov 2026 10:34:12 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-fix-jargon-in-speech-to-text-without-adding-words-nobody-said-4acc</link>
      <guid>https://dev.to/theaicommit/how-to-fix-jargon-in-speech-to-text-without-adding-words-nobody-said-4acc</guid>
      <description>&lt;p&gt;Hand a transcription model a list of your product names and it spells them right. It also starts writing them where someone said a word that only sounds close.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is a search spellchecker with a custom dictionary. Add your product names and their misspellings get fixed, but nearby ordinary words get "corrected" too. A transcription prompt works the same way: a listed spelling wins wherever the audio is close to it. You get your jargon right and pay in confident wrong words.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; Give a speech-to-text model a short list of your terms and it spells most of them right. It also writes those terms where someone said a word that only sounds alike, so test for both.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;Imagine a friend writing down everything you say at a noisy party. Before you start, you hand&lt;br&gt;
them a card with the tricky names on it. Now they spell those names right.&lt;/p&gt;

&lt;p&gt;But then someone says "Laura." Your friend glances at the card and writes the name from the card&lt;br&gt;
instead.&lt;/p&gt;

&lt;p&gt;The card helps your friend choose between words that sound alike. It cannot tell them which word&lt;br&gt;
was actually said. So the card fixes some mistakes and makes a few new ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug before, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your search box had a spellchecker. Users typed your product names and got "no results," so you&lt;br&gt;
added the names to its dictionary. The failed searches stopped. A week later, a support ticket&lt;br&gt;
arrived. Someone searched for "laura" and got pages about your LoRA feature. The dictionary did&lt;br&gt;
what you asked. It pulled every close word toward the words you listed.&lt;/p&gt;

&lt;p&gt;A speech-to-text model is that spellchecker, running on sound.&lt;/p&gt;

&lt;p&gt;You send it meeting audio, a support call or a video voiceover. It hears "Q drant" and writes&lt;br&gt;
"Q-drant." It hears "K V cache" and writes "cavity." I read 15 AI terms to two OpenAI&lt;br&gt;
transcription models with no help. whisper-1 spelled 14% of them right, and gpt-transcribe spelled&lt;br&gt;
36% right. Nothing raised an error. The transcript just looked slightly wrong, and every search,&lt;br&gt;
summary and caption built on it inherited the mistake. My own video captions hit this last week.&lt;br&gt;
The voice said "halve" and the transcript said "have."&lt;/p&gt;

&lt;p&gt;Both models take a hint: a text prompt, or a list of keywords. Add one and most of the jargon&lt;br&gt;
comes out right. Some of it also comes out where nobody said it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: give the model a short list of the terms this recording is likely to contain, put the&lt;br&gt;
important ones last, and test it on clips that say near-miss words, not only on clips that say the&lt;br&gt;
terms.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-02-how-to-fix-jargon-in-speech-to-text-without-adding-words/" rel="noopener noreferrer"&gt;How to Fix Jargon in Speech-to-Text Without Adding Words Nobody Said&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-02-how-to-fix-jargon-in-speech-to-text-without-adding-words/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-02-how-to-fix-jargon-in-speech-to-text-without-adding-words/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-02/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>promptengineering</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to Stop a Long LLM Answer From Freezing When the Server Runs Out of Memory</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Sun, 01 Nov 2026 13:34:10 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-stop-a-long-llm-answer-from-freezing-when-the-server-runs-out-of-memory-4kj3</link>
      <guid>https://dev.to/theaicommit/how-to-stop-a-long-llm-answer-from-freezing-when-the-server-runs-out-of-memory-4kj3</guid>
      <description>&lt;p&gt;A model's memory grows with every word of its answer, and nobody knows the length in advance. Each LLM server handles that differently, so the same traffic can waste your GPU on one server and freeze a live answer on another.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is memory overcommit. Back every page up front and half your RAM sits idle. Overcommit, and an out-of-memory killer stops a process at peak. An LLM server faces the same choice, because each request's memory grows with its answer. You pay in idle GPU memory or in frozen streams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; An LLM server must decide how much memory to hold for an answer before the model has written it. Hold too much and you waste capacity. Hold too little and a running answer gets paused to make room.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;Picture a restaurant where nobody knows how long each family will stay. You could save a giant&lt;br&gt;
table for every family, just in case. Most families leave early, so half your seats sit empty while&lt;br&gt;
people wait outside.&lt;/p&gt;

&lt;p&gt;Or you could seat everyone at small tables and hope. When the room gets full, you ask the newest&lt;br&gt;
family to stand up and wait, even in the middle of dinner. They keep their food. They just can't&lt;br&gt;
eat for a while.&lt;/p&gt;

&lt;p&gt;An AI server runs that restaurant, and every answer is a family.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;You ran a service on Kubernetes. You set its memory request to the worst case you had ever seen.&lt;br&gt;
Nothing crashed. But the cluster reported itself full while the real usage sat near 40%, and new&lt;br&gt;
pods stayed pending.&lt;/p&gt;

&lt;p&gt;So you lowered the request to the average. The cluster filled up nicely. Then a busy afternoon&lt;br&gt;
came, several pods grew at once, and the kernel killed one in the middle of its work.&lt;/p&gt;

&lt;p&gt;You were guessing a number before you knew the answer. An LLM server guesses that number for every&lt;br&gt;
request.&lt;/p&gt;

&lt;p&gt;The memory here is the &lt;strong&gt;KV cache&lt;/strong&gt;: the model's saved work for every token so far. Without it, the&lt;br&gt;
model would reread the whole conversation for each new token. It grows by one token per token&lt;br&gt;
generated. The model only decides the length by stopping, so at the moment a request starts, nobody&lt;br&gt;
knows its final size. The caller sends &lt;code&gt;max_tokens&lt;/code&gt;, but that is a ceiling, not a forecast.&lt;/p&gt;

&lt;p&gt;Under load, that guess shows up in two ways. Your GPU memory looks full while throughput sits far&lt;br&gt;
below what you paid for. Or a streaming answer stops mid-sentence for many seconds, then carries on&lt;br&gt;
as if nothing happened. Neither one logs an error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: find out which rule your server uses, measure how long your answers really are, then set&lt;br&gt;
&lt;code&gt;max_tokens&lt;/code&gt; and your concurrency limit from those lengths.&lt;/strong&gt; New to the KV cache? Start at&lt;br&gt;
&lt;a href="https://theaicommit.com/#2026-10-11" rel="noopener noreferrer"&gt;How to Work Out How Much GPU Memory One Request Really Needs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-11-01-how-to-stop-a-long-llm-answer-from-freezing-when-the-server/" rel="noopener noreferrer"&gt;How to Stop a Long LLM Answer From Freezing When the Server Runs Out of Memory&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-11-01-how-to-stop-a-long-llm-answer-from-freezing-when-the-server/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-11-01-how-to-stop-a-long-llm-answer-from-freezing-when-the-server/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-11-01/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Tell What Claude Code and Codex Forget When They Compact a Session</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Sat, 31 Oct 2026 11:30:43 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-tell-what-claude-code-and-codex-forget-when-they-compact-a-session-532a</link>
      <guid>https://dev.to/theaicommit/how-to-tell-what-claude-code-and-codex-forget-when-they-compact-a-session-532a</guid>
      <description>&lt;p&gt;When a coding agent runs low on memory, it keeps what you told it and what it changed, and throws away nearly everything it only read. You can predict the loss, measure it, and tell the summary what to keep.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is a process restart with a handoff note. Whatever the process wrote down or saved to disk comes back. Whatever sat only in memory is gone, and nothing errors. A coding agent's memory is its conversation, so values it read but never wrote down vanish, and it must read them again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A compacted agent keeps your instructions and its own edits, but loses most of what it only read. Whether a fact survives depends on how it entered the session, so you can predict the loss and tell the summary what to keep.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;You are building a huge model castle, and your table is full. So you ask a friend to write a&lt;br&gt;
short note about the castle, then you clear the table.&lt;/p&gt;

&lt;p&gt;The note says what you were told to build and which towers you finished. It does not list every&lt;br&gt;
piece you looked at in the box. Those are still in the box, so you can look again.&lt;/p&gt;

&lt;p&gt;But some pieces you borrowed for a minute, and they went back to a friend's house. If the note&lt;br&gt;
does not mention them, you will not remember them, and you cannot go look.&lt;/p&gt;

&lt;p&gt;So before you clear the table, tell your friend what to put in the note.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your service held a session cache in process memory. A deploy restarted it. The health check went&lt;br&gt;
green and the error rate stayed flat. Then users started logging in again, because the sessions&lt;br&gt;
never reached disk. Nothing crashed. The process simply came back without the state that had only&lt;br&gt;
lived in memory.&lt;/p&gt;

&lt;p&gt;A coding agent has the same split, and it restarts in the middle of your work.&lt;/p&gt;

&lt;p&gt;Its working memory is the conversation. When that fills, the agent runs &lt;strong&gt;compaction&lt;/strong&gt;: it&lt;br&gt;
replaces the conversation with a summary and carries on. In my test session, 78,642 tokens became&lt;br&gt;
2,632. That is 97% gone in about twenty seconds, and the session looks healthy afterward.&lt;/p&gt;

&lt;p&gt;The agent then keeps working from the note. If a detail is missing, you see no error. You only see&lt;br&gt;
it read the same file twice, or ask something you already answered. Worse, the detail may have&lt;br&gt;
come from a test run or a web page that no longer exists.&lt;/p&gt;

&lt;p&gt;You could treat this as bad luck. It is not. What survives follows a rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: know which lane each fact is in, tell the summary what to keep, and write anything you&lt;br&gt;
cannot regenerate to a file before compaction runs.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-10-31-how-to-tell-what-claude-code-and-codex-forget-when-they/" rel="noopener noreferrer"&gt;How to Tell What Claude Code and Codex Forget When They Compact a Session&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-10-31-how-to-tell-what-claude-code-and-codex-forget-when-they/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-10-31-how-to-tell-what-claude-code-and-codex-forget-when-they/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-10-31/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Tell Whether a Second Model Reviewing Your Agent's Work Pays for Itself</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Fri, 30 Oct 2026 11:39:40 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-tell-whether-a-second-model-reviewing-your-agents-work-pays-for-itself-pel</link>
      <guid>https://dev.to/theaicommit/how-to-tell-whether-a-second-model-reviewing-your-agents-work-pays-for-itself-pel</guid>
      <description>&lt;p&gt;Adding a second model to review your agent's work sounds like free safety. It only fixes the mistakes the reviewer does not share, and its false alarms can break work that was already right.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is running two replicas of the same software for safety. Both crash on the same leap second, because they share the bug. A reviewer model trained like the drafter misses the same failures. Pick a reviewer that fails differently, and measure what it catches on your drafter's failures, not on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A reviewer model can only fix errors it would not have made itself, and models share many blind spots. Measure what it fixes and what it breaks on your own tasks, then review only where the drafter often fails.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;You write a story for school. Before you hand it in, your twin reads it to look for mistakes.&lt;/p&gt;

&lt;p&gt;Your twin is smart, but your twin learned spelling from the same teacher. The words you get&lt;br&gt;
wrong are the words your twin gets wrong too. So those mistakes slip through.&lt;/p&gt;

&lt;p&gt;A friend from another school spots them, because they learned differently. But sometimes the&lt;br&gt;
friend says a right word is wrong. If you change it, your story gets worse.&lt;/p&gt;

&lt;p&gt;So the best helper is someone who makes different mistakes than you do. And they should only&lt;br&gt;
read the hard stories, where you make the most mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your service ran two replicas for safety. If one crashed, the other would take the traffic. Then&lt;br&gt;
a leap second arrived. Both replicas crashed in the same minute, because both ran the same code&lt;br&gt;
with the same bug. The backup was real, and it protected you against nothing that mattered.&lt;br&gt;
Engineers call this a &lt;strong&gt;common-mode failure&lt;/strong&gt;: one cause takes out every copy at once.&lt;/p&gt;

&lt;p&gt;Redundancy only helps against failures the copies do not share.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;reviewer model&lt;/strong&gt; is the same idea applied to an agent. One model, the &lt;strong&gt;drafter&lt;/strong&gt;, writes a&lt;br&gt;
plan or a patch. A second model reads it and lists concerns. The drafter then revises once.&lt;br&gt;
Some coding tools now run this step for you. You can add it to your own agent in an afternoon.&lt;/p&gt;

&lt;p&gt;It costs at least two extra model calls per task. Whether it pays depends on two things the&lt;br&gt;
setup hides. The reviewer misses whatever blind spots it shares with the drafter. And when it&lt;br&gt;
raises a false alarm on a correct draft, the revision can break it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: measure what the reviewer fixes and breaks on your drafter's own tasks, pick one&lt;br&gt;
that fails differently, and call it only where the drafter often fails.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-10-30-how-to-tell-whether-a-second-model-reviewing-your-agents/" rel="noopener noreferrer"&gt;How to Tell Whether a Second Model Reviewing Your Agent's Work Pays for Itself&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-10-30-how-to-tell-whether-a-second-model-reviewing-your-agents/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-10-30-how-to-tell-whether-a-second-model-reviewing-your-agents/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-10-30/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How Many Pull Requests a Merge Queue Can Land in an Hour</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Thu, 29 Oct 2026 09:22:28 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-many-pull-requests-a-merge-queue-can-land-in-an-hour-4ae2</link>
      <guid>https://dev.to/theaicommit/how-many-pull-requests-a-merge-queue-can-land-in-an-hour-4ae2</guid>
      <description>&lt;p&gt;A merge queue tests each pull request on top of the ones ahead of it, so one failure restarts everything behind it. That sets a ceiling on how many pull requests it can land per hour, and coding agents now send more than it can take.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is optimistic locking under contention. Each transaction validates against everything committed before it, and one abort throws away the work queued behind it. More workers only waste more work. Throughput is set by the abort rate and the transaction time. Agents raise the load and leave that ceiling where it was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A merge queue's speed is capped by how often a queued change fails and how long CI takes, not by how many pipelines run at once. More pull requests from agents push it into long waits unless you cut one of those two.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;A school lunch line has one rule. Each kid must show their tray to the cook, and the cook&lt;br&gt;
checks it against every tray that went before.&lt;/p&gt;

&lt;p&gt;The cook can look at twenty trays at once. If a tray is wrong, that kid steps out. Every kid&lt;br&gt;
behind them has to show their tray again, because the cook checked it next to the wrong one.&lt;/p&gt;

&lt;p&gt;On a normal day the line moves fine. Then a class of fast kids joins. They bring three times&lt;br&gt;
as many trays. The cook is not slower. The line still backs up, because each wrong tray sends&lt;br&gt;
everyone behind it back to the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your service used optimistic locking. Each write read a row, changed it and committed only if&lt;br&gt;
nobody else had changed it first. At low traffic it was fast. Then traffic tripled. Writes&lt;br&gt;
started aborting and retrying, and each retry raced the next wave. Latency went from&lt;br&gt;
milliseconds to seconds. Adding app servers made it worse, because they only added contenders.&lt;/p&gt;

&lt;p&gt;The limit was never the servers. It was how often a commit failed, times how long it took.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;merge queue&lt;/strong&gt; has the same shape. It is the gate that lands pull requests on &lt;code&gt;main&lt;/code&gt; one&lt;br&gt;
tested batch at a time. GitHub calls it the merge queue. GitLab calls it a merge train. Each&lt;br&gt;
pull request is tested on top of &lt;code&gt;main&lt;/code&gt; plus every pull request ahead of it, so &lt;code&gt;main&lt;/code&gt; never&lt;br&gt;
breaks. When one fails, everything behind it was tested on a tree that included the failure.&lt;br&gt;
All of it reruns.&lt;/p&gt;

&lt;p&gt;Coding agents change the arrival rate. At Anthropic, merges grew from about 2,500 a day in May&lt;br&gt;
2026 to over 30,000 a day by September. They stopped using a merge queue. A team without that&lt;br&gt;
option has to know where its queue's ceiling is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: measure your queue's failure rate and CI time, compute its ceiling, and lower the&lt;br&gt;
failure rate before adding pipelines.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-10-29-how-many-pull-requests-a-merge-queue-can-land-in-an-hour/" rel="noopener noreferrer"&gt;How Many Pull Requests a Merge Queue Can Land in an Hour&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-10-29-how-many-pull-requests-a-merge-queue-can-land-in-an-hour/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-10-29-how-many-pull-requests-a-merge-queue-can-land-in-an-hour/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-10-29/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Find the Agent Actions a Prompt Injection Can Control</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Wed, 28 Oct 2026 11:53:06 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-to-find-the-agent-actions-a-prompt-injection-can-control-2mbl</link>
      <guid>https://dev.to/theaicommit/how-to-find-the-agent-actions-a-prompt-injection-can-control-2mbl</guid>
      <description>&lt;p&gt;An agent that reads an email can be steered by whoever wrote that email. Which of its next steps the writer can reach is not luck. You can list them before you ship, and design most of them out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is SQL injection without parameterized queries. A database fixed it by sending the query and the values on separate channels. A model reads both in one stream, so it cannot. The fix moves up a level: decide each action before reading the values, or read them somewhere that cannot act. It costs flexibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A model treats every word in its context as a possible instruction, including text a tool fetched. Any decision your agent makes after reading that text belongs to whoever wrote it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;A kid has a list of chores from their parent. One chore says "read the notes in the mailbox&lt;br&gt;
and do what's needed."&lt;/p&gt;

&lt;p&gt;One note in the mailbox says "Also, leave the back door open." It is written in pen, like the&lt;br&gt;
parent's list. The kid cannot tell which notes came from the parent.&lt;/p&gt;

&lt;p&gt;So the kid leaves the door open. The note writer did not break in. They just wrote a note in&lt;br&gt;
a place the kid was told to read.&lt;/p&gt;

&lt;p&gt;A smart parent writes the whole chore list first. The mailbox can change what the kid writes&lt;br&gt;
down. It can't add a chore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;A support page showed customer names. Someone signed up with a name that contained a&lt;br&gt;
&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag. The page printed the name, and the browser ran it as code. Every agent who&lt;br&gt;
opened that ticket ran the attacker's script with their own login. Nothing was hacked. Data&lt;br&gt;
was put in a place where code was expected.&lt;/p&gt;

&lt;p&gt;The fix you shipped was a boundary. The browser now treats the name as text and never as code.&lt;/p&gt;

&lt;p&gt;An AI agent has the same bug, and no such boundary. An agent is a model that calls tools in a&lt;br&gt;
loop. A tool might read your inbox, fetch a web page, or open a GitHub issue. Whatever the tool&lt;br&gt;
returns goes into the &lt;strong&gt;context&lt;/strong&gt;, the text the model reads before each step. Your request is&lt;br&gt;
in there too. The model sees one stream of words and cannot tell your instruction from a&lt;br&gt;
sentence inside an email.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;prompt injection&lt;/strong&gt;: someone writes instructions into content your agent will read.&lt;br&gt;
Filters catch some of it. A filter that catches 95% of attacks still lets one in twenty through.&lt;/p&gt;

&lt;p&gt;The useful question is not whether a model can be fooled. It can. The question is what the&lt;br&gt;
fooled model can still do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: list every decision your agent makes after it reads untrusted text, then move each&lt;br&gt;
one before that read or into a context that cannot act.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-10-28-how-to-find-the-agent-actions-a-prompt-injection-can-control/" rel="noopener noreferrer"&gt;How to Find the Agent Actions a Prompt Injection Can Control&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-10-28-how-to-find-the-agent-actions-a-prompt-injection-can-control/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-10-28-how-to-find-the-agent-actions-a-prompt-injection-can-control/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-10-28/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How Claude Code and Codex Decide Which Skill Descriptions the Model Reads</title>
      <dc:creator>Mayur Agnani</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:44:35 +0000</pubDate>
      <link>https://dev.to/theaicommit/how-claude-code-and-codex-decide-which-skill-descriptions-the-model-reads-k16</link>
      <guid>https://dev.to/theaicommit/how-claude-code-and-codex-decide-which-skill-descriptions-the-model-reads-k16</guid>
      <description>&lt;p&gt;Your coding agent lists every skill you install in a small, fixed slice of its memory. When too many skills compete for it, some lose the words that tell the model when to use them, and nothing warns you on screen.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Engineer's view.&lt;/strong&gt; This is a cache that evicts the least-used entry. A key you just added has the lowest hit count, so it goes first, and it never earns the hits that would keep it. Claude Code trims its skill list the same way. A skill you installed today is the first to lose its description.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR.&lt;/strong&gt; A coding agent shows the model only a short list of your skills, and that list has a size limit. Past the limit, descriptions get cut, and a skill the model cannot read about is a skill it rarely picks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Explain Like I'm 5
&lt;/h2&gt;

&lt;p&gt;A school has one small board by the door. Every club pins a card with its name and what it&lt;br&gt;
does. Kids read the board to decide where to go after lunch.&lt;/p&gt;

&lt;p&gt;Then too many clubs sign up. The teacher keeps every name on the board but crosses out the&lt;br&gt;
descriptions of the clubs that got the fewest visitors lately. A brand-new club has had no&lt;br&gt;
visitors yet, so its description is crossed out first.&lt;/p&gt;

&lt;p&gt;A kid who loves chess walks past a card that just says "Knights". Nothing tells them it is the&lt;br&gt;
chess club. So the new club stays empty, and its card stays crossed out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;You have shipped this bug already, in a system with no model in it.&lt;/p&gt;

&lt;p&gt;Your service wrote one log line per request. Someone added a field near the front, and the line&lt;br&gt;
crossed the log shipper's size limit. The shipper did not fail. It cut each line at the limit and&lt;br&gt;
sent the rest. The request ID sat at the end of the line, so searching by request ID stopped&lt;br&gt;
finding anything. No alert fired, because every line still arrived.&lt;/p&gt;

&lt;p&gt;The bug was not in any one field. It was a shared size limit, plus a rule for what gets cut when&lt;br&gt;
the limit is hit. Adding something new quietly took words away from something old.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;skill&lt;/strong&gt; in a coding agent has the same bug. A skill is a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file: a&lt;br&gt;
name, a description, and instructions for one kind of task. Coding agents that support the open&lt;br&gt;
Agent Skills format do not load your skills up front. They show the model&lt;br&gt;
a &lt;strong&gt;skill listing&lt;/strong&gt;: each skill's name and description, and nothing else. The model reads that&lt;br&gt;
listing and decides which skill fits your request.&lt;/p&gt;

&lt;p&gt;The listing has a size limit, a fixed share of the &lt;strong&gt;context window&lt;/strong&gt;, the model's working&lt;br&gt;
memory for the session. Install enough skills, and the listing overflows. Each tool then cuts&lt;br&gt;
it by its own rule. A skill whose description was cut can still be listed and still never be&lt;br&gt;
chosen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: keep the listing under its budget, put each skill's use case in its first sentence&lt;br&gt;
and its name, and check what the model actually sees.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the full post on The AI Commit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://theaicommit.com/2026-10-27-how-claude-code-and-codex-decide-which-skill-descriptions/" rel="noopener noreferrer"&gt;How Claude Code and Codex Decide Which Skill Descriptions the Model Reads&lt;/a&gt;&lt;/strong&gt; carries the rest: the fix and why it works, the code to change for each role, how to tell it worked, when it is the wrong tool, and an interactive model you can play with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://theaicommit.com/2026-10-27-how-claude-code-and-codex-decide-which-skill-descriptions/" rel="noopener noreferrer"&gt;theaicommit.com&lt;/a&gt;, a daily AI engineering lab for software engineers. The original has an &lt;a href="https://theaicommit.com/2026-10-27-how-claude-code-and-codex-decide-which-skill-descriptions/" rel="noopener noreferrer"&gt;interactive version&lt;/a&gt; you can play with, and the full runnable code is on &lt;a href="https://github.com/magna56/aI_daily_run/blob/main/2026-10-27/code_example.py" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>llm</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
