# Changelog

Every release of Xherd, newest first.
Each section matches a version bump in version.json and is written for the person running the app.

## 0.23.1

- The update check reads the changelog from updates.xile.se, so the "Update" pill works for installed clients (#2235)
- "What's new" links the public updates page instead of a repository page that needs a login (#2235)

## 0.23.0

- Xherd tells you when a newer release exists: an "Update x.y.z" pill in the status bar opens what changed in every version since the one you run, with a link to the release page (#2235)
- The changelog now lives in the repo as CHANGELOG.md and every release adds its section there (#2235)

## 0.22.25

- The web client ships a favicon from the desktop icon source (#2248)

## 0.22.24

- A terminal pane restored after a daemon restart shows the restart overlay (#2245)

## 0.22.23

- CLI drift reads as information, with release notes and an Upgrade action (#2236)

## 0.22.22

- Attached images render inline on the user's own message, paired by send ref (#2229)

## 0.22.21

- A send carries a client ref that the daemon echoes on message.user (#2229)

## 0.22.20

- CLI version drift warning is direction-aware and the pin travels on session.started (#2236)

## 0.22.19

- Thinking rows stay in the feed after the turn and expand to the reasoning (#2234)

## 0.22.18

- Composer grows to ten lines before it scrolls, with an app-styled scrollbar (#2232)

## 0.22.17

- Chat autoscroll pins to the bottom, holds a scrolled-up view, jump indicator (#2233)

## 0.22.16

- Thinking blocks carry the model's reasoning text to the client (#2234)

## 0.22.15

- The transcript owns its scroll, header and sidebar stay pinned (#2231)

## 0.22.14

- Tool row header no longer paints the UA button face over the row (#2230)

## 0.22.13

- Spawned sessions get a constructed environment, HERDR_* no longer leaks (#2237)

## 0.22.12

- Scratch daemon helper, dev ws-base override, architecture map

## 0.22.11

- State.changed broadcasts are delivered in store order per connection (#2212)

## 0.22.10

- TerminalPane setup effect split, pinger attaches after the stream (#2216)

## 0.22.9

- An unanswered hello bounces the control socket into reconnect (#2214)

## 0.22.8

- Theme choice survives a restart, pane latency in the header, deferred client tests (#2150)

## 0.22.7

- Windows key file ACLs, ConPTY close seams, output-before-exit test, x/sys 0.30 (#2153)

## 0.22.6

- Xherdd main is testable; resize and flag/signal tests (#2150)

## 0.22.5

- HUD number helpers into hud.ts, agent.css split by concern (#2208, #2167)

## 0.22.4

- Dialog stack provider; workspace dialog holds while a request runs (#2196, #2199)

## 0.22.3

- The permission_mode allowlist, empty argv[0] refused, real transcript path rule (#2167, #2150)

## 0.22.2

- Intro label resolves the model through the live machine catalog (#2193)

## 0.22.1

- Tauri bundle version follows version.json (#2179)

## 0.22.0

- Session HUD with per-turn usage, cache timeline and subagent tree

## 0.21.1

- The turn.finished cost_usd is the cost of that turn, not the running total

## 0.21.0

- Workspace settings switch for the Claude Code status line feed (#2163)

## 0.20.0

- One dialog shell for the three client dialogs, delete workspace asks first (#2175)

## 0.19.4

- Agent feed renders assistant markdown, folds repeated thinking rows, tidies composer and intro (#2176)

## 0.19.3

- Validate agent event shapes at the client stream boundary (#2165)

## 0.19.2

- Permission card says when the CLI offered no always-allow rule (#2177)

## 0.19.1

- Move the Claude CLI pin to 2.1.258 on re-recorded, scrubbed stream fixtures (#2164)

## 0.19.0

- Close confirmation, agent pane intro block, workspace name in the top bar

## 0.18.0

- Sidebar and start sheet fixes from the first user test round

## 0.17.0

- Agent catalog on the wire and home directory as the default workspace cwd

## 0.16.2

- Agent pane crashed on daemon events with omitted arrays and partial usage

## 0.16.1

- Fan agent log notices out under the lock so unsubscribe cannot close a channel mid-send (#2149)

## 0.16.0

- Telemetry taps, statusline shim and per-workspace registration (#2160)

## 0.15.0

- Client wiring of the agent pane to protocol 2 (#2159)

## 0.14.0

- Daemon agent pane wiring with event log, JSON stream, resume and transcript history (#2156)

## 0.13.0

- Client shell with sidebar sessions, machine menu, workspace settings and account limits (#2157)

## 0.12.0

- Daemon agent adapter core with Claude stream-json parser and golden tests (#2155)

## 0.11.0

- Client agent pane components, feed reducer and fixture player (#2158)

## 0.10.0

- Protocol 2 contract, workspace cwd, agent pane kind, account block (#2154)

## 0.9.0

- App icon from the Option C pane grid mark (#2161)

## 0.8.0

- Windows client packaging

## 0.7.0

- Native Windows daemon with ConPTY

## 0.6.0

- Multi-machine client - machines panel, pairing UX, active-machine switching

## 0.5.0

- Conn-core - Rust connection crate with pairing, pinned-CA mTLS, loopback splice

## 0.4.0

- Daemon remote access - device pairing, mTLS listener, PKI, revocation, caps

## 0.3.1

- Bump version to 0.3.1 for the smoke ordering fix

## 0.3.0

- Tauri v2 client shell - workspaces, xterm terminal panes, token theming

## 0.2.0

- Xherdd daemon core - PTY sessions, WS control channel, pane streams, layout persistence

## 0.1.0

- Scaffold xherd repo - protocol v1 contract, docs, version 0.1.0
