Browser (clawd-verwaltet)
Browser-Tool: Clawd kann Chrome/Brave steuern. So richtest du es ein. OpenClaw kann ein dediziertes Chrome/Brave/Edge/Chromium-Profil betreiben, das der Agent steuert. Es ist von deinem persönlichen Browser getrennt und wird über einen kleinen lokalen Steuerungs-Service im Gateway verwaltet (nur Loopback). Kurzüberblick:
- Als separaten, nur für den Agenten gedachten Browser verstehen.
- Das Profil
clawdberührt nicht dein persönliches Browser-Profil. - Der Agent kann Tabs öffnen, Seiten lesen, klicken und tippen in einer sicheren Spur.
- Das Standard-Profil
chromenutzt den System-Standard-Chromium-Browser über den Extension-Relay; für den isolierten verwalteten Browser aufclawdwechseln.
Was du bekommst
- Ein separates Browser-Profil clawd (standardmäßig orange Akzent).
- Deterministische Tab-Steuerung (list/open/focus/close).
- Agent-Aktionen (click/type/drag/select), Snapshots, Screenshots, PDFs.
- Optionale Multi-Profil-Unterstützung (
clawd,work,remote, …).
Dieser Browser ist nicht dein Daily-Driver. Er ist eine sichere, isolierte Oberfläche für Agent-Automatisierung und -Verifikation.
Schnellstart
openclaw browser --browser-profile clawd status
openclaw browser --browser-profile clawd start
openclaw browser --browser-profile clawd open https://example.com
openclaw browser --browser-profile clawd snapshotBei „Browser disabled“ in der Config aktivieren (siehe unten) und Gateway neu starten.
Profile: clawd vs chrome
clawd: verwalteter, isolierter Browser (keine Extension nötig).chrome: Extension-Relay zu deinem System-Browser (OpenClaw-Extension muss an einen Tab angehängt sein).
browser.defaultProfile: "clawd" setzen für verwalteten Modus standardmäßig.
Konfiguration
Browser-Einstellungen stehen in ~/.clawdbot/openclaw.json.
{
browser: {
enabled: true, // default: true
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
remoteCdpTimeoutMs: 1500, // remote CDP HTTP timeout (ms)
remoteCdpHandshakeTimeoutMs: 3000, // remote CDP WebSocket handshake timeout (ms)
defaultProfile: "chrome",
color: "#FF4500",
headless: false,
noSandbox: false,
attachOnly: false,
executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
profiles: {
clawd: { cdpPort: 18800, color: "#FF4500" },
work: { cdpPort: 18801, color: "#0066CC" },
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }
}
}
}Hinweise:
- Der Browser-Steuerungs-Service bindet an Loopback auf einem von
gateway.portabgeleiteten Port (Standard:18791, also Gateway + 2). Der Relay nutzt den nächsten Port (18792). - Bei Überschreibung des Gateway-Ports (
gateway.portoderCLAWDBOT_GATEWAY_PORT) verschieben sich die abgeleiteten Browser-Ports in derselben „Familie“. cdpUrlstandardmäßig Relay-Port, wenn ungesetzt.remoteCdpTimeoutMsgilt für Remote- (nicht-Loopback-) CDP-Erreichbarkeitsprüfungen.remoteCdpHandshakeTimeoutMsgilt für Remote-CDP-WebSocket-Erreichbarkeitsprüfungen.attachOnly: trueheißt „niemals lokalen Browser starten; nur anhängen, wenn bereits laufend“.color+ pro-Profil-colorfärben die Browser-UI, damit du siehst, welches Profil aktiv ist.- Standard-Profil ist
chrome(Extension-Relay). Für den verwalteten BrowserdefaultProfile: "clawd"nutzen. - Auto-Erkennung: System-Standard-Browser wenn Chromium-basiert; sonst Chrome → Brave → Edge → Chromium → Chrome Canary.
- Lokale
clawd-Profile vergebencdpPort/cdpUrlautomatisch — nur bei Remote-CDP setzen.
Brave (oder anderen Chromium-Browser) nutzen
Ist dein System-Standard-Browser Chromium-basiert (Chrome/Brave/Edge usw.), nutzt OpenClaw ihn automatisch. browser.executablePath setzen, um die Auto-Erkennung zu überschreiben. CLI-Beispiel:
openclaw config set browser.executablePath "/usr/bin/google-chrome"// macOS
{
browser: {
executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
}
}
// Windows
{
browser: {
executablePath: "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"
}
}
// Linux
{
browser: {
executablePath: "/usr/bin/brave-browser"
}
}Lokale vs. Remote-Steuerung
- Lokale Steuerung (Standard): Das Gateway startet den Loopback-Steuerungs-Service und kann einen lokalen Browser starten.
- Remote-Steuerung (Node-Host): Einen Node-Host auf der Maschine mit dem Browser betreiben; das Gateway proxied Browser-Aktionen dorthin.
- Remote-CDP:
browser.profiles.<name>.cdpUrl(oderbrowser.cdpUrl) setzen, um sich an einen Remote-Chromium-Browser anzuhängen. In dem Fall startet OpenClaw keinen lokalen Browser.
Remote-CDP-URLs können Auth enthalten:
- Query-Tokens (z. B.
https://provider.example?token=<token>) - HTTP-Basic-Auth (z. B.
https://user:pass@provider.example)
OpenClaw bewahrt die Auth beim Aufruf von /json/*-Endpunkten und bei der CDP-WebSocket-Verbindung. Tokens bevorzugt über Umgebungsvariablen oder Secrets-Manager statt in Config-Dateien.
Node-Browser-Proxy (Zero-Config-Standard)
Läuft ein Node-Host auf der Maschine mit deinem Browser, kann OpenClaw Browser-Tool-Aufrufe ohne zusätzliche Browser-Config automatisch an diesen Node routen. Das ist der Standardweg für Remote-Gateways. Hinweise:
- Der Node-Host exponiert seinen lokalen Browser-Steuerungs-Server über einen Proxy-Befehl.
- Profile kommen aus der eigenen
browser.profiles-Config des Nodes (wie lokal). - Deaktivieren, wenn unerwünscht:
- Auf dem Node:
nodeHost.browserProxy.enabled=false - Auf dem Gateway:
gateway.nodes.browser.mode="off"
- Auf dem Node:
Browserless (gehosteter Remote-CDP)
Browserless ist ein gehosteter Chromium-Dienst, der CDP-Endpunkte über HTTPS exponiert. Du kannst ein OpenClaw-Browser-Profil auf einen Browserless-Region-Endpoint zeigen und mit deinem API-Key authentifizieren. Beispiel:
{
browser: {
enabled: true,
defaultProfile: "browserless",
remoteCdpTimeoutMs: 2000,
remoteCdpHandshakeTimeoutMs: 4000,
profiles: {
browserless: {
cdpUrl: "https://production-sfo.browserless.io?token=<BROWSERLESS_API_KEY>",
color: "#00AA00"
}
}
}
}Hinweise:
<BROWSERLESS_API_KEY>durch deinen echten Browserless-Token ersetzen.- Den Region-Endpoint wählen, der zu deinem Browserless-Account passt (siehe deren Docs).
Sicherheit
Kernpunkte:
- Browser-Steuerung nur über Loopback; Zugriff läuft über Gateway-Auth oder Node-Pairing.
- Gateway und Node-Hosts in einem privaten Netz (Tailscale) halten; keine öffentliche Exposition.
- Remote-CDP-URLs/Tokens als Secrets behandeln; Env-Vars oder Secrets-Manager bevorzugen.
Remote-CDP-Tipps:
- HTTPS-Endpoints und kurzlebige Tokens bevorzugen, wo möglich.
- Langlebige Tokens nicht direkt in Config-Dateien einbetten.
Profile (Multi-Browser)
OpenClaw unterstützt mehrere benannte Profile (Routing-Configs). Profile können sein:
- clawd-verwaltet: dedizierte Chromium-basierte Browser-Instanz mit eigenem User-Data-Verzeichnis + CDP-Port
- remote: explizite CDP-URL (Chromium-Browser läuft woanders)
- Extension-Relay: deine bestehenden Chrome-Tab(s) über lokalen Relay + Chrome-Extension
Defaults:
- Das Profil
clawdwird bei Fehlen automatisch angelegt. - Das Profil
chromeist eingebaut für den Chrome-Extension-Relay (zeigt standardmäßig aufhttp://127.0.0.1:18792). - Lokale CDP-Ports werden standardmäßig aus 18800–18899 vergeben.
- Beim Löschen eines Profils wird sein lokales Data-Verzeichnis in den Papierkorb verschoben.
Alle Steuerungs-Endpoints akzeptieren ?profile=<name>; die CLI nutzt --browser-profile.
Chrome-Extension-Relay (bestehenden Chrome nutzen)
OpenClaw kann auch deine bestehenden Chrome-Tabs steuern (ohne separate „clawd“-Chrome-Instanz) über einen lokalen CDP-Relay + Chrome-Extension. Vollständige Anleitung: Chrome Extension. Ablauf:
- Das Gateway läuft lokal (gleiche Maschine) oder ein Node-Host läuft auf der Browser-Maschine.
- Ein lokaler Relay-Server lauscht auf Loopback-
cdpUrl(Standard:http://127.0.0.1:18792). - Du klickst auf das OpenClaw Browser Relay-Extension-Icon auf einem Tab zum Anhängen (es hängt nicht automatisch an).
- Der Agent steuert diesen Tab über das normale
browser-Tool durch Wahl des richtigen Profils.
Läuft das Gateway woanders, einen Node-Host auf der Browser-Maschine betreiben, damit das Gateway Browser-Aktionen proxen kann.
Sandboxed-Sitzungen
Ist die Agent-Sitzung sandboxed, nutzt das browser-Tool standardmäßig target="sandbox" (Sandbox-Browser). Chrome-Extension-Relay-Übernahme erfordert Host-Browser-Steuerung, also entweder:
- Sitzung unsandboxed laufen lassen, oder
agents.defaults.sandbox.browser.allowHostControl: truesetzen und beim Tool-Aufruftarget="host"nutzen.
Setup
- Extension laden (Dev/Unpacked):
openclaw browser extension install- Chrome →
chrome://extensions→ „Entwicklermodus“ aktivieren - „Entpackte Erweiterung laden“ → Verzeichnis wählen, das
openclaw browser extension pathausgibt - Extension anheften, dann auf dem zu steuernden Tab klicken (Badge zeigt
ON).
- Nutzen:
- CLI:
openclaw browser --browser-profile chrome tabs - Agent-Tool:
browsermitprofile="chrome"
Optional: Für anderen Namen oder Relay-Port eigenes Profil anlegen:
openclaw browser create-profile \
--name my-chrome \
--driver extension \
--cdp-url http://127.0.0.1:18792 \
--color "#00AA00"Hinweise:
- Dieser Modus nutzt Playwright-on-CDP für die meisten Operationen (Screenshots/Snapshots/Actions).
- Abhängen durch erneutes Klicken auf das Extension-Icon.
Isolations-Garantien
- Eigenes User-Data-Verzeichnis: berührt nie dein persönliches Browser-Profil.
- Eigene Ports: vermeidet
9222, um Kollisionen mit Dev-Workflows zu verhindern. - Deterministische Tab-Steuerung: Tabs per
targetIdansprechen, nicht „letzter Tab“.
Browser-Auswahl
Beim lokalen Start wählt OpenClaw die erste verfügbare:
- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
Überschreiben mit browser.executablePath. Plattformen:
- macOS: prüft
/Applicationsund~/Applications. - Linux: sucht nach
google-chrome,brave,microsoft-edge,chromiumusw. - Windows: prüft gängige Installationsorte.
Control-API (optional)
Nur für lokale Integrationen exponiert das Gateway eine kleine Loopback-HTTP-API:
- Status/Start/Stop:
GET /,POST /start,POST /stop - Tabs:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Snapshot/Screenshot:
GET /snapshot,POST /screenshot - Actions:
POST /navigate,POST /act - Hooks:
POST /hooks/file-chooser,POST /hooks/dialog - Downloads:
POST /download,POST /wait/download - Debug:
GET /console,POST /pdf - Debug:
GET /errors,GET /requests,POST /trace/start,POST /trace/stop,POST /highlight - Network:
POST /response/body - State:
GET /cookies,POST /cookies/set,POST /cookies/clear - State:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Settings:
POST /set/offline,POST /set/headers,POST /set/credentials,POST /set/geolocation,POST /set/media,POST /set/timezone,POST /set/locale,POST /set/device
Alle Endpoints akzeptieren ?profile=<name>.
Playwright-Anforderung
Einige Features (navigate/act/AI-Snapshot/Role-Snapshot, Element-Screenshots, PDF) benötigen Playwright. Ist Playwright nicht installiert, geben diese Endpoints einen klaren 501-Fehler zurück. ARIA-Snapshots und einfache Screenshots funktionieren weiterhin für clawd-verwaltetes Chrome. Beim Chrome-Extension-Relay-Treiber benötigen ARIA-Snapshots und Screenshots Playwright. Bei Playwright is not available in this gateway build: volles Playwright-Paket (nicht playwright-core) installieren und Gateway neu starten, oder OpenClaw mit Browser-Support neu installieren.
So funktioniert es (intern)
Ablauf auf hoher Ebene:
- Ein kleiner Steuerungs-Server nimmt HTTP-Anfragen entgegen.
- Er verbindet sich über CDP mit Chromium-Browsern (Chrome/Brave/Edge/Chromium).
- Für erweiterte Aktionen (click/type/snapshot/PDF) nutzt er Playwright auf CDP.
- Fehlt Playwright, sind nur Operationen ohne Playwright verfügbar.
So bleibt die Agent-Schnittstelle stabil und deterministisch, während du lokale/remote Browser und Profile tauschen kannst.
CLI-Kurzreferenz
Alle Befehle akzeptieren --browser-profile <name> für ein bestimmtes Profil. Alle Befehle akzeptieren auch --json für maschinenlesbare Ausgabe (stabile Payloads). Grundlagen:
openclaw browser statusopenclaw browser startopenclaw browser stopopenclaw browser tabsopenclaw browser tabopenclaw browser tab newopenclaw browser tab select 2openclaw browser tab close 2openclaw browser open https://example.comopenclaw browser focus abcd1234openclaw browser close abcd1234
Inspektion:
openclaw browser screenshotopenclaw browser screenshot --full-pageopenclaw browser screenshot --ref 12openclaw browser screenshot --ref e12openclaw browser snapshotopenclaw browser snapshot --format aria --limit 200openclaw browser snapshot --interactive --compact --depth 6openclaw browser snapshot --efficientopenclaw browser snapshot --labelsopenclaw browser snapshot --selector "#main" --interactiveopenclaw browser snapshot --frame "iframe#main" --interactiveopenclaw browser console --level erroropenclaw browser errors --clearopenclaw browser requests --filter api --clearopenclaw browser pdfopenclaw browser responsebody "**/api" --max-chars 5000
Aktionen:
openclaw browser navigate https://example.comopenclaw browser resize 1280 720openclaw browser click 12 --doubleopenclaw browser click e12 --doubleopenclaw browser type 23 "hello" --submitopenclaw browser press Enteropenclaw browser hover 44openclaw browser scrollintoview e12openclaw browser drag 10 11openclaw browser select 9 OptionA OptionBopenclaw browser download e12 /tmp/report.pdfopenclaw browser waitfordownload /tmp/report.pdfopenclaw browser upload /tmp/file.pdfopenclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'openclaw browser dialog --acceptopenclaw browser wait --text "Done"openclaw browser wait "#main" --url "**/dash" --load networkidle --fn "window.ready===true"openclaw browser evaluate --fn '(el) => el.textContent' --ref 7openclaw browser highlight e12openclaw browser trace startopenclaw browser trace stop
State:
openclaw browser cookiesopenclaw browser cookies set session abc123 --url "https://example.com"openclaw browser cookies clearopenclaw browser storage local getopenclaw browser storage local set theme darkopenclaw browser storage session clearopenclaw browser set offline onopenclaw browser set headers --json '{"X-Debug":"1"}'openclaw browser set credentials user passopenclaw browser set credentials --clearopenclaw browser set geo 37.7749 -122.4194 --origin "https://example.com"openclaw browser set geo --clearopenclaw browser set media darkopenclaw browser set timezone America/New_Yorkopenclaw browser set locale en-USopenclaw browser set device "iPhone 14"
Hinweise:
uploadunddialogsind Arming-Aufrufe; vor dem Klick/Tastendruck ausführen, der den Chooser/Dialog auslöst.uploadkann Datei-Inputs auch direkt per--input-refoder--elementsetzen.snapshot:--format ai(Standard bei installiertem Playwright): AI-Snapshot mit numerischen Refs (aria-ref="<n>").--format aria: Accessibility-Tree (ohne Refs; nur Inspektion).--efficient(oder--mode efficient): kompaktes Role-Snapshot-Preset (interactive + compact + depth + niedrigeres maxChars).- Config-Default (nur Tool/CLI):
browser.snapshotDefaults.mode: "efficient"setzen für effiziente Snapshots, wenn der Aufrufer keinen Modus übergibt (siehe Gateway-Konfiguration). - Role-Snapshot-Optionen (
--interactive,--compact,--depth,--selector) erzwingen einen rollenbasierten Snapshot mit Refs wieref=e12. --frame "<iframe selector>"begrenzt Role-Snapshots auf ein iframe (zusammen mit Role-Refs wiee12).--interactiveliefert eine flache, leicht wählbare Liste interaktiver Elemente (gut für Aktionen).--labelsfügt einen Viewport-Screenshot mit überlagerten Ref-Labels hinzu (gibtMEDIA:<path>aus).
click/type/usw. benötigen einenrefaussnapshot(numerisch12oder Role-Refe12). CSS-Selektoren werden für Aktionen bewusst nicht unterstützt.
Snapshots und Refs
OpenClaw unterstützt zwei „Snapshot“-Stile:
- AI-Snapshot (numerische Refs):
openclaw browser snapshot(Standard;--format ai) — Ausgabe: Text-Snapshot mit numerischen Refs. Aktionen:openclaw browser click 12,openclaw browser type 23 "hello". Intern wird der Ref über Playwrightsaria-refaufgelöst. - Role-Snapshot (Role-Refs wie
e12):openclaw browser snapshot --interactive(oder--compact,--depth,--selector,--frame) — Ausgabe: rollenbasierte Liste/Struktur mit[ref=e12](und optional[nth=1]). Aktionen:openclaw browser click e12,openclaw browser highlight e12. Intern wird der Ref übergetByRole(...)(plusnth()bei Duplikaten) aufgelöst.--labelsfür Viewport-Screenshot mit überlagertene12-Labels.
Ref-Verhalten:
- Refs sind nicht stabil über Navigationen; bei Fehlern
snapshoterneut ausführen und einen frischen Ref nutzen. - Wurde der Role-Snapshot mit
--frameerstellt, gelten Role-Refs bis zum nächsten Role-Snapshot nur für dieses iframe.
Wait-Power-Ups
Du kannst auf mehr warten als nur Zeit/Text:
- Auf URL warten (Globs von Playwright unterstützt):
openclaw browser wait --url "**/dash" - Auf Load-State warten:
openclaw browser wait --load networkidle - Auf JS-Prädikat warten:
openclaw browser wait --fn "window.ready===true" - Auf Sichtbarkeit eines Selektors warten:
openclaw browser wait "#main"
Kombinierbar:
openclaw browser wait "#main" \
--url "**/dash" \
--load networkidle \
--fn "window.ready===true" \
--timeout-ms 15000Debug-Workflows
Wenn eine Aktion fehlschlägt (z. B. „not visible“, „strict mode violation“, „covered“):
openclaw browser snapshot --interactiveclick <ref>/type <ref>nutzen (Role-Refs im interaktiven Modus bevorzugen)- Schlägt es weiter fehl:
openclaw browser highlight <ref>, um zu sehen, was Playwright anspricht - Verhält sich die Seite seltsam:
openclaw browser errors --clear,openclaw browser requests --filter api --clear - Für tiefes Debugging: Trace aufnehmen:
openclaw browser trace start, Problem reproduzieren,openclaw browser trace stop(gibtTRACE:<path>aus)
JSON-Ausgabe
--json für Skripte und strukturierte Tools. Beispiele:
openclaw browser status --json
openclaw browser snapshot --interactive --json
openclaw browser requests --filter api --json
openclaw browser cookies --jsonRole-Snapshots in JSON enthalten refs plus einen kleinen stats-Block (lines/chars/refs/interactive), damit Tools Payload-Größe und -Dichte bewerten können.
State- und Umgebungs-Stellschrauben
Nützlich für „Lass die Seite sich wie X verhalten“-Workflows:
- Cookies:
cookies,cookies set,cookies clear - Storage:
storage local|session get|set|clear - Offline:
set offline on|off - Headers:
set headers --json '{"X-Debug":"1"}'(oder--clear) - HTTP-Basic-Auth:
set credentials user pass(oder--clear) - Geolocation:
set geo <lat> <lon> --origin "https://example.com"(oder--clear) - Media:
set media dark|light|no-preference|none - Timezone/Locale:
set timezone ...,set locale ... - Device/Viewport:
set device "iPhone 14"(Playwright-Device-Presets),set viewport 1280 720
Sicherheit & Datenschutz
- Das clawd-Browser-Profil kann eingeloggte Sitzungen enthalten; als sensibel behandeln.
browser act kind=evaluate/openclaw browser evaluateundwait --fnführen beliebiges JavaScript im Seitenkontext aus. Prompt-Injection kann das steuern. Mitbrowser.evaluateEnabled=falsedeaktivieren, wenn nicht benötigt.- Für Logins und Anti-Bot-Hinweise (X/Twitter usw.): Browser-Login + X/Twitter-Posts.
- Gateway/Node-Host privat halten (Loopback oder nur Tailnet).
- Remote-CDP-Endpoints sind mächtig; tunneln und schützen.
Fehlerbehebung
Für Linux-spezifische Probleme (besonders Snap-Chromium): Browser-Fehlerbehebung.
Agent-Tools + wie die Steuerung funktioniert
Der Agent erhält ein Tool für Browser-Automatisierung:
browser— status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
Zuordnung:
browser snapshotliefert einen stabilen UI-Baum (AI oder ARIA).browser actnutzt die Snapshot-ref-IDs zum Klicken/Tippen/Ziehen/Auswählen.browser screenshoterfasst Pixel (ganze Seite oder Element).browserakzeptiert:profilefür ein benanntes Browser-Profil (clawd, chrome oder Remote-CDP).target(sandbox|host|node) für den Ort des Browsers.- Bei sandboxed Sitzungen erfordert
target: "host"agents.defaults.sandbox.browser.allowHostControl=true. - Ohne
target: sandboxed Sitzungen standardmäßigsandbox, nicht-sandbox Sitzungen standardmäßighost. - Ist ein browser-fähiger Node verbunden, kann das Tool automatisch dorthin routen, außer du setzt
target="host"odertarget="node".
So bleibt der Agent deterministisch und vermeidet fragile Selektoren.