All posts

ZeroClaw v0.7.5 — Onboarding Moves to the Browser

|JordanTheJetCEO, ZeroClaw Labs

v0.7.5 is a substantial follow-on to v0.7.4 — about 71 commits from 24 contributors — and unlike v0.7.4 it has a clear tentpole: first-run onboarding moves to the browser. The schema-driven /onboard flow walks new users through workspace, providers, channels, memory, hardware, tunnel, and personality without ever opening config.toml. Underneath it, the gateway grew a real per-property config CRUD surface, a personality editor that works from CLI, TUI, or the web, and live drift detection that catches hand-edits to config.toml as they happen.

Here's what we think is worth your attention.

Onboarding, in the browser

The new /onboard route renders the entire first-run flow in the browser — Workspace, Providers, Channels, Memory, Hardware, Tunnel, Personality — driven by a schema served from the gateway, not by hand-written forms. Fields are rendered from the property's declared kind, type_hint, and enum_variants; no value-sniffing, no per-property special-casing. Fresh installs auto-redirect from / to /onboard until at least one provider model is configured.

Importantly, the daemon now boots without a configured model — it has to, or you couldn't reach the onboarding flow on a fresh install. Chat dispatch refuses with a structured needs_onboarding marker until a model is set, POST /webhook returns 503 with that marker, and channel handlers (WhatsApp, Linq, WATI, Nextcloud Talk) send a Fluent-localized "agent isn't fully set up yet" reply instead of the generic LLM-error fallback. The supervisor exits cleanly instead of restart-looping.

Config gets a real API surface

Per-property CRUD under /api/config/* — GET, PUT, DELETE, PATCH, OPTIONS — is now the canonical way to read or mutate configuration. The CLI calls into the same Config::set_prop core, so everything you can do in the browser you can do from the terminal, and vice versa.

A few specifics worth calling out:

  • The runtime emits an OpenAPI 3.1 spec at /api/openapi.json, with a Scalar explorer at /api/docs.
  • The dashboard's TypeScript client is generated from that spec via openapi-typescript, wired into npm run build, and tsc fails when the generated shape stops matching consumers.
  • Drift detection compares in-memory state to on-disk config.toml via server-side SHA-256 hashing (secrets never leave the server). If you hand-edit config.toml, the dashboard surfaces a banner with per-row in-memory vs on-disk diffs and a one-click "Restart daemon to apply." A 409 config_changed_externally blocks writes against a drifted path; explicit X-ZeroClaw-Override-Drift: true overrides.
  • PATCH/PUT are validator-gated with snapshot revert on failure. Errors come back as a structured ConfigApiError with stable codes for invalid range, enum variant, format, dangling reference, and required-field-empty.
  • CLI parity: zeroclaw config patch (JSON Patch over the same core), config docs, config schema --path <prop>, set --comment, and --json envelopes on get/set/init/migrate matching the HTTP shapes.

Personality, edited from anywhere

ZeroClaw has had seven runtime markdown files driving its system prompt for a while — SOUL.md, IDENTITY.md, USER.md, AGENTS.md, TOOLS.md, HEARTBEAT.md, MEMORY.md. Editing them used to mean opening a text editor and trusting yourself.

v0.7.5 ships a three-surface editor for those files. CLI uses $EDITOR. TUI suspends and hands off to $EDITOR. The web UI ships a CodeMirror 6 editor (one-dark theme + markdown grammar) with Edit/Preview toggle, per-tab Insert / Replace template buttons, a char counter, and a 409 personality_disk_drift resolution UX (take theirs / keep mine). The backend enforces a 7-file allowlist; BOOTSTRAP.md is intentionally excluded as a first-run scaffold.

ACP cancellation and a tool-approval back-channel

ACP picks up real cancellation in v0.7.5: session/cancel aborts an in-flight turn, and concurrent session/prompt requests are rejected with a clear error instead of racing. Tool approvals now flow over a dedicated WsApprovalChannel on the gateway WebSocket — they don't fight the main message stream anymore. ACP protocol v1 also gained tool-call permission and a back-channel for structured prompts.

Hot model switching with context preserved

Pick a different model from the chat dropdown without losing the conversation. There's a real stop button while a turn is in flight, with chat-input lock and a running indicator next to it. OpenRouter free models are flagged in the default-model dropdown so you don't have to memorize which ones don't bill. tool_call / tool_result rendering defaults to off with a toolbar toggle to opt back in. Open the agent chat directly from a memory row when a session_id is present. Trigger any cron job manually from the web UI. And the theme/session/CSS-token consistency fixes finally unify the visual surface across pages.

Per-provider pricing, finally

ModelProviderConfig now carries pricing per provider profile. Every gateway turn records cost and token usage. Missing pricing logs a single WARN per (provider, model) pair instead of spamming the log on every turn. If you've been running a fleet and trying to do post-hoc cost analysis from logs, this is the release that makes that tractable.

HMAC tool receipts go live

The receipt-signing wiring stripped out of #5168 is now active. With the feature enabled, each tool result carries a verifiable HMAC trail end-to-end. Pair this with the existing receipt audit surfaces and you have a real chain of custody for what tools the agent ran and what they returned.

Installer overhaul

zeroclaw install learns preset and gateway flags, a TTY-driven feature picker, web/dist building, and an onboarding gate. The TTY feature picker writes its prompts to stderr so command substitution doesn't capture them and freeze the terminal — a subtle bug that bit several users. Linux MUSL static binaries are back in the release artifacts. The web dashboard installs to platform-correct data directories on macOS and Windows. The prebuilt path correctly extracts the dashboard again.

Provider quality pass

  • Anthropic: base_url is honored for the default provider.
  • Bedrock: credential_process support enables enterprise-friendly auth flows.
  • Groq: per-profile native_tools override on ModelProviderConfig.
  • StepFun: new stepfun-intl endpoint.
  • xAI: model listing restored.
  • OpenAI-compatible: tool_call extra_content is preserved so Gemini's thoughtSignature survives round-tripping. Model id normalization now has test coverage.

Channels, the long tail

  • Matrix: attachments are uploaded when finalizing partial drafts; device identity is derived from the whoami response when an access token is used directly, and access-token sessions now require an explicit device identity.
  • WhatsApp: fromMe replies are scoped to self-chat or trigger prefixes (no more accidental loops); LID→phone resolution failures are logged so debugging session drops is possible.
  • Discord: inbound image attachments are preserved through the provider pipeline.
  • Jira: API v2 server mode is supported alongside cloud.

Tools and runtime

  • zeroclaw memory reindex CLI for rebuilding the embedding index in place.
  • Tavily search backend for tools/web_search, with bearer-header authentication and encrypted-key support.
  • tool_timeout_secs is honoured for HTTP SSE tool calls and used to derive the HTTP client timeout.
  • allow_scripts is plumbed through ReadSkillTool to the skill loader so declared scripts can actually run.
  • DockerSandbox gains workspace bind-mount support.
  • Conversation memories excluded from build_context recall to keep prior conversation chunks from leaking into recall results, with autosaved conversation memories recalled on subsequent turns instead.
  • reasoning_content captured from streaming responses; image markers stripped from non-vision context-compression payloads; bare-wildcard recall treated as a recent-memory query.
  • The session backend is unified behind one factory across runtime and channels; the daemon canvas store is shared across gateway, channels, and daemon.

Security

  • HMAC tool receipts activated end-to-end (#6214).
  • git -C vs git -c distinction in the security policy — case-preserved argument lists prevent legitimate git -C <dir> invocations from being blocked as -c config overrides.

Docs and i18n

A Raspberry Pi setup guide. Hardware page revisions including a justified Podman memory budget and a fixed macOS cross-compile recipe. Custom OpenAI-compatible provider syntax clarified. YOLO config examples updated. Translations synced for fr, ja, es, with new zh-CN coverage and Chinese WeChat CLI strings.

Thank you

71 commits from 24 contributors. If you've been waiting for a moment where ZeroClaw "feels like a normal app" instead of an exercise in TOML editing, this is that release. The browser onboarding flow and the schema-driven config surface are both excellent on-ramps for new contributors.

Release: https://github.com/zeroclaw-labs/zeroclaw/releases/tag/v0.7.5

Full diff: git log v0.7.4..v0.7.5 --oneline

Zero overhead. Zero compromise. 100% Rust.

— JordanTheJet

CEO, ZeroClaw Labs

JordanTheJet · CEO, ZeroClaw Labs

Back to home