<?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: Jens Krause</title>
    <description>The latest articles on DEV Community by Jens Krause (@solomonic).</description>
    <link>https://dev.to/solomonic</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%2F3988875%2Fd86bb9b1-26dc-4a8d-817b-342913dbe60f.jpeg</url>
      <title>DEV Community: Jens Krause</title>
      <link>https://dev.to/solomonic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/solomonic"/>
    <language>en</language>
    <item>
      <title>Field Guide to the Token Species in Your Dev Team</title>
      <dc:creator>Jens Krause</dc:creator>
      <pubDate>Wed, 29 Jul 2026 12:48:57 +0000</pubDate>
      <link>https://dev.to/solomonic/field-guide-to-the-token-species-in-your-dev-team-30k8</link>
      <guid>https://dev.to/solomonic/field-guide-to-the-token-species-in-your-dev-team-30k8</guid>
      <description>&lt;p&gt;Every team that put AI coding agents on &lt;strong&gt;subscription seats&lt;/strong&gt; created an &lt;strong&gt;ecosystem by accident&lt;/strong&gt;. Subscriptions meter usage, so seats got caps, and caps produce behaviour. Watch the usage table for a week and four species emerge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tuesday Extinction.&lt;/strong&gt; Hits the weekly cap by Tuesday and honestly does not know why. Every question is a fresh session, every session inhales the whole repo, and by Tuesday lunch the meter reads zero. Not recklessness: a workflow bug, same genus as a memory leak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Ghost.&lt;/strong&gt; Has never seen the limit screen and half suspects it is a myth. Asks one precise question and closes the terminal. In the usage table this row looks like an instrumentation error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Absentee Landlord.&lt;/strong&gt; Wrote a cron job months ago that runs an agent nightly, then forgot it exists. It spends a slice of the cap while its owner sleeps, faithfully, indefinitely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Cartographer.&lt;/strong&gt; Writes issues so complete that anyone could implement them. Also frequently broke, because a spec that good burns tokens too. The team's best specifications and its emptiest wallet share a chair.&lt;/p&gt;

&lt;p&gt;Before you claim the &lt;strong&gt;Ghost&lt;/strong&gt;: the heaviest burners are the surest of their restraint, so let a &lt;a href="https://roninforge.org/claude-code-cost" rel="noopener noreferrer"&gt;spend plugin&lt;/a&gt; that reads Claude Code's local session logs and reports per project and per branch assign your species.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  This is not a personality quiz
&lt;/h2&gt;

&lt;p&gt;I took &lt;a href="https://mypeeps.ai/personality-test-philosophy" rel="noopener noreferrer"&gt;personality tests&lt;/a&gt; and this is none. The field guide documents a market with no clearance mechanism: surplus on one side, starvation on the other, same team, same tool. The variance is habits and workflow, not talent or effort.&lt;/p&gt;

&lt;p&gt;The whispered workaround, multiple subscriptions, is a terms-of-service violation, so no.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Cartographer&lt;/strong&gt; scopes an airtight issue and has no budget left to run it. The &lt;strong&gt;Ghost&lt;/strong&gt; picks it up cold, zero context and zero further input, and spends leftover budget to implement it. Call it the &lt;strong&gt;Token Donor&lt;/strong&gt;. The donor contributes compute, not knowledge: not review, not mentorship. One person supplies the thought. The other supplies the meter.&lt;/p&gt;

&lt;p&gt;A donor needs a floor under the generosity, and a Tuesday Extinction deserves to find out before the cap decides for them. &lt;a href="https://roninforge.org/budgetclaw" rel="noopener noreferrer"&gt;BudgetClaw&lt;/a&gt;, an open-source usage guard, reads the same logs and halts the run at a limit you set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Efficiency is a skill, and nobody grades it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Token efficiency&lt;/strong&gt; is a &lt;strong&gt;real engineering skill&lt;/strong&gt; that no ladder document mentions. We promote people for what they built, never for what they declined to spend, so the &lt;strong&gt;Ghost's&lt;/strong&gt; discipline reads as a quirk instead of capacity the team already paid for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make the first donated run a deletion&lt;/strong&gt;. Agents produce comments that restate the line below them and tests that assert a mock returns what the mock was told to return, and &lt;strong&gt;nobody funds removal from their own cap&lt;/strong&gt;. Donated surplus is the first budget subtraction has ever had.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comments are open:&lt;/strong&gt; which species are you, and did a dashboard or a hunch decide? Report whether your team hosts an &lt;strong&gt;Absentee Landlord&lt;/strong&gt; nobody has met; the crontab knows things the standup does not. And if a colleague's meter has ever shipped your issue, or yours theirs, file a field report; documented cases are rare.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>The price table most AI cost tools multiply by has one automated test: jq empty</title>
      <dc:creator>Jens Krause</dc:creator>
      <pubDate>Sun, 12 Jul 2026 09:03:38 +0000</pubDate>
      <link>https://dev.to/solomonic/the-price-table-most-ai-cost-tools-multiply-by-has-one-automated-test-jq-empty-3468</link>
      <guid>https://dev.to/solomonic/the-price-table-most-ai-cost-tools-multiply-by-has-one-automated-test-jq-empty-3468</guid>
      <description>&lt;p&gt;Most tools that tell you what your AI usage costs work the same way: count tokens locally, multiply by a shared price table. For most of the ecosystem that table is a single JSON file in the LiteLLM repo, and its only automated check is &lt;code&gt;jq empty&lt;/code&gt;, which verifies the JSON parses. That is the entire quality gate: no value validation, no cross-check against provider pages, no guard against swapped input and output prices, no dates, no provenance.&lt;/p&gt;

&lt;p&gt;This is not an obscure file. &lt;strong&gt;LiteLLM&lt;/strong&gt; (BerriAI/litellm, ~51k stars, MIT) prices roughly 2,783 models. &lt;strong&gt;ccusage&lt;/strong&gt; (~16.4k stars) re-pins it hourly, &lt;strong&gt;tokencost&lt;/strong&gt; vendors a copy, &lt;strong&gt;ccost&lt;/strong&gt; embeds it. An error in it is not one tool's bug; it is the whole ecosystem agreeing on a wrong number, with nothing left over to disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I was in there
&lt;/h2&gt;

&lt;p&gt;I maintain a spend monitor for Claude Code called BudgetClaw: it tails the local JSONL logs Claude Code already writes, computes cost in real time, and on a budget breach sends SIGTERM to the process. Zero keys, zero prompts, zero added latency. What sent me upstream was a Saturday spent grouping a month of usage by branch: about &lt;strong&gt;$2,770&lt;/strong&gt; total, one refactor branch at &lt;strong&gt;$543&lt;/strong&gt; by itself, mostly retry loops re-sending an &lt;strong&gt;80K+&lt;/strong&gt; token context. But a tool that kills processes over dollars has to get the dollars right, and cache pricing makes that delicate: a cache read bills at 0.1x the base input rate, a 5-minute cache write at 1.25x, a 1-hour write at 2x. One wrong multiplier and the kill switch fires at the wrong moment or not at all. Quietly wrong is worse than loudly wrong. So before trusting the table, I read it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Records that cite their own refutation.&lt;/strong&gt; Four &lt;code&gt;xai/grok-4.20-*&lt;/code&gt; rows are priced at $2 input / $6 output per million tokens. The &lt;code&gt;source&lt;/code&gt; field on those same rows points at docs.x.ai, which says $1.25 / $2.50.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"input_cost_per_token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;2e-06&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;2.00&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;per&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;million&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"output_cost_per_token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6e-06&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;6.00&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;per&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;million&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://docs.x.ai/..."&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;cited&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;page&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;says&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;1.25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;2.50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wrong number and its own correction, in one record. &lt;code&gt;jq empty&lt;/code&gt; passes; it parses flawlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. No guard against transposition.&lt;/strong&gt; Input and output prices have been swapped before. The command-r7b fix had to bring its own test, because there was none to fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Provenance is optional.&lt;/strong&gt; A &lt;code&gt;source&lt;/code&gt; appears on about 31% of records. There is no last_validated, no confidence, no date field of any kind. For two thirds of the table, the reason to believe a number is that it is in the file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The past is deleted.&lt;/strong&gt; When a price changes, the old value is overwritten and gone. ccusage issue #764, closed unresolved, is users pointing out that today's prices get applied to all historical usage, so reported costs do not match what was charged. They asked for point-in-time pricing; the upstream model deletes the past, so it could not be given.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Merging a fix may not fix anything.&lt;/strong&gt; The default branch is &lt;code&gt;litellm_internal_staging&lt;/code&gt;. Public &lt;code&gt;main&lt;/code&gt; can run about nine days behind it, serving a bug already fixed on staging, and a bulk staging sync can overwrite a community fix after it merges. A correct price can land, merge, and silently regress.&lt;/p&gt;

&lt;h2&gt;
  
  
  A control experiment
&lt;/h2&gt;

&lt;p&gt;A static audit only goes so far, so I filed the grok fix and watched the pipeline handle it: BerriAI/litellm#30849, opened 2026-06-19. Twenty-eight lines, correcting both the root map and the bundled backup so they agree, plus the cost-calculator test that did not exist.&lt;/p&gt;

&lt;p&gt;Weeks later it is open and unmerged, reviewed by exactly three entities: a CLA signature bot, greptile, and codecov. No human. I report this as data, not a grievance, and per finding 5, even a merge might not stick.&lt;/p&gt;

&lt;p&gt;None of this is a scandal about people; it is what &lt;code&gt;jq empty&lt;/code&gt; looks like at scale. That repo has fielded on the order of 1,158 pricing PRs, and no volunteer team hand-verifies that volume against provider pages. The maintainers run the most successful price table in the ecosystem exactly as well as its architecture allows. Every finding above is structural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagnosis
&lt;/h2&gt;

&lt;p&gt;The instinct is to call this a coverage problem and fix it with more rows. It is not. LiteLLM carries ~2,783 models, models.dev ~5,278; the set I actually need is 94. One bad price kills a cost tool, and 2,700 correct ones do not save it. A price with no source and no date is fine for an estimate and wrong for a bill.&lt;/p&gt;

&lt;p&gt;Provenance-first is not exotic: every record carries a first-party source URL, an effective date, a last_validated date, and a confidence label. Corrections supersede old rows instead of deleting them, so priceOn(model, date) returns the rate actually in effect that day, which is what ccusage #764 wanted. A bot diffs each provider's own pricing page; a human verifies every change before it lands. I keep such an index for my 94 models, with history back to GPT-4's 2023 launch (&lt;a href="https://github.com/RoninForge/ai-price-index" rel="noopener noreferrer"&gt;github.com/RoninForge/ai-price-index&lt;/a&gt;, CC-BY).&lt;/p&gt;

&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;Parsing usage logs is the easy 90%; the tokens sit on your disk with model names attached. The dollar at the bottom is only as honest as the price it was multiplied by, and for most of the AI-cost stack that price lives in a JSON file whose sole certification is that it parses. &lt;code&gt;jq empty&lt;/code&gt; answers one question: is this valid JSON. Every tool downstream is answering another: what did this cost. Right now nothing stands between the two.&lt;/p&gt;

&lt;p&gt;The index is open. If I have a price wrong, the fix is a PR.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
    <item>
      <title>Nobody keeps the receipts for AI pricing, so I built the changelog</title>
      <dc:creator>Jens Krause</dc:creator>
      <pubDate>Wed, 17 Jun 2026 11:04:01 +0000</pubDate>
      <link>https://dev.to/solomonic/nobody-keeps-the-receipts-for-ai-pricing-so-i-built-the-changelog-5d6c</link>
      <guid>https://dev.to/solomonic/nobody-keeps-the-receipts-for-ai-pricing-so-i-built-the-changelog-5d6c</guid>
      <description>&lt;p&gt;I got one surprise AI bill that woke me up and I went looking for a simple answer: what did this model actually cost on the day I ran it?&lt;/p&gt;

&lt;p&gt;Turns out that is weirdly hard. Provider pricing pages change quietly with no changelog. The Wayback Machine is patchy. And the obvious shortcut, today's price times last month's tokens, is just wrong the moment a provider shifts rates mid-period.&lt;/p&gt;

&lt;p&gt;Whilst building a couple of small tools that calculate AI usage costs bugs popped up and traced back to one thing: I could not &lt;strong&gt;reliably&lt;/strong&gt; say what a given model cost on a given date. Estimations are easy, knowing is hard.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/RoninForge/ai-price-index" rel="noopener noreferrer"&gt;ai-price-index&lt;/a&gt;: an open, dated record of LLM API prices.&lt;/p&gt;

&lt;p&gt;The idea is &lt;strong&gt;boring on purpose&lt;/strong&gt;. Every price is &lt;em&gt;bitemporal&lt;/em&gt;, it carries the date it became valid and the date I last re-checked it against the official source. So you can price historical usage point-in-time instead of extrapolating from today. Every price links its first-party source. A bot diffs the official pricing pages every day and flags drift, and I review every actual change by hand before it merges, because pricing is exactly the kind of data you do not want a scraper silently guessing on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it stands:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 providers, 86 models (Anthropic, OpenAI, Google, Mistral, xAI, DeepSeek, Cohere, Amazon Nova, AI21, Alibaba Qwen)&lt;/li&gt;
&lt;li&gt;CC-BY-4.0, plain JSON, DOI on Zenodo (10.5281/zenodo.20730241)&lt;/li&gt;
&lt;li&gt;Free, and staying free forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a price looks wrong or your provider is missing, that is the most useful thing you can tell me. Corrections and provider requests are open on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;a href="https://github.com/RoninForge/ai-price-index" rel="noopener noreferrer"&gt;https://github.com/RoninForge/ai-price-index&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Browse it&lt;/strong&gt; : &lt;a href="https://roninforge.org/data/ai-price-index/" rel="noopener noreferrer"&gt;https://roninforge.org/data/ai-price-index/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Hugging Face&lt;/strong&gt;: &lt;a href="https://huggingface.co/datasets/RoninForge/ai-price-index" rel="noopener noreferrer"&gt;https://huggingface.co/datasets/RoninForge/ai-price-index&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Integration&lt;/strong&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://roninforge.org/ai-price-index/?d=2026-06-17&amp;amp;t=snapshot" rel="noopener noreferrer"&gt;Snap Shot&lt;/a&gt;: how much are all models on Jun 17th 2026?&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roninforge.org/ai-price-index/" rel="noopener noreferrer"&gt;Model Price Visualization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
