v0.8.1
THU-MAIC/OpenMAICv0.8.1Jun 19, 2026by github-actions[bot]
AI Summary
The first patch release for v0.8.0, stabilizing the runtime and channels with cascading config edits, Discord slash commands, and cached-input pricing.
Key Highlights
- Cascading config edits (delete/rename) that ripple through agents and bundles.
- Discord skill-driven slash commands with typed options and interaction followups.
- Operator Console redesign with schema-driven config editor.
- Cached-input pricing for OpenAI-compatible providers.
- Phase 0 agent eval harness for deterministic replay.
Breaking Changes
- History pruning and compression were removed in favor of a single whole-turn trim.
- Three legacy agent turn engines consolidated onto a single `run_tool_call_loop` path.
New Features
- Type-driven alias-ref pickers and declarative config enums.
- Per-agent delegate roster with cross-profile reach.
- Cached input token pricing surfaces.
- NEAR AI Cloud provider and Azure OpenAI reasoning_effort support.
- Canonical install spec driving generated installers.
Full Release Notes
# ZeroClaw v0.8.1 ZeroClaw v0.8.1 is the first patch release on the v0.8.x line, focused on stabilizing the multi-agent runtime, channels, and provider stack that landed in v0.8.0. It spans 207 commits from 45 contributors since v0.8.0 — heavy on bug fixes (123), with substantial new features (46) including a delete/rename-with-cascade configuration story, Discord slash commands derived from installed skills, an OpenAI-compatible cached-input pricing path, and a Phase 0 agent eval harness. If you upgraded to v0.8.0 and hit rough edges with channel routing, cron delivery, provider replay, or config save round-trips, this is the release that picks those up. ## Highlights - **Cascading config edits**: `delete_with_cascade` and `rename_with_cascade` now ripple through agents, providers, channels, model providers, and skill bundles instead of leaving dangling references (#7837, #7838, #7839, #7830, #7840, #7841, #7842, #7785). - **Discord skill-driven slash commands**: dynamic slash commands generated from installed skills, with typed options, chunked interaction followups, edit/delete/bulk-delete archive sync, and configurable reaction recording (#7490, #7489, #7525, #7526, #7844). - **[Operator Console redesign](https://docs.zeroclawlabs.ai/master/en/gateway/web-dashboard.html)**: the gateway web UI ships a schema-driven config editor, multi-agent chat, read-only skills browser, and a long list of ported fixes (#7665, #6700). - **Cached-input pricing for OpenAI-compatible providers**: cost tracking now captures `cached_input_tokens` for any provider that reports them, including OpenRouter system-prompt caching (#7492, #7634). - **Phase 0 agent eval harness**: deterministic replay-driven evaluation lands as the foundation for the eval story going forward (#7067). - **Workflow hardening for releases and docs**: a canonical install spec drives every generated installer surface (#7558), gh-pages becomes ephemeral with bounded clone size (#7676), and rustdoc is published once and deduped per locale (#7754). ## What's New ### Multi-agent and config - Typed `delete_with_cascade` and `rename_with_cascade` for aliased entries thread through agents, channels, model providers, and skill bundles, with a `find_all_references` / `plan_delete` foundation under the hood (#7785, #7837, #7838, #7839, #7830, #7840, #7841, #7842). - Per-agent delegate roster with cross-profile reach (#7590). - Type-driven alias-ref pickers and self-declaring config enums in the Config menu, plus declarative section grouping (#7556, #7594). - Agent eval harness — Phase 0 with deterministic replay (#7067). ### Channels - **Discord**: dynamic slash commands derived from installed skills, dispatched over the existing Gateway WebSocket, with typed options and chunked interaction followups (#7489, #7490, #7844). Inbound reactions are recorded behind a scope config (#7526). Archive syncs on message edit, delete, and bulk delete (#7525). Gateway intents are derived from config instead of hardcoded (#7524). The internals were split into a module tree behind a structured outgoing payload (#7832), and Discord is now part of the default-channels bundle (#7825). - **Slack**: backfills thread context on first agent encounter (#6428). - **Email**: XOAUTH2 auth, observer mode, and read-only IMAP tools (#7021). - **WhatsApp**: Web media markers are sent natively (#7811). - **Voice pipeline facade** for channels that want to plug into audio I/O (#7394). ### Providers and runtime - Cached input token pricing surfaces for OpenAI-compatible providers (#7492); OpenRouter system prompts are cached (#7634). - NEAR AI Cloud provider added (#6842); Azure OpenAI gains a dedicated `reasoning_effort` wire-up (#7350); `extra_body` is supported on any OpenAI-compatible provider (#7163); custom inference providers can specify `tls_ca_cert_path` (#5797). - Provider Manifest is re-added under the schema v3 provider system (#7791). - MCP auto-reconnects on stale session or dropped stream (#7351). - The three legacy agent turn engines consolidate onto a single `run_tool_call_loop` path (#7540). ### Gateway, web, and CLI - Inbound webhooks route per channel alias (#7367). - Web chat input supports slash commands (#7223). - Agents/providers/channels CRUD lands in the CLI with skill-bundle cascade (#7842). - Gateway: agent owned-state rename/delete cascade and wiring (#7838, #7841). ### zerocode and security - New doctor pane in zerocode (#7802); session controls and provider diagnostics improvements (#7515). - `models list`/`doctor` lists configured models, adds `--check`, and collapses probe rows (#7450). - Agent posture status command (#7321). - Shell tools see the current session id via the `ZEROCLAW_SESSION_ID` environment variable (#7813). ### Skills, plugins, and memory - Background review fork plus the `skill_manage` tool (agentskills.io SKILL.md) (#6667). - Frontmatter tags surface in the skill editor with a slash-command toggle (#7734). - Skill-directory loads are cached, content-validated, and audit-correct (#7786). - Wasmtime dependency and feature flags land for the plugin host (#7429). - Memory hygiene extends to pruning daily and core DB rows (#7081). - Runtime memory ops are instrumented with OTel GenAI spans (#7570). ### Build, install, and docs infrastructure - Canonical install spec + `cargo generate installers` drives `setup.bat`, AUR PKGBUILD, Scoop manifest, `flake.nix`, Dockerfile/Containerfile feature sets, and `dev/ci/docker-tags.toml`, with an Installer Drift CI gate (#7558). - gh-pages becomes ephemeral with bounded clone size (#7676); rustdoc is published once and deduped per locale, with print pages dropped (#7754). - macOS and Windows build legs in CI run as `cargo check` to keep the matrix fast (#7669). ### Improvements (refactor) - Extract duplicate domain/URL validation into shared helpers in `zeroclaw-tools` (#7340). - `before_llm_call` now takes mutable borrows, simplifying provider implementations (#7667). ### Documentation - First-party extension architecture guide for contributors (#7788). - Fluent strings and mdbook translation catalogs refreshed for v0.8.1 (#7939). - Discussions stewardship and issue intake forms for governance (#7654, #7652). - API events stream semantics for the gateway (#7474); ACP wire shape pinned to v1 spec (#7595); MCP tool control boundaries clarified (#7473). - Rootless Debian compose example for the container (#7475); Linux uninstall script in setup docs (#7715); OpenAI Codex over a ChatGPT subscription documented for providers (#7116). - README installer options synced (#7708) and the providers routing link fixed (#7185). ### Performance - Rustdoc published once with per-locale asset dedup (#7754). - WeChat markdown regex compilations cached via `LazyLock` (#7494). - Skill-directory loads cached with content validation (#7786). ## Bug Fixes | Area | Fix | |---|---| | runtime | Route stdout diagnostics through logs (#7934); replay ACP session history in `session/messages` (#7903); credential redaction moved to the rendering layer (#7826); skip response-cache for `[IMAGE:]` multimodal markers (#7779); honor profile tool iteration limits (#7583); forward trimming budgets through the `agent_turn` wrapper (#7780); auto-include discovered MCP tools in `risk_profile.allowed_tools` (#7547); thread shared `CanvasStore` into WS chat and ACP sessions (#7678); resolve runtime profiles for direct turns (#7792); restore native sandbox hardening (#7683); detect no-progress loops across interleaved tool calls (#7681); redact unquoted base64 credentials (#7660); recover poisoned activated-tool lock reads (#7755); keep pruned tool markers out of live context (#7775); condition anti-narration on `show_tool_calls` (#7722); return no heartbeat runs for zero limit (#7721); route native tool narration to stderr (#7773); unify `SopEngine` construction (#7546); honor empty delegate allowed-tools (#7574); expose deferred MCP tools to delegates (#7608); route service commands to named instances (#7579); suppress skill suggestions for installed tools (#7406); clarify peer send targets (#6993); preserve delegate memory namespace (#7465); inherit ACP session cwd into `spawn_subagent` and `delegate` (#7517). | | zerocode | Refresh agent picker on Code/Chat tab re-entry (#7834); enforce RPC-only boundary by dropping `zeroclaw-providers` (#7850); grapheme-cluster cursor movement and backspace (#7765); localize config status messages (#7713); avoid hardcoded `vi` editor fallback (#7476); theme markdown body text (#7482); keep Cmd-C separate from quit on macOS (#7477). | | providers | Normalize Azure OpenAI credentials (#7703); retry email OAuth refresh failures (#7745); stop `reasoning_content` from leaking into response text (#7725); preserve structured Bedrock tool results (#7712); redact reliable error endpoints consistently (#7682); preserve compatible reasoning field name on multi-turn replay (#7423); cache OpenRouter system prompts (#7634); fail loudly for unusable fallback providers (#7419); resolve Gemini OAuth project from object and current-project shapes (#7560); remove dead pre-normalization image trim (#7782); honor configured OpenAI `timeout_secs` (#7504); trace native tool delivery decisions (#7933). | | channels | Dedupe QQ voice redeliveries (#7648); add per-channel `ack_reactions` override for Lark/Feishu (#7495); make Slack `bot_token` optional and resolve from env (#7726); persist Matrix thread history after first reply (#7705); require IRC mention boundaries (#7710); add clear-session command (#7671); Telegram base URL validation (#7697); stabilize missing email message ids (#7767); make Slack empty-peer-set rejections self-diagnose (#7567); skip reply-intent classifier on direct messages (#7564); WhatsApp as a cron delivery channel (#7562); select WhatsApp Web backend from personal/pairing config (#7565); WhatsApp Web forward quoted media attachments (#7536); telegram delivery prompt no longer discourages tool use (#7438); route cron email delivery through the no-registry fallback (#7561); AMQP `health_check` actually probes the broker (#7596); render web integration category labels (#7662); persist Discord slash reconcile state and read shared stores from `data_dir` (#7784); inject Lark/Feishu cron delivery defaults from chat context (#7448); render web agent's own model on agent chat page (#7381). | | acp | Surface history-pruner and turn-cancel as visible events (#7684). | | gateway | Suggest available port on bind conflict (#7801); surface pairing-code recovery when already paired on an alternate port (#7798); fail fast on free-form `ask_user` for the WS approval channel (#7551); route chat workspaces per agent (#7573); point paircode recovery hint at loopback for non-loopback binds (#7207). | | config | Align serde defaults with struct `Default` to prevent save round-trip loss (#7532); expose global channel settings in dashboard (#7651); trim legacy typed scalar strings (#7714); gate test-only `EnvValueGuard` on `cfg(unix)` (#7777); warn on extra-nested provider alias tables (#7580); redact bearer tokens in file-transfer header maps (#7566). | | memory | Drop postgres client on OS thread to avoid nested runtime panic (#7668); include recall windows in retrieval cache key (#7656); disable hot response cache at zero capacity (#7704); `purge_agent` resolves alias→id before deleting (#7781). | | tools | Reject binary/image files in default `file_read` (#7522); fix Claude Code execution on Windows (#7214); reject excessive round precision (#7716); default zero-minute polls (#7707); encode weather location path input (#7717); localize file download tool strings (#7480). | | skills | Parse skill review summary from tool history (#7730); distinct error when `skill_manage` patch is disabled (#6684); sanitize skill tool names to satisfy provider name regex (#7399); respect `timeout_secs` from `SKILL.toml` (#7552); update background review loop call (#7653). | | cron | Honor `session_target=main` with stable session path (#7731); correct weekday range normalization for Sunday-alias endpoints (#7208). | | i18n | Auto-detect system locale when none is configured (#7760); route remaining CLI status output through Fluent (#7499); localize remaining CLI quickstart strings (#7650) and provider selector prompts. | | install | Detect musl libc for Linux target triple (#7614); install web dashboard on source installs (#7554); validate agent/provider aliases at input time (#7609); bail with a clear error on non-TTY stdin (#7513). | | update | Accept `.zip` release assets on Windows targets (#7530); use `.tar.gz` for Windows assets in gnu-vs-android test (#7528). | | security | Create per-agent workspace dir in `for_agent`, plus Android shell support (#7284). | | docker | Include `zerocode` binary in release Docker images (#7789); add `g++` to web build layer for cc-rs C++ detection (#7534); add `vim-tiny` to runtime images for editor support (#7503). | | doctor | Surface `Config::collect_warnings` in diagnostics (#7727); ensure workspace doctor checks support multi-agents (#7544). | | daemon | Allow any configured channel as `heartbeat.target` (#7680). | | agent | Emit pending `tool_call` at dispatch so live cards render (#7778). | | sop | Wire audit logger into registered SOP tools (#7593). | | plugins | Align install/discovery paths and add legacy migration (#7549). | | whatsapp | `whatsapp_storage` returns `HashState::default()` when no app-state version row exists (#7806). | | cli | Preserve UTF-8 erase handling (#7672); flag configured channels missing from the binary (#7848). | | ci | Centralize Node.js version to `.nvmrc` with LTS 24 (#7550); narrow Kilo provider path label (#7812); unbreak master quality gate (#7696); cover Windows path and shell portability in tests (#7906). | | web | Force `js-yaml >=4.2.0` to patch merge-key DoS (#7761); correct chat model switcher resolution and switch timeout (#7191). | | docs | Clear rustdoc warnings surfaced by mdbook build (#7751); add `.nojekyll` so Pages serves `_shared/` chrome (#7568). | | web/integrations | Tighten Nextcloud Talk draft updates (#7572). | ## Breaking Changes - **`feat(providers)!`: span attribution — model provider calls now route through the attribution dispatcher** (#7748). The dispatcher centralizes per-provider span attribution and is the only sanctioned path for model provider calls; downstream consumers of the provider call API may need to update if they were bypassing it. ## Contributors @77382104 @alanpjohn @alexandme @Alix-007 @andybab @Audacity88 @bheatwole @chengzhichao-xydt @ConYel @crh-code @danielO99 @dvgamerr @dwc1997 @fanchanghu @IftekharUddin @ilteoood @itripn @JieZeng1993 @jokemanfire @JordanTheJet @jstar0 @metalmon @mn13 @mov-xound-glitch @Nillth @NiuBlibing @perlowja @Pick-cat @PierreLeGuen @rareba @rezigned @rifuki @RyanHoldren @sbenedetto @SebConejo @sentinel-nnet @silas-qiao @singlerider @theonlyhennygod @tidux @tmigone @tw-360vier @whiteyzy @xianshishan @Yyukan --- **Full diff:** [`v0.8.0...v0.8.1`](https://github.com/zeroclaw-labs/zeroclaw/compare/v0.8.0...v0.8.1)