v0.9.0
Immutable
release. Only release title and notes can be modified.
0.9.0 (2026-06-14)
Features
- agents: cloud-deregistering stop for background sessions (BG-3) (#218) (c3bae48)
- agents: dispatch a
claude --bg [--rc <name>]background session (BG-2) (#215) (83e2ad4) - agents: read-only background-agents panel (BG-1) (#214) (a755723)
- agents: wire dispatch + stop buttons into the bg-agents panel (BG-4) (#220) (99fb3eb)
- configurable usage badge — currency conversion + tokens-only mode (#192) (d53a7f5)
- hosted: --resume respawn of a lost hosted session (CL-7) (#236) (671eee7)
- hosted: claustrum daemon connect-or-spawn lifecycle (CL-2) (#229) (da8f72d)
- hosted: claustrum NDJSON JSON-RPC client + fake daemon fixture (CL-1) (#224) (dff6c33)
- hosted: hosted-channel session engine (CL-4a) (#230) (d9ab7e6)
- hosted: live-view UI for hosted sessions (CL-4c) (#233) (234e525)
- hosted: orphan detection + recovery after a daemon restart (CL-8) (#237) (6a64eef)
- hosted: permissions approve/deny UI for hosted sessions (CL-5) (#234) (d5acb2d)
- hosted: persist + reattach hosted sessions across restarts (CL-6) (#235) (ea45088)
- hosted: wire the hosted channel into the app (CL-4b) (#231) (2e219a3)
- logs: redact the session URL in the on-disk bridge log (redact_session_url) (#200) (aa60bf6)
- notify on bridge crash via Apprise (optional extra) (#197) (8a1d944)
- per-project preflight endpoint (GET /api/projects/{name}/preflight) (#193) (18c0ec6)
- service: default KillMode=process so pty bridges survive a restart (#206) (992f84b)
- ui: two-zone dashboard redesign; migrate icons to Tabler Icons (#248) (c060d93)
Bug Fixes
- agents: don't report a clean stop when no live worker was found (#255) (8dfd1e3)
- app: end send-only WS handlers on client disconnect — ghost tasks stalled shutdown (#243) (397d84b)
- app: enforce bypass-permissions ceiling on hosted + bg-agent channels (#249) (90d74c2)
- app: friendly HTML 404 for browser navigation; unify project-not-found wording (#247) (a6ad579)
- auth: fsync parent dir when creating session.secret (#261) (8fafd6b)
- ci: always run CodeQL so docs-only PRs aren't blocked by code-scanning rule (#196) (71a0b66)
- correctness/robustness batch from a clean-room audit (#252) (4e097e3)
- docker: bump base image digest to clear stale OpenSSL CVEs (#216) (231cd8d)
- don't render the live metrics line twice in rows layout (#190) (535efdd)
- hosted: handle an over-limit claustrum frame without killing the reader (#256) (dc0249e)
- hosted: permission allow updatedInput + stop exit-latch race (#242) (a84b937)
- hosted: resolve parked requests on exit + fix live-view double-wire (#254) (0f83fe1)
- hosted: scrub claustrum's daemonize sentinel from the spawned daemon env (#241) (02242cb)
- hosted: surface terminal state in live-view; stop the dead-session reconnect loop (#245) (fb51cf4)
- inspector: gate cwd attribution on agent-view kind/state (#213) (c116fe9)
- logs: whole first WS tail line + 0600 verbatim bridge log when redaction off (#259) (f6f2b30)
- scrub Clauster secrets from every spawned child environment (#253) (926f315)
- state: harden state writes — 0700 dir, 0600 atomic temp, fsync durability (#258) (bc09bee)
- ui: clear stale New-project dialog state on close, mode-switch, and edit (#246) (b000f75)
- ui: label launch controls + guard the launch button against double-submit (#260) (be3efde)
- ui: render the Active status rail + fix keyboard focus order (#250) (a82cbe8)
- ui: restore the Tabler + Alpine.js attribution in the dashboard footer (#198) (9366c8b)
- ui: status-presentation parity, untrusted indicator, bypass-confirm gating (#251) (2becb73)
- usage: tolerate malformed token values instead of 500-ing the rollup (#257) (dce4efc)