<?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: Vinny Barreca</title>
    <description>The latest articles on DEV Community by Vinny Barreca (@phantom-byte).</description>
    <link>https://dev.to/phantom-byte</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%2F3962211%2F52789747-268f-4ecf-a2e9-76d76b3978e9.jpg</url>
      <title>DEV Community: Vinny Barreca</title>
      <link>https://dev.to/phantom-byte</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/phantom-byte"/>
    <language>en</language>
    <item>
      <title>The AI Model Is a Commodity: Why Your Moat Is the Harness</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Fri, 13 Nov 2026 23:40:59 +0000</pubDate>
      <link>https://dev.to/phantom-byte/the-ai-model-is-a-commodity-why-your-moat-is-the-harness-gog</link>
      <guid>https://dev.to/phantom-byte/the-ai-model-is-a-commodity-why-your-moat-is-the-harness-gog</guid>
      <description>&lt;p&gt;$3 billion. That is what LangChain is worth after a $300 million Series C led by CapitalG, more than double the $1.25 billion valuation it carried a year ago on a $125 million round.&lt;/p&gt;

&lt;p&gt;LangChain does not train a frontier model. It sells the thing you wrap around one: the gateway, the routing table, the eval set, the trace store.&lt;/p&gt;

&lt;p&gt;The money is not in the model. It is in the layer that makes a model usable.&lt;/p&gt;

&lt;p&gt;THE PLUMBING TRADE, BY THE NUMBERS&lt;/p&gt;

&lt;p&gt;LangChain now claims 7,000 LangSmith customers, including Harvey, Rippling, Clay, Nvidia, Toyota and Salesforce. The pitch is one sentence: own your intelligence instead of renting it from a lab.&lt;/p&gt;

&lt;p&gt;Cerebras reported $230.9 million in core revenue against $214.7 million expected, up 70% from $135.7 million a year earlier, and guided the next quarter to $310 million to $330 million at a 47% to 49% gross margin against a 42.1% consensus. Management said revenue triples in 2027, which implies about $2.85 billion. That is serving and silicon, not a model.&lt;/p&gt;

&lt;p&gt;Nscale posted a $1.69 billion net loss on $307.5 million of revenue, up 1,344% year over year, with the loss widening from $1.02 billion in the prior quarter.&lt;/p&gt;

&lt;p&gt;Perplexity shipped Decider v1.3 and Decider Flash v1.3 as open weights under Apache. On a sample of one million real requests to its Decisions API, which works out to 2,318,887 questions, the larger model agreed with frontier LLM judges 93.98% of the time. That is routing and judging, bought as a cheap model instead of a token bill.&lt;/p&gt;

&lt;p&gt;Four companies, one direction: the capital is chasing the parts of the stack that touch every request.&lt;/p&gt;

&lt;p&gt;WHY THE MODEL IS NOT WHERE THE MARGIN IS&lt;/p&gt;

&lt;p&gt;A frontier model is a commodity on a 6 to 12 month clock. Whatever you pick today, a cheaper model with a matching score shows up inside a year, and the labs will cut price to keep the account.&lt;/p&gt;

&lt;p&gt;Your harness compounds. The traces you collected last quarter are the reason you can tell a routing change from a regression this quarter, and none of that resets when a lab ships a new checkpoint.&lt;/p&gt;

&lt;p&gt;The labs sell inference at a per token price, and price is the one lever they compete on. Everything above it, from which model gets the hard request to what counts as a good answer, is yours to own or yours to rent.&lt;/p&gt;

&lt;p&gt;THE REQUEST PATH, UP CLOSE&lt;/p&gt;

&lt;p&gt;Strip the marketing and the harness is three artifacts and one loop. A routing policy, an eval set, a trace store. Every request hits your gateway, the policy picks a model, the response and the model name land in the trace store, and the eval set grades a sample of what came back against criteria you wrote down.&lt;/p&gt;

&lt;p&gt;Here is the router half of that, illustrative and shaped like a decision model call rather than any vendor SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# illustrative routing policy, not a vendor SDK&lt;/span&gt;
&lt;span class="n"&gt;policy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"routing.yaml"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;decider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;judge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"does this need the frontier model?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"frontier"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;escalate_at&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s2"&gt;"small"&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;span&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"route"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;escalate_at&lt;/code&gt; number is your token bill in one place. Move it two points and spend moves double digits while quality moves inside the noise. This is what builders miss when they treat the model choice as the architecture. The model is a parameter. The threshold is the architecture.&lt;/p&gt;

&lt;p&gt;FOLLOW THE QUALITY FAILURE&lt;/p&gt;

&lt;p&gt;Google open sourced AQuA, the Ambient Quality Agent, for the part of agent work nobody puts on a slide. Agents fail silently, returning a successful-looking response while skipping a required tool call or dropping a constraint the user set three turns earlier.&lt;/p&gt;

&lt;p&gt;AQuA runs alongside the agent in Google Cloud, outside the request path, reading telemetry from Cloud Trace, Cloud Logging or BigQuery. It samples up to 1,000 recent sessions per run through five stages: sampling, reviewing, clustering, verifying, tracking. Root cause analysis compares failing sessions against an immutable source snapshot and cites file and line ranges. It never opens a pull request on its own.&lt;/p&gt;

&lt;p&gt;The criteria live in a plain &lt;code&gt;goal.md&lt;/code&gt; file, and that is the decision worth copying: the standard for a good session gets versioned next to the code. The shape is roughly this, illustrative and not Google's copy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;# goal.md
&lt;/span&gt; A session must
&lt;span class="k"&gt;- &lt;/span&gt;check seat availability before quoting a fare
&lt;span class="k"&gt;- &lt;/span&gt;carry dietary constraints into every delegation
&lt;span class="k"&gt;- &lt;/span&gt;name the tool call behind every price it reports

 A session fails when
&lt;span class="k"&gt;- &lt;/span&gt;the response succeeds with zero tool calls
&lt;span class="k"&gt;- &lt;/span&gt;a constraint set on turn one is missing at turn ten
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A verifier cannot reject a bad session if nobody wrote down what a good one looks like. Most teams discover they never wrote it down the day the first silent regression reaches a customer.&lt;/p&gt;

&lt;p&gt;On 32 sessions from a multi-agent travel application that loop produced 42 findings across nine candidate clusters. The verifier threw out three unsupported clusters after checking transcripts, leaving six verified issues, among them bypassed seat availability checks and a lost vegan preference during delegation. The team's line is worth stealing: an insight is its citations, not a confidence score.&lt;/p&gt;

&lt;p&gt;Silent quality failure is the only bug class that survives a green dashboard. Whoever owns the layer that catches it owns the renewal conversation.&lt;/p&gt;

&lt;p&gt;THE RENT VERSUS OWN TEST&lt;/p&gt;

&lt;p&gt;One framework, four piles, three questions, one order.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Split the bill into four piles: model API spend, serving and hardware, orchestration, and evaluation plus observability. Real accounting, not a guess from the invoice total.&lt;/li&gt;
&lt;li&gt;If nearly all of it lands in the first pile, you are renting the commodity and ignoring the moat. That ratio is the whole diagnosis.&lt;/li&gt;
&lt;li&gt;Ask each vendor one question: what happens to our agents if your model API is deprecated next quarter? The answer tells you whether you bought a harness or a habit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The ordering rule is the valuable part. Evaluation goes first because it is the only pile that tells you whether the other three work. Routing comes second, since a good eval tells you which requests deserve the expensive model. Serving comes last, once you know the traffic you pay to serve.&lt;/p&gt;

&lt;p&gt;THE BEAR CASE, STEELMANNED&lt;/p&gt;

&lt;p&gt;Plumbing is capital hungry, and Nscale is the proof. A $1.69 billion quarterly loss on $307.5 million of revenue is a company buying demand with borrowed money. Microsoft walked away from a planned data center in England over electricity access and declined to renew a Texas contract. Anthropic exercised an option in late September for more capacity.&lt;/p&gt;

&lt;p&gt;So the trade has two halves. The margin is in the plumbing, and so is the balance sheet risk. If capital tightens, the layer consolidates around whoever holds contracted demand, not whoever holds the best deck. Owning your intelligence does not mean owning a datacenter.&lt;/p&gt;

&lt;p&gt;WHAT TO DO TODAY&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Map this quarter's AI spend across the four piles. Write the percentages down.&lt;/li&gt;
&lt;li&gt;Ask your model vendor the deprecation question in writing.&lt;/li&gt;
&lt;li&gt;Write the &lt;code&gt;goal.md&lt;/code&gt; for your worst agent before you shop for a better model. Ten criteria will teach you more than ten benchmarks.&lt;/li&gt;
&lt;li&gt;Stand up one eval or routing pilot before the renewal date on the calendar.&lt;/li&gt;
&lt;li&gt;Put the Q1 2027 Cerebras and Microsoft revenue line on a watchlist. It is the cleanest canary for whether this trade still has buyers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;THE UNCOMFORTABLE QUESTION&lt;/p&gt;

&lt;p&gt;If the model is the commodity, what exactly are you paying your AI budget for, and who is capturing the margin you assume is yours?&lt;/p&gt;

&lt;p&gt;You already know the model is a parameter. Here is what that costs in practice: &lt;a href="https://articles.phantom-byte.com/programmatic-tool-calling-agent-harness.html" rel="noopener noreferrer"&gt;Same task, same model, same tools: 36 requests and 3.1M tokens direct, 2 requests and 61K&lt;/a&gt;. The threshold and the routing table, not the checkpoint, are where the bill actually moves.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>langchain</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>Stop Decorating Invoices: Why Multi-Agent Systems Fail the Token Multiplier Test</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Thu, 12 Nov 2026 00:52:26 +0000</pubDate>
      <link>https://dev.to/phantom-byte/stop-decorating-invoices-why-multi-agent-systems-fail-the-token-multiplier-test-3e62</link>
      <guid>https://dev.to/phantom-byte/stop-decorating-invoices-why-multi-agent-systems-fail-the-token-multiplier-test-3e62</guid>
      <description>&lt;p&gt;4.7 times the tokens. That is what every coordinated arm paid in a controlled study of thirteen enterprise workflows, and the success gains were usually small and rarely significant.&lt;/p&gt;

&lt;p&gt;The setup is what makes the number worth your attention. Same model. Same tasks. Same tools. Only the architecture changed.&lt;/p&gt;

&lt;p&gt;Then came the twist. A redesigned multi-agent build hit 75.6% success against a 67.4% baseline, the only arm in the study to significantly beat the single agent. The architecture did not win that round. The implementation of it did.&lt;/p&gt;

&lt;p&gt;If your team is about to add a second agent, read the ledger below first.&lt;/p&gt;

&lt;p&gt;WHAT THE STUDY ACTUALLY DID&lt;/p&gt;

&lt;p&gt;The paper is Agent Architecture Cost-Success Trade-offs: A Controlled Evaluation across Enterprise-Style SOPs, on arXiv as &lt;a href="https://arxiv.org/abs/2611.12953" rel="noopener noreferrer"&gt;2611.12953&lt;/a&gt;, submitted 7 November 2026 by Subhrangshu Nandi and thirteen co-authors. Read it before you argue with anything below, because the details are the argument.&lt;/p&gt;

&lt;p&gt;Most agent benchmarks vary everything at once. They swap the model, swap the harness, swap the task set, and then publish a score. That measures confusion, not architecture.&lt;/p&gt;

&lt;p&gt;This study held the model, the tasks, and the tools fixed and varied one thing: the shape of the workflow. It compared a function-calling single agent, a skill-augmented agent, centralized multi-agent orchestration, and a triage swarm, eight arms in total, across 13 enterprise SOPs.&lt;/p&gt;

&lt;p&gt;An SOP here is a standard operating procedure, the long branching workflow a company actually runs: intake, checks, tool calls, handoffs, sign off. The kind of process with twelve steps and three places it can dead-end.&lt;/p&gt;

&lt;p&gt;The authors also built a skill definition quality rubric and used it to assemble two matched corpora, one with high-quality skill definitions and one with deliberately degraded ones.&lt;/p&gt;

&lt;p&gt;THE LEDGER: WHAT COORDINATION COSTS&lt;/p&gt;

&lt;p&gt;Every coordinated arm, multi-agent or skill-augmented, spent 1.4 to 4.7 times the tokens and 2.6 to 5.8 times the latency of the single agent.&lt;/p&gt;

&lt;p&gt;For gains that were usually small and rarely significant.&lt;/p&gt;

&lt;p&gt;On any given SOP, success ranged from under 10% on the hardest to near 100% on the easiest. In aggregate, no architecture was statistically separable. Added structure only plausibly paid off on complex branching SOPs, and the authors call that a directional trend rather than a significant one.&lt;/p&gt;

&lt;p&gt;This is the part that hits your bill and not your benchmark. Token accounting per request hides the whole problem now. Coordination means an orchestrator that talks to two workers that call tools that return to the orchestrator. Every hop re-sends context. Your dashboard shows a fleet of cheap calls. The invoice shows the multiplier.&lt;/p&gt;

&lt;p&gt;THE ARCHITECTURE MULTIPLIER LEDGER&lt;/p&gt;

&lt;p&gt;Name the thing so your design review can point at it. The Architecture Multiplier Ledger is four steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instrument tokens and latency per SOP on your current single-agent before anything new lands.&lt;/li&gt;
&lt;li&gt;Classify each SOP by branching depth and length, because those are the only shapes where a gain is even plausible.&lt;/li&gt;
&lt;li&gt;Add coordination only where a measured gain clears the recorded multiplier.&lt;/li&gt;
&lt;li&gt;Re-run the ledger after every skill corpus change, since definition quality moves success more than architecture does.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The ordering rule is the whole framework: record the multiplier before you add the structure. If the gain does not clear the multiplier, the structure is a donation to your inference bill.&lt;/p&gt;

&lt;p&gt;An illustrative version of the measurement, not a result from the paper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ledger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                      &lt;span class="c1"&gt;# one run, single-agent&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                     &lt;span class="c1"&gt;# same SOP, coordinated build&lt;/span&gt;
    &lt;span class="n"&gt;token_mult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;
    &lt;span class="n"&gt;latency_mult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"sop"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"token_mult"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token_mult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"latency_mult"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latency_mult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"success_gain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"clears"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;token_mult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it per SOP, not per system. One average across thirteen workflows is how a bad arm hides.&lt;/p&gt;

&lt;p&gt;WHY DEFINITION QUALITY BEAT ARCHITECTURE&lt;/p&gt;

&lt;p&gt;High-quality skill definitions lifted success from 67.4% to 73.1%. Degraded definitions fell below the baseline.&lt;/p&gt;

&lt;p&gt;Same model, same tools, same SOPs. The only variable was how well the skill was written. That is a bigger move than most teams get from their entire orchestration layer, and it costs a documentation pass instead of a second agent.&lt;/p&gt;

&lt;p&gt;This is the same law measured a second time, and it lines up with the earlier note on tool descriptions costing 66% accuracy. The words you put in front of the model are the product. The topology around them is overhead.&lt;/p&gt;

&lt;p&gt;The practical consequence is uncomfortable for people who think of prompt files as scratch work. A skill corpus is a testable asset. It belongs in version control, with a rubric, and it should be scored the same way you score code before a release.&lt;/p&gt;

&lt;p&gt;THE REDESIGN RESULT&lt;/p&gt;

&lt;p&gt;The sharpest finding is not that multi-agent lost. It is that a plausible multi-agent implementation lost to the single agent, and a targeted redesign of that same implementation became the only arm to significantly beat the baseline at 75.6%.&lt;/p&gt;

&lt;p&gt;One build failed. The same build, fixed, won. Nothing about the category changed between those two rows.&lt;/p&gt;

&lt;p&gt;So the variance inside one architecture is larger than the gap between architectures. Your team is arguing about a category while the outcome sits in the build. That is why the debate never resolves.&lt;/p&gt;

&lt;p&gt;And the tooling is following the bill rather than the benefit. A Claude Code hooks module called Reinwatch, posted the same morning it was written, reports per-agent token counts, and can stop a single runaway agent inside a running workflow. People ship products for problems that already hurt.&lt;/p&gt;

&lt;p&gt;WHAT TO DO TODAY&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Turn on per-agent token and latency accounting for every agent you run, in your own harness if you have nothing off the shelf.&lt;/li&gt;
&lt;li&gt;[ ] Baseline your single agent on your five most used SOPs before you add a second one.&lt;/li&gt;
&lt;li&gt;[ ] Audit your skill definitions for staleness and vagueness, because that is where the points are.&lt;/li&gt;
&lt;li&gt;[ ] Kill one coordinated arm you cannot justify with a measured gain. You already know which one.&lt;/li&gt;
&lt;li&gt;[ ] Put the multiplier ledger in your design document template this week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;THE UNCOMFORTABLE QUESTION&lt;/p&gt;

&lt;p&gt;If your team's architecture debates never end in a measured token multiplier, are you engineering a system or decorating an invoice?&lt;/p&gt;

&lt;p&gt;Same setup, different layer: in Programmatic Tool Calling: &lt;a href="https://articles.phantom-byte.com/programmatic-tool-calling-agent-harness.html" rel="noopener noreferrer"&gt;Why Your AI Harness Beats Your Model Choice&lt;/a&gt;, the same task, same model, and same tools run 36 requests and 3.1M tokens through one harness and 2 requests and 61K through the other.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>software</category>
    </item>
    <item>
      <title>Your LLM Capacity Plan Is Lying to You: Inside vLLM Overload Traces</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Tue, 10 Nov 2026 02:00:23 +0000</pubDate>
      <link>https://dev.to/phantom-byte/your-llm-capacity-plan-is-lying-to-you-inside-vllm-overload-traces-23k8</link>
      <guid>https://dev.to/phantom-byte/your-llm-capacity-plan-is-lying-to-you-inside-vllm-overload-traces-23k8</guid>
      <description>&lt;p&gt;During an overload experiment on vLLM, the engine's own prompt token counter missed a third to half of every prompt token it computed. Requests that were later aborted had already burned 79 to 85 percent of their prefill work before anyone cancelled them.&lt;/p&gt;

&lt;p&gt;That is not a bug report. That is your capacity plan sitting on a meter that undercounts by half during exactly the incident you plan for.&lt;/p&gt;

&lt;p&gt;We covered the client side of retries in an earlier note, where idempotency and reconciliation decide whether a retry is a second attempt or a second charge. This is the other end of the wire: what the engine does when every client retries at once.&lt;/p&gt;

&lt;p&gt;THE EXPERIMENT THAT DID NOT GO AS PLANNED&lt;/p&gt;

&lt;p&gt;Two researchers ran overload experiments on vLLM with three open models and recorded scheduler traces of one of them. A scheduler trace is the record that ties each client attempt to the execution it created inside the engine. That instrument matters more than the headline. Without it you see requests arrive and finish. With it you see the work a dead client left behind.&lt;/p&gt;

&lt;p&gt;The assumption under test was the fix most teams ship first because it looks free: propagate the cancellation and the wasted compute goes away.&lt;/p&gt;

&lt;p&gt;It did not. With retries on, cancellation alone failed to restore service in any run. Only 12 to 38 percent of the calls that arrived after the overload were delivered.&lt;/p&gt;

&lt;p&gt;Cancellation is free, and you get what you pay for.&lt;/p&gt;

&lt;p&gt;WHY CANCELLATION DOES NOT UNBURN TOKENS&lt;/p&gt;

&lt;p&gt;The traces show why. Retries that vLLM ran typically started prefill less than half a second before they timed out. Prefill is the prompt processing that happens before the first token comes out, and for a long agent context it is most of the bill. It was nearly finished when the deadline fired.&lt;/p&gt;

&lt;p&gt;So the client gave up, the engine kept computing, and the cancel signal arrived after the money was spent.&lt;/p&gt;

&lt;p&gt;Then the accounting failure. The engine's prompt token counter missed a third to half of all the prompt tokens it computed during the incident. Your autoscaler, your budget alerts, your per tenant cost report and your capacity plan all read from that counter. They all read low at the worst possible moment, and they all read low in the same direction.&lt;/p&gt;

&lt;p&gt;THE OVERLOAD TRIAGE RULE&lt;/p&gt;

&lt;p&gt;Three remedies get sold for retry storms, and they fail in different ways. Pick by which failure you can afford.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cancellation stops new waste. It does not recover work already spent.&lt;/li&gt;
&lt;li&gt;A retry budget stops amplification. It does so by refusing service to some callers.&lt;/li&gt;
&lt;li&gt;Request coalescing stops duplicate work. It delivered every call from the overload onward, some of them late, unless cancellation had already aborted the running execution.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The order matters, and that is the part most teams get backwards. Coalescing wins only while the original execution is still alive, so cancellation running ahead of it is what turns a late answer into no answer. Coalesce first, budget second, cancel last.&lt;/p&gt;

&lt;p&gt;That order is the whole interceptor. The shape below is illustrative, not the paper's code, but every line maps to one of the three remedies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# gateway interceptor, illustrative shape only inflight = {}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;intercept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt_hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deadline_bucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;inflight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;inflight&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# coalesce: one execution, many waiters&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;retry_budget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;shed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="c1"&gt;# budget: refuse on purpose, not by luck&lt;/span&gt;
    &lt;span class="n"&gt;ex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                &lt;span class="c1"&gt;# prefill starts burning tokens here&lt;/span&gt;
    &lt;span class="n"&gt;inflight&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# no cancel call, and that is deliberate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leaving out the cancel call is the design decision, not an oversight. Kill an execution that other callers are attached to, and you have converted a late answer into no answer for all of them.&lt;/p&gt;

&lt;p&gt;Pick your remedy by which failure you can afford: waste, refusal, or latency.&lt;/p&gt;

&lt;p&gt;WHY AGENTS MAKE THIS THE COMMON CASE&lt;/p&gt;

&lt;p&gt;DeepSeek disclosed that its Harness agent app was consuming roughly 92 trillion tokens per day at 1.54 million daily users, which works out to about 60 million tokens per user per day. Chat traffic never produced a number like that. An agent with a retry loop multiplies request volume and prompt length at the same time, because every retry carries the same long context into prefill.&lt;/p&gt;

&lt;p&gt;Load shapes are also diverging. None of the top ten open source models on OpenRouter share an architecture, and average prompt lengths differ by region, 97k tokens against 70k. When the shape of the load keeps moving, the overload point moves with it, and the timeout you tuned last quarter is now a retry generator.&lt;/p&gt;

&lt;p&gt;The overload path is not the edge case you deprovision capacity for. When your users are agents holding timeouts, it is the product path.&lt;/p&gt;

&lt;p&gt;WHAT TO DO TODAY&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop trusting the engine's prompt token counter during an incident. Log scheduler level executions, not just completed requests.&lt;/li&gt;
&lt;li&gt;Measure prefill completed before timeout. If retries start prefill under a second from their deadline, your timeout is your retry policy.&lt;/li&gt;
&lt;li&gt;Build coalescing at the gateway, keyed on the request, so duplicate calls share one execution instead of buying one each.&lt;/li&gt;
&lt;li&gt;Cap client retries with a budget and make the budget visible to the server, so shedding is a decision rather than a coincidence.&lt;/li&gt;
&lt;li&gt;Run an overload drill on purpose and record delivered call percentage, not average latency. Average latency hides undelivered calls completely.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one is the measurement that would have caught this. Every team watching this incident had a latency graph. The graph that told the truth was the one counting calls that never got an answer.&lt;/p&gt;

&lt;p&gt;THE UNCOMFORTABLE QUESTION&lt;/p&gt;

&lt;p&gt;Your dashboards showed green through the last incident because the counter feeding them undercounts by half under load. How much of your capacity plan is built on a meter you have never verified during an overload?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>architecture</category>
      <category>performance</category>
    </item>
    <item>
      <title>Anthropic just paid Akamai $11.6 billion over seven years, and the bet is on CPUs, not GPUs</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Sat, 26 Sep 2026 19:10:59 +0000</pubDate>
      <link>https://dev.to/phantom-byte/anthropic-just-paid-akamai-116-billion-over-seven-years-and-the-bet-is-on-cpus-not-gpus-3n3f</link>
      <guid>https://dev.to/phantom-byte/anthropic-just-paid-akamai-116-billion-over-seven-years-and-the-bet-is-on-cpus-not-gpus-3n3f</guid>
      <description>&lt;p&gt;Everyone argues about which GPU buys the frontier. Meanwhile, the biggest cloud deal of the year is for the boring chip that runs your agent's tool calls, browsing, and code execution.&lt;/p&gt;

&lt;p&gt;Agents do not live inside the model forward pass. They live in the harness around it, and that harness is CPU work. That is why a lab would lock up seven years of general-purpose compute while everyone else fights over HBM.&lt;/p&gt;

&lt;p&gt;We covered this before it was news: &lt;a href="https://articles.phantom-byte.com/your-agent-runs-on-a-cpu-nvidia-just-built-one-for-it.html" rel="noopener noreferrer"&gt;the agent workload already moved to the CPU&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>claude</category>
      <category>gpu</category>
    </item>
    <item>
      <title>I Scanned 300 Small Business Domains. 243 Had Broken Mail Records.</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Sun, 20 Sep 2026 16:37:35 +0000</pubDate>
      <link>https://dev.to/phantom-byte/i-scanned-300-small-business-domains-243-had-broken-mail-records-3j04</link>
      <guid>https://dev.to/phantom-byte/i-scanned-300-small-business-domains-243-had-broken-mail-records-3j04</guid>
      <description>&lt;p&gt;I ran a mail-record scanner over 300 small business domains, the kind of local shops that send invoices, quotes, and appointment reminders out of their own domain.&lt;/p&gt;

&lt;p&gt;243 of them, 81 percent, had at least one defect.&lt;/p&gt;

&lt;p&gt;Not a judgment call. A measured defect: no SPF record, an SPF ending in ~all, a DMARC record that enforces nothing, or a DKIM key that has been revoked. The breakdown: 120 domains with no DMARC record at all, 112 with SPF ending in ~all, 73 running DMARC at p=none, 66 with no SPF record at all, and 48 with a DMARC record that collects no reports.&lt;/p&gt;

&lt;p&gt;Eighty-one percent. That is not a rounding error. That is the default state of small business email.&lt;/p&gt;

&lt;p&gt;THE ONE RECORD NOBODY PUBLISHES&lt;/p&gt;

&lt;p&gt;Here is the one I see most and the one almost nobody understands.&lt;/p&gt;

&lt;p&gt;A restaurant domain had this in DNS:&lt;/p&gt;

&lt;p&gt;v=SPF1 include:spf.easywp.com ~all&lt;/p&gt;

&lt;p&gt;and this at _dmarc:&lt;/p&gt;

&lt;p&gt;v=DMARC1; p=none;&lt;/p&gt;

&lt;p&gt;The SPF is fine. The DKIM is fine. But the DMARC policy says p=none, which tells every receiver on earth: if mail claiming to be from this domain fails both checks, do nothing. Deliver it anyway.&lt;/p&gt;

&lt;p&gt;p=none is not enforcement. It is a shrug written in DNS.&lt;/p&gt;

&lt;p&gt;The owner thinks they have DMARC because the record exists. They have the appearance of DMARC. Any spammer with a cheap mail server can send "invoices" from their domain, and every receiver will wave it through, because the record they published literally instructs receivers to accept the failure.&lt;/p&gt;

&lt;p&gt;Worse: this particular record had no rua tag, so even the reporting, the only reason p=none exists as a testing stage, was switched off. The domain was reporting nothing to nobody.&lt;/p&gt;

&lt;p&gt;THE RECORD THAT DOES THE OPPOSITE OF WHAT YOU THINK&lt;/p&gt;

&lt;p&gt;Second most common: SPF ending in ~all.&lt;/p&gt;

&lt;p&gt;v=spf1 include:secureserver.net ~all&lt;/p&gt;

&lt;p&gt;~all is soft fail. It tells receivers: mail from an IP not on this list is suspicious, but you should probably accept it anyway. That is a suggestion. Receivers treat a soft fail as a yellow light and wave most of it through while flagging you for suspicious behavior.&lt;/p&gt;

&lt;p&gt;The fix is -all. Hard fail. Any mail from an unauthorized IP is refused.&lt;/p&gt;

&lt;p&gt;So why does ~all exist everywhere? Because owners are afraid of locking themselves out. Legitimate fear, wrong remedy. You do not flip to -all on day one. You publish DMARC with a rua reporting address first, at p=none, and let the reports tell you every service actually sending as your domain. You will find one or two you forgot about. Then you authorize them, and then you flip.&lt;/p&gt;

&lt;p&gt;The staging is the fix. Nobody does the staging, so everybody sits at ~all forever.&lt;/p&gt;

&lt;p&gt;THE DOMAIN WITH NOTHING&lt;/p&gt;

&lt;p&gt;And then there is the domain with no SPF and no DMARC at all.&lt;/p&gt;

&lt;p&gt;Empty. Both records. No MX record either, so the domain receives no mail and sends with no authentication whatsoever.&lt;/p&gt;

&lt;p&gt;Anyone on earth can send mail as this domain. Your bank, your customers, your own employees, and nobody receiving it has any instruction on what is real. That is not a deliverability problem. That is an open door.&lt;/p&gt;

&lt;p&gt;This was not a rare find. 66 of the 300 domains had no SPF. 120 had no DMARC. If you are one of them, the question is not whether someone is spoofing you yet. The question is what stops them when they start.&lt;/p&gt;

&lt;p&gt;WHY MAIL-TESTER SAYS 10 AND GMAIL SAYS SPAM&lt;/p&gt;

&lt;p&gt;The classic trap. You run mail-tester, it says 10/10, and your invoices still land in junk.&lt;/p&gt;

&lt;p&gt;Mail-tester grades the message. Gmail grades the domain. A perfect score on a single test message tells you nothing about your domain reputation, and it says nothing about whether your DKIM selector is actually the one your provider signs with.&lt;/p&gt;

&lt;p&gt;Half the "10/10 and still spamming" questions I see are a provider mismatch. The domain carries DKIM records for a platform the owner stopped using two years ago, and there are no records for the platform they actually send from today. The stale sender sits in SPF, burning trust. Nobody notices because nothing enforces alignment. A p=none DMARC hides it by design.&lt;/p&gt;

&lt;p&gt;You cannot diagnose that from a message grader. You diagnose it from the records.&lt;/p&gt;

&lt;p&gt;WHAT TO DO TODAY&lt;/p&gt;

&lt;p&gt;Three checks, ten minutes, no tools you have to pay for.&lt;/p&gt;

&lt;p&gt;One. Look up your domain's TXT record. If SPF does not exist or ends in ~all or +all, that is your problem. +all is worse than missing: it authorizes the entire internet.&lt;/p&gt;

&lt;p&gt;Two. Look up _dmarc.yourdomain.com. If the record does not exist, publish one at p=none with a rua pointing at a mailbox you actually check. That is behavior-identical to what you have now; it cannot break sending, and it starts the reporting engine.&lt;/p&gt;

&lt;p&gt;Three. Once a few weeks of reports show every legitimate sender aligning, tighten. ~all to -all. Then p=none to p=quarantine. Then, after another clean window, p=reject. Each stage is its own decision.&lt;/p&gt;

&lt;p&gt;Never jump straight to p=reject. That is how a fix becomes an outage, and it is the reason most owners freeze at p=none and call it done.&lt;/p&gt;

&lt;p&gt;THE UNCOMFORTABLE QUESTION&lt;/p&gt;

&lt;p&gt;I fixed my own domain the same way: staged DMARC, watched the aggregate reports from Google land in my inbox for a day, confirmed every message passing dkim and spf with zero failure reasons, then tightened to -all and p=reject. The Google report confirmed the fix end-to-end. That is the standard, and it is not a high bar.&lt;/p&gt;

&lt;p&gt;So: is your domain one of the 243 or one of the 57?&lt;/p&gt;

&lt;p&gt;You do not know until you look. Go look.&lt;/p&gt;

&lt;p&gt;If you would rather hand the DNS surgery to someone who does it every day, I fix these records the same day, flat $500, and verify the result with real delivered mail: &lt;a href="https://phantom-byte.com/email-deliverability-rescue" rel="noopener noreferrer"&gt;PhantomByte Email Deliverability Rescue Service&lt;/a&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>deliverability</category>
      <category>spf</category>
      <category>dns</category>
    </item>
    <item>
      <title>Your Agent's Tool Descriptions Are Costing You 66% Accuracy</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Tue, 15 Sep 2026 18:56:49 +0000</pubDate>
      <link>https://dev.to/phantom-byte/your-agents-tool-descriptions-are-costing-you-66-accuracy-74f</link>
      <guid>https://dev.to/phantom-byte/your-agents-tool-descriptions-are-costing-you-66-accuracy-74f</guid>
      <description>&lt;p&gt;A $4 experiment rewrote three strings per MCP tool and moved SQLite success from 34% to 100%. The model never changed.&lt;/p&gt;

&lt;p&gt;The failure was never the model.&lt;/p&gt;

&lt;p&gt;SQLite strict success rate: 34%. That is a failing grade on a benchmark nobody was running.&lt;/p&gt;

&lt;p&gt;Toolmetry, an open-source project that measures how well agents use MCP tools, took existing MCP server tool descriptions and had an LLM rewrite them. The strings that tell an agent what each tool does and how to call it. That was the entire change.&lt;/p&gt;

&lt;p&gt;The model did not change. The harness did not change. Only the descriptions changed.&lt;/p&gt;

&lt;p&gt;After the rewrite, SQLite hit 100%. Total API spend for the whole experiment was $4.&lt;/p&gt;

&lt;p&gt;This is an interface problem, not a model problem. Tool descriptions are the contract between your agent and the outside world. When the contract is ambiguous, the agent breaks the terms every single time.&lt;/p&gt;

&lt;p&gt;The three failure archetypes&lt;/p&gt;

&lt;p&gt;Toolmetry found three patterns that were killing agent success rates before the rewrite.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Wrong tool confusion. Two tools in the same MCP server have overlapping descriptions, so the agent picks Tool A when it needs Tool. B. It looks like a bug. It is bad documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ritual extra calls. The agent makes a call it believes is a prerequisite, burning tokens and latency for nothing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deprecated parameter patterns. The description references parameters or usage patterns that no longer work. The agent follows the instructions faithfully and produces errors.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each one is fixable with better words. Not better models. Better words.&lt;/p&gt;

&lt;p&gt;Wrong tool confusion in practice&lt;/p&gt;

&lt;p&gt;Before the rewrite, the SQLite server's read and write query tools were described almost identically. Most failures were the agent calling a read tool when it needed a write tool.&lt;/p&gt;

&lt;p&gt;Two tools that sound similar to a human sound identical to an agent. After the rewrite, the query tool description stated explicitly what it could and could not do. Success jumped to 100%.&lt;/p&gt;

&lt;p&gt;If two tools could be confused by a smart human, they will be confused by your agent.&lt;/p&gt;

&lt;p&gt;Ritual extra calls and the implied prerequisite&lt;/p&gt;

&lt;p&gt;Agents were calling a list_tables function before every query because the query tool's description said "first enumerate available tables." Implied, not required.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;

&lt;p&gt;Tool: query&lt;/p&gt;

&lt;p&gt;Description: Execute an SQL query against the database. First enumerate&lt;br&gt;
available tables using list_tables, then construct your query against&lt;br&gt;
those tables.&lt;/p&gt;

&lt;p&gt;The agent called list_tables before every query, even when it already knew the schema from the previous call. Two extra API calls per interaction, doubled latency, zero benefit.&lt;/p&gt;

&lt;p&gt;After:&lt;/p&gt;

&lt;p&gt;Tool: query&lt;/p&gt;

&lt;p&gt;Description: Execute an SQL query against the database. Available tables:&lt;br&gt;
users, orders, products, invoices, and audit_log. Use standard SQL syntax.&lt;br&gt;
This tool handles both reads and writes. No need to call list_tables first.&lt;/p&gt;

&lt;p&gt;The ritual calls stopped immediately. The table list was right there in the description. No extra round trips, no wasted tokens.&lt;/p&gt;

&lt;p&gt;Remove implied prerequisites from your descriptions. If a step is not required, do not imply that it is.&lt;/p&gt;

&lt;p&gt;Deprecated parameters&lt;/p&gt;

&lt;p&gt;The git server had deprecated parameter references baked into its descriptions. Agents were passing old parameter names and getting failures. The documentation was lying about how the API worked.&lt;/p&gt;

&lt;p&gt;After the rewrite, all parameters matched current names. Success went from 75% to 96.7%.&lt;/p&gt;

&lt;p&gt;Version your tool descriptions. When you change an API, update the description in the same commit. A stale description is worse than no description. &lt;/p&gt;

&lt;p&gt;With no description, the agent guesses. With a stale description, the agent confidently does the wrong thing.&lt;/p&gt;

&lt;p&gt;The before and after numbers&lt;/p&gt;

&lt;p&gt;Server  Before  After   Improvement&lt;/p&gt;

&lt;p&gt;SQLite  34.0%   100%    +66.0 points&lt;br&gt;
Memory  61.8%   96.4%   +34.5 points&lt;br&gt;
Git 75.0%   96.7%   +21.7 points&lt;/p&gt;

&lt;p&gt;$4 of API spend for the entire run.&lt;/p&gt;

&lt;p&gt;Now compare that against upgrading to a frontier model. A cheaper model with broken descriptions still fails. An expensive model with broken descriptions still fails. The model is not the bottleneck. The interface is.&lt;/p&gt;

&lt;p&gt;Audit your MCP server in under an hour.&lt;/p&gt;

&lt;p&gt;This costs less than $5 in API spend and takes about an hour.&lt;/p&gt;

&lt;p&gt;List every tool in your MCP server and print each description.&lt;/p&gt;

&lt;p&gt;Read pairs of descriptions side by side. If two could be confused by a smart human, they will be confused by the agent.&lt;/p&gt;

&lt;p&gt;Check for implied prerequisites. Does any description say "first do X" when X is not actually required?&lt;/p&gt;

&lt;p&gt;Check for deprecated parameters. Diff your current API against the description text.&lt;/p&gt;

&lt;p&gt;Rewrite the descriptions with an LLM. Feed it the tool name, the current description, and the real API signature. Ask for a clear, non-overlapping description.&lt;/p&gt;

&lt;p&gt;Re-run your agent test suite and compare success rates.&lt;/p&gt;

&lt;p&gt;Toolmetry ships three commands to automate the loop: measure, optimize, and proxy. The proxy rewrites descriptions on the fly, so you can test improvements before committing anything.&lt;/p&gt;

&lt;p&gt;Why this matters more than model selection&lt;/p&gt;

&lt;p&gt;This is the fourth data point in a pattern that keeps repeating. Three separate papers already showed orchestration design beating model selection by 10x on token cost. &lt;/p&gt;

&lt;p&gt;Structural scaffolding reduces failure rates under a fixed model. Graph-structured context beats flat text. And now tool descriptions alone move a server from 34% to 100%.&lt;/p&gt;

&lt;p&gt;How you structure the agent's control flow, context, and tool interfaces matters more than which model you use. That is a direct challenge to the scaling; all you need is orthodoxy.&lt;/p&gt;

&lt;p&gt;The competitive advantage is shifting from model ownership to orchestration design. The people who understand that will win. The people who keep throwing bigger models at broken interfaces will keep getting 34% success rates and wondering why.&lt;/p&gt;

&lt;p&gt;The bottom line:&lt;/p&gt;

&lt;p&gt;Your tool descriptions are three strings per tool. They cost nothing to write and everything to get wrong.&lt;/p&gt;

&lt;p&gt;Wrong tool confusion, extra ritual calls, and deprecated parameter patterns exist in every MCP server that has never been audited. They exist in yours.&lt;/p&gt;

&lt;p&gt;Audit them today. It takes an hour. It costs $4. It might double your agent's success rate.&lt;/p&gt;

&lt;p&gt;Originally published at &lt;a href="https://articles.phantom-byte.com/tool-descriptions-cost-66-accuracy.html" rel="noopener noreferrer"&gt;articles.phantom-byte.com&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://phantom-byte.com" rel="noopener noreferrer"&gt;PhantomByte&lt;/a&gt; teaches you to build real AI infrastructure: local AI stacks, autonomous agents, multi-agent orchestration, and custom tools. Step-by-step tutorials you download, follow, and deploy.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
    </item>
    <item>
      <title>The $750 Copilot: Why Your AI Dependency Just Got a Price Tag</title>
      <dc:creator>Vinny Barreca</dc:creator>
      <pubDate>Mon, 01 Jun 2026 07:44:18 +0000</pubDate>
      <link>https://dev.to/phantom-byte/the-750-copilot-why-your-ai-dependency-just-got-a-price-tag-39jn</link>
      <guid>https://dev.to/phantom-byte/the-750-copilot-why-your-ai-dependency-just-got-a-price-tag-39jn</guid>
      <description>&lt;p&gt;Your GitHub Copilot bill just went from $29 to $750/month.&lt;/p&gt;

&lt;p&gt;Microsoft taught developers to "vibe code" (write less and let AI do the work).&lt;/p&gt;

&lt;p&gt;Build entire workflows around that subsidy.&lt;/p&gt;

&lt;p&gt;Then they installed a toll booth.&lt;/p&gt;

&lt;p&gt;This is not a pricing change. It is a dependency trap snapping shut.&lt;/p&gt;

&lt;p&gt;The $750 Copilot: the first honest price tag in a subsidized industry. &lt;a href="https://articles.phantom-byte.com/the-750-copilot-why-your-ai-dependency-just-got-a-price-tag.html" rel="noopener noreferrer"&gt;Full breakdown and the local-first alternative&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
      <category>news</category>
    </item>
  </channel>
</rss>
