Changelog
Nov 8, 2026 · 177 changes · page 2 of 5
coding.sh v0.1.2
coding.sh runs on Windows, and CI tests it there.
Capture 12
-
#
Added
coding.sh initimports the sessions each agent already keeps on this machine, so the viewer the installer opens shows your own history. It shows progress, stops after 8 seconds and imports the rest in the background; the viewer says "Importing past sessions…" until it is done.--no-importskips it. An empty viewer shows the import command,coding.sh ingest --backfill, and what each imported session shows. What init changes. -
#
Added
coding.sh proxyis a local pass-through for the Anthropic and OpenAI APIs. Each model call is logged with its redacted request (system prompt, tool definitions, messages) and response, usage with cache reads and writes, status, time to first byte and token, and rate limits, inside the Claude Code or Codex session its hooks capture. Auth headers are forwarded and never stored. It adds 0.34 ms per streamed chunk and 1.96 ms to first byte (CI fails over 2 ms and 5 ms). Capture with the proxy. -
#
Added Proxy calls record reasoning effort (including Anthropic's
output_config.effort), service tier and speed from the request when the response has none, andcompaction: trueon calls that compacted the conversation, including Codex's/responses/compact, which is now logged. What is stored -
#
Added The proxy stores a call's messages in content-addressed blocks shared with the session's earlier calls, instead of the whole conversation again on every call, and reads the body back exactly. A synthetic 500-call session took 5× fewer bytes (828 KiB instead of 4,116 KiB); reading a call back takes about 10 ms. Works on SQLite, Postgres and ClickHouse stores; calls stored whole still read, and
gcandpurgefollow the blocks. What is stored - # Added Proxy calls from a Claude Code subagent land in the subagent's own session instead of the parent's. Calls record the parent session, Claude Code's agent id and Codex's parent thread, fork and subagent kind when the client sends them, the account as a 16-character hash (the account id is not stored, in the event or the request body), and behind CLIProxyAPI the credential index it used. A session seen only through the proxy links to its parent. What is stored
-
#
Added CI runs real OpenCode, Pi, Goose, Factory Droid, GitHub Copilot CLI and Aider sessions on Linux and Windows against a stub model, checks the recorded prompt, tool call, file change, model and reply, and checks that
ingest --backfilladds no duplicates. Install guide. -
#
Added Sessions stored before an adapter's parsing changed are re-parsed from their transcripts and spool in the background, so this release's dedupe fixes reach data already captured.
coding.sh ingest --rebuilddoes it now. Troubleshooting. -
#
Added Claude Code Bash commands that edit files (
sed -i, a heredoc write,tee) record afile.changeper file with its diff, taken from Claude Code's own edit diff, even when the command then failed. A nested instructions file or skills folder loaded mid-session, a Skill call's skill folder and the skills restored after/compactbecomeharness.loadedevents and show inshowand the viewer timeline. Stored Claude Code sessions are re-parsed to pick them up. CI checks both on a real Claude Code 2.1.319 session. Adapters. -
#
Fixed Backfill follows symlinked and junctioned transcript directories and files, and skips dangling links. Before, a
~/.claude/projectsmade of links ingested nothing. Adapters. -
#
Fixed Claude Code subagents that fire no SubagentStart or SubagentStop (
web-fetch) are linked to their parent from the parent'sAgenttool result, with their prompt, result, model and end, instead of showing as a top-level session with no prompt. Adapters. -
#
Fixed The background re-parse after an upgrade no longer blocks reads: it holds the ingest lock at most a second at a time and ingests new hook lines between holds, so
sessionsand the viewer answer in about a second instead of waiting 8 to 24 seconds. It writes blobs in batches, resumes where a cut-short run stopped, and works out stats and flags again for every stored session when an upgrade changes them. Listing a large spool is faster too. Troubleshooting. - # Fixed A full ingest of a 25k-line spool takes 4 s instead of 294 s on macOS, and 39 s instead of 153 s on Linux: blobs are made durable once per checkpoint instead of with two fsyncs per line, and each checkpoint commits its events, session rows and spool cursors in one transaction, so a crash mid-drain neither loses nor duplicates events.
Examples 4
-
#
Added
examples/plugin-abA/B tests a Claude Code plugin against plain Claude Code on ten small tasks in a container, withcoding.sh compare: pass rate, tokens, cost split by token type, wall time, reply length and a blind clarity judge, paired by task with bootstrap intervals. It takes any plugin directory and ships a small demo plugin. The example. -
#
Added The skill eval tests an edit to the skill:
run.sh <out-dir> --candidate <skill-dir>runs the pinned skill as arm A and the edited copy as arm B, graded the same way, with the--promoteline in the report.TASKS="01 06"runs some of the tasks. Skill eval example. -
#
Fixed The skill eval's live site check counts a network command that uses
$LIVE_SITEas touching the site; it missed those, and passed runs that had probed the site. Scenario 06 no longer tells the agent to record open questions instead of waiting, since its pass is to stop and ask. Skill eval example. -
#
Fixed The skill eval's live mode grades fairly:
--helpandhelpcalls never count as writes, a refusedenv lsreads "refused secret read", live task copies name the team, project and site only through$VERCEL_SCOPE,$VERCEL_PROJECTand$LIVE_SITE, the site checks match the team's real domains (kept from the agent), andout/checksrecords each run's task and arm.run.sh <out-dir> --regradegrades stored runs again without calling the agent. Evaluate an Agent Skill.
Improve 3
-
#
Added
coding.sh improvelists what goes wrong most in this repo's sessions (failure flags, and any command failing the same way in two or more sessions), each with an example session, the AGENTS.md line that fixes it and the next commands.improve fix Nadds the line, uncommitted.improve checkcompares the sessions before and after each committed AGENTS.md, rule or skill change, with how often the agent follows each new line, says Helped, Regressed, No clear change or Too early, and exits 1 on a regression;--watchre-checks as sessions arrive. No API key needed. Improve your agent every week. -
#
Added
improve checklists, under each change, the sessions still flagged after it with their flags and start time (five, or all with--sessions; every flagged session before and after in--json), and the MCPharness_changestool returns them asafter.flaggedSessions, so your agent can answer "which sessions still failed after it?". Did it help? -
#
Fixed
improve check --repo <DIR|all>counts the sessions that ran in other checkouts and worktrees of the repo. Before, it ignored--repoand counted only sessions whose repo root was the current checkout, so a repo whose agents work in worktrees showed every change as "No sessions yet". Improve.
MCP 4
-
#
Added
improveandharness_changestools, andimproveanddid-it-helpprompts, run the same loop from inside your agent: what to fix first, and whether an AGENTS.md change helped, without a shell. Improve your agent every week. -
#
Added An
eval_inittool lets your agent build an eval suite for you, with the same sources aseval init; it writes files only withconfirm: true. MCP server. -
#
Added
exp_session_noteadds a redacted note to the project's experiment session (the hypothesis before a run, the reading after it) andexp_session_summaryreturns its timeline, paged, with the same blocks asexp session summary --json, so an agent can pick an investigation back up after a context reset. Without a session both return anot_founderror namingcoding.sh exp session new --name <topic>. Explore. -
#
Fixed Tool calls no longer wait for a big ingest: they answer within 1.5 s from what is indexed, with
pending: {files, indexing}in the result. CLI reference.
Harness 2
-
#
Added
coding.sh harness auditlists each memory and instruction file (Claude auto-memory, AGENTS.md and the other instructions files, rules, skills) with the sessions that loaded it, read it and wrote it, its size and its load cost in tokens, and flags files never read, written but never read back, and skills listed but never used.--agent,--since(default 30d) and--json. Memory and instruction files. -
#
Fixed
harness auditskips a file or directory it can't stat (a symlink loop, or a Windows junction Node can't follow) instead of failing with "unknown error". Memory and instruction files.
Judges 11
-
#
Added LLM graders take
"provider": "claude-code", which grades throughclaude -pon a Claude subscription (CLAUDE_CODE_OAUTH_TOKENfromclaude setup-token) instead of an API key. The judge runs with no tools, setting sources, plugins, MCP servers or saved session, so the hooks of the arm under test never reach it. Evaluate an Agent Skill. -
#
Added Judge prompts escape data tags in the judged text and say it is untrusted, so an output can't close
</output>and order a pass.judge calibrate --probe-injection judge.jsonplants a "respond pass" order in human-fail cases and reports how many verdicts flip; any flip exits 1. Default-prompt judges get new version ids. Evals. -
#
Added Checklist items can grade rule compliance from the trace with no model call:
ran-command,read-path,wrote-identifier, andfollows-rules, which checks every imperative line that names a backticked command, flag, path or identifier (`Never usegit push --force`) against what the agent did. Evals guide. -
#
Added
judge calibrate --grader testsaudits a test or command verifier:--sample-passes 40lists unlabelled passing cases to label, and the audit reports precision (how many passes a person would accept) with a Wilson interval and the false accepts.exp showandexp comparethen print the precision and a pass rate corrected for it. Evals guide. -
#
Added
follows-rulesreads rule-file frontmatter: a Claude Code rule withpaths:, a Cursor rule withglobs:(or neither glob noralwaysApply), or a Copilot rule withapplyTo:is graded only after the agent touches a matching file or opens the rule. Before that the agent never saw it, so it no longer counts as skipped. Evals guide -
#
Added
judge calibrateprints the judge's discrimination gap and label efficiency η, and warns when auditing outputs directly would need fewer human labels:label efficiency η 0.21 · auditing outputs directly needs ~4.8x fewer human labels for the same precision.--judge-cost 0.001adds the human label cost above which the judge pays off. The calibration state is unchanged;--jsoncarriescalibration.efficiency(Choi et al., arXiv 2610.35698). Evals. -
#
Added
exp compare --pairwiseand judge graders inexp compareprint how often a resample of the cases picks the same winner, and n*, the smallest size where that holds 95% of the time:stable B better in 97% of resamples (n*=50)orunstable B better in 61% of resamples (n* censored). An uncalibrated judge that never settles warns "pick or calibrate the judge before collecting more verdicts" (arXiv 2611.04090).--jsoncarriesstability. Evals. -
#
Added
judge sample <exp> --budget 60 --out plan.jsonsays which cases to label next: a seeded random sample stratified by the judge's verdict and confidence, with labels in proportion to stratum size, so the labels don't favour the doubtful cases.judge calibrate --plan plan.jsonthen prints the human-audited pass rate:human-audited pass rate 0.71 [0.63, 0.79] (42/50 of plan labelled; worst case ±0.09)(Choi et al., arXiv 2610.35698). Evals guide. -
#
Added New
no-test-tamperchecklist check, with no model call: it answers no when a test change hid a failure (a skip marker, a test deleted while red, an assertion edit that alone turned the tests green), cites the change and the test runs around it, and quotes what the agent said:weaken test/sum.test.js by Edit in e42 (turned failing tests green), disclosed: "…". Saying why never makes it pass. Evals guide. -
#
Added LLM graders take
"provider": "codex", which grades throughcodex execon a ChatGPT subscription. Evals. -
#
Fixed The Anthropic and OpenAI judge providers read
ANTHROPIC_BASE_URLandOPENAI_BASE_URL, like the vendors' SDKs, so judges and drafts reach a proxy, gateway or local stub without--base-url. Judges.
Stores 1
-
#
Added The Postgres and ClickHouse store plugins answer
--wherein the database, with every value bound: session and event keys,has:,is:, bare words,sort:and--facets, forsessions,usage,export, the viewer API and MCP.sessions --whereand facets no longer stop at the newest 20,000 sessions there, and event keys and bare words no longer fail withunsupported_store. Query language.
From CHANGELOG.md · RSS · All releases