Skip to content

ClawBox v3.9.0 β€” Hermes edition + self-healing factory reset

Choose a tag to compare

@KrasimirKralev KrasimirKralev released this 21 Aug 16:23
· 2589 commits to main since this release
01f3df7

Highlights

  • Hermes edition β€” a single-harness SKU locked at install time (openclaw | hermes | dual), with the Hermes dashboard, auth proxy, skills, shared identity and browser integration. Editions cannot be switched in software.
  • Self-healing factory reset (Hermes) β€” a reset no longer removes the Hermes agent or the offline model; the installer repairs a broken agent reversibly and the in-app Update runs the repair. A box already broken by an earlier reset heals with one command: sudo bash ~/clawbox/install.sh.
  • Local model hardening β€” Gemma 4 reasoning-effort handling, on-demand llama.cpp start, model-switch fixes.
  • Security and robustness round β€” edition-aware updater, preference and data-guard coverage, OAuth hand-off lifecycle, input bounds and redirect policy, foreign-edition teardown, CodeQL clean-ups.

Full list of changes below.

What's Changed

  • Harden gateway recovery after updates by @yalexx in #263
  • fix(3.1.10): heal legacy openai/ configs on startup (OAuth 401 Missing bearer) by @yalexx in #266
  • fix(3.1.10): responsive chat header pills (wrap instead of overlap on narrow chat) by @yalexx in #267
  • 3.1.10 follow-ups: chat open animation, mascot polish, uniform reasoning picker, smooth provider-switch bar, gpt-5.6-sol in codex picker by @yalexx in #269
  • Point all references at clawbox.com + strengthen README entity/SEO by @yalexx in #270
  • fix(gateway): 3.1.11 β€” updates & boot never brick the box by @yalexx in #271
  • fix(mascot): stop crab teleporting to the left corner on tap by @yalexx in #268
  • chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #239
  • chore(deps): bump actions/cache from 4 to 6 by @dependabot[bot] in #240
  • chore(deps): bump docker/setup-qemu-action from 3 to 4 by @dependabot[bot] in #241
  • docs: point 'Get ClawBox'/store links to clawbox.com by @yalexx in #258
  • fix(mascot): stop phrase-regen from swap-spiraling memory-pressured boxes by @yalexx in #256
  • Add gateway recovery test coverage by @yalexx in #265
  • chore(release): bump version to 3.1.11 by @yalexx in #274
  • fix(codex,gemma): unblock GPT-5.6 on ChatGPT auth and stop Gemma provisioning from hanging by @yalexx in #275
  • fix(codex): default ChatGPT auth to gpt-5.5, not gpt-5.4 by @yalexx in #276
  • docs: correct hardware specs on beta by @yalexx in #277
  • fix(codex): stop mirroring the rotating refresh token into every codex-home by @yalexx in #278
  • fix(codex): restore the credential #278 broke, and migrate legacy auth profiles by @yalexx in #279
  • fix(codex): route codex turns through the app-server harness so they work by @yalexx in #280
  • fix(vnc): harden setup API calls against expired-auth redirects (#231) by @KrasimirKralev in #303
  • fix(update): add 'Force full update' recovery action for force-update.sh (#285) by @KrasimirKralev in #305
  • chore(dependabot): security-first posture β€” ignore majors, keep grouped patch/minor by @KrasimirKralev in #299
  • fix(gateway): preserve canonical token SecretRefs (#249) by @KrasimirKralev in #306
  • fix(gateway): bound permanent startup failures (#284) by @KrasimirKralev in #308
  • feat(gateway): support configurable trusted control-UI origins (#232) by @KrasimirKralev in #313
  • OpenRouter: stop rejecting every free model id by @yalexx in #283
  • The docs only knew about one of our two editions by @yalexx in #300
  • Correct Wi-Fi spec and local-model performance in hardware docs by @yalexx in #273
  • fix(auth): return JSON 401 for all expired /setup-api/* requests (closes #304) by @KrasimirKralev in #316
  • refactor: shared useReconnect hook for the reconnect overlays (closes #191) by @KrasimirKralev in #317
  • fix(e2e): warm Turbopack before the suite (partially addresses #114) by @KrasimirKralev in #318
  • fix(e2e): run the suite against a production build by @KrasimirKralev in #319
  • fix(deps): patch runtime security advisories (next, undici, ws, postcss, nanoid, sharp) by @KrasimirKralev in #315
  • test(e2e): re-enable mascot-context, scope desktop-selection (toward #114) by @KrasimirKralev in #320
  • release: promote beta to main (runtime CVE refresh + auth/reconnect/e2e fixes) by @KrasimirKralev in #321
  • fix(deps): patch vitest (critical) + vite dev-tooling advisories by @KrasimirKralev in #324
  • ci: add CodeQL static analysis (JS/TS) by @KrasimirKralev in #322
  • test(e2e): re-enable desktop-selection (last #114 spec) by @KrasimirKralev in #325
  • Stop advertising tunnel hostnames that no longer exist by @yalexx in #326
  • ci(codeql): also scan PRs targeting beta by @KrasimirKralev in #327
  • security: scope the package-manager sudo grant to exact commands by @KrasimirKralev in #335
  • security: tighten Files API path containment by @KrasimirKralev in #334
  • security: keep provider OAuth tokens off the browser (server-side handoff) by @KrasimirKralev in #338
  • security: pin the browser debug-interface allowed origin by @KrasimirKralev in #337
  • security: harden the pre-authentication request surface by @KrasimirKralev in #333
  • test: de-flake updater legacy-quarantine test by @KrasimirKralev in #332
  • security: authentication & session hardening by @KrasimirKralev in #336
  • feat(hermes): dual-harness β€” run the ClawBox agent on OpenClaw or Hermes by @KrasimirKralev in #329
  • fix(security): harden local WS/proxy auth, secret file modes, and agent egress by @KrasimirKralev in #331
  • perf(anim): reduced-motion support + drop per-frame filter repaints + mascot/ProgressBar fixes by @KrasimirKralev in #330
  • chore(ci): move CodeQL to a config file; ignore only test code by @KrasimirKralev in #339
  • security: guard prototype-chain keys in app-settings writer by @KrasimirKralev in #340
  • chore(deps): sync package-lock.json to the patched tree (next 16.2.11) by @KrasimirKralev in #341
  • fix(hermes): harness switch fails on identity-sync (invalid hermes command + CRLF) by @KrasimirKralev in #342
  • fix(vnc): clipboard bridge β€” install xclip, graceful fallback, empty-clipboard detection by @KrasimirKralev in #343
  • fix(files): stream downloads, guard fs errors, RFC5987 filename, guard client json() by @KrasimirKralev in #344
  • fix(system): hardening for power, stats, vnc/terminal spawns, clipboard by @KrasimirKralev in #345
  • fix(local-ai,clawkeep): robust ollama pull/delete, ClawKeep status mapping by @KrasimirKralev in #346
  • fix(wizard,config): robust setup wizard, telegram/browser/clawai config paths by @KrasimirKralev in #347
  • fix(harness): retry liveness probe to avoid false 'not available' by @KrasimirKralev in #348
  • fix(harness): only bounce OpenClaw gateway when it's the switch target by @KrasimirKralev in #349
  • fix(setup-auth): gate portal tunnel-control pre-setup + own-property provider guards by @KrasimirKralev in #350
  • fix(clawkeep): scheduled backups run a real backup + correct multibyte output decoding by @KrasimirKralev in #351
  • fix(mcp): cap shell output, close IPv4-mapped IPv6 SSRF bypass, guard secret paths by @KrasimirKralev in #352
  • fix(browser): re-validate redirects + close IPv4-mapped IPv6 SSRF-guard bypass by @KrasimirKralev in #353
  • fix(wifi): redact WiFi PSK from errors/logs + escaping-aware scan parse by @KrasimirKralev in #354
  • fix(config): constrain language into persona files + bound kv writes + reject reserved keys by @KrasimirKralev in #355
  • fix(system): preserve hotspot key, gate reset before cutting connectivity, fail-closed auth-profiles read by @KrasimirKralev in #356
  • fix(updater,gateway): reject flag-like branch, escape token in inline script, scope asset rewrite by @KrasimirKralev in #357
  • fix(agent-webapps): harden code-projects + tighten built-webapp iframe sandbox by @KrasimirKralev in #358
  • fix(apps): gate apps/settings pre-setup, timeout icon fetch, reject flag-like appId, align icon path by @KrasimirKralev in #359
  • fix(oauth): keep auth-code tokens off the browser via server-side handoff by @KrasimirKralev in #360
  • feat: Hermes single-harness edition + premium dual, with dashboard SSO by @KrasimirKralev in #361
  • fix: make the setup wizard edition-aware where it still assumed the OpenClaw gateway by @KrasimirKralev in #362
  • fix: skills browse first-run state and chat provider list refresh by @KrasimirKralev in #363
  • fix: hermes edition handling for status, configure, catalog and clawkeep by @KrasimirKralev in #364
  • docs: hermes edition documentation by @KrasimirKralev in #366
  • fix: start the on-device model on demand and stop implying it is active by @KrasimirKralev in #367
  • test: fix the three E2E Install failures by @KrasimirKralev in #365
  • fix: make the in-app updater edition-aware by @KrasimirKralev in #370
  • fix: stop a chat message from killing its own turn, and give Gemma a thinking switch by @KrasimirKralev in #368
  • fix: pin @novnc/novnc, resync package-lock.json, and switch on the coverage gate by @KrasimirKralev in #369
  • fix: data-guard coverage, interrupted-flow cleanup, log-field bounds by @KrasimirKralev in #372
  • fix: focus trap for the install dialog, upstream timeouts for the hermes dashboard proxy by @KrasimirKralev in #371
  • fix: return tab order from focusableWithin, and stop over-filtering by @KrasimirKralev in #374
  • fix: narrow when the OAuth handoff file is cleared, and check its timestamp by @KrasimirKralev in #373
  • docs: record why three CodeQL refutations hold by @KrasimirKralev in #376
  • docs: record why the data dir needs containment rather than name matching by @KrasimirKralev in #375
  • fix: refuse an unsupported edition transition and make validation honest by @KrasimirKralev in #377
  • fix: validate preference input, bound logged fields, set an explicit redirect policy by @KrasimirKralev in #378
  • fix: route every direct preference write through one checked door by @KrasimirKralev in #379
  • chore: stop the weekly novnc bump and report coverage on a red build by @KrasimirKralev in #380
  • fix: bring the other edition's harness down instead of only reporting it by @KrasimirKralev in #381
  • fix: state the browser integration honestly on the edition that has no switch by @KrasimirKralev in #383
  • release: promote beta to main (3.9.0) by @KrasimirKralev in #384
  • fix: make hermes dashboard-auth failures honest and propagate them by @KrasimirKralev in #386
  • release: promote beta to main (hermes dashboard-auth fix) by @KrasimirKralev in #387
  • docs: reasoning-effort feature + programmatic-config note; swap homepage video by @yalexx in #404
  • fix: factory reset no longer destroys the Hermes agent and offline model (hotfix to main) by @KrasimirKralev in #414

New Contributors

Full Changelog: v3.1.11...v3.9.0