Changelog
Nov 8, 2026 · 177 changes · page 5 of 5
coding.sh v0.1.2
coding.sh runs on Windows, and CI tests it there.
Refine 4
-
#
Added
coding.sh refine propose|test|apply|rollback|log|runimproves AGENTS.md, rules and skills in tested rounds.proposeasks a model for lines that address your sessions' most severe flags, with protected lines marked READ-ONLY.testchecks a candidate before any model call (protected lines, harmful or duplicate added lines), A/Bs it against your current files on the decision pointsexp abmines, and rejects it when it forgets what an earlier kept edit won (guard: forgets kept edit r_…).applywrites a kept edit with a backup,rollbackrestores it byte for byte, andloglists every round with its verdict, effect CI, guard result and reason.runloops until--rounds,--max-costor the plateau detector says stop. Evals guide. -
#
Added
coding.sh refine score labels.jsonl --pred FILEscores diagnoses against hand labels by code: occurrence, Signal and session precision, recall and F1, Signal coverage, recall per taxonomy family and, with 2+--predfiles, repeat agreement, each with its counts. Matching is maximum one-to-one on session, component and top-3 type ids. Without--predit measures the precision of each session flag (Signals, arXiv 2611.04507). Evals guide. -
#
Added
refine test|run --suite <name>judges a harness edit on an eval suite of repo tasks, k trials per arm, and can make the harness cheaper and faster, not only better:--objective cost,wallkeeps an edit whose pass rate holds within--margin(2pp by default) and whose cost, tokens, wall time, LLM time, turns or size drop significantly, and never keeps one that loses quality beyond the margin. With a cost or time objective the proposer cuts, shown what made the runs slow or expensive;--proposer-command 'claude -p'writes the edit with a command.--until-plateauclimbs until the e-detector says it stopped gaining,--resumecontinues an interrupted round, a skill directory can be the--target, andrefine logshows each climb's rounds and Pareto front. Evals guide. -
#
Fixed
refine check,refine testandexp abjudge only the new sentences of an edited line when looking for an edit that relaxes a protected line. Editing a one-line paragraph that already held a conditional ("use the CLI only if …") no longer rejects the edit. Protected safety lines.
Long sessions 1
-
#
Added A session that runs for hours or days reads as one timeline split into phases: the start, each
claude --resume, each compaction and each long idle gap.showlists the phases with day lines,show --alllists every event, andshow --followprints new events while a session runs. Derails mark where a run went off the rails:looping,failure-streak,churn,no-progress,stalledandcontext-thrash, each with the event and time it started. They show inshow, on the viewer timeline (with ‹ › to step through them), insessions --flag <name>, and in the MCPsessions_listandsession_gettools.comparereports derails and time to first derail per run, and aprogressgrader scores time on track forexp compare. The viewer loads a 40,000-event session in the background and scrolls it smoothly, and MCPsession_getwithtailreads a long session's latest events. Live hook ingest updates a long session from its new events only: 0.46 s per update on a 30,000-event session, down from 1.16 s. Long sessions.
Tool evals 2
-
#
Added A
callscheck: tools the trial must call (must), must not call (mustNot), at mostmaxcalls, and anorder, with partial argument matches (~textsubstrings,<=Nbounds, dotted paths). It reads the trial's tap; the MCP tap now keeps each call's arguments, redacted.exp runtakes the same fields as acallsgrader over the task's trace. Tool evals. -
#
Added
toolevals compareprintsp (perm)beside McNemar: a task-paired permutation test on the per-task differences, exact over all sign flips up to 20 tasks and seeded Monte Carlo above. It holds its level at the 5-11 tasks a suite often has, where bootstrap intervals are too narrow (AT-AT, arXiv 2610.34679).--jsoncarriesreport.permutation; verdicts are unchanged. Tool evals.
Graders 2
-
#
Added The
agent-slopgrader flags placeholder code,as anyand@ts-ignore, empty catches, leftover debugging, focused or skipped tests and narrating comments in the lines an agent's diff adds, andcoding.sh judge slop <session|run|experiment>scores captured work with it, per arm for a compare experiment. Verifiers get the agent's diff inCODING_SH_AGENT_DIFF. Evals guide. -
#
Fixed When a command grader, command task or bench source crashes on Node 24.22, its reason names the error again (
TypeError: fetch failed (cause: connect ECONNREFUSED …)) instead of the crash's closing braces. Node 24.22 prints an uncaught fetch failure as[TypeError: fetch failed] {. Evals
Query 3
-
#
Added
coding.sh sql "select …"runs one read-only SQL query against the SQLite index: oneSELECTorWITHstatement on a read-only connection withquery_onlyon, with a timeout (--timeout, 10 s) and a row cap (--limit, 1000). Writes,ATTACH,PRAGMAand a second statement exit 2; Postgres and ClickHouse stores get an error that points toexport.coding.sh export sessions|events|labelsstreams rows as JSONL or CSV with the same filters assessions, on every store. Query and export. -
#
Added
sessions,search,usageandexporttake--where, one filter language over any session or event field:agent:codex cost>0.5 tool:Bash ok:false -flag:compaction, withOR,( ), wildcards, ranges,sort:andlimit:.sessions --facets model,toolcounts sessions per value. The viewer API (?where=,/api/facets) and the MCP toolssessions_list,searchandusage(where,facets) take the same queries. On SQLite a query is one parameterized SQL statement; a typo is a usage error that points at the character. Query and export -
#
Added
--whereon tools, MCP servers, event kinds andokreads indexes instead of scanning events, and their facet counts come from a small per-session table. On a 3.3 GB, 1.4M-event store,tool:Bash ok:falsetakes 5 ms instead of 26 s and the tool, MCP and kind facets 31 ms instead of 8.5 s. The store migrates once on open (about a minute at that size, +4% on disk).GET /api/eventsreturns matching events across sessions, newest first and keyset-paged, and/api/facetstakesprefixfor autocomplete. Query and export
Privacy 4
-
#
Added Sessions count what redaction replaced, by kind, in
stats.redactions(counts only, never values; blobs and metadata mode included), and a session in which a vendor token was redacted gets thesecret:exposedtag, since the agent and its model provider still saw it.coding.sh sessions --flag secret:exposedlists the credentials to rotate, andshowprints aRedactedrow. Sessions stored earlier are counted from their redaction markers. Storage, sinks and privacy. -
#
Added
coding.sh purge --literal <file>removes a leaked secret from the SQLite store after the fact: event payloads and the search index, session titles and stats, labels, eval docs, settings, blobs (rewritten under a new hash, with references repointed) and the spool, then VACUUMs the index. Values come from a file or stdin and are never printed;--dry-runcounts the copies. Storage, sinks and privacy. -
#
Added
coding.sh purge --rule <regex>removes every match of a secret's shape (sk-ant-api03-[A-Za-z0-9_-]{80,}) the way--literalremoves a value, without printing the rule or a match. Purge also scrubs eval run dirs (~/.coding.sh/runs), where a kept run holds the agent's transcripts. Privacy -
#
Fixed
coding.sh purgenever repeats what was typed on its command line: a secret pasted as an argument, a flag value, an unknown option or a--literalpath that does not exist is refused with exit 2 and(value not shown), instead of being printed to the terminal and logs. Other commands still name a stray argument. Purge.
Compare 2
-
#
Added
compare A B --experiment <id> --retry-errorsruns again, in place, only the runs of a stored comparison that errored or failed on infrastructure, and each task, arm and attempt counts once.--failing <id>[@bundle]runs only the tasks A failed in that comparison, with a note that the pass rates are conditioned on that failure.--sample N --seed Sruns a seeded random sample of the tasks.--jsonaddsplanned,skipped,retriedandselection, and the consent prompt counts only the runs still to go. Evals guide. -
#
Fixed The
agent spendandgrader spendrows no longer count runs copied by--reuse; areusedrow shows what those runs cost when they first ran, marked not spent. Evals.
SDK 1
-
#
Changed The TypeScript SDK is published as
@codingdotsh/sdk(npm org names can't contain a dot). Install it withnpm i @codingdotsh/sdk. See [the SDK reference](docs/reference/sdk.md).
Rules 1
-
#
Fixed An AGENTS.md line like "Run
npm testbefore you say you are done, and never claim…" is read as a requirement to runnpm test: the clause that holds the command decides, not a "never" later in the line.
Doctor 1
-
#
Fixed Hooks in a project's config (
.claude/settings.local.json,.codex/hooks.json,.gemini/settings.json,.cursor/hooks.json, …) show ashooked in <file> (project), found in the current directory and in the directories the agent's recent sessions ran in. An agent with events in the last 5 minutes and no hook found readsevents arriving, hook not in user config, nevernot hooked. A stale hook bin now saysrun coding.sh update --refresh-bininstead ofinit, andcoding.sh ingest(which the hook starts at every session end) refreshes the bin itself afternpm i -gof a newer version. Troubleshooting.
Windows 2
-
#
Fixed
coding.sh updateand the MCP launcher run npm andcoding.shwithout a shell, so paths with spaces or&arrive intact. -
#
Fixed Goose's config is found under
%APPDATA%\Block\goose\config, where Goose keeps it on Windows. Eval runs find agent binaries on PATH (Windows spells itPath), and Amp and Pi hooks use thenodeon PATH, as elsewhere, instead of the one that raninit.
Aider 1
-
#
Fixed Eval runs pass
--no-show-release-notes: on a new version's first run,--yes-alwaysmade aider open its release notes in a browser.
Codex 1
-
#
Fixed Code mode: a command run inside an
execcell now points at the cell, the cell fails when a command in it fails, and session stats count each command once instead of twice (hooks and backfill agree).
CLI 1
-
#
Fixed
status,sessionsandsearchwith--jsoncarry"pending": {"files", "indexing"}while captures are still waiting, instead of dropping the note. CLI reference.
Store 1
From CHANGELOG.md · RSS · All releases