Web interfaces

Feature and RPC reference

Control UI capabilities grouped by area, each with the Gateway RPC methods behind it.

Feature and RPC reference

Chat and Talk
  • Subagent transcripts hide author avatars in both the main chat view and task details; sender names remain visible.
  • Chat with the model via Gateway WS (chat.history, chat.send, chat.abort, chat.inject). Archived sessions keep the composer disabled and show a banner with an Unarchive action before the conversation can continue.
  • Opening or refreshing chat requests up to 80 recent messages. Each background warming pass reads at most two inactive sessions sequentially, with up to 20 messages per session, after presented chat loads finish. Automatic warming waits for a visible conversation on the current page; dashboard-only views still warm the session you hover or keyboard-focus. Scrolling back requests up to 1,000 older messages per page and prefetches the next page. Per-message text caps and response-byte limits can reduce these counts.
  • A previous run's error banner clears when Chat adopts a new run or history confirms a newer successful run. Retiring the banner does not erase recorded diagnostics. A late error from the same run can remain visible beside its delivered answer; reconnecting or refreshing metadata alone does not establish recovery.
  • A saved assistant answer replaces its live stream without waiting for the run to finish. Refreshing history or reconnecting while that reply finishes does not add another copy of the saved answer. Later streamed continuations remain visible. Remote workspace reconciliation can keep the working indicator and Stop control active after the answer appears; a later reconciliation failure remains visible beside the answer.
  • Scroll up to read earlier messages without following incoming output. Sending a message, submitting a transcript command such as /help, or using the down-arrow button returns to the latest message, including when the composer or progress card resizes. Scrolling manually interrupts that movement or a restored scroll position; keys handled by text fields or media controls do not. Messages continue to reserve their space as full text, images, and tool output load.
  • Links to github.com in chat messages — yours and the agent's — show issue and pull-request references as compact chips with an issue or pull-request icon. Bare item URLs show #number, including links to files, commits, comments, and diff anchors; matching #number or owner/repo#number labels also become chips. The tooltip preserves the exact destination, and the hover card opens that same link. Other GitHub links and custom labels keep the GitHub mark. Icons are bundled, never fetched from the network, and decorative only: they are skipped for image-only links such as badges, never appear inside code spans or code blocks, are not read by screen readers, and are not part of copied text.
  • Hovering or keyboard-focusing a public GitHub issue or pull request link shows its state, title, author, recent activity, comments, and change statistics. The connected Gateway fetches and caches public metadata without changing the link target, including when the UI uses a remote Gateway. The card's title and repository reference open the exact link you hovered or focused, including comment fragments and query parameters, even when another link to the same item has already filled the cache. Previews use the selected agent's configured GitHub identity, inheriting the system identity when there is no agent override. Without a managed identity, they retain the explicit Control UI GitHub credential, then the shared Gateway process-environment fallback; public previews still work anonymously without credentials. Configured managed identities fail visibly instead of switching accounts, and authenticated previews remain restricted to public repositories. Failures show a short explanation below GitHub preview unavailable, including rate-limit retry timing when GitHub supplies it.
  • Talk through browser realtime sessions. OpenAI supports browser WebRTC and Gateway-relayed provider WebSockets, Google Live uses a constrained one-use browser token over WebSocket, and backend-only realtime voice plugins use Gateway relay. Video-capable browser sessions can choose a device-local camera in Settings or flip cameras from the live preview; the browser captures JPEG frames for the realtime provider without streaming camera video through the Gateway. Client-owned provider sessions start with talk.client.create; Gateway relay sessions start with talk.session.create. The relay keeps provider credentials on the Gateway while the browser streams microphone PCM through talk.session.appendAudio, forwards provider delegations or openclaw_agent_consult tool calls through Gateway policy and the larger configured OpenClaw model, and routes active-run voice steering through talk.client.steer or talk.session.steer. Browser WebRTC GPT-Live delegates on the Gateway-owned sideband, but each delegation has the same spoken-confirmation gate and browser-owned talk.client.steer lifecycle; a newer spoken task can also supersede the running delegation. Gateway-relayed GPT-Live uses the normal relay consult and steering path. Configure the realtime provider, model, and speaker voice on Settings → Talk, whose pickers come from talk.catalog and show whether the selection is ready to use.
  • Stream tool calls and live tool output cards in Chat (agent events). Tool activity renders as kind-aware rows: shell commands show the syntax-highlighted command with terminal-style output; supported edit and write calls show bounded inline diffs with source syntax highlighting, line numbers when available, and +added -removed stats; and consecutive calls collapse into a summary such as "Ran 13 commands, read 6 files, edited 9 files". While a run is live, the newest running call names the group header. Expand a row to inspect its remaining arguments and raw output.
  • Tool activity counts distinct calls, not start/update/result events, repeated history or live projections, or Gateway observation RPCs. Nested calls count independently, even when their names and arguments match. File summaries count distinct file paths; expand the activity to see each call.
  • Tool activity automatically displays a short purpose description supplied by the acting agent when available, with commands and results expandable underneath. Calls without descriptions keep deterministic labels. Viewing activity makes no additional model calls. The former gateway.controlUi.toolTitles option is retired; openclaw doctor --fix removes it from existing configs.
  • Start or dismiss ephemeral model-suggested follow-up tasks. Start in a new session opens the proposed task in the suggested folder without requiring Git or creating a worktree. The new session asks the user before using a worktree if the task needs one later.
  • Activity tab with browser-local, redaction-first summaries of live tool activity from existing session.tool / tool event delivery.
Channels, sessions, memory
  • Channels: built-in plus bundled/external plugin channels status, QR login, and per-channel config (channels.status, web.login.*, config.patch).
  • Channel probe refreshes keep the previous snapshot visible while slow provider checks finish, and label partial snapshots when a probe or audit exceeds its UI budget.
  • Threads (a workspace page at /sessions, with a Worktrees tab alongside it): list configured-agent sessions by default, pin frequent sessions, rename them, archive or restore sessions, fall back from stale unconfigured agent session keys, and apply per-session model/thinking/fast/verbose/trace/reasoning overrides (sessions.list, sessions.patch). A three-way Active / Archived / All filter controls both this page and the sidebar; All dims archived rows and labels them explicitly. Archived sessions keep their transcripts and remain shelved until explicitly unarchived or deleted. Sessions archived automatically at the active-session cap can also be deleted automatically when the session store exceeds its disk budget; manually archived and legacy sessions stay protected. Rows show an unread dot for active sessions with activity since they were last read, with mark-unread/mark-read actions (sessions.patch { unread }), and a Fork action that branches the transcript into a new session (sessions.create { parentSessionKey, fork: true }). Overview tiles above the table summarize the loaded roster (session count, live runs, unread sessions, total tokens, and archived count when available), each row carries a kind glyph with a live-run dot, status renders as a plain dot plus label, and the Tokens column shows a context-window usage meter when the session reports token and context sizes. Row management actions live in a per-row menu (kebab button or right-click) mirroring the sidebar's session menu, and the row drawer carries the agent runtime and run duration alongside the other session details.
  • Native Claude and Codex sidebar catalogs stream one host at a time, then reconcile after node connectivity changes, on page focus, and at most every 30 seconds while visible. Catalog changes trigger a faster follow-up pass, so sessions created in the native tools appear without reloading the Control UI. Claude Desktop rows also retain their local custom-group label when present; OpenClaw reads that mapping from Desktop's local store and never writes it.
  • Session grouping: a Group by control organizes the sessions table into sections by custom groups, channel, kind, agent, or date. Custom groups persist per session via sessions.patch (category), so sessions started from message channels (Discord, Telegram, WhatsApp, ...) can be categorized too; assign groups by dragging rows onto a section, or with the per-row group selector, and create groups with the New group action.
  • Memory (a tab on the Agents page, scoped to the selected agent): dreaming status, enable/disable toggle, and Dream Diary reader (doctor.memory.status, doctor.memory.dreamDiary, config.patch). When the memory-wiki plugin is enabled, the Diary view adds Imported Insights and Memory Wiki sub-tabs that browse imported source chats and the compiled wiki — clustered synthesis, entity, and concept pages plus annotated sources and reports, with claims, open questions, contradictions, and inline page previews (wiki.importInsights, wiki.overview, wiki.get).
  • Import Memory (/memory-import, reached from the Agents page's Memory tab): preview and copy local Claude Code auto-memory, Codex consolidated memory, or Hermes memory files into the selected agent workspace (migrations.memory.plan, migrations.memory.apply).
  • Onboarding memory offer: when the Control UI opens in onboarding mode, a one-page dialog offers to import detected memories with the same plan/apply flow; skipping leaves the settings page as the later entry point.
Cron, tasks, plugins, skills, devices, exec approvals
  • Automations (cron jobs): stat cards (automation count, failing count, scheduler state, next wake) above an Automations/Run history tab switch; the Automations tab lists jobs in a filterable table (All/Active/Paused, search, schedule and last-run filters, per-row action menu) with starter suggestions below, and the Run history tab shows recent runs across all automations (cron.*).

  • Tasks: live active and recent background task ledger with linked sessions and cancellation (tasks.*). Chat's Background tasks rail groups running and finished work; selecting a rail row opens that task's live status and transcript or prompt/output inspector in the detail sidebar.

  • Plugins: browse the installed inventory and curated store, search ClawHub, install and remove plugin code, and enable or disable installed plugins (plugins.*); MCP server rows edit mcp.servers through the config methods.

  • Skills: status, enable/disable, install, API key updates (skills.*).

  • Devices: one inventory joins paired device records, the node catalog, and live presence (device.pair.list, node.list, system-presence). The Gateway host is pinned first; paired clients show connection status, roles, tokens, capabilities, and commands. Duplicate pairings collapse into an expandable group, and Clean up N stale bulk-removes admin-confirmed offline duplicates that were auto-approved (silent local, trusted-CIDR, or SSH-verified) or predate approval provenance. Paired rows have an Actions menu to copy its device ID, Edit alias (a non-empty operator label of up to 64 characters, preserving the device ID and client-reported name), remove its pairing (node.pair.remove, device.pair.remove), or approve/reject a pending node re-approval (node.pair.approve/reject). Device pairing requests retain their visible Approve and Reject buttons (device.pair.*), and mobile setup codes can be created from the same card. Details groups device identity, IP, scopes, token rotation/revocation, and commands into labeled facts. Resource meters show Gateway host load, memory, disk, and uptime from system.info, and node meters appear when the node reports hostStats. Offline nodes with a retained snapshot show muted last-known meters with the snapshot age. The connected page refreshes host stats every 60 seconds and alongside quiet node reloads; node stats also refresh on node.hostStats events. Capability chips explain each capability on hover. Desktop opens that machine in a standalone desktop window (the docked Desktop panel stays hidden on Settings routes) and appears only when the Gateway reports an available desktop environment. For a node, enable desktop.host.enabled: true in its config, add desktop.stream to gateway.nodes.commands.allow, and restart the node. Gateway command-policy changes hot-apply under the default reload mode. The node reconnects with a pending reapproval for the new command, which you approve from the row’s Actions menu or with openclaw nodes approve <requestId>. A dashed Desktop chip explains this setup when only the command is advertised.

  • Exec approvals: edit gateway or node allowlists and ask policy for exec host=gateway/node (exec.approvals.*).

Config
  • View/edit ~/.openclaw/openclaw.json (config.get, config.set).
  • Settings navigation starts with Ask OpenClaw, Profile, Appearance, and Notifications up top; Connections (Connection, Channels, Communications, Talk, Devices); Agents & Tools (Agents, Labs, Models, MCP, Memory, Automation); Privacy & Security (Security, Secrets, Approvals); and System (Infrastructure, Advanced, Debug, Logs, About). Language leads the Appearance page, model defaults live on Models, and Gateway host details live on Connection.
  • Privacy & Security: curated rows for gateway auth, exec policy, browser enablement, tool profile, device auth, and mobile pairing, above the schema-backed security/approvals sections.
  • Secrets (/settings/secrets) manages team-scoped secret and environment entries through secrets.store.*. Environment values remain visible, secret values are never returned after saving, Bulk Add accepts quoted multiline dotenv values, and mutation actions are hidden when the connected Gateway does not advertise them.
  • Approvals includes newest-first, 30-day history for resolved exec, plugin, and system-agent requests. Filter by kind or page through older rows to review the decision, reason, source session, and resolver attribution recorded by the Gateway.
  • Labs exposes shipped experimental switches. Code Mode defaults off; turning it on writes tools.codeMode.enabled: "auto", which engages only for models marked as preferred Code Mode performers. Swarm defaults on; turn it off to write tools.swarm.enabled: false. Swarm does not enable Code Mode or grant tools denied by policy. Code Mode and Swarm changes save immediately and apply to future runs without restarting; unshipped experiments do not appear or write speculative config keys.
  • Notifications: browser web-push status, subscribe/unsubscribe, and a test send.
  • Advanced: every config section without a curated home, plus the raw JSON5 editor (previously the General page's Advanced mode).
  • Advanced → Setup is collapsed by default. Expand it to edit discovery access and app recommendation consent or inspect read-only setup history. Internal bookkeeping fields are absent from the form; the raw JSON5 editor remains unchanged.
  • In Advanced → Communication → Channels, use Channel settings to show one messaging channel at a time, including custom channel plugins. Other groups shared channel defaults and model overrides. Switching groups does not change the saved configuration.
  • Model Setup (/settings/model-setup) is a subpage of Model Providers, launched from its header. Detection runs on the page without holding navigation open: Back to app remains available while checks finish, and returning to setup starts a fresh check. Activation waits for the Gateway to apply the verified configuration; if it cannot apply it in place, setup shows that a restart is required. Verification stays unavailable until the saved configuration is active and pending restart work has finished, including after reconnecting or reopening the page. Setup keeps your selected model and displays the Gateway's reason; after the restart, use Try again or Verify & use selected model if the page has not continued automatically.
  • Agents: a settings page (Settings → Agents, /settings/agents) with an Agent defaults row for the shared template plus per-agent tabs (Overview, Files, Tools, Skills, Channels, Automations, Memory). The Overview tab edits the agent's identity — display name, emoji, and an avatar image that is downscaled and size-bounded in the browser before agents.update. Saving stores configured identity fields and mirrors them to the workspace IDENTITY.md; configured values take precedence over manual edits to the same file fields. The Tools tab shows the effective GitHub execution account and keeps per-agent overrides under advanced admin settings, with device authorization and one-use PAT setup. Common personal and System connections live on Profile.
  • Profile: a settings page with the default agent's identity, the authenticated person's editable profile and verified sign-in identity, separate Git co-author consent, and My GitHub/System GitHub connections. Usage statistics opens the usage view rather than loading all usage statistics into Profile.
  • MCP has a dedicated settings page with server rows (transport, enablement, OAuth/filter/parallel summaries), direct add/enable/disable/remove controls, common operator commands, and the scoped mcp config editor. The Plugins page remains the home for one-click connectors and discovery.
  • Model Providers: a settings page listing every configured model provider with its brand icon, auth state (models.authStatus), model availability (models.list), live plan/quota/billing data where the provider reports it (usage.status), and local session spend for the last 30 days (sessions.usage). The initial page reuses the Gateway's prepared model catalog. Refresh explicitly discovers the live provider catalog, then re-reads credential state and provider usage; discovery failures stay visible without discarding the last successful model list. If the Gateway is preparing model authentication, the page shows an unavailable-status warning rather than treating it as a lost connection or a sign-out. Use Refresh after setup finishes; auth-status diagnostics do not block chat bootstrap.
  • When the catalog reports results for individual auth profiles, one ready profile takes precedence over a rejected or unavailable sibling. Provider-wide catalog failures remain visible on the provider card.
  • Connection: a settings page (under Connections) owning the dashboard's own gateway link — WebSocket URL, gateway token, password, and default session key — plus the latest handshake snapshot (status, uptime, tick interval, last channels refresh). The offline login gate handles the disconnected case; this page edits the connection while connected.
  • Apply and restart with validation (config.apply), then wake the last active session.
  • Writes include a base-hash guard to prevent clobbering concurrent edits.
  • Writes (config.set/config.apply/config.patch) preflight active SecretRef resolution for refs in the submitted config payload; unresolved active submitted refs are rejected before write.
  • Form saves discard stale redacted placeholders that cannot be restored from the saved config, while preserving redacted values that still map to saved secrets.
  • Sensitive string fields that are empty or contain only whitespace remain editable after reloading. Concrete secrets stay masked; entries containing stored secrets cannot be renamed in the form.
  • Schema and form rendering come from config.schema / config.schema.lookup, including field title/description, matched UI hints, immediate child summaries, docs metadata on nested object/wildcard/array/composition nodes, plus plugin and channel schemas when available. Raw JSON editor is available only when the snapshot has a safe raw round-trip; otherwise Control UI forces Form mode.
  • Raw JSON editor "Reset to saved" preserves the raw-authored shape (formatting, comments, $include layout) instead of re-rendering a flattened snapshot, so external edits survive a reset when the snapshot can safely round-trip.
  • Structured SecretRef object values render read-only in form text inputs, to prevent accidental object-to-string corruption.
Usage
  • Session-derived token and estimated-cost analysis stays separate from provider billing.
  • Filter sessions with the provider, model, channel, or tool menus, or type case-insensitive key:value terms. Values within one category match as alternatives. Toggling a menu option preserves the other filters and their quoted text.
  • Selecting days narrows token and cost totals to those days within the active session filters. Daily charts and exports retain that session scope. Provider/model/tool queries select matching sessions, including all usage within each matched session; hour filters select sessions active in those hours.
  • Select Local or UTC for hourly charts and peak error hours. Historical hour labels stay tied to the selected time zone, including when you view them across a daylight-saving transition.
  • Provider cards call usage.status and show live plan names, quota windows, balances, spend, and budgets reported by configured provider plugins.
  • A provider usage failure does not block the session/cost dashboard; unavailable provider cards show their own error state.
  • Incomplete session/cost totals stay readable while the visible, focused page checks for updates. Automatic checks are bounded; if they pause, select Refresh to check again.
  • The overview loads session summaries first. Full system-prompt breakdowns load when you select a session; the has:context filter still works before opening details.
Debug, logs, update
  • Debug: status/health/models snapshots, event log, manual RPC calls, and a System busyness overlay with live CPU, memory, event-loop delay, and per-disk free-space graphs (status, health, models.list, system.info). Connection also shows each mounted local storage volume separately, labeled by its mount path. Disk snapshots refresh every ten seconds; memory-backed filesystems and hidden macOS system volumes are excluded.
  • Lane tables omit disabled, empty lanes, including hook-dispatch when HTTP hooks are off. Disabled lanes remain visible while work is running or queued.
  • The event log includes Control UI refresh/RPC timings, slow chat/config render timings, and browser responsiveness entries for long animation frames or long tasks when the browser exposes those PerformanceObserver entry types.
  • Diagnostic event history belongs to the selected Gateway and authentication context. Applying a different Gateway URL or credential clears the previous history immediately, even if the new connection fails. A reconnect authenticated as a different account also clears it. Reconnects with unchanged authentication preserve history for troubleshooting.
  • Logs: live tail of gateway file logs with filter/export (logs.tail).
  • Update: run a package/git update plus restart (update.run) with a restart report, then poll update.status after reconnect to verify the running gateway version.
Automations panel notes
  • Scheduler status, automation lists, and run history pause background refreshes while the browser tab is hidden and catch up when you return. Your current filters and unsaved draft stay in place; saves and runs already submitted continue.
  • Selecting a row opens a full-page detail view with an Active/Paused switch and Run now in the header (run-if-due, clone, and remove in its menu); the Settings tab edits the automation inline (prompt, details, frequency, advanced overrides) and the Run history tab shows that automation's runs.
  • Cloning an agent task retains its stored tool allowlist, model fallback list, lightweight-context setting, and external-content setting, including empty lists and explicit false values. Fields you change in the copy's form take precedence. The new task is authorized by the current operator; captured execution grants are not copied.
  • Both Run history views show a recorded delivery-suppression reason alongside the delivery status when available. Intentional suppression remains separate from delivery errors; the history does not infer a reason from a successful run.
  • Starter automations under the table prefill the create form with an editable prompt and schedule.
  • New isolated tasks default to internal-only delivery. Select announce explicitly to send a summary to a channel.
  • Channel/target fields appear when announce is selected; provide an explicit destination when the channel requires one.
  • Webhook mode uses delivery.mode = "webhook" with delivery.to set to a valid HTTP(S) webhook URL.
  • For main-session tasks, webhook and none delivery modes are available.
  • Advanced edit controls include delete-after-run, clear agent override, cron exact/stagger options, agent model/thinking overrides, and best-effort delivery toggles.
  • Model suggestions update when the Gateway publishes catalog or configuration changes. A failed read shows an error and keeps the last suggestions for the same agent and connection; the next successful read replaces them without changing your draft.
  • Saved interval labels retain millisecond precision: a 90-second interval displays as Every 1m 30s. Repeat and stagger inputs accept decimal amounts that resolve to whole milliseconds; editing a cron expression preserves its stagger window.
  • Form validation is inline with field-level errors; invalid values disable the save button until fixed.
  • Set cron.webhookToken to send a dedicated bearer token; if omitted, the webhook is sent without an auth header.
  • cron.webhook is a retired legacy fallback rejected by current config validation. Run openclaw doctor --fix to migrate stored jobs that still use notify: true to explicit per-job webhook or completion delivery and remove the old key.
Was this useful?
On this page

On this page