Cost 9
-
#
Added
coding.sh cache doctorgrades the prompt cache (hit rate, A to F) and ranks what broke the cached prefix by extra cost: model switches, tool set changes, a volatile line such as a timestamp in the system prompt, other system prompt changes, rewritten history, idle gaps. Each cause has its break count, sessions, tokens re-billed, the fix and adiff-callsexample. Prompt cache health. -
#
Added
coding.sh usage --baselineand the MCPusagetool'sbaselinecompare each agent's cache hit rate with Requesty's published rate for that agent (April 2026), as a signed point delta,-for an agent it does not list. Without the flag the output is unchanged. Prompt cache health. -
#
Added CLIProxyAPI is a gateway: sessions whose base URL is on port 8317 (or
CLIPROXYAPI_URL) are taggedgateway:cliproxyapi, andgateway enrich --gateway cliproxyapireads its usage queue with the management key and joins each record to its llm call by session id, or by time and model. The call gets reasoning effort, service tier, speed, time to first token, compaction, tokens, upstream cost and a hashed account id. The read empties the queue for other readers, so it runs only when named, prints a warning, and keeps every record until it joins. LLM gateways. -
#
Fixed A Claude Code subagent whose transcript sits under more than one session is stored once, under the session that wrote it. A workflow run resumed in another session (
resumeFromRunId), a symlinked run dir or a fork used to store each copy as its own subagent session, so its calls and cost counted again. Adapters. -
#
Fixed Copies already in the index are removed on the next re-parse. A session an older coding.sh stored from a copy of another session's transcript (a Claude Code subagent copied into a resumed workflow run or a fork) is deleted with its events once the session that wrote it is stored, so its calls and cost stop counting twice. Re-parse used to keep it as a session whose transcript is gone; a session whose transcript is really gone is still kept.
ingest --rebuildprints how many it removed. Troubleshooting. - # Fixed Claude Fable 5.2 and Mythos 5.2 are priced at their own rates ($8 input, $40 output, $0.20 cache hit, fast mode $16/$80) instead of Fable 5.1's $10/$50, which put standard calls 25% high and fast calls 37.5% low. Stored sessions are repriced on the next ingest. Prices.
-
#
Fixed
usageandcache doctortotal every session in the window; they stopped at the newest 2,000 without saying so. Past 100,000 sessions (CODING_SH_SCAN_CAP) they printStopped after N sessions: narrow --since or --where.and settruncatedin--json. Configuration -
#
Fixed
coding.sh cache doctorcounts every session in the window in its breaks, re-billed tokens, extra USD and grade, so they matchusagewhatever--limitis.--limit(default 200) now only bounds how many sessions are read to classify causes: a session past it keeps its stored cause or counts asunclassified, and--jsonaddsbreaksNotRead. Before, the totals and the grade covered only the sessions that were read. Explore -
#
Fixed A
gateway enrichrecord with no upstream cost no longer removes(estimated)from a session's cost. Only a record with a billed cost marks the call as billed. LLM gateways
OpenTelemetry 4
-
#
Added The receiver reads reasoning tokens (
gen_ai.usage.reasoning.output_tokens, the AI SDK'sreasoningTokens, Codex'sreasoning_token_count, Gemini CLI'sthoughts_token_count) intopayload.reasoningTokenson thellm.call; skills (gen_ai.skill.name, Claude Code'sskill_activated, Codex'scodex.skill_invocation) aspayload.skilland askill:<name>tag;gen_ai.conversation.compactedand Claude Code'scompactionevent ascontext.compact; andgen_ai.main_agent.name, Claude Code'sagent_id/parent_agent_idand Codex'scodex.agent_responsefor the agent and its subagents. Spans without them map as before. OpenTelemetry. -
#
Added An eve or durable-harness agent can send its Agent Runs spans to
coding.sh collectoras well as to Vercel, with one extra span processor; each run becomes a session with its turn, model calls, tool calls and usage, under the agentdurable-harnessfor durable-harness. Tee Agent Runs. -
#
Fixed A span that reports a cache read or cache write of 0 tokens no longer adds
cacheReadTokens: 0orcacheWriteTokens: 0to the call's usage; non-zero counts and cost are unchanged. OpenTelemetry. -
#
Fixed eve's
agent.stepand approval spans becomenotificationevents (eve.step, …), as the eve mapping documents, instead of genericspanevents. eve.
Collector 4
-
#
Added
coding.sh collector import --clickhouse <url>reads agent traces from an OpenTelemetry Collector's ClickHouseotel_tracestable (Map or JSON attributes) into the local store, with the same mapping, redaction and pricing as spans posted to the collector. It keeps its place per table and row filter, so a second run imports nothing new;--since,--from-start,--where,--table,--all,--dry-runand--jsonshape it. Pull from ClickHouse. -
#
Changed
coding.sh collectorstores concurrent requests together, in one transaction with one blob flush, and no longer keeps every source span as a blob (--keep-rawturns that back on;servestill keeps them). On the desk, 8 clients posting 61-span requests went from 1,437-3,075 to 5,585-6,865 spans/s, with request p95 from 283-613 ms to 125-155 ms. A long session per client is not faster. OTLP collector. -
#
Fixed
coding.sh collector importkeeps its place per table and row filter (--all, each--where), so a run without the filter reads the rows a filtered run skipped. A--sincegiven on the command line reads from that time again, and the new--from-startdoes the same with the default 7 days, for a root span that reached the table more than an hour late. Nothing is stored twice. Pull from ClickHouse -
#
Fixed
coding.sh collector importstores each page with its sessions before it saves its place, so a run that loses ClickHouse part-way leaves no events without a session. A dropped connection or a 502, 503 or 504 is tried three more times; a run that still fails says how many spans it read and prints the command that reads the rest. Before, the next run exited 0 with fewer sessions than traces. Pull from ClickHouse
Docs 5
- # Added A guide to whether a terse mode saves money on your tasks: run them with and without a be-concise rule, skill or plugin, read pass rate and cost with intervals, and split output tokens from the input the instruction adds. It cites our A/B of a terse-output plugin: output −8%, cost +11%, same pass rate and clarity. Its commands are checked against the CLI in tests. Terse mode guide.
-
#
Changed The instructions file is called AGENTS.md wherever any agent is meant: the home page, docs titles and prose, command examples,
--helpand the MCP tool descriptions. Lists of the files coding.sh reads start with AGENTS.md, and the site, the docs,--helpand the hintscoding.sh improveprints name no other instructions file: where a sentence is about one agent's own file, it says "the agent's instructions file". The five-minute guide moved to/docs/how-to/test-agents-md-change; the old URL redirects to it. No command changed which file it reads or writes. Test an AGENTS.md change in five minutes. - # Changed The docs pages are shorter and easier to skim: each starts with what it is for and one real example, flags are in tables, and depth sits in "How it is computed" blocks or behind a link. A site test keeps bullets, paragraphs and guide pages within word budgets. Experiments.
-
#
Fixed Status claims match the code and the registries again. Tool evals and workflows are tagged built, and
coding.sh,@codingdotsh/sdkand the Postgres, ClickHouse and S3 store plugins are no longer called unpublished; the Python SDK is still not on PyPI. The dogfood plan gives each step's state with code pointers. A site test fails when a page calls something planned whose module exists, or when the agent list disagrees with the adapters in the code. What is built. - # Fixed The troubleshooting page lists each error reason under the exit code the CLI gives it, and the session rows example in the API reference is the real answer for the page's example session. Errors by reason, API
Benchmarks 4
-
#
Added
bench showand the report add a routing headroom check: the any-contender pass rate against the best single contender, compared with a Rasch model where no contender specializes, so per-case routing is only suggested when the gap beats run noise. Routing headroom -
#
Added Contenders that cross models with harnesses (agents, or
axes = { model, harness }on any contender) get a grid: interaction residuals with intervals, rank reversals, Cross-Model Fit per harness and leave-one-model-out regret. Model × harness grid - # Fixed Routing headroom now prints the best single contender's own pass rate, the one on the leaderboard, and measures the gap and its expected range from it. With several trials it used to average the best contender of each trial, so the rate beside the name was too high and the gap too small. Runs stored before the fix keep their old numbers. Routing headroom
-
#
Fixed The model × harness grid no longer states noise as fact. A rank reversal is listed only when the 95% interval of both pass-rate gaps excludes 0, each leave-one-model-out regret and the mean carry a 95% interval (
regretCiandmeanRegretCiin--json), no cell is starred under 20 paired cases, a bound that rounds to 0 no longer stars some cells of a 2 × 2 and not others, and the legend says the stars are per cell and not adjusted for the number of cells. Model × harness grid
Sessions 4
-
#
Added An agent started by another agent's shell tool (
codex execorgemini -pfrom Claude Code's Bash tool) is linked to that session as a child of typeharness, andcoding.sh showlists it under the parent. The link comes from the session id Claude Code and Codex export to the commands they run, else from the parent's shell call that ran the child's CLI while the child started in the same directory. Concepts. -
#
Changed
stats.toolErrors,repeated-tool-failureand thefailure-streakderail count only real failures. A search that found nothing (grep,rgexiting 1 with no output), a probe that answered no (test -f,command -v) and adiffthat found differences are counted in the newstats.benignToolErrors, and a stopped call instats.interruptedToolCalls. Stored sessions are counted again on the next ingest. API. -
#
Changed A shell command run from a REPL or code tool's cell (
bash("npm test"),subprocess.run(["pytest"]),os.system, an IPython!line, a%%bashcell) counts as verification forno-verification, as the same command in a shell tool does. Concepts. -
#
Fixed
show,tree,usage,improve,harness auditand the other reads answer within the read budget while a re-parse runs, from what is indexed.show,tree,usage,replayandharness auditused to ingest every pending capture first, with no budget. They leave the spool to the re-parse, say how many files wait (on stderr, orpendingwithreparsing: truein JSON), and a session not found says it may be among them. Configuration.
Workflows 4
-
#
Added
coding.sh uishows workflow runs at#/workflows: one bar per agent grouped by phase, the critical path outlined, barrier idle shaded, a concurrency strip against the cap, links to each agent's session, and per-phase and metrics tables. On a phone it opens as a table. The page reads/api/workflows, the same documentsworkflows show --jsonprints. Workflows guide -
#
Added Verifier cases take named
[[truth.tests]]and score the share that pass, reporting tests markedbefore = "pass"that fail after the run as regressions. Judge cases (kind = "judge", arubric) are graded by an LLM judge and flagged uncalibrated untilcoding.sh judge calibratehas calibrated that judge version.workflows runnow scores every case kind asworkflows scoredoes. Workflows guide -
#
Added
workflows runchecks each seeded bug on its case's[start]snapshot before any run: the bug's test fails seeded and passes with the patch reverted (--no-validateskips it). A case whose truth file sits inside its[start]tree no longer loads. Workflows guide -
#
Added A command-driver variant with
fromCheckpointorreplayFrompasses--from-checkpoint <id>or--replay-from <node>to the program, for LangGraph checkpoint forks and node replays. Workflows guide
Store 6
-
#
Added Every one-way index migration first keeps a copy of the index next to it (
index.db.v<N>.bak, a copy-on-write clone where the filesystem has one; a full copy is refused with the space it needs when it would not fit), andcoding.sh upgrade-store --restoreputs it back. The index it replaces is kept asindex.db.v<N>.undone. Troubleshooting -
#
Changed The index is about a quarter smaller. The search index no longer keeps its own copy of tool text, each working directory is stored once, and an unused index is gone. On a 756k-event store, after
gc --compact, it takes 1.38 MB per 1,000 events instead of 1.89. The upgrade builds the new search index and leaves old rows as they are;gc --compactempties their old copies and gives the space back. A coding.sh older than 0.1.5 refuses the upgraded index and says to upgrade. Storage. -
#
Fixed An index upgrade on a store of 100,000 events or more no longer runs silently. It says so on stderr within a second, prints its progress at most once a second, and ends with how long it took and, when old data is left,
gc --compact. A command that opens the index while another process upgrades it waits and prints that process's progress. Upgrading a 740k-event store from schema v2 took 20 s instead of 119 s. Troubleshooting. -
#
Fixed The store records the coding.sh version that last wrote it. A build that is not a newer release than that one (a source checkout, a stale dist) no longer migrates the index by itself, with or without a
bin/: it stops withstore_version, andcoding.sh upgrade-storemigrates on request. Troubleshooting -
#
Fixed The error for a store a newer coding.sh already migrated says captures are safe in the spool, how many files wait there, which version wrote the store, and to run
coding.sh update; it offersupgrade-store --restorewhen a copy from before the migration is kept. Troubleshooting -
#
Fixed
coding.sh upgrade-storealways leavesbin/cli-pathnaming the running coding.sh (also when there is nobin/, or it names a CLI that is gone), and upgrade progress counts events instead of the highest rowid. Troubleshooting
Improve 2
-
#
Changed
improve checksays Helped only when failures fall: the flagged share, or one flag (Holm-adjusted) with no other rising significantly in its place. A new line the agent follows while flagged sessions stay put is now "Followed, no effect yet", and a change after which sessions make 1.25x the tool calls or take 1.25x as long, with no fall, is "Costlier"; both suggestrefine test git:<previous>to test the harness without it.--jsonaddsworkandnext. Regressed and its exit 1 are unchanged. Improve. -
#
Fixed A
Helpedline fromimprove checknow names every flag whose share rose after the change, significant or not, as inrepeated-tool-failure rose 4 to 8 of 12, not significant. The verdict is unchanged: one flag falling is Helped unless another flag rose significantly. Improve guide
Search 1
-
#
Changed Every search word must match a whole word, and only the last may start a longer one, so
the fixno longer matches every word that begins with "the". Matches come best first, and a search with more than 20,000 matches lists them newest first instead of ranking them all. On a 756k-event store,searchfor "the", "voxel" and "error" answers in 34, 12 and 38 ms at p95 instead of 719, 171 and 81 ms. The Postgres and ClickHouse plugins and--wherebare words match the same way. CLI reference, Storage.
From CHANGELOG.md · RSS · All releases