MaintenancePanel (features/maintenance/) talking to the /api/system/* routes. The panel reads GET /api/system/status on mount, its Command Approval section reads GET /api/system/openclaw-config and writes back through PATCH /api/system/openclaw-config, and Check for Updates streams SSE POST /api/system/install-openclaw. It never calls POST /api/system/gateway.
Prerequisites
The System panel is built for the OpenClaw path. The Command Approval section renders only when a live Gateway
client is connected and the current value could be read from openclaw.json; if you are running native-only (no Gateway), the panel is just the System Info card.- OpenClaw installed (the System Info section shows the detected version, or “Not installed”).
- The dashboard running (
clawboo); the System panel lives in the Settings modal.
Where it lives
Open Settings (the gear at the bottom of the sidebar, orCmd/Ctrl + ,), then System under the System group. The panel is a single scrollable column of two cards: Command Approval and System Info.
What moved, and where it went
Earlier releases stacked seven sections here. Five of them now live on the surface that owns them, so the setting sits next to the thing it configures instead of in a catch-all panel:There is no agent-coordination switch anywhere in the dashboard. Agent-to-agent tooling is enabled unconditionally: onboarding writes
tools.agentToAgent.enabled: true (and tools.sessions.visibility: "all") into openclaw.json when it configures OpenClaw, and team deploys re-assert it. It is the core of the product, not a togglable option.Steps
Set the default command approval
The Command Approval section is one dropdown. It setstools.exec.ask in openclaw.json, the default posture every OpenClaw agent inherits before running a shell command.
- Pick an option. The dropdown updates immediately (optimistically) and disables itself while the write is in flight.
- The panel sends
PATCH /api/system/openclaw-configwith{ exec: { ask } }, and a toast confirms Default command approval set to ”…”. - If the write fails, the dropdown snaps back to its previous value and you get a Failed to update Gateway config toast.
config.get() call on the Gateway client. That call is advisory: it is wrapped in its own try/catch, so a disconnected Gateway changes nothing about the outcome, and the new value is already on disk in openclaw.json either way.
Check version and updates
The System Info section shows the OpenClaw version (or “Not installed”), the Node.js version, OpenClaw’s state dir (~/.openclaw by default), and whether openclaw.json was found, all from a single GET /api/system/status read on mount. This card does not poll; it re-reads only after a successful update.
Check for Updates runs the OpenClaw installer in place: it streams POST /api/system/install-openclaw (which runs npm install -g openclaw@^2026.5) as SSE, renders every progress and output line in the update log below the button, and on success re-fetches status so the version row shows the new value.
Options / variations
Verify it worked
- Command Approval: a toast reads Default command approval set to ”…”;
GET /api/system/openclaw-configreturns the new value atconfig.tools.exec.ask. - Check for Updates: the log ends with a success toast (Updated to
<version>) and the System Info OpenClaw row shows the new version.
Troubleshooting
Check for Updates reinstalls globally. It runs
npm install -g, which can hit EACCES on a system Node install. If the log shows a permission error, prefer a Node version manager (nvm/fnm) or Homebrew over sudo. Pinning is to openclaw@^2026.5 to stay protocol-compatible with this Clawboo.See also
- Connecting runtimes, the Runtimes panel and the Providers hub that now hold the gateway controls, the default-model picker, and the provider keys
- OpenClaw, the Gateway runtime, device pairing, and channels
- Approvals, the queue that
tools.exec.askfeeds - Boo Zero, where the display name, global brief, and team rules editors live
/api/system/*reference, full request/response shapes for every route on this page