## zeroclaw-labs/zeroclaw — v0.8.0-beta-2…v0.8.0

_212+ commits._

### Features
- **feat(config): per-field editing for [[mcp.servers]] via #[natural_key] (#7267)** (d06ed25)
- **feat(observability): add turn metadata to observer events and correlate OTel spans by turn_id (#7385)** (e034794)
- **feat(web): add ACP console (#7036)** (6b96dbe)
- **feat(plugins): add office-tools WASM plugin for Office document extraction (#7454)** (a3ea526)
- **feat(tools): add http_request auth secrets (#7354)** (d064ac3)
- **feat(memory): migrate gateway and channel consolidation to MemoryStrategy (#7234)** (1e1b2da)
- **feat(channels/hardware/demo): add host Telegram ESP32 simulator harness (#7363)** (41197d4)
- **feat(providers): add Kilo AI Gateway as first-class model provider with pricing capture** (699d576)
- **feat(channels/lark): Feishu integration hardening** (2e7ede5)
- **feat(gateway): opt-in remote /admin/reload via gateway.allow_remote_admin** (7a922ab)
- **feat(channels): configure in-flight message budget** (de48f03)
- **feat(zerocode): hold back context-window usage bar until it bakes (#7362)** (a961489)
- **feat(channels/sop): AMQP inbound channel with mutual TLS, and drive deterministic SOP runs to completion (#7369)** (9fa6255)
- **feat(wasi): define WIT interface files for Tool, Channel, and Memory plugins (FND-001 §5.2) (#7060)** (29a53ff)
- **feat(plugins): add languagetool grammar/style plugin (#7326)** (f61f84d)
- **feat(plugins): add sd-webui self-hosted image-gen plugin (#7325)** (896f12d)
- **feat(providers): add 7 OpenAI-compatible providers under schema v3 (#7260)** (48a7471)
- **feat(channel:twitch): add Twitch chat channel (schema v3) (#7275)** (4e80b1e)
- **feat(zerocode): theme enhancements — color-depth fallback, registry-generated presets, per-agent overrides, palette swatches (#7249)** (95358b1)
- **feat(zerocode): outbound message queue with sidebar and injection (#7190)** (f7217b5)
- **feat(zerocode): /model and /model-provider picker with live switching (#7209)** (2b892b9)
- **feat(providers): per-alias model-provider fallback on failure (#7178)** (ff97dd0)
- **feat(zerocode): UX improvements and zeroclaw Config tab split-pane parity with zerocode (#7298)** (890c0ee)
- **feat(channels): per-recipient reply pacing across 9 channels (#6389)** (ad694e6)
- **feat(zerocode): cwd branch/hash line, first-message recovery row, session hash (#7159)** (9e6bc7b)
- **feat(gateway): per-request agent dispatch for POST /webhook via ?agent= (#7297)** (51b2f0a)
- **feat(hardware): add esp32_sim example (simulator binary + web frontend) (#7048)** (ed25137)

### Fixes
- **fix(ci): install cross g++ for ARM glibc release builds (#7520)** (5fc9d3c)
- **fix(config): persist [[mcp.servers]] per-field edits via natural-key dirty-path walker (#7519)** (2e265d3)
- **fix(tools/calculator): reject factorial inputs above the u128-safe max (#7206)** (395f449)
- **fix(quickstart): pre-seed --api-key under snake_case api_key (#7510)** (689abc0)
- **fix(docs): polish localized docs chrome (#7502)** (e901777)
- **fix(agent): remove dead context_aware_tools config field (#7427)** (f413cac)
- **fix(quickstart): add missing -a flag to agent command in success message (#7508)** (941d027)
- **fix(channels): make truncation UTF-8 safe (#7455)** (02d2a10)
- **fix(runtime): use agent_workspace_dir for load_skills_for_agent calls (#7463)** (5fd0f1d)
- **fix(config): restore 1Password op secret refs (#7085)** (f3c8c77)
- **fix(channel): restore WhatsApp interrupt_on_new_message (#7040)** (67acda2)
- **fix(zerocode): stabilize Quickstart agent creation flow (#7380)** (da9c504)
- **fix(gateway): honor disabled agent memory in websocket chat (#7459)** (934be17)
- **fix(mcp): make configured servers usable by default (#7464)** (96ac629)
- **fix(runtime): strip think blocks before native tool-call output (#7254)** (3932ed8)
- **fix(runtime): apply runtime profiles to delegate sub-loops (#7307)** (2b972c5)
- **fix(runtime): refresh active sessions after provider config edits (#7433)** (8132617)
- **fix(runtime): apply MCP policy to MCP registration (#7456)** (64f0e22)
- **fix(gateway): return JSON for unknown API fallback (#7457)** (5fc58b2)
- **fix(config): fail loud on unknown provider families and correct stale section paths (#7488)** (875c536)
- **fix(config): salvage valid provider aliases instead of dropping all of [providers] (#7491)** (d94c164)
- **fix(config): match config-list prefix on segment boundaries, not string prefix (#7471)** (1df173e)
- **fix(providers): honor wire_api = "responses" for OpenCode Zen (#7418)** (7f33b44)
- **fix(runtime): make parallel SubAgents and Delegates return reliably (#7442)** (a057fbe)
- **fix(channels/telegram): restore forward origin attribution (#7251)** (feb5776)
- **fix(zerocode): clarify locale download flow (#7478)** (52870cb)
- **fix(web): trim whitespace-only assistant content to prevent blank lines (#6702) (#7449)** (5a0d4f2)
- **fix(zerocode): repair Quickstart model-provider form UX defects (#7330)** (3c3d7e9)
- **fix(web): make ReloadBanner dismissable (#7247)** (ceeef80)
- **fix(zerocode): dashboard distinguishes loading, error, and live/persisted states (#7444)** (faf05b2)
- **fix(ci): restore master compile after merge batch (#7466)** (9d72e5c)
- **fix(web): log cron settings failures (#7352)** (4b42046)
- **perf(runtime): avoid final CLI output clones (#7353)** (27ffce8)
- **fix(docs): guard mdbook catalogs against literal corruption (#7375)** (e82f3ec)
- **fix(multimodal): make image_info images reach vision models end-to-end (#7446)** (e957a41)
- **fix(gateway): survive transient accept() errors instead of crashing (#7042) (#7402)** (fb30bff)
- **fix(gateway): attribute WS turn telemetry and cost to the agent's model (#7382)** (a6898df)
- **fix(channels): drop truncated tool-call envelopes at delivery, keep the reply (#7370)** (c34f529)
- **fix(config): warn on unknown security.otp.gated_actions entries (#7368)** (ad3886e)
- **fix(gateway): cap memory api response content** (defca8f)
- **fix(gateway): align webhook model labels with resolved agent config** (c2f25c8)
- **fix(channels/whatsapp-web): pass LID JIDs unchanged to whatsapp-rust 0.6+** (206ac23)
- **fix(auth): export auth module for library consumers** (a9d1729)
- **fix(providers): default custom endpoints to prompt-guided tools** (a9a9fd8)
- **fix(mcp): surface tool-execution errors (result.isError) instead of swallowing them** (bfef8f0)
- **fix(channels/discord): ignore system messages so the bot stops replying to thread creation** (fb072a0)
- **fix(memory): bind postgres schema version as int4** (152d339)
- **fix(channels): avoid unused PacedChannel import** (423a8e3)
- **fix(matrix): strip self-anchored event_id from interruption_scope_id (#6958)** (0077daf)
- **fix(docker): resolve workspace build failures from apps/zerocode and embedded assets** (1b688fc)
- **fix(ci): tests directory is now required and cannot be ignored** (50debcd)
- **fix(memory): warn when rerank_enabled is set but unimplemented (#6722)** (7b3c49d)
- **fix(cron): skip overdue jobs on startup when catch_up_on_startup is disabled (#7250)** (3bcb54e)
- **fix(cron): expose DingTalk in cron delivery schemas (#7091)** (2d68a57)
- **fix(ci): complete runtime tool sub-label mappings (#7435)** (e5f3deb)
- **fix(gateway): isolate test data_dir and harden DeviceRegistry SQLite pragmas (#7079)** (35eebd1)
- **fix(tools): fail loudly when file_write targets an ephemeral workspace (#7129)** (8015607)
- **fix(runtime): resolve channel pricing via bare-type fallback in cost lookup** (5eb5eba)
- **fix(ci): add missing file and shell tool labeler paths (#7383)** (e2e3d4e)
- **fix(runtime): require configured model switch profiles (#7407)** (d958a9b)
- **fix(channels): keep runtime reload defaults context-scoped (#6905)** (09d2350)
- **fix(channels): prevent Matrix /sync from timing out at exactly 30 seconds (#7404)** (c2e5322)
- **fix(channels): strip XML tool_result blocks from channel responses (#5796)** (0db74c8)
- **fix(matrix): isolate session state per channel alias and repair key backup with the configured key (#7388)** (d232951)
- **fix(runtime): guard trim_history against orphan-cascade emptying all messages (#7403)** (42f6dee)
- **fix(telegram): preserve markdown fences when splitting messages (#6701)** (4b16d70)
- **fix(channels): normalize webp images for vision (#7135)** (448784e)
- **fix(docs): clean up docs build warning noise (#7276)** (15320e0)
- **fix(channels): scope channel runtime context to the agent workspace (#7121)** (bc8f3c2)
- **fix(providers): omit temperature on the wire when unset in compatible provider (#7171)** (6d31b77)
- **fix(config): unbounded/yolo presets must allow what they advertise (#7371)** (041ff36)
- **fix(zerocode): restore mid-turn input so the outbound message queue works (#7366)** (f15b6b2)
- **fix(config): stamp schema_version on incremental saves (#7274)** (56def6e)
- **fix(cli): print model names in 'zeroclaw models list' output (#7346)** (526b328)
- **fix(tool): use codex exec subcommand instead of removed -q flag (#5361)** (e3759c8)
- **fix(zerocode): size quickstart modals by wrapped row height (#7360)** (8a8357a)
- **fix(channels): update image history fixture context field (#7357)** (19aa23e)
- **fix(bedrock): skip prompt caching for models that don't support it (#7315)** (6bd28d3)
- **fix(channels): avoid persisting inline vision payloads in history (#7268)** (b0c6ab8)
- **fix(channels): trim old tool context at the correct boundary (#7238)** (4f85975)
- **fix(ci): skip advisory issue creation when disabled (#7300)** (7aa5eb8)
- **fix(nix): allow shared users when createUser is false (#7306)** (272f5eb)
- **fix(zerocode): graceful in-loop daemon reconnect and recovery (#7158)** (a486993)
- **fix(zerocode): unify navigation conventions and fix dead keybindings (#7118)** (c86bf92)
- **fix(gateway): invalidate bearer token on device rotate/delete (#6988)** (fe4537c)
- **fix(providers): honour wire_api = "responses" for custom and openai-compatible families (#7180)** (fad8f44)
- **fix(rpc): force memory-tool exclusion for ACP sessions server-side (#7177)** (2f0fd4a)
- **fix(config): avoid char-boundary panic in attached short-option parsing (#7154)** (9c6f34f)
- **fix(zerocode): use the terminal's native cursor so the input cursor cannot vanish (#7237)** (6d8af8b)
- **fix(config): resilient daemon config load with security-critical gating (#7160)** (bcfabfc)
- **fix(docs): keep _shared chrome master-owned and retrofit version selector (#7124)** (587cb1d)
- **fix(shell): prevent interactive subprocesses from hijacking the terminal (#7120)** (96db39f)
- **fix(channels): excise default-model-provider credential fallback (#7066)** (787babe)
- **fix(channels/telegram): clamp zero draft update interval (#7334)** (8179a16)
- **fix(policy): stop path guard false-positives on heredoc bodies and non-path tildes (#7281)** (b47a66f)
- **fix(runtime): tombstone killed ACP sessions (#7258)** (0f9442f)
- **fix(config): redact nested object-array secrets (#7261)** (458220f)
- **fix(gateway): clear backend history on "Clear all" + don't resurrect deleted session (#7222)** (7048200)

### Backend
- **revert(ci): remove cross-platform clippy lint gate (#7458)** (9b81e49)

### Tests
- **test(tools): cover MCP stdio registry drop cleanup (#7392)** (0a3ec7b)
- **test(config): guard runtime_profiles.max_tool_iterations precedence (#6877) (#7401)** (2603af7)
- **test(channels/telegram): make empty document send test local-only (#7264)** (ab6e8d7)

### Docs
- **docs(i18n): sync translation catalogs after the book rework (#7472)** (16f97dc)
- **docs(web): pin Node version with nvmrc (#7479)** (502f897)
- **docs(readme): use stable Discord vanity invite (#7096)** (3b6664f)
- **docs(book): rework the book and derive provider/config surfaces from source (#7365)** (e5ea3bd)
- **docs(github): expand bug report component choices (#7374)** (e3f3482)
- **docs(maintainers): define tracker stale exemptions (#7405)** (218a629)
- **docs(readme): update project banner (#7396)** (24662b5)
- **docs(providers): correct Codex-subscription credential source in catalog (#7127)** (bf20fd4)
- **docs: define issue ownership path (#7011)** (6d73991)
- **docs(review): clarify merge-ready milestone fallback (#7255)** (eac9876)

### Chore
- **chore(release): release v0.8.0 (#7364)** (a55f756)
- **ci(actions): summarize Rust cache diagnostics (#7496)** (4205bcf)
- **ci(quality-gate): run on merge_group to support merge queue (#7487)** (484e116)
- **refactor(runtime): replace daemon subsystem callbacks with registry (#7430)** (b0d12ee)
- **chore(zerocode): drop macOS default-theme override, use icy_blue everywhere (#7372)** (2a27968)
- **ci(docker): add no-push PR image smoke** (b0b6fbe)
- **ci(lint): run clippy on every build-target OS and fix the platform-gated code it surfaces (#7428)** (bab4da8)
- **ci(actions): warm Rust caches from master (#7355)** (af50475)
- **refactor(api): move HookHandler trait and HookResult to zeroclaw-api (#7411)** (9ad397b)
- **build(container): StageX container pipeline with musl static linking (#7176)** (58202f3)
- **refactor(channels/email): share allowlist matching via crate::allowlist (email + gmail_push) (#7018)** (e588d4a)

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