OpenClaw 323 Emergency Fix Peter Forgot Console Files Massive Crash

Peter Steinberger, the creator of OpenClaw, released version 3.22 yesterday and forgot to include one resource bundle in the package. The web console went completely blank. Six plugins stopped working at the same time. The error messages even pointed users in the wrong direction. Less than 24 hours later, the team pushed out version 3.23 with a hotfix. They also added a safety net to the CI pipeline so this exact mistake can never slip through again.

Peter Steinberger, known as the father of OpenClaw, missed one critical step in the release process when he shipped OpenClaw 3.22 yesterday. He forgot to bundle the Web console UI resources into the package.

As soon as the update went live, users who installed it opened their dashboards and found the console page would not load at all. That core interface where you normally manage your AI agents, configure channels, and check system status had simply vanished.

After we published our article covering OpenClaw 3.22 yesterday, a flood of readers left comments reporting the exact same problem.

Peter himself posted on X to own up to the mistake and announced the emergency fix plan.

Today, OpenClaw 3.23 went live as an emergency patch.

How Bad Was This Bug

The root cause was almost embarrassingly simple.

The Web console, called ClawControl, has its UI resources packaged separately and attached to the npm release artifact.

During the release workflow, there is a step that bundles all those static assets together. Peter skipped that step when he pushed the build last night.

So the npm package simply had no console files inside it. When users installed the update and their browser tried to open the console URL, it hit a blank white screen.

What the normal console login page should look like.

In the official 3.23 release notes, one line stands out. It confirms that the published npm package now includes the bundled plugins and Control UI resources that were present in earlier versions. More importantly, the release check now fails the build outright if any of those required artifacts are missing.

That last sentence is the key takeaway. From now on, if anything like this gets forgotten again, the CI system will catch it before it ever reaches users.

But the console was not the only thing broken in 3.22.

WhatsApp, ACPX, and several other plugins also quietly failed for the same reason. They had been moved into the optional bundled plugins list, but the npm release workflow was missing the right environment variable, so those plugin files never made it into the package either.

Users noticed the missing features right away. The error logs showed a confusing stale config entry message that sent people hunting in the wrong place. The real cause was missing files, but the error made it look like a configuration problem.

Another side effect was that gateway detection stopped working. The system could no longer tell whether a gateway was online or offline.

What Else Got Fixed in 3.23

The console crash was the headline, but the 3.23 patch list includes plenty of other fixes that affect daily use.

Message routing for Discord and Slack now works correctly again. File and image attachments are no longer dropped silently.

The built-in media path handling was also fixed. Previously, some media URLs were being stripped out by mistake.

Chrome MCP mode got a critical fix. Before this patch, when OpenClaw connected to an existing Chrome tab, it would try to reuse a closed session. If the actual page had not finished loading yet, the file picker would trigger a macOS permission confirmation dialog at the wrong time.

Now it waits for the page to fully load before acting.

Headless Linux environments also saw a fix. A previous change was sending log events directly to the main thread, which caused crashes in headless mode. The 3.23 patch restores the old behavior.

ClawHub login status on macOS got a complete overhaul.

Previously, when macOS users opened Skills, the system showed them as not logged in even when they were. The new build now correctly reads the auth token from macOS Application Support paths and also checks XDG paths, so the login state finally sticks.

The model routing fix is also worth mentioning.

OpenRouter and Auto routing previously failed to refresh cached data when no recursive update was triggered. The result was stale pricing info and empty model lists. The new version forces a refresh and fills the cache properly.

Mistral token limits were another pain point. The default token value was set too high and conflicted with Mistral’s own limits, causing 422 errors on every request. The new build lowers the default and auto-adjusts the setting.

Agent settings got a cleanup too. Previously, when an Agent started up, it could not tell which provider the user actually wanted. It would fall back to a default that might not match the user’s real choice. Now it reads the current runtime snapshot and uses the correct provider every time.

clothing remover ai

Security was not left out either.

Canvas routes now require proper authentication. Agent session reset endpoints now check for admin privileges. Anonymous canvas access and non-admin reset requests are now blocked with a clean reject response instead of failing silently.

ai porn free

Peter also mentioned on X that the team is working on adding automated end-to-end tests on the release side to catch packaging issues before they reach users.

After a console crash this bad, that cannot come soon enough.

ai porn video generator

Full Release Notes

Fixes

Console / Chrome MCP. Fixed a race condition when connecting to an existing Chrome tab. The session now waits for the page to fully load before acting, preventing premature file picker triggers and macOS permission dialogs.

Console / CDP. Fixed a crash that could happen during shutdown or restart on headless Linux environments. Also fixed a regression that broke gateway detection.

ClawHub / macOS Auth. Now correctly reads auth tokens from macOS keychains and XDG auth paths for ClawHub credentials. Uses cached tokens when available instead of defaulting to unauthenticated mode.

ClawHub / macOS. Reads ClawHub login info from macOS Application Support paths. Also checks XDG settings on macOS, so the system uses the correct default XDG config and preserves existing login state.

ClawHub / Skills. As a fallback, correctly reads the ClawHub auth token to avoid switching all sessions to guest mode. Also fixes a 429 error when ClawControl checked unauthenticated status.

Messaging / Message Routing. Discord and Slack message routing now works as an optional manual toggle. Fixes schema validation failures for file and image attachments. Supports enable, disable, and retry actions.

Routing / Model Routing. Fixes a bug where OpenRouter auto routing failed to refresh data when no recursive update was triggered. Now forces a refresh and rebuilds the cache with proper pricing data.

Mistral / Model. Lowers the default token value for Mistral to stay within the safe prediction range. Auto-adjusts the setting so old configs without Mistral limits do not trigger 422 rejections on newer model versions.

Agent / web_search. Uses the current runtime snapshot to provide the correct provider, instead of falling back to an outdated default. Ensures every Agent call uses the provider the user actually selected.

Model / OpenAI Codex OAuth. Fixes a bug where the stored credential refresh path was initialized before the required HTTP or HTTPS agent was ready. Local Codex OAuth flows that need custom agents can now refresh successfully instead of failing for headless users.

Model / OpenAI Codex OAuth Refresh / MiniMax OAuth. Ensures that OAuth preflight and validation checks fire only after the required HTTP or HTTPS agent is ready. Fixes initialization issues that broke login flows for MiniMax and OpenAI Codex.

Plugin / memory-lancedb. Fixes a crash on first use when the bundled npm install did not include LanceDB. The init process now falls back to a safe state and uses the full npm install path to load LanceDB into the OpenClaw runtime.

Plugin / Unknown IDs. Treats unknown node IDs as missing instead of errors. Prevents crashes when local node IDs are missing by letting the system recover gracefully.

Doctor / WhatsApp. Stops auto-reply from using Doctor video IDs to chase . Uses to fix video timestamp writes and prevents invalid schema errors in target projects.

Telegram / Auto Reply. Fixes message ordering in busy conversations. Under high load, messages in the same conversation are now processed in the correct sequence instead of being sent out of order.

Telegram / Message Routing. Adds as the fallback for images and GIFs when is not available. Uses as the primary format while keeping as backup.

Discord / Commands. For privileged native slash commands, returns a clear unauthorized response when the sender fails auth checks instead of falling into Discord’s vague generic completion response.

Channel / Directory. Allows external channel directories to override built-in fallback metadata. Follows the overridden npm package spec during channel installation so custom channel directories no longer fall back to built-in packages when channel IDs match.

Voice / Plivo. Stabilizes Plivo v2 replay keys. Prevents conflicts between webhook retries and replay protection when delivering valid follow-up messages.

Agent / Skills. When injecting embedded skill configs and environment variables, uses the current resolved runtime snapshot so SecretRef values in are parsed correctly during embedded startup instead of failing on raw source configs.

Agent / Sub Agent. Before sending completion events, rechecks the latest runtime snapshot against timed-out worker wait states. Prevents fast workers that actually succeeded from being wrongly reported as timed out.

Agent / Anthropic. During conversation image cleanup, preserves the original order of the latest assistant and blocks. Prevents subsequent conversation turns from triggering Anthropic’s unmodified thinking content validation error.

Plugin / DeepSeek. Refactors the built-in DeepSeek provider into a shared single-provider plugin entry. Moves test coverage to the extended test channel. Preserves built-in auth environment variable metadata on generated manifest paths.

Plugin / Matrix. Avoids duplicate exports of runtime APIs under Jiti. Prevents built-in Matrix installs from crashing on startup due to errors.

Security / Execution Approval. Rejects single-quote wrapped tokens and newline-separated exec patterns. Continues accepting carrier forms. Restricts shell wrapper positional parameter matching to real direct carriers only.

Gateway / Probe. Prevents successfully completed gateway handshakes from being wrongly marked as unreachable timeouts while post-connection detail RPCs are still loading. Slow devices now report reachable but RPC failed instead of incorrectly flagging the gateway as down.

Gateway / Watchdog. By keeping duplicate processes in a retry wait state instead of exiting with failure when another healthy gateway holds the lock, prevents crash loops caused by lock conflicts under launchd and systemd.

Gateway / Auth. Requires identity authentication for canvas routes and admin privilege scope for Agent session resets. Anonymous canvas access and non-admin reset requests now fail securely with a reject response.

Release / Install. Preserves previously shipped built-in plugins and control panel UI resources inside published openclaw npm packages. Fails the release check when these delivered artifacts are missing.

Scroll up and down to see more