Browser (openclaw-managed)
OpenClaw는 agent가 제어하는 전용 Chrome/Brave/Edge/Chromium profile을 실행할 수 있습니다. 이 profile은 개인 브라우저와 분리되어 있으며, Gateway 내부의 작은 로컬 control service를 통해 관리됩니다. (loopback only) 입문자 관점:- 이것은 agent 전용의 별도 브라우저라고 생각하면 됩니다.
openclawprofile은 개인 브라우저 profile을 건드리지 않습니다.- agent는 안전한 레인 안에서 탭을 열고, 페이지를 읽고, 클릭하고, 입력할 수 있습니다.
- 기본
chromeprofile은 extension relay를 통해 시스템 기본 Chromium 브라우저를 사용합니다. 격리된 managed browser가 필요하면openclaw로 전환하세요.
제공되는 것
- openclaw라는 별도 browser profile(기본적으로 주황색 accent).
- 예측 가능한 탭 제어(list/open/focus/close).
- Agent action(click/type/drag/select), snapshot, screenshot, PDF.
- 선택적 다중 profile 지원(
openclaw,work,remote, …).
빠른 시작
Profiles: openclaw vs chrome
openclaw: managed, isolated browser(extension 필요 없음).chrome: 시스템 브라우저에 연결하는 extension relay(OpenClaw extension이 탭에 attach되어 있어야 함).
browser.defaultProfile: "openclaw"를 설정하세요.
Configuration
Browser 설정은~/.openclaw/openclaw.json에 있습니다.
- browser control service는
gateway.port에서 파생된 포트의 loopback에 bind됩니다 (기본값:18791, 즉 gateway + 2). relay는 다음 포트(18792)를 사용합니다. - Gateway 포트(
gateway.port또는OPENCLAW_GATEWAY_PORT)를 override하면, 파생 browser 포트도 같은 “family” 안에서 함께 이동합니다. cdpUrl은 설정하지 않으면 기본적으로 relay 포트를 사용합니다.remoteCdpTimeoutMs는 remote(non-loopback) CDP reachability check에 적용됩니다.remoteCdpHandshakeTimeoutMs는 remote CDP WebSocket reachability check에 적용됩니다.- Browser navigation/open-tab은 SSRF guard가 navigation 전에 적용되고, navigation 후 최종
http(s)URL에서도 best-effort로 다시 검사됩니다. browser.ssrfPolicy.dangerouslyAllowPrivateNetwork의 기본값은true입니다(trusted-network model). 엄격한 public-only browsing이 필요하면false로 설정하세요.- 호환성을 위해
browser.ssrfPolicy.allowPrivateNetwork도 legacy alias로 계속 지원됩니다. attachOnly: true는 “로컬 browser는 절대 실행하지 말고, 이미 실행 중일 때만 attach하라”는 뜻입니다.color와 profile별color는 browser UI에 tint를 적용해서 어떤 profile이 활성화되어 있는지 보여줍니다.- 기본 profile은
openclaw입니다(OpenClaw-managed standalone browser). Chrome extension relay를 기본값으로 쓰려면defaultProfile: "chrome"을 사용하세요. - 자동 감지 순서: 시스템 기본 browser가 Chromium 기반이면 그것을 사용, 아니면 Chrome → Brave → Edge → Chromium → Chrome Canary.
- 로컬
openclawprofile은cdpPort/cdpUrl을 자동 할당합니다. 이 값은 remote CDP에만 설정하세요.
Brave(또는 다른 Chromium 기반 브라우저) 사용
시스템 기본 browser가 Chromium 기반(Chrome/Brave/Edge 등)이면 OpenClaw가 자동으로 사용합니다. 자동 감지를 override하려면browser.executablePath 를 설정하세요.
CLI 예시:
Local vs remote control
- Local control (기본값): Gateway가 loopback control service를 시작하고 로컬 browser를 실행할 수 있습니다.
- Remote control (node host): browser가 있는 머신에서 node host를 실행하면 Gateway가 그쪽으로 browser action을 proxy합니다.
- Remote CDP:
browser.profiles.<name>.cdpUrl(또는browser.cdpUrl)을 설정해 remote Chromium 기반 browser에 attach합니다. 이 경우 OpenClaw는 로컬 browser를 실행하지 않습니다.
- Query token(예:
https://provider.example?token=<token>) - HTTP Basic auth(예:
https://user:pass@provider.example)
/json/* endpoint 호출과 CDP WebSocket 연결 시 이 auth를 그대로 유지합니다. token을 config 파일에 커밋하는 대신 환경 변수나 secret manager를 사용하는 편이 좋습니다.
Node browser proxy(zero-config 기본값)
browser가 있는 머신에서 node host 를 실행하면, OpenClaw는 추가 browser config 없이도 browser tool 호출을 해당 node로 자동 라우팅할 수 있습니다. 이것이 remote gateway의 기본 경로입니다. 참고:- node host는 로컬 browser control server를 proxy command 를 통해 노출합니다.
- profile은 node 자신의
browser.profilesconfig에서 옵니다(로컬과 동일). - 원하지 않으면 비활성화할 수 있습니다.
- node에서:
nodeHost.browserProxy.enabled=false - gateway에서:
gateway.nodes.browser.mode="off"
- node에서:
Browserless(hosted remote CDP)
Browserless는 HTTPS로 CDP endpoint를 제공하는 hosted Chromium 서비스입니다. OpenClaw browser profile을 Browserless region endpoint로 지정하고 API key로 인증할 수 있습니다. 예시:<BROWSERLESS_API_KEY>는 실제 Browserless token으로 바꾸세요.- Browserless 계정에 맞는 region endpoint를 선택하세요(자세한 내용은 공식 문서 참고).
Direct WebSocket CDP providers
일부 hosted browser 서비스는 표준 HTTP 기반 CDP discovery(/json/version) 대신 직접 WebSocket endpoint 를 제공합니다. OpenClaw는 둘 다 지원합니다.
- HTTP(S) endpoint (예: Browserless) — OpenClaw가
/json/version을 호출해 WebSocket debugger URL을 찾은 다음 연결합니다. - WebSocket endpoint (
ws:///wss://) — OpenClaw가/json/version을 건너뛰고 직접 연결합니다. Browserbase 같은 서비스나 WebSocket URL을 직접 제공하는 provider에 사용하세요.
Browserbase
Browserbase는 built-in CAPTCHA solving, stealth mode, residential proxies를 제공하는 headless browser 클라우드 플랫폼입니다.- 가입한 뒤 Overview dashboard 에서 API Key 를 복사하세요.
<BROWSERBASE_API_KEY>는 실제 Browserbase API key로 바꾸세요.- Browserbase는 WebSocket connect 시 browser session을 자동 생성하므로 별도의 수동 session 생성이 필요 없습니다.
- 무료 tier는 동시 세션 1개와 월 1 browser hour를 제공합니다. 유료 플랜 제한은 pricing을 참고하세요.
- 전체 API reference, SDK guide, integration example은 Browserbase docs 를 참고하세요.
Security
핵심 개념:- Browser control은 loopback-only이며, 액세스는 Gateway auth 또는 node pairing을 통해 흐릅니다.
- browser control이 활성화되어 있고 auth가 설정되어 있지 않으면, OpenClaw는 시작 시
gateway.auth.token을 자동 생성하고 config에 영속 저장합니다. - Gateway와 모든 node host는 private network(Tailscale)에 두고, public exposure는 피하세요.
- remote CDP URL/token은 secret으로 취급하세요. 환경 변수 또는 secret manager 사용을 권장합니다.
- 가능하면 암호화된 endpoint(HTTPS 또는 WSS)와 짧은 수명의 token을 사용하세요.
- 장수 token을 config 파일에 직접 넣는 것은 피하세요.
Profiles (multi-browser)
OpenClaw는 여러 named profile(routing config)을 지원합니다. profile 유형은 다음과 같습니다.- openclaw-managed: 자체 user data directory + CDP port를 가진 전용 Chromium 기반 browser 인스턴스
- remote: 명시적인 CDP URL(다른 곳에서 실행 중인 Chromium 기반 browser)
- extension relay: 로컬 relay + Chrome extension을 통한 기존 Chrome tab
openclawprofile은 없으면 자동 생성됩니다.chromeprofile은 Chrome extension relay용으로 내장되어 있습니다(기본적으로http://127.0.0.1:18792를 가리킴).- 로컬 CDP 포트는 기본적으로 18800–18899 에서 할당됩니다.
- profile을 삭제하면 해당 로컬 data directory는 휴지통으로 이동됩니다.
?profile=<name> 을 받습니다. CLI에서는 --browser-profile 을 사용합니다.
Chrome extension relay(기존 Chrome 사용)
OpenClaw는 로컬 CDP relay + Chrome extension을 통해 기존 Chrome tab 도 제어할 수 있습니다(별도의 “openclaw” Chrome 인스턴스 없이). 전체 가이드: Chrome extension 흐름:- Gateway가 로컬에서 실행되거나(같은 머신), browser 머신에서 node host가 실행됩니다.
- 로컬 relay server 가 loopback
cdpUrl에서 대기합니다(기본값:http://127.0.0.1:18792). - 제어할 tab에서 OpenClaw Browser Relay extension 아이콘을 클릭해 attach합니다(자동 attach되지 않음).
- agent는 올바른 profile을 선택해 일반
browsertool을 통해 그 tab을 제어합니다.
Sandboxed sessions
agent session이 sandboxed라면,browser tool은 기본적으로 target="sandbox"(sandbox browser)일 수 있습니다.
Chrome extension relay takeover는 host browser control이 필요하므로, 다음 중 하나를 선택해야 합니다.
- session을 unsandboxed로 실행하거나
agents.defaults.sandbox.browser.allowHostControl: true를 설정하고 tool 호출 시target="host"를 사용합니다.
Setup
- extension을 로드합니다(dev/unpacked):
- Chrome →
chrome://extensions→ “Developer mode” 활성화 - “Load unpacked” →
openclaw browser extension path가 출력한 디렉터리 선택 - extension을 pin한 뒤 제어할 tab에서 클릭합니다(badge에
ON표시).
- 사용:
- CLI:
openclaw browser --browser-profile chrome tabs - Agent tool:
browserwithprofile="chrome"
- 이 모드는 대부분의 작업(screenshot/snapshot/action)에 Playwright-on-CDP를 사용합니다.
- detach하려면 extension 아이콘을 다시 클릭하세요.
- 기본적으로 relay는 loopback-only로 두세요. relay가 다른 network namespace에서 접근 가능해야 한다면(예: WSL2의 Gateway, Windows의 Chrome),
browser.relayBindHost를0.0.0.0같은 명시적 bind address로 설정하되 주변 네트워크는 비공개이며 인증된 상태로 유지하세요.
격리 보장
- 전용 user data dir: 개인 browser profile을 절대 건드리지 않습니다.
- 전용 포트: 개발 워크플로와 충돌하지 않도록
9222를 피합니다. - 예측 가능한 탭 제어: “마지막 탭”이 아니라
targetId로 대상 탭을 지정합니다.
Browser selection
로컬 실행 시 OpenClaw는 사용 가능한 브라우저를 다음 순서로 선택합니다.- Chrome
- Brave
- Edge
- Chromium
- Chrome Canary
browser.executablePath 로 override할 수 있습니다.
플랫폼별:
- macOS:
/Applications와~/Applications를 확인합니다. - Linux:
google-chrome,brave,microsoft-edge,chromium등을 찾습니다. - Windows: 일반적인 설치 경로를 확인합니다.
Control API (선택 사항)
로컬 integration 전용으로, Gateway는 작은 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 - Debugging:
GET /console,POST /pdf - Debugging:
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
?profile=<name> 을 받습니다.
gateway auth가 설정되어 있다면 browser HTTP route도 auth가 필요합니다.
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>또는 해당 password를 사용하는 HTTP Basic auth
Playwright requirement
일부 기능(navigate/act/AI snapshot/role snapshot, element screenshot, PDF)은 Playwright가 필요합니다. Playwright가 설치되어 있지 않으면, 해당 endpoint는 명확한 501 error를 반환합니다. ARIA snapshot과 기본 screenshot은 openclaw-managed Chrome에서 계속 동작합니다. Chrome extension relay driver에서는 ARIA snapshot과 screenshot에도 Playwright가 필요합니다.Playwright is not available in this gateway build 가 보이면, 전체 Playwright 패키지(playwright-core가 아님)를 설치하고 gateway를 재시작하거나, browser support가 포함된 OpenClaw를 다시 설치하세요.
Docker Playwright install
Gateway를 Docker에서 실행한다면npx playwright 는 피하세요(npm override conflict). 대신 번들된 CLI를 사용하세요.
PLAYWRIGHT_BROWSERS_PATH 를 설정하고(예: /home/node/.cache/ms-playwright), /home/node 가 OPENCLAW_HOME_VOLUME 또는 bind mount로 영속화되도록 하세요. 자세한 내용은 Docker 를 참고하세요.
동작 방식(내부)
상위 수준 흐름:- 작은 control server 가 HTTP 요청을 받습니다.
- CDP 를 통해 Chromium 기반 browser(Chrome/Brave/Edge/Chromium)에 연결합니다.
- 고급 action(click/type/snapshot/PDF)에는 CDP 위에서 Playwright 를 사용합니다.
- Playwright가 없으면 non-Playwright 작업만 사용할 수 있습니다.
CLI quick reference
모든 명령은 특정 profile을 지정하기 위해--browser-profile <name> 을 받습니다.
모든 명령은 machine-readable output을 위한 --json 도 지원합니다(stable payloads).
기본:
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
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
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 report.pdfopenclaw browser waitfordownload report.pdfopenclaw browser upload /tmp/openclaw/uploads/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
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 --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"
upload와dialog는 arming 호출입니다. chooser/dialog를 트리거하는 click/press 전에 먼저 실행하세요.- download 와 trace 출력 경로는 OpenClaw temp root로 제한됩니다.
- traces:
/tmp/openclaw(fallback:${os.tmpdir()}/openclaw) - downloads:
/tmp/openclaw/downloads(fallback:${os.tmpdir()}/openclaw/downloads)
- traces:
- upload 경로도 OpenClaw temp uploads root로 제한됩니다.
- uploads:
/tmp/openclaw/uploads(fallback:${os.tmpdir()}/openclaw/uploads)
- uploads:
upload는--input-ref또는--element로 file input을 직접 설정할 수도 있습니다.snapshot:--format ai(Playwright 설치 시 기본값): 숫자 ref(aria-ref="<n>")가 포함된 AI snapshot을 반환합니다.--format aria: accessibility tree를 반환합니다(ref 없음, inspection 전용).--efficient(또는--mode efficient): compact role snapshot preset(interactive + compact + depth + lower maxChars).- Config 기본값(tool/CLI 전용): 호출자가 mode를 넘기지 않을 때 efficient snapshot을 사용하려면
browser.snapshotDefaults.mode: "efficient"를 설정하세요(Gateway configuration 참고). - Role snapshot 옵션(
--interactive,--compact,--depth,--selector)은ref=e12같은 ref를 가진 role-based snapshot을 강제합니다. --frame "<iframe selector>"는 role snapshot 범위를 특정 iframe으로 제한합니다(e12같은 role ref와 함께 사용).--interactive는 상호작용 가능한 element를 고르기 쉬운 평면 목록으로 출력합니다(action 구동에 가장 적합).--labels는 overlay된 ref label이 포함된 viewport-only screenshot을 추가합니다(MEDIA:<path>출력).
click/type등은snapshot에서 나온ref가 필요합니다(숫자12또는 role refe12). action에는 의도적으로 CSS selector를 지원하지 않습니다.
Snapshots and refs
OpenClaw는 두 가지 “snapshot” 스타일을 지원합니다.-
AI snapshot (numeric refs):
openclaw browser snapshot(기본값,--format ai)- 출력: 숫자 ref가 포함된 텍스트 snapshot
- 액션:
openclaw browser click 12,openclaw browser type 23 "hello" - 내부적으로는 Playwright의
aria-ref로 ref를 해석합니다.
-
Role snapshot (
e12같은 role ref):openclaw browser snapshot --interactive(또는--compact,--depth,--selector,--frame)- 출력:
[ref=e12](및 선택적으로[nth=1])가 포함된 role 기반 list/tree - 액션:
openclaw browser click e12,openclaw browser highlight e12 - 내부적으로는
getByRole(...)로 ref를 해석합니다(중복 시nth()추가). --labels를 추가하면 overlay된e12label이 들어간 viewport screenshot도 포함됩니다.
- 출력:
- ref는 navigation 사이에서 안정적이지 않습니다. 실패하면
snapshot을 다시 실행해 새 ref를 사용하세요. - role snapshot을
--frame과 함께 찍었다면, 다음 role snapshot 전까지 role ref는 해당 iframe 범위로 제한됩니다.
Wait power-ups
시간/텍스트 외에도 다양한 조건으로 기다릴 수 있습니다.- URL 대기(Playwright glob 지원):
openclaw browser wait --url "**/dash"
- Load state 대기:
openclaw browser wait --load networkidle
- JS predicate 대기:
openclaw browser wait --fn "window.ready===true"
- Selector가 visible 상태가 될 때까지 대기:
openclaw browser wait "#main"
Debug workflows
action이 실패했을 때(예: “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactiveclick <ref>/type <ref>를 사용합니다(interactive mode에서는 role ref 권장)- 여전히 실패하면
openclaw browser highlight <ref>로 Playwright가 무엇을 가리키는지 확인합니다 - 페이지 동작이 이상하면:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- 깊이 있게 디버깅하려면 trace를 기록합니다:
openclaw browser trace start- 문제를 재현
openclaw browser trace stop(TRACE:<path>출력)
JSON output
--json 은 스크립팅과 structured tooling용입니다.
예시:
refs 와 함께 작은 stats 블록(lines/chars/refs/interactive)이 포함되어, 도구가 payload 크기와 밀도를 판단할 수 있게 해줍니다.
State and environment knobs
이 옵션들은 “사이트가 X처럼 동작하게 만들기” 워크플로에 유용합니다.- Cookies:
cookies,cookies set,cookies clear - Storage:
storage local|session get|set|clear - Offline:
set offline on|off - Headers:
set headers --headers-json '{"X-Debug":"1"}'(legacyset headers --json '{"X-Debug":"1"}'도 계속 지원) - HTTP basic auth:
set credentials user pass(또는--clear) - Geolocation:
set geo <lat> <lon> --origin "https://example.com"(또는--clear) - Media:
set media dark|light|no-preference|none - Timezone / locale:
set timezone ...,set locale ... - Device / viewport:
set device "iPhone 14"(Playwright device preset)set viewport 1280 720
Security & privacy
- openclaw browser profile에는 로그인된 session이 들어 있을 수 있으므로 민감한 것으로 취급하세요.
browser act kind=evaluate/openclaw browser evaluate와wait --fn은 페이지 컨텍스트에서 임의 JavaScript를 실행합니다. 프롬프트 인젝션이 이를 조종할 수 있습니다. 필요 없다면browser.evaluateEnabled=false로 비활성화하세요.- 로그인과 anti-bot 관련 참고(X/Twitter 등)는 Browser login + X/Twitter posting 을 보세요.
- Gateway/node host는 비공개(loopback 또는 tailnet-only)로 유지하세요.
- Remote CDP endpoint는 강력합니다. 터널링하고 보호하세요.
Troubleshooting
Linux 전용 이슈(특히 snap Chromium)는 Browser troubleshooting 를 참고하세요. WSL2 Gateway + Windows Chrome split-host 구성은 WSL2 + Windows + remote Chrome CDP troubleshooting 를 참고하세요.Agent tools + how control works
agent는 browser 자동화를 위해 하나의 tool 을 받습니다.browser— status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
browser snapshot은 안정적인 UI tree(AI 또는 ARIA)를 반환합니다.browser act는 snapshot의refID를 사용해 click/type/drag/select를 수행합니다.browser screenshot은 pixel을 캡처합니다(full page 또는 element).browser는 다음을 받습니다.profile: named browser profile(openclaw, chrome, remote CDP)을 선택target(sandbox|host|node): browser가 어디에 있는지 선택- sandboxed session에서
target: "host"를 쓰려면agents.defaults.sandbox.browser.allowHostControl=true가 필요합니다. target을 생략하면 sandboxed session은 기본적으로sandbox, non-sandbox session은host를 사용합니다.- browser-capable node가 연결되어 있으면,
target="host"또는target="node"로 고정하지 않는 한 tool이 자동 라우팅될 수 있습니다.