## zeroclaw-labs/zeroclaw — v0.8.4…v0.8.5

_455+ commits._

### Features
- **feat(release): publish the workspace to crates.io (#10158)** (fd6efbd)
- **feat(whatsapp-web): port to whatsapp-rust 0.7.0 (#10153)** (1ab12cb)
- **feat(rpc): describe ZeroCode interaction context (#10382)** (e73683f)
- **feat(zerocode): show active log path in payload fallback (#10474)** (0bf1bc3)
- **feat(zerocode): make modifier intent explicit (#10479)** (c265ff6)
- **feat(zerocode): add session-local Todo close control (#10584)** (218b30e)
- **feat(providers): support Anthropic thinking.display beta (#10542)** (cd8a839)
- **feat(web): open the same agent in several chat tabs (#9355)** (e754876)
- **feat(gateway): add image upload endpoint and dashboard attach/drop UI (#10544)** (e5d556a)
- **feat(web): hold several independent chat conversations per agent (#9353)** (1c7ef50)
- **feat(runtime)!: retire unused legacy node transport (#10289)** (9154694)
- **feat(runtime)!: bound skill HTTP egress (#10369)** (87cc136)
- **feat(docs): add reader and diagram controls (#10515)** (1abefac)
- **feat(plugins): enforce a host-owned egress policy on plugin wasi:http (#9582)** (17bdbb0)
- **feat(vi): add SD-JWT disclosure resolution and reference test vectors (#9963)** (4b73b37)
- **feat(zerorelay): secure transport with blind relay and native mTLS enrollment (supersedes #9080) (#10142)** (d7c4f59)
- **feat(zerocode): accept Option-Backspace for previous-word deletion (#10078)** (e28528c)
- **feat(zerocode): make logs text selectable and copyable (#10096)** (b1fdade)
- **feat(mcp): materialize resource blob with aggregate budget preflight (#9196)** (7d9fd45)
- **feat(maintainers): add pull request review queues (#10439)** (d065872)
- **feat(vi): preserve unknown constraint types and read the strictness mode (#9935)** (8150819)
- **feat(sop): add authenticated operator cancellation for running SOP jobs (#9476)** (92d674a)
- **feat(providers): add ZeroRouter preset and public catalog (#9645)** (88f5ff2)

### Fixes
- **fix(zerocode): refresh inactive Chat without blocking navigation (#10393)** (07734e4)
- **fix(providers): evict images per image, not per message (#10564)** (1b09914)
- **fix(runtime): preserve PowerShell module path (#10464)** (52faf74)
- **fix(runtime): keep detailed tool output when a short error is also set (#10364)** (7595d34)
- **fix(zerocode): keep input responsive during reconnect (#10374)** (af983ec)
- **fix(whatsapp-web): an empty allowed_groups admits no group unless group_policy is all (#9382)** (826a3c3)
- **fix(providers): retry replay-safe empty streams once (#10602)** (8180244)
- **fix(channels): base channel health on the channel, not on listener liveness (#10005)** (bb75b19)
- **fix(zerocode): clear dashboard data on disconnect (#10260)** (193ac15)
- **fix(config): keep cost cache aligned after append (#10482)** (8ced58c)
- **fix(runtime): say what an operator denial means instead of Denied by user. (#10490)** (240b5a1)
- **fix(channels/discord): bind routed transcription provider (#10494)** (5013ca4)
- **fix(tools): preserve Windows coding CLI environment (#10403)** (0683661)
- **fix(ci): validate pull request head history (#10514)** (ca7cf2c)
- **fix(config): honor ZEROCLAW_CONFIG_DIR in Config::default() (#10521)** (c2cf0ba)
- **fix(runtime): enforce independent delegate approval policy (#10188)** (5848a24)
- **fix(tests): make cron workspace assertion portable (#10362)** (b77c8f4)
- **fix(runtime): avoid nesting Docker sandbox inside Docker runtime (#9402)** (0643759)
- **fix(docs): route mdBook preprocessors through xtask (#10528)** (39266ce)
- **fix(config): refuse unsafe bare-path overwrites (#10498)** (0221d72)
- **fix(infra): align JSONL session file validation (#9873)** (826f6b1)
- **fix(log): bridge `log`-facade records into the tracing pipeline (#10203)** (7919741)
- **fix(channels/matrix): resolve transcription providers from live config (#10487)** (bacb3b5)
- **fix(providers): name the fallback that lacks vision in capability errors (#10028)** (0fd2db0)
- **fix(runtime): persist session state from the RPC prompt path (#10030)** (00215f7)
- **fix(cli): localize paircode guidance (#10484)** (1c05fb1)
- **fix(channels): authorize approval responders (#9574)** (e762ce5)
- **fix(providers): default ZeroRouter to the hosted deployment; note beta (#10453)** (9310330)
- **fix(docs): snap reader scale to an explicit step ladder (#10568)** (ba817c4)
- **fix(zerocode): satisfy Rust 1.98 drain lint (#10477)** (e393fb0)
- **fix(channels/matrix): preserve reasoning source identity (#10481)** (fb0af75)
- **fix(config): complete required sections across CLI processes (#10476)** (361a4c4)
- **fix(web): show channel descriptor defaults in Quickstart (#10081)** (e59ae10)
- **fix(tests): gate POSIX device assertion to Unix (#10478)** (7fc41af)
- **fix(mcp): preserve persistent SSE event boundaries (#10459)** (73ff732)
- **fix(ci): align CLI and hardware labels (#10516)** (b7bc2b2)
- **fix(zerocode): restore persisted ACP transcripts (#10380)** (bf949b2)
- **fix(zerocode): let local sessions fall back to agent workspace cwd (#10541)** (a3c253b)
- **fix(skills): prevent symlink races during install (#10367)** (dcab5a9)
- **fix(channels): preserve WhatsApp storage integrity (#10438)** (563b6b3)
- **fix(personality): remove filename labels from rendered personality prompt (#9561)** (87e343b)
- **fix(channels): resolve matrix homeserver by server name or URL (#9855) (#9871)** (7a91988)
- **fix(zerocode): keep SOP navigation responsive during refresh (#10392)** (feaf969)
- **fix(zerocode): reconcile lost prompt completion (#10466)** (cd2ab35)
- **fix(providers): add compatible tool-result image policy (#10448)** (98b96b7)
- **fix(memory): preserve snapshot hydration integrity (#10469)** (2de6269)
- **fix(config): correct cost summary periods (#10462)** (0bdc669)
- **fix(security): patch wasmtime sandbox escape (#10508)** (ac9ed04)
- **fix(zerocode): surface clipboard cleanup failures (#10443)** (bd8c73f)
- **fix(providers): preserve model context when anchoring Gemini requests (#10435)** (aa78027)
- **fix(channels/telegram): self-destruct approval cards after an operator tap (#10064)** (a13b0f1)
- **fix(security): honor allowed_roots tiers in the Landlock sandbox (#10100)** (f4ac96f)
- **fix(providers): surface terminal provider failure causes (#10234)** (ddb7b94)
- **fix(cron): make agent-scoped cron mutations atomic (#10177)** (559c543)
- **fix(zerocode): restore terminal after external SIGINT (#10184)** (b13bfb6)
- **fix(channels): mark ElevenLabs TTS API key sensitive (#10433)** (a6fad03)
- **fix(hooks): harden webhook audit exports (#9995)** (7cf7aae)
- **fix(channels): preserve the configured alias on inbound webhook messages (#10029)** (f712041)
- **fix(zerocode): decode split SGR mouse events (#10444)** (6407e05)
- **fix(providers): enforce OAuth callback and refresh contracts (#10012)** (662b9f8)
- **fix(cron): scope the cron tools to the calling agent (#9948)** (2c6f38a)
- **fix(runtime): convert missed test call sites to ScopedToolRegistry (#10445)** (4d47d79)
- **fix(deps): update chacha20 to 0.10.2 (#10428)** (4434a06)
- **fix(channels): forward transcription language hints (#10431)** (bc6fc78)
- **fix(security): grant Landlock access to DNS and TLS configuration (#10098)** (9794826)
- **fix(gateway): redact duplicate idempotency keys from logs (#10256)** (5461636)
- **fix(providers): bound the successful /models response body (#10314)** (e796db5)
- **fix(ci): typecheck generated dashboard contract (#10399)** (0e3dd02)
- **fix(channels/telegram): keep reply-threads in the main chat conversation history (#10418)** (60385c7)
- **fix(ci): label nested Cargo manifests as dependencies (#10387)** (1c4b0fe)
- **fix(channels): state WhatsApp formatting syntax in its delivery instructions (#10388)** (6d6b7cb)
- **fix(hardware): clean up Arduino flash temp dirs (#9903)** (690f1f1)
- **fix(channels): cap the setMyCommands body by size, not only by command count (#10389)** (f1c20f7)
- **fix(zerocode): respect paste input ownership (#10278)** (a561b5a)
- **fix(runtime): capture skill-review fork messages instead of slicing trimmed history (#9515)** (b9211af)
- **fix(channels): mark Google TTS API key header sensitive (#10191)** (31f435e)
- **fix(providers): honor runtime proxy for OpenAI Responses (#9606)** (179bade)
- **fix(security): enforce forbidden_paths under allowed roots and the workspace (#9815) (#9937)** (47e9a2a)
- **fix(runtime): detect context overflow through error causes (#10416)** (00fac00)
- **fix(runtime): prevent stale provider refreshes from mutating replacement sessions (#9719) (#9748)** (d5617f1)
- **fix(i18n): localize terminal approval prompts (#10189)** (de3cdee)
- **fix(config): migrate bare vision_model_provider to dotted alias ref (#9707)** (1da869f)
- **fix(channels): deduplicate Discord image URL fallback (#10385)** (8fcc14c)
- **fix(lark): use constant_time_eq for verification_token comparison (#9110)** (aa6bc26)
- **fix(deps): gate root schemars behind schema-export (#10335)** (374fdf2)
- **fix(dist): include Git channel in official artifacts (#10363)** (7e0aabe)
- **fix(channels): clear delivery registry when reload removes all channels (#9725)** (3c4e2a3)
- **fix(zerocode): align translated health labels (#10103) (#10108)** (90f480a)
- **fix(vi): report the withheld vi_verify tool through the config surface (#9942)** (432d36e)
- **fix(clippy): replace chunks_exact(2) with as_chunks::<2>() for Rust 1.98 (#10353)** (a8aa7b5)
- **fix(zerocode): keep file explorer row and page keys in search (#10065)** (da71e3e)
- **fix(runtime): make streamed user turns read as conversation, not log payloads (#9325)** (c22645c)
- **fix(channels): resolve Voice Wake transcription from the owning agent (#10032)** (a5359fb)
- **fix(cron): preserve scheduler workspace policy (#10253)** (b047a45)
- **fix(runtime/cron): map command patches onto agent job prompts (#10258)** (eeb8c90)
- **fix(channels): make Telegram lifecycle tests locale-independent (#10342)** (bf9bac5)

### Tests
- **test(channels): avoid executing Edge TTS fixtures (#10471)** (ff2eb4f)
- **test(runtime): harden daemon startup deadlock guards (#10492)** (b3ad559)
- **test(zerocode): cover quickstart adapter serialization (#10460)** (9a8b5b1)
- **test(runtime): stabilize stale local IPC cleanup test (#10368)** (2280852)
- **test(channels): keep Telegram photo upload test offline (#10413)** (d355e3b)
- **test(quickstart): make validation assertions locale-independent (#10347)** (2b9a651)
- **test(cron): anchor missed-run assertion to reference time (#10345)** (1b026b8)

### Docs
- **docs(channels): add Twitch setup guide (#10581)** (b8ad3c3)
- **docs(mdbook): pin mdBook 0.5.4 (#10517)** (30fd85f)
- **docs(sop): generate syntax reference from runtime (#10383)** (e715425)
- **docs(maintainers): calibrate risk review policy (#10192)** (cf8add8)
- **docs(security): update distroless base to Debian 13 (#10384)** (2b23cb3)

### Chore
- **chore(release): bump version to v0.8.5 (#10632)** (cb2b20a)
- **chore(docs): move docs and site links to zeroclaw.com (#10616)** (405d00a)
- **ci(rust): bump routine toolchains and builders to 1.98.0 (#9527)** (c9b08ab)
- **chore(deps): bump anchore/sbom-action from 0.24.0 to 0.24.2 in the actions-all group across 1 directory (#10500)** (caa267b)
- **refactor(agent): centralize tool-call formatting instructions (#10311)** (b07b596)
- **ci(codeql): route Rust analysis to Blacksmith (#10441)** (6506002)
- **ci(docker): enforce Alpine non-root image metadata (#10176)** (0f5e97b)
- **refactor(channels): gate rusqlite by channel features (#10454)** (71cb02b)
- **ci(plugins): execute every live-config regression in the required job (#10181)** (c9404c4)
- **refactor(runtime): seal the engine tool registry as ScopedToolRegistry (#9319)** (e40f153)
- **chore(skillforge): remove the orphaned SkillForge engine (#10309)** (b880f89)
- **refactor(channels): remove unreachable compatibility code (#9673)** (47b2760)
- **chore(zerocode): remove unused async-trait dependency (#10352)** (dd55f10)
- **chore(channels): remove unused tokio-socks dependency (#10365)** (c1319b5)
- **chore(channels): gate axum by channel features (#10377)** (3a1fb19)
- **chore(deps): bump distroless/cc-debian13 from `a77defd` to `c31ff9a` (#10423)** (651e72c)
- **refactor(tooling): propagate build input failures (#10126)** (0943629)
- **refactor(gateway): require authenticated webhook ingress before agent dispatch (#9744)** (478bdf6)
- **refactor(util): consolidate floor_char_boundary onto std (#10279)** (5e860b6)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/zeroclaw-labs/zeroclaw?utm_source=github-action)._