From 4b7d6fa3bf2e277377ac3234685bc4428e9381f4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 18 Jul 2026 17:00:14 -0700 Subject: [PATCH] docs: align interactive client behavior (#111047) --- docs/concepts/experimental-features.md | 12 +++++++ docs/concepts/queue.md | 13 +++++-- docs/docs.json | 1 + docs/docs_map.md | 9 +++++ docs/gateway/protocol.md | 8 +++++ docs/nodes/talk.md | 24 ++++++++++--- docs/platforms/android.md | 13 +++++-- docs/providers/google.md | 12 ++++--- docs/providers/openai.md | 5 +++ docs/tools/index.md | 2 ++ docs/tools/screen.md | 50 ++++++++++++++++++++++++++ docs/tools/steer.md | 5 +++ docs/web/control-ui.md | 8 ++++- docs/web/tui.md | 9 +++++ 14 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 docs/tools/screen.md diff --git a/docs/concepts/experimental-features.md b/docs/concepts/experimental-features.md index 217978461fb..070deeb8dc3 100644 --- a/docs/concepts/experimental-features.md +++ b/docs/concepts/experimental-features.md @@ -22,6 +22,18 @@ Experimental features are preview surfaces behind explicit flags. They need more | Memory search | `agents.defaults.memorySearch.experimental.sessionMemory` | You want `memory_search` to index prior session transcripts and accept the extra storage/indexing cost | [Memory configuration reference](/reference/memory-config#session-memory-search-experimental) | | Codex harness | `plugins.entries.codex.config.appServer.experimental.sandboxExecServer` | You want native Codex app-server 0.132.0 or newer to target an OpenClaw sandbox-backed exec-server instead of disabling Code Mode | [Codex harness reference](/plugins/codex-harness-reference#sandboxed-native-execution) | | Structured planning tool | `tools.experimental.planTool` | You want the structured `update_plan` tool exposed for multi-step work tracking in compatible runtimes and UIs | [Gateway configuration reference](/gateway/config-tools#toolsexperimental) | +| Code Mode | `tools.codeMode.enabled` | You want compact code-orchestrated access to a hidden OpenClaw tool catalog | [Code Mode](/tools/code-mode) | + +## Control UI Labs + +Open **Settings → Agents & Tools → Labs** to manage experiments that have a +Control UI switch. Enabling or disabling a lab patches the canonical Gateway +config immediately; the page shows a restart hint only when a feature requires +one. + +Code Mode is currently the only shipped Labs entry. Swarm is not exposed yet: +its config shape has not shipped, so Control UI does not write a speculative +key that would invalidate the operator's config. ## Local model lean mode diff --git a/docs/concepts/queue.md b/docs/concepts/queue.md index e3dbcb1a650..27720420ace 100644 --- a/docs/concepts/queue.md +++ b/docs/concepts/queue.md @@ -116,9 +116,16 @@ overflow summary. - Queued waits are not projected as active agent runs for `sessions.list` and do not own active-run timeout semantics; only the active phase does. -Clients (including the TUI) forward mid-run prompts and let Gateway apply the -queue mode. Esc/`/stop` uses a session-scoped abort so lost local handles -cannot leave a still-queued prompt running. +Gateway-backed clients (including `openclaw tui`) forward mid-run prompts and +let the Gateway apply the queue mode. Esc/`/stop` uses a session-scoped abort +so lost local handles cannot leave a still-queued prompt running. + +`openclaw chat` and `openclaw tui --local` apply the same four modes in the +embedded runtime. Local `steer` injects into an active embedded run when that +runtime accepts steering and otherwise becomes a followup; `followup` and +`collect` remain local pending work; `interrupt` aborts the active local run +before starting the newest message. The explicit `/steer ` command is +not a local-mode command. ## Scope and guarantees diff --git a/docs/docs.json b/docs/docs.json index 12f325496fe..9370e40d50a 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -1364,6 +1364,7 @@ "tools/code-execution", "tools/code-mode", "tools/diffs", + "tools/screen", "tools/show-widget", "tools/elevated", "tools/permission-modes", diff --git a/docs/docs_map.md b/docs/docs_map.md index c76baf34a61..3367aeaebe7 100644 --- a/docs/docs_map.md +++ b/docs/docs_map.md @@ -2459,6 +2459,7 @@ Do not edit it by hand; run `pnpm docs:map:gen`. - Route: /concepts/experimental-features - Headings: - H2: Currently documented flags + - H2: Control UI Labs - H2: Local model lean mode - H3: Why these tools - H3: When to turn it on @@ -10167,6 +10168,14 @@ Do not edit it by hand; run `pnpm docs:map:gen`. - H2: Reaction level - H2: Related +## tools/screen.md + +- Route: /tools/screen +- Headings: + - H2: Actions + - H2: Routing and security + - H2: Related + ## tools/searxng-search.md - Route: /tools/searxng-search diff --git a/docs/gateway/protocol.md b/docs/gateway/protocol.md index 71588e5dfdb..4e48c5d0aba 100644 --- a/docs/gateway/protocol.md +++ b/docs/gateway/protocol.md @@ -586,6 +586,7 @@ methods. Treat this as feature discovery, not a full enumeration of + - `approval.history` returns newest-first terminal approvals retained for 30 days for exec, plugin, and system-agent requests (scope `operator.approvals`). It supports cursor pagination plus an optional kind filter; pending approvals are not history rows. - `approval.get` and `approval.resolve` are the kind-agnostic durable approval methods (scope `operator.approvals`). `approval.get` returns a sanitized pending or retained terminal projection with a stable `urlPath`; `approval.resolve` accepts the canonical approval id, an explicit `kind`, and a decision, applies first-answer-wins resolution, and always returns the recorded canonical result. - `exec.approval.request`, `exec.approval.get`, `exec.approval.list`, and `exec.approval.resolve` cover one-shot exec approval requests plus pending approval lookup/replay. They are protocol-boundary adapters over the same durable approval registry. - `exec.approval.waitDecision` waits on one pending exec approval and returns the final decision (or `null` on timeout). @@ -595,6 +596,13 @@ methods. Treat this as feature discovery, not a full enumeration of + + - `ui.command` lets an `operator.write` caller send typed layout and navigation commands to connected Control UI clients that advertise the `ui-commands` capability. + - Commands cover pane split/close/focus, sidebar visibility, terminal/browser panel visibility and dock, and session navigation. + - Protocol v1 intentionally fans out to every connected capable Control UI. If none is connected, the request fails with `UNAVAILABLE` instead of pretending the layout changed. + + + - Automation: `wake` schedules an immediate or next-heartbeat wake text injection; `cron.get`, `cron.list`, `cron.status`, `cron.add`, `cron.update`, `cron.remove`, `cron.run`, `cron.runs` manage scheduled work. - `cron.run` remains an enqueue-style RPC for manual runs. Clients that need completion semantics should read the returned `runId` and poll `cron.runs`. diff --git a/docs/nodes/talk.md b/docs/nodes/talk.md index f6ec14bf169..5e2da216460 100644 --- a/docs/nodes/talk.md +++ b/docs/nodes/talk.md @@ -20,6 +20,14 @@ Client-owned realtime Talk forwards provider tool calls through `talk.client.too Transcription-only Talk emits the same Talk event envelope as realtime and STT/TTS sessions, but uses `mode: "transcription"` and `brain: "none"`. All Talk sessions broadcast events on the `talk.event` channel; clients subscribe to it for partial/final transcript updates (`transcript.delta`/`transcript.done`) and other session telemetry. +Browser Video Talk is available for OpenAI Realtime WebRTC and Google Live +provider-WebSocket sessions. OpenAI gets a single bounded JPEG when +`describe_view` asks for visual context; it does not receive a continuous +camera track. Google Live receives bounded JPEG frames directly from the +browser at up to one frame per second, while `describe_view` reports the +camera-stream state. In both cases, camera frames bypass the Gateway, and +stopping Talk releases the camera and microphone tracks. + ## Behavior (macOS) - Always-on overlay while Talk mode is enabled. @@ -115,10 +123,18 @@ Supported keys: `voice` / `voice_id` / `voiceId`, `model` / `model_id` / `modelI ## Android UI -- Voice tab toggle: **Talk** -- Manual **Mic** and **Talk** are mutually exclusive capture modes. -- Manual Mic and realtime Talk prefer a connected Bluetooth Classic or BLE headset microphone; if it disconnects, the app requests another headset input or falls back to the default microphone, restoring the default preference once capture stops. -- Manual Mic stops when the app leaves the foreground or the user leaves the Voice tab. +- Android's main navigation is **Home**, **Chat**, and **Settings**. Voice input + lives in the Chat composer rather than a separate Voice tab. +- Tap the composer microphone for on-device dictation. Long-press it to record + a voice-note attachment. Start continuous Talk from the Talk waveform. +- Dictation, voice-note recording, and Talk are mutually exclusive microphone + paths; starting one stops or blocks the others. +- Realtime Talk prefers a connected Bluetooth Classic or BLE headset + microphone; if it disconnects, the app requests another headset input or + falls back to the default microphone, restoring the default preference once + capture stops. +- Dictation and voice-note recording stop when the app leaves the foreground or + the user leaves Chat. - Talk Mode keeps running until toggled off or the node disconnects, using Android's microphone foreground-service type while active. - Android supports `pcm_16000`, `pcm_22050`, `pcm_24000`, and `pcm_44100` output formats for low-latency `AudioTrack` streaming. diff --git a/docs/platforms/android.md b/docs/platforms/android.md index f3f6a6df87b..53bbc7353cf 100644 --- a/docs/platforms/android.md +++ b/docs/platforms/android.md @@ -321,11 +321,20 @@ Camera commands (foreground only; permission-gated): `camera.snap` (jpg), `camer ### 8. Voice + expanded Android command surface -- Voice tab: Android has two explicit capture modes. **Mic** is a manual Voice-tab session that sends each pause as a chat turn and stops when the app leaves the foreground or the user leaves the Voice tab. **Talk** is continuous Talk Mode and keeps listening until toggled off or the node disconnects. +- Android's shell navigation is **Home**, **Chat**, and **Settings**. Voice input + belongs to the Chat composer; there is no separate Voice tab. +- Tap the composer microphone for on-device speech recognition that inserts a + transcript into the draft. Long-press the microphone to record a voice-note + attachment. The UI reports unavailable recognition, missing permission, + busy/network failures, and no-speech outcomes instead of silently dropping + the attempt. +- Start continuous **Talk** from the Chat waveform. Dictation, voice-note + recording, and Talk are mutually exclusive microphone paths. - Talk Mode promotes the existing foreground service from `connectedDevice` to `connectedDevice|microphone` before capture starts, then demotes it when Talk Mode stops. The node service declares `FOREGROUND_SERVICE_CONNECTED_DEVICE` with `CHANGE_NETWORK_STATE`; Android 14+ also requires the `FOREGROUND_SERVICE_MICROPHONE` declaration, the `RECORD_AUDIO` runtime grant, and the microphone service type at runtime. - By default, Android Talk uses native speech recognition, Gateway chat, and `talk.speak` through the configured gateway Talk provider. Local system TTS is used only when `talk.speak` is unavailable. - Android Talk uses realtime Gateway relay only when `talk.realtime.mode` is `realtime` and `talk.realtime.transport` is `gateway-relay`. -- Android does not advertise the `voiceWake` capability. Use **Mic** or **Talk** for voice input. +- Android does not advertise the `voiceWake` capability. Use Chat dictation, + a voice note, or Talk for voice input. - Additional Android command families (availability depends on device, permissions, and user settings): - `device.status`, `device.info`, `device.permissions`, `device.health` - `device.apps` only when **Settings > Phone Capabilities > Installed Apps** is enabled; it lists launcher-visible apps by default (pass `includeNonLaunchable` for the full list). diff --git a/docs/providers/google.md b/docs/providers/google.md index 6a64ccda3b4..b3ff521d8f5 100644 --- a/docs/providers/google.md +++ b/docs/providers/google.md @@ -411,16 +411,20 @@ nearest supported level, while `-1` leaves Google's default in place. See the Control UI Talk supports Google Live browser sessions with constrained one-use -tokens. Backend-only realtime voice providers can also run through the generic -Gateway relay transport, which keeps provider credentials on the Gateway. +tokens. In Video Talk, the browser sends bounded JPEG frames directly to +Google Live at the provider's maximum of one frame per second. The +`describe_view` function reports whether that camera stream is active. +Camera frames do not pass through the Gateway. Backend-only realtime voice +providers can also run through the generic Gateway relay transport, which +keeps provider credentials on the Gateway. For maintainer live verification, run `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts`. The smoke also covers OpenAI backend/WebRTC paths; the Google leg mints the same constrained Live API token shape used by Control UI Talk, opens the browser -WebSocket endpoint, sends the initial setup payload, and waits for -`setupComplete`. +WebSocket endpoint, sends the initial setup payload plus a JPEG frame, and +verifies a text response and `describe_view` function roundtrip. ## Advanced configuration diff --git a/docs/providers/openai.md b/docs/providers/openai.md index b50e159c169..fa395eb6561 100644 --- a/docs/providers/openai.md +++ b/docs/providers/openai.md @@ -171,6 +171,11 @@ auth. Realtime voice accepts the `openai` API-key auth profile created by `talk.realtime.providers.openai.apiKey` for Control UI Talk, or `plugins.entries.voice-call.config.realtime.providers.openai.apiKey` for Voice Call, or the `OPENAI_API_KEY` environment variable. + +In Control UI Video Talk, OpenAI WebRTC receives camera context on demand: +when the model calls `describe_view`, the browser sends one bounded JPEG over +the realtime data channel. OpenClaw does not attach a continuous camera track +to the OpenAI session. ## Memory embeddings diff --git a/docs/tools/index.md b/docs/tools/index.md index 8d6757cc38f..d9e85a70fc7 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -88,6 +88,7 @@ semantics, use [Tools and custom providers](/gateway/config-tools). | Human input | Pause for a structured decision owned by the user | `ask_user` | [Ask user](/tools/ask-user) | | Web | Search the web, search X posts, or fetch readable page content | `web_search`, `x_search`, `web_fetch` | [Web tools](/tools/web), [Web fetch](/tools/web-fetch) | | Browser | Operate a browser session | `browser` | [Browser](/tools/browser) | +| Operator UI | Arrange connected Control UI panes, panels, and navigation | `screen` | [Screen](/tools/screen) | | Messaging and channels | Send replies or channel actions | `message` | [Agent send](/tools/agent-send) | | Sessions and agents | Inspect sessions, delegate work, steer another run, or report status | `sessions_*`, `subagents`, `agents_list`, `session_status`, `get_goal`, `create_goal`, `update_goal` | [Goal](/tools/goal), [Sub-agents](/tools/subagents), [Session tool](/concepts/session-tool) | | Automation | Schedule work or respond to background events | `cron`, `heartbeat_respond` | [Automation](/automation) | @@ -112,6 +113,7 @@ Common plugin-provided tools include: - [Diffs](/tools/diffs) for rendering file and markdown diffs - [Show widget](/tools/show-widget) for self-contained inline SVG and HTML in supported chat clients +- [Screen](/tools/screen) for arranging a connected Control UI - [LLM Task](/tools/llm-task) for JSON-only workflow steps - [Lobster](/tools/lobster) for typed workflows with resumable approvals - [Tokenjuice](/tools/tokenjuice) for compacting noisy `exec` and `bash` tool diff --git a/docs/tools/screen.md b/docs/tools/screen.md new file mode 100644 index 00000000000..362ce6cff68 --- /dev/null +++ b/docs/tools/screen.md @@ -0,0 +1,50 @@ +--- +summary: "Let an agent arrange the connected Control UI" +title: "Screen" +sidebarTitle: "Screen" +read_when: + - You want an agent to split, focus, close, or navigate Control UI panes + - You want an agent to show or hide the sidebar, terminal, or browser panels + - You need the ui.command capability and fan-out contract +--- + +The `screen` tool lets an agent arrange the browser-based Control UI. It is a +typed layout and navigation surface, not screenshot capture or browser +automation. + +The tool is exposed only when the originating client advertises the +`ui-commands` capability. At least one capable Control UI must still be +connected when the tool runs; otherwise the Gateway returns `UNAVAILABLE`. + +## Actions + +| Action | Effect | Optional inputs | +| --------------------------------- | ------------------------------------------ | ---------------------------------------------- | +| `split_right` | Split the target session pane to the right | `sessionKey` (defaults to the current session) | +| `split_down` | Split the target session pane downward | `sessionKey` (defaults to the current session) | +| `close_pane` | Close the target session pane | `sessionKey` (defaults to the current session) | +| `focus` | Focus the target session pane | `sessionKey` (defaults to the current session) | +| `navigate` | Open the target session | `sessionKey` (defaults to the current session) | +| `sidebar_show` / `sidebar_hide` | Show or hide the main sidebar | - | +| `terminal_show` / `terminal_hide` | Show or hide the operator terminal panel | `dock` (`bottom` or `right`) when showing | +| `browser_show` / `browser_hide` | Show or hide the browser panel | `dock` (`bottom` or `right`) when showing | + +A successful command returns `{ "ok": true }` after the Gateway broadcasts +the typed `ui.command` event. + +## Routing and security + +Protocol v1 intentionally sends the command to every connected Control UI that +advertises `ui-commands`; it does not target one browser tab. This matters when +the same operator has several dashboards open. + +The Gateway RPC requires `operator.write`. The tool can change presentation +state only: it cannot read pixels, take screenshots, click arbitrary page +content, or bypass the permissions of the selected session and operator +panels. + +## Related + +- [Control UI](/web/control-ui) +- [Gateway protocol](/gateway/protocol#method-families) +- [Browser tool](/tools/browser) diff --git a/docs/tools/steer.md b/docs/tools/steer.md index 7c9a1d71d80..250e0b2b21f 100644 --- a/docs/tools/steer.md +++ b/docs/tools/steer.md @@ -40,6 +40,11 @@ supported runtime boundary, regardless of the stored `/queue` setting. When that injection is not available, the command prefix is stripped and `` continues as a normal prompt. +The explicit `/steer` (and `/tell`) command is Gateway-backed. In +`openclaw chat` or `openclaw tui --local`, select `/queue steer` and send the +guidance as a normal message; the embedded runtime applies the same steering +policy without forwarding a Gateway command. + Use: - `/steer ` when you want to guide the active run right now. diff --git a/docs/web/control-ui.md b/docs/web/control-ui.md index 61e9adf48ff..8ac18db5e0b 100644 --- a/docs/web/control-ui.md +++ b/docs/web/control-ui.md @@ -202,6 +202,9 @@ Inside **Settings**, the dedicated sidebar starts with a **Search settings** fie A **Search** field at the top of the sidebar opens the command palette (⌘K). Clicking the agent identity row at the top of the sidebar opens the agent menu; **Home** opens the main session. When something needs action — failed or overdue cron jobs, expiring or expired model auth — compact attention chips appear above the sidebar footer and click through to the owning page. The identity row shows the agent's avatar (identity image or emoji), name, connection dot, and a live subtitle. Clicking it opens the agent menu: an agent switcher (multi-agent setups), "What can this agent do?", **Agent settings**, **Settings**, mobile pairing, **Docs**, the build chip, and the color-mode toggle. Rosters above ten agents get a filter field and list pinned agents first; pin or unpin agents from the Agents settings page, with the pinned set stored in the browser profile. Choosing an agent scopes Chat plus Usage, Automations, Tasks, Workboard, and Sessions to that agent. Each scoped page exposes an **Agent** control with **All agents** as an escape; this widens the shared page scope without changing the concrete chat agent, while direct session links still open their target. The Agents settings page keeps its own `?agent=` selection and does not follow the shared page scope. The footer bar holds the product logo, the build chip, a gateway connection dot, and a Settings shortcut. When the gateway runs from a source checkout on a branch other than `main`, the footer also shows that branch name in red so a non-release gateway is obvious at a glance (release installs never show it). Shift-Command-Comma opens **Settings** without overriding the browser's Command-Comma shortcut. The sidebar header also holds the collapse toggle (⌘B); collapsing hides the sidebar entirely for a full-width workspace, and a floating expand control (or ⌘B) brings it back; the macOS app hosts that toggle natively in the titlebar instead. The sidebar is the only navigation chrome on desktop, with no top bar. Narrow viewports swap the sidebar for a slide-over drawer behind a compact header row holding the drawer toggle, brand, and command-palette search; on phones, Chat absorbs that navigation row into its title bar, with the menu and search controls beside the session title. In the macOS app the separate header row folds the titlebar clearance into a single compact strip beside the window controls. Navigation uses regular browser history, so the browser's back/forward buttons traverse it; the macOS app adds a native sidebar toggle next to the window controls plus trackpad swipe gestures, with back/forward buttons at the sidebar's right edge while it is expanded and native search (command palette) and new-session buttons while it is collapsed. +Pending approvals also contribute an attention chip above the sidebar footer; +select it to open the owning Approvals page. + ## What it can do (today) @@ -238,8 +241,10 @@ A **Search** field at the top of the sidebar opens the command palette (⌘K). C - View/edit `~/.openclaw/openclaw.json` (`config.get`, `config.set`). - - Settings navigation groups pages by attention: General, Appearance, and Notifications up top; Connections (Connection, Channels, Communications, Devices); Agents & Tools (Agents, AI & Agents, Model Providers, MCP, Automation); Privacy & Security (Security, Approvals); and System (Infrastructure, Advanced, Debug, Logs, About). General is a slim hub with model defaults, language, and gateway host stats; every other setting lives on exactly one page. + - Settings navigation groups pages by attention: General, Appearance, and Notifications up top; Connections (Connection, Channels, Communications, Devices); Agents & Tools (Agents, AI & Agents, Model Providers, MCP, Automation, Labs); Privacy & Security (Security, Approvals); and System (Infrastructure, Advanced, Debug, Logs, About). General is a slim hub with model defaults, language, and gateway host stats; every other setting lives on exactly one page. - 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. + - 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 is the current entry and saves `tools.codeMode.enabled` immediately; 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). - Model Setup (`/settings/model-setup`) is a subpage of Model Providers, launched from its header. @@ -402,6 +407,7 @@ The macOS app keeps its native link-browser sidebar for links clicked in the das - The workspace rail, background tasks rail, and detail panel adapt to each pane's own width rather than the window: in a narrow pane or compact window both rails present as bottom strips (side-dock controls hide until the pane widens; the workspace rail keeps first claim on the side slot when only one column fits), and the detail panel stacks below the thread with a horizontal resize handle instead of sharing the row with it. Phone-sized viewports still open the detail panel full-screen. - The chat header model and thinking pickers patch the active session immediately through `sessions.patch`; they are persistent session overrides, not one-turn-only send options. - **Split view:** open it from the chat title bar (beside the thread diff, background tasks, and thread files toggles), then split the active pane right or down for as many panes as fit. Each pane has its own thread, transcript, composer, and tool stream. + - Agents with the `screen` tool can request the same pane, sidebar, terminal, browser, focus, and navigation changes while a capable Control UI is connected. Protocol v1 applies the command to every connected capable Control UI; see [Screen](/tools/screen). - Drag a session from the sidebar into chat to open it in a pane. An animated drop preview glides between zones and labels the outcome — "Split" over the exact half a new pane will occupy, "Open here" over a whole pane — and drops also work from single-pane mode. - The active split pane drives the sidebar selection and URL. Its title bar adds split and close controls; dividers resize columns and stacked panes, and the browser stores the layout locally across reloads. - On narrow screens, split view keeps the layout but renders only the active pane, including its header with the close control. diff --git a/docs/web/tui.md b/docs/web/tui.md index 30a78fc81f6..2f51fb3198f 100644 --- a/docs/web/tui.md +++ b/docs/web/tui.md @@ -125,6 +125,8 @@ Session controls: - `/goal [status] | /goal start | /goal edit | /goal pause|resume|complete|block|clear` - `/elevated ` (alias: `/elev`) - `/activation ` +- `/queue [debounce:] [cap:] [drop:]` +- `/queue default` (or `/queue reset`) clears the session override Session lifecycle: @@ -138,6 +140,13 @@ Local mode only: - `/auth [provider]` opens the provider auth/login flow inside the TUI. +Local mode implements the same queue modes inside the embedded runtime. A +mid-run prompt follows the session's `/queue` policy: `steer` injects when the +runtime can accept it, `followup` waits for a separate turn, `collect` combines +pending prompts, and `interrupt` stops the current run before starting the new +one. Explicit `/steer ` is Gateway-only; use `/queue steer` plus a +normal message in local mode. + OpenClaw: - `/openclaw [request]` returns from the normal agent TUI to the [OpenClaw](#openclaw-setup-and-repair-helper) setup/repair chat, optionally forwarding one request.