system.run.
Use Quick Chat for a Spotlight-style main-session composer without opening a full window. Press Option-Space (⌥Space) by default, choose it from the menu bar menu, or record another shortcut in Dashboard → Settings → This Mac → App.
The full native chat accepts image attachments through its picker, paste, and
drag and drop. Assistant-generated images render inline through short-lived
Gateway artifact URLs and open in a larger preview; iOS and macOS share the same
bounded image model and renderer.
Only need the CLI and Gateway? Start with Getting started.
Download
Get macOS app builds from OpenClaw GitHub releases. When a release ships macOS app assets, look for:OpenClaw-<version>.dmg(preferred)OpenClaw-<version>.zip
First run
- Install and launch OpenClaw.app.
- Pick This Mac for a local Gateway, or Connect to an existing Gateway to enter its address and sign in. A saved Gateway opens its dashboard after connection and completes first-run setup without changing the Mac’s primary Gateway. Continue below when setting up a new Gateway.
- For a new local Gateway, wait while the app installs its external CLI runtime and starts the Gateway. Connecting to a remote or independently managed local Gateway does not require installing a CLI on this Mac.
- Establish inference with a live model check. If the app reused a login you did not want, Choose a different AI on the success banner reopens the picker, including the API-key option.
- Finish. The app opens the dashboard, where OpenClaw guides the rest of the setup (memory import, channels, permissions) in one conversation. Grant macOS permissions any time from Dashboard → Settings → This Mac → Permissions.
Connection
Choose Connection… to open the small native window even when the Gateway is unreachable. Its Connection tab contains local Gateway status, remote/SSH options, Tailscale, and discovery; Gateways manages saved Gateway profiles. A Debug tab appears while the developer toggle in This Mac → Developer is enabled. About OpenClaw opens the standard macOS About panel with the app version, build information, and credits. App-local settings (permissions, Quick Chat, voice, updates) live in Dashboard → Settings → This Mac and require a Gateway release that includes those pages. The Connection tab’s Open Dashboard Settings button opens that Dashboard.Updates
Open Dashboard → Settings → Updates → This Mac to turn automatic app updates on or off, choose Check for Updates…, and see the installed app version and build. The page explains when updates are unavailable, including while a named app profile is active. If the primary Gateway connection rejects the app’s protocol version, the app shows an update alert and keeps the explanation in its connection status. Remote setup and connection probes show the same guidance inline. The message names the app release and both protocol versions, and tells you which side needs updating: runopenclaw update on an older Gateway host, or install a newer Mac app from
the download options. A rejected handshake may not report the
Gateway’s release version; the app marks that information as unavailable.
Different release numbers alone do not trigger this alert.
The dashboard update card names what the app will update:
- Update Mac app + Gateway means the signed app owns the local launchd Gateway. Sparkle updates the app first; after relaunch, the app automatically updates and restarts its Gateway at the matching version, then verifies the connection.
- Update Gateway means the app is connected to a remote Gateway, a manually managed local Gateway, or another install the app does not own. The button runs that Gateway’s normal update flow instead of changing the Mac app.
extended-stable channel pin.
After a successful update, the app finds the most recently human-used,
top-level direct session and gives that agent a one-time update event. Heartbeat
and cron activity do not affect this choice. The agent can then welcome you back
from the conversation you were most likely using. In remote mode, a separately
installed, app-managed node service retains its own runtime update and recovery
flow; the app skips the notification when the remote Gateway is older than the
app. The app’s private node worker updates with the app bundle itself.
Sparkle follows the Gateway’s update.channel setting. beta and dev opt in
to beta app builds; extended-stable accepts only extended-stable app releases,
so it stays quiet when no matching app release exists. stable, missing, and
unknown values stay on stable app builds.
Open dashboard links
For a saved Gateway added with browser sign-in, the dashboard uses that profile’s Keychain-backed personal session. You do not need a second sign-in inside the embedded browser. Reconnect in Connection… → Gateways renews an expired session. For a remote Gateway with identity-aware authentication, the app opens the dashboard at its sign-in address: HTTPSgateway.publicOrigin for trusted-proxy
authentication, or the active managed Tailscale Serve address when Tailscale
identity is enabled. Serve does not require gateway.publicOrigin. Complete
the sign-in inside the dashboard window if that profile has no saved browser
session; your existing Gateway profile then
owns the displayed identity and chat attribution. The native device connection
keeps its configured transport, including SSH, and its credentials are not sent
to the public dashboard or sign-in provider. Shared-secret Gateways without a
personal sign-in route continue to use the shared owner profile.
Open windows for saved Gateway profiles follow sign-in route changes after a
reconnect. An unchanged route keeps the current dashboard and its navigation.
Opening the embedded dashboard at its default Chat landing restores the last
page you visited, such as Usage, for that Gateway origin. Explicit session
links and navigation requests take precedence over the remembered page, and
first-run model setup still runs when needed.
In the macOS app’s embedded dashboard, clicking an external web link opens it in a resizable browser sidebar at half the window width. Drag the divider in either direction to choose another width; the app remembers it. Widening the browser lets the dashboard switch to compact navigation, with a 400-point minimum for the dashboard and a 320-point minimum for the browser. Each link opens in its own tab, the tab strip appears when multiple pages are open, and clicking the same link again reuses its existing tab. Drag tabs to reorder them, close them with the tab close button or a middle-click, and right-click a tab for Open in Default Browser, Copy Link, Reload, Close Tab, and Close Other Tabs. The window’s titlebar back/forward controls and trackpad swipes navigate dashboard history; the sidebar’s own back/forward controls navigate the active tab’s history. The sidebar also has reload, open-in-default-browser, and close controls.
The titlebar controls follow the app sidebar: while it is expanded, back/forward sit at its right edge next to the sidebar toggle; while it is collapsed, they make way for a search button (opens the command palette) and a new-session button.
Drag the empty header space or title in the docked OpenClaw chat panel to move the app window. Its dock-position and close buttons remain clickable.
Right-click an external link to choose Open in Sidebar, Open in Default Browser, or Copy Link. Modified clicks and user-activated new-window links from the dashboard continue to open in the default browser; new-window links inside the sidebar open as new sidebar tabs. Regular browser-hosted Control UI pages keep the browser’s normal link and context-menu behavior.
Import browser logins
The first time the browser sidebar opens while the app runs against a local Gateway, the dashboard shows a dismissible banner when a Chrome-family profile with cookies exists on the Mac. The banner offers to copy those cookies into an isolated managed profile that agents use for browsing. Choose a profile from its Import control (Touch ID may be required); progress and the imported-cookie count appear inline, and only cookies are copied — passwords never leave the source browser. Dismissing the banner records the choice; Dashboard → Settings → This Mac → Browser can re-open the native import flow while a local Gateway and eligible profile are available. See Browser for the underlying import flow and thebrowser.allowSystemProfileImport gate.
Sync cookies to a remote computer
Import copies cookies once into a profile on the same Mac. When your Gateway and agent browser run on a separate computer (a dedicated box, a headless Linux host, or a cloud container), turn on cookie sync so this Mac keeps that remote browser signed in to the sites you choose. Open Dashboard → Settings → This Mac → Browser. Cookie sync is off by default and is available only in remote mode with an external CLI on this Mac. Turn on cookie sync, add the sites you want kept in sync to the Domains allowlist (for examplegithub.com and accounts.google.com), and set the Target profile that receives them (the managed profile name on the remote Gateway, imported by default). A status row shows whether sync is running.
If a pending addition would restore a domain removed in another Dashboard window, it is discarded. Review the updated list and add the intended domains again.
While enabled, the app supervises the openclaw browser cookie-sync --watch command against the connected Gateway. Cookies are decrypted locally on this Mac (one macOS Keychain or Touch ID prompt per session) and pushed to the remote profile over the app’s existing encrypted Gateway connection; only the domains on the allowlist are ever sent, and cookie values are never written to logs. An empty allowlist syncs nothing. As with import, some Google sessions use device-bound session credentials (DBSC) that stay tied to this Mac and may still require re-authentication after sync; for those sites, drive the browser on the Mac itself through the browser node proxy instead.
Choose a Gateway mode
The app’s Mac node uses its bundled private runtime in both modes. Only setup
and management of an app-owned local Gateway require the separate CLI install.
Remote mode and attachment to an independently managed local Gateway skip that
installation. Optional cookie sync still requires an external CLI on this Mac,
and an existing separate node service keeps its own CLI lifecycle.
See Gateway on macOS for manual recovery.
What the app owns
Native code owns device-local capabilities and the Connection window; the Dashboard owns all settings UI. Device preferences stay on this Mac, while the embedded Dashboard asks the app to read or change them and open native permission, shortcut, microphone-test, or browser-import panels.- Menu bar status, notifications, health, WebChat, and the floating Quick Chat bar.
- macOS permission prompts for screen, microphone, speech, automation, and accessibility.
- One Mac node that combines the native widget panel, camera/screen capture, notifications, location, and computer control with the CLI node host’s system, browser, plugin, skill, and MCP commands.
- Exec approval prompts for Mac-hosted commands.
- App-context execution for approved shell commands, preserving the app’s macOS permission attribution while the CLI runtime owns shared node policy.
- Remote-mode SSH tunnels or direct Gateway connections.