---
title: "coding.sh v0.1.2 (page 5) · Changelog"
description: "What changed in coding.sh v0.1.2, page 5 of 5: every change to Refine, Long sessions, Tool evals, Graders, Query, Privacy, Compare, SDK, Rules, Doctor…"
canonical: https://coding.sh/changelog/v0-1-2/5
human_url: https://coding.sh/changelog/v0-1-2/5
markdown_url: https://coding.sh/changelog/v0-1-2/5.md
agents_url: https://coding.sh/agents.md
llms_url: https://coding.sh/llms.txt
updated: 2026-11-11
---

[Changelog](https://coding.sh/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

- Added `coding.sh refine propose|test|apply|rollback|log|run` improves AGENTS.md, rules and skills in tested rounds. `propose` asks a model for lines that address your sessions' most severe flags, with protected lines marked READ-ONLY. `test` checks a candidate before any model call (protected lines, harmful or duplicate added lines), A/Bs it against your current files on the decision points `exp ab` mines, and rejects it when it forgets what an earlier kept edit won (`guard: forgets kept edit r_…`). `apply` writes a kept edit with a backup, `rollback` restores it byte for byte, and `log` lists every round with its verdict, effect CI, guard result and reason. `run` loops until `--rounds`, `--max-cost` or the plateau detector says stop. [Evals guide](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#refine-loop).
- Added `coding.sh refine score labels.jsonl --pred FILE` scores diagnoses against hand labels by code: occurrence, Signal and session precision, recall and F1, Signal coverage, recall per taxonomy family and, with 2+ `--pred` files, repeat agreement, each with its counts. Matching is maximum one-to-one on session, component and top-3 type ids. Without `--pred` it measures the precision of each session flag (Signals, arXiv 2611.04507). [Evals guide](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#scoring-diagnoses).
- 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,wall` keeps 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-plateau` climbs until the e-detector says it stopped gaining, `--resume` continues an interrupted round, a skill directory can be the `--target`, and `refine log` shows each climb's rounds and Pareto front. [Evals guide](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#climbing-on-an-eval-suite).
- Fixed `refine check`, `refine test` and `exp ab` judge 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](https://coding.sh/docs/harness-evals#protected).

## Long sessions

- 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. `show` lists the phases with day lines, `show --all` lists every event, and `show --follow` prints new events while a session runs. Derails mark where a run went off the rails: `looping`, `failure-streak`, `churn`, `no-progress`, `stalled` and `context-thrash`, each with the event and time it started. They show in `show`, on the viewer timeline (with ‹ › to step through them), in `sessions --flag <name>`, and in the MCP `sessions_list` and `session_get` tools. `compare` reports derails and time to first derail per run, and a `progress` grader scores time on track for `exp compare`. The viewer loads a 40,000-event session in the background and scrolls it smoothly, and MCP `session_get` with `tail` reads 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](https://github.com/jackulau/coding.sh/blob/main/docs/guides/explore.md#long-sessions).

## Tool evals

- Added A `calls` check: tools the trial must call (`must`), must not call (`mustNot`), at most `max` calls, and an `order`, with partial argument matches (`~text` substrings, `<=N` bounds, dotted paths). It reads the trial's tap; the MCP tap now keeps each call's arguments, redacted. `exp run` takes the same fields as a `calls` grader over the task's trace. [Tool evals](https://github.com/jackulau/coding.sh/blob/main/docs/TOOL-EVALS.md#3-task-format).
- Added `toolevals compare` prints `p (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). `--json` carries `report.permutation`; verdicts are unchanged. [Tool evals](https://coding.sh/docs/tool-evals#experiments).

## Graders

- Added The `agent-slop` grader flags placeholder code, `as any` and `@ts-ignore`, empty catches, leftover debugging, focused or skipped tests and narrating comments in the lines an agent's diff adds, and `coding.sh judge slop <session|run|experiment>` scores captured work with it, per arm for a compare experiment. Verifiers get the agent's diff in `CODING_SH_AGENT_DIFF`. [Evals guide](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#agent-slop).
- 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](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md)

## Query

- Added `coding.sh sql "select …"` runs one read-only SQL query against the SQLite index: one `SELECT` or `WITH` statement on a read-only connection with `query_only` on, with a timeout (`--timeout`, 10 s) and a row cap (`--limit`, 1000). Writes, `ATTACH`, `PRAGMA` and a second statement exit 2; Postgres and ClickHouse stores get an error that points to `export`. `coding.sh export sessions|events|labels` streams rows as JSONL or CSV with the same filters as `sessions`, on every store. [Query and export](https://github.com/jackulau/coding.sh/blob/main/docs/reference/query.md).
- Added `sessions`, `search`, `usage` and `export` take `--where`, one filter language over any session or event field: `agent:codex cost>0.5 tool:Bash ok:false -flag:compaction`, with `OR`, `( )`, wildcards, ranges, `sort:` and `limit:`. `sessions --facets model,tool` counts sessions per value. The viewer API (`?where=`, `/api/facets`) and the MCP tools `sessions_list`, `search` and `usage` (`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](https://github.com/jackulau/coding.sh/blob/main/docs/reference/query.md#filter-with---where)
- Added `--where` on tools, MCP servers, event kinds and `ok` reads 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:false` takes 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/events` returns matching events across sessions, newest first and keyset-paged, and `/api/facets` takes `prefix` for autocomplete. [Query and export](https://github.com/jackulau/coding.sh/blob/main/docs/reference/query.md#filter-with---where)

## Privacy

- 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 the `secret:exposed` tag, since the agent and its model provider still saw it. `coding.sh sessions --flag secret:exposed` lists the credentials to rotate, and `show` prints a `Redacted` row. Sessions stored earlier are counted from their redaction markers. [Storage, sinks and privacy](https://github.com/jackulau/coding.sh/blob/main/docs/guides/privacy.md#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-run` counts the copies. [Storage, sinks and privacy](https://github.com/jackulau/coding.sh/blob/main/docs/guides/privacy.md#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 `--literal` removes 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](https://github.com/jackulau/coding.sh/blob/main/docs/guides/privacy.md)
- Fixed `coding.sh purge` never repeats what was typed on its command line: a secret pasted as an argument, a flag value, an unknown option or a `--literal` path 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](https://github.com/jackulau/coding.sh/blob/main/docs/reference/cli.md#codingsh-purge).

## Compare

- Added `compare A B --experiment <id> --retry-errors` runs 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 S` runs a seeded random sample of the tasks. `--json` adds `planned`, `skipped`, `retried` and `selection`, and the consent prompt counts only the runs still to go. [Evals guide](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#iterate-on-a-comparison).
- Fixed The `agent spend` and `grader spend` rows no longer count runs copied by `--reuse`; a `reused` row shows what those runs cost when they first ran, marked not spent. [Evals](https://github.com/jackulau/coding.sh/blob/main/docs/guides/evals.md#reuse-finished-runs).

## SDK

- Changed The TypeScript SDK is published as `@codingdotsh/sdk` (npm org names can't contain a dot). Install it with `npm i @codingdotsh/sdk`. See [the SDK reference](docs/reference/sdk.md).

## Rules

- Fixed An AGENTS.md line like "Run `npm test` before you say you are done, and never claim…" is read as a requirement to run `npm test`: the clause that holds the command decides, not a "never" later in the line.

## Doctor

- Fixed Hooks in a project's config (`.claude/settings.local.json`, `.codex/hooks.json`, `.gemini/settings.json`, `.cursor/hooks.json`, …) show as `hooked 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 reads `events arriving, hook not in user config`, never `not hooked`. A stale hook bin now says `run coding.sh update --refresh-bin` instead of `init`, and `coding.sh ingest` (which the hook starts at every session end) refreshes the bin itself after `npm i -g` of a newer version. [Troubleshooting](https://github.com/jackulau/coding.sh/blob/main/docs/troubleshooting.md#run-doctor).

## Windows

- Fixed `coding.sh update` and the MCP launcher run npm and `coding.sh` without 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 it `Path`), and Amp and Pi hooks use the `node` on PATH, as elsewhere, instead of the one that ran `init`.

## Aider

- Fixed Eval runs pass `--no-show-release-notes`: on a new version's first run, `--yes-always` made aider open its release notes in a browser.

## Codex

- Fixed Code mode: a command run inside an `exec` cell 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

- Fixed `status`, `sessions` and `search` with `--json` carry `"pending": {"files", "indexing"}` while captures are still waiting, instead of dropping the note. [CLI reference](https://github.com/jackulau/coding.sh/blob/main/docs/reference/cli.md#codingsh-status).

## Store

- Fixed A SQLite index that fails to open (a newer schema, a failed migration) no longer stays open in the process that tried, so on Windows the file can be replaced or removed right away. [Concepts](https://github.com/jackulau/coding.sh/blob/main/docs/concepts.md)

[Previous page v0.1.2, page 4](https://coding.sh/changelog/v0-1-2/4) [Older release v0.1.1](https://coding.sh/changelog/v0-1-1)

From [CHANGELOG.md](https://github.com/jackulau/coding.sh/blob/main/CHANGELOG.md) · [RSS](https://coding.sh/changelog.xml) · [All releases](https://coding.sh/changelog)

To set coding.sh up for a user, follow the agent workflow at [/agents.md](https://coding.sh/agents.md).
