chore(i18n): refresh id translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-14 09:16:26 +00:00
parent c3761ef29b
commit db5d55df6b
3 changed files with 429 additions and 320 deletions

View File

@ -1,28 +1,28 @@
---
read_when:
- Anda ingin menyajikan model dari mesin GPU Anda sendiri
- Anda sedang menyiapkan LM Studio atau proxy yang kompatibel dengan OpenAI
- Anda memerlukan panduan model lokal yang paling aman
- Anda ingin menyajikan model dari box GPU Anda sendiri
- Anda sedang menghubungkan LM Studio atau proxy yang kompatibel dengan OpenAI
- Anda membutuhkan panduan model lokal yang paling aman
summary: Jalankan OpenClaw pada LLM lokal (LM Studio, vLLM, LiteLLM, endpoint OpenAI kustom)
title: Model Lokal
x-i18n:
generated_at: "2026-04-13T08:50:45Z"
generated_at: "2026-04-14T09:14:20Z"
model: gpt-5.4
provider: openai
source_hash: 3ecb61b3e6e34d3666f9b688cd694d92c5fb211cf8c420fa876f7ccf5789154a
source_hash: 1544c522357ba4b18dfa6d05ea8d60c7c6262281b53863d9aee7002464703ca7
source_path: gateway/local-models.md
workflow: 15
---
# Model lokal
Lokal bisa dilakukan, tetapi OpenClaw mengharapkan konteks besar + pertahanan yang kuat terhadap injeksi prompt. Kartu kecil memotong konteks dan membocorkan mekanisme keamanan. Targetkan tinggi: **≥2 Mac Studio dengan spesifikasi maksimum atau rig GPU setara (~$30k+)**. Satu GPU **24 GB** hanya cocok untuk prompt yang lebih ringan dengan latensi lebih tinggi. Gunakan **varian model terbesar / ukuran penuh yang bisa Anda jalankan**; checkpoint yang sangat dikuantisasi atau “small” meningkatkan risiko injeksi prompt (lihat [Security](/id/gateway/security)).
Lokal memungkinkan, tetapi OpenClaw mengharapkan konteks besar + pertahanan kuat terhadap injeksi prompt. Kartu kecil memotong konteks dan melemahkan keamanan. Targetkan tinggi: **≥2 Mac Studio yang dimaksimalkan atau rig GPU setara (~$30k+)**. Satu GPU **24 GB** hanya cocok untuk prompt yang lebih ringan dengan latensi lebih tinggi. Gunakan **varian model terbesar / ukuran penuh yang bisa Anda jalankan**; checkpoint yang dikuantisasi secara agresif atau “kecil” meningkatkan risiko injeksi prompt (lihat [Keamanan](/id/gateway/security)).
Jika Anda menginginkan setup lokal dengan hambatan paling rendah, mulai dengan [LM Studio](/id/providers/lmstudio) atau [Ollama](/id/providers/ollama) dan `openclaw onboard`. Halaman ini adalah panduan yang opiniatif untuk stack lokal kelas atas dan server lokal kustom yang kompatibel dengan OpenAI.
Jika Anda menginginkan penyiapan lokal dengan hambatan paling rendah, mulai dengan [LM Studio](/id/providers/lmstudio) atau [Ollama](/id/providers/ollama) dan `openclaw onboard`. Halaman ini adalah panduan beropini untuk stack lokal kelas lebih tinggi dan server lokal kustom yang kompatibel dengan OpenAI.
## Rekomendasi: LM Studio + model lokal besar (Responses API)
## Direkomendasikan: LM Studio + model lokal besar (Responses API)
Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwen, DeepSeek, atau Llama ukuran penuh), aktifkan server lokal (default `http://127.0.0.1:1234`), dan gunakan Responses API untuk menjaga reasoning tetap terpisah dari teks akhir.
Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwen, DeepSeek, atau Llama ukuran penuh), aktifkan server lokal (default `http://127.0.0.1:1234`), dan gunakan Responses API agar penalaran tetap terpisah dari teks final.
```json5
{
@ -59,18 +59,18 @@ Stack lokal terbaik saat ini. Muat model besar di LM Studio (misalnya, build Qwe
}
```
**Daftar periksa setup**
**Daftar periksa penyiapan**
- Instal LM Studio: [https://lmstudio.ai](https://lmstudio.ai)
- Di LM Studio, unduh **build model terbesar yang tersedia** (hindari varian “small”/yang sangat dikuantisasi), mulai server, pastikan `http://127.0.0.1:1234/v1/models` menampilkannya.
- Di LM Studio, unduh **build model terbesar yang tersedia** (hindari varian “kecil”/yang sangat dikuantisasi), mulai server, pastikan `http://127.0.0.1:1234/v1/models` menampilkannya.
- Ganti `my-local-model` dengan ID model sebenarnya yang ditampilkan di LM Studio.
- Biarkan model tetap dimuat; cold-load menambah latensi saat startup.
- Biarkan model tetap dimuat; cold-load menambah latensi startup.
- Sesuaikan `contextWindow`/`maxTokens` jika build LM Studio Anda berbeda.
- Untuk WhatsApp, tetap gunakan Responses API agar hanya teks akhir yang dikirim.
- Untuk WhatsApp, tetap gunakan Responses API agar hanya teks final yang dikirim.
Tetap konfigurasikan model yang di-host bahkan saat menjalankan lokal; gunakan `models.mode: "merge"` agar fallback tetap tersedia.
### Konfigurasi hybrid: hosted primary, fallback lokal
### Konfigurasi hybrid: hosted sebagai utama, lokal sebagai fallback
```json5
{
@ -111,14 +111,14 @@ Tetap konfigurasikan model yang di-host bahkan saat menjalankan lokal; gunakan `
}
```
### Mengutamakan lokal dengan jaring pengaman hosted
### Lokal sebagai prioritas dengan jaring pengaman hosted
Tukar urutan primary dan fallback; pertahankan blok provider yang sama dan `models.mode: "merge"` agar Anda bisa fallback ke Sonnet atau Opus saat mesin lokal tidak tersedia.
Tukar urutan primary dan fallback; pertahankan blok provider yang sama dan `models.mode: "merge"` agar Anda bisa fallback ke Sonnet atau Opus saat box lokal tidak aktif.
### Hosting regional / perutean data
- Varian MiniMax/Kimi/GLM yang di-host juga tersedia di OpenRouter dengan endpoint yang dikunci ke wilayah tertentu (misalnya, di-host di AS). Pilih varian regional di sana untuk menjaga lalu lintas tetap berada dalam yurisdiksi pilihan Anda sambil tetap menggunakan `models.mode: "merge"` untuk fallback Anthropic/OpenAI.
- Hanya-lokal tetap menjadi jalur privasi terkuat; perutean regional yang di-host adalah jalan tengah saat Anda membutuhkan fitur provider tetapi ingin mengontrol aliran data.
- Varian MiniMax/Kimi/GLM yang di-host juga tersedia di OpenRouter dengan endpoint yang dipatok ke wilayah tertentu (misalnya, di-host di AS). Pilih varian regional di sana agar trafik tetap berada dalam yurisdiksi pilihan Anda sambil tetap menggunakan `models.mode: "merge"` untuk fallback Anthropic/OpenAI.
- Hanya lokal tetap menjadi jalur privasi terkuat; perutean regional yang di-host adalah titik tengah saat Anda membutuhkan fitur provider tetapi ingin mengendalikan aliran data.
## Proxy lokal lain yang kompatibel dengan OpenAI
@ -150,35 +150,42 @@ vLLM, LiteLLM, OAI-proxy, atau gateway kustom dapat digunakan jika mereka mengek
}
```
Pertahankan `models.mode: "merge"` agar model hosted tetap tersedia sebagai fallback.
Tetap gunakan `models.mode: "merge"` agar model hosted tetap tersedia sebagai fallback.
Catatan perilaku untuk backend lokal/proksi `/v1`:
Catatan perilaku untuk backend `/v1` lokal/proxy:
- OpenClaw memperlakukan ini sebagai rute gaya proksi yang kompatibel dengan OpenAI, bukan endpoint OpenAI native
- OpenClaw memperlakukan ini sebagai rute bergaya proxy yang kompatibel dengan OpenAI, bukan endpoint OpenAI native
- pembentukan permintaan khusus OpenAI native tidak berlaku di sini: tidak ada
`service_tier`, tidak ada `store` pada Responses, tidak ada pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada petunjuk prompt-cache
`service_tier`, tidak ada Responses `store`, tidak ada pembentukan payload kompatibilitas penalaran OpenAI,
dan tidak ada petunjuk prompt-cache
- header atribusi OpenClaw tersembunyi (`originator`, `version`, `User-Agent`)
tidak disisipkan pada URL proksi kustom ini
tidak disisipkan pada URL proxy kustom ini
Catatan kompatibilitas untuk backend yang kompatibel dengan OpenAI tetapi lebih ketat:
Catatan kompatibilitas untuk backend kompatibel OpenAI yang lebih ketat:
- Beberapa server hanya menerima `messages[].content` berupa string pada Chat Completions, bukan array content-part terstruktur. Atur
- Beberapa server hanya menerima `messages[].content` bertipe string pada Chat Completions, bukan
array bagian-konten terstruktur. Atur
`models.providers.<provider>.models[].compat.requiresStringContent: true` untuk
endpoint tersebut.
- Beberapa backend lokal yang lebih kecil atau lebih ketat tidak stabil dengan bentuk prompt runtime agen penuh milik OpenClaw, terutama saat schema tool disertakan. Jika backend
bekerja untuk panggilan `/v1/chat/completions` langsung yang kecil tetapi gagal pada giliran agen OpenClaw normal, coba
- Beberapa backend lokal yang lebih kecil atau lebih ketat tidak stabil dengan bentuk prompt runtime agen OpenClaw
yang lengkap, terutama ketika skema tool disertakan. Jika
backend berfungsi untuk panggilan `/v1/chat/completions` langsung yang kecil tetapi gagal pada giliran agen OpenClaw
normal, coba
`models.providers.<provider>.models[].compat.supportsTools: false` terlebih dahulu.
- Jika backend masih gagal hanya pada eksekusi OpenClaw yang lebih besar, masalah yang tersisa biasanya adalah kapasitas model/server upstream atau bug backend, bukan lapisan transport OpenClaw.
- Jika backend masih gagal hanya pada eksekusi OpenClaw yang lebih besar, masalah yang tersisa
biasanya adalah kapasitas model/server upstream atau bug backend, bukan lapisan transport
OpenClaw.
## Pemecahan masalah
- Gateway bisa menjangkau proksi? `curl http://127.0.0.1:1234/v1/models`.
- Model LM Studio tidak dimuat? Muat ulang; cold start adalah penyebab umum “macet”.
- Error konteks? Turunkan `contextWindow` atau naikkan batas server Anda.
- Gateway bisa menjangkau proxy? `curl http://127.0.0.1:1234/v1/models`.
- Model LM Studio tidak dimuat? Muat ulang; cold start adalah penyebab umum “menggantung”.
- OpenClaw memperingatkan saat jendela konteks yang terdeteksi di bawah **32k** dan memblokir di bawah **16k**. Jika Anda mencapai preflight itu, tingkatkan batas konteks server/model atau pilih model yang lebih besar.
- Kesalahan konteks? Turunkan `contextWindow` atau tingkatkan batas server Anda.
- Server yang kompatibel dengan OpenAI mengembalikan `messages[].content ... expected a string`?
Tambahkan `compat.requiresStringContent: true` pada entri model tersebut.
- Panggilan `/v1/chat/completions` langsung yang kecil berhasil, tetapi `openclaw infer model run`
gagal pada Gemma atau model lokal lain? Nonaktifkan schema tool terlebih dahulu dengan
- Panggilan `/v1/chat/completions` langsung yang kecil berfungsi, tetapi `openclaw infer model run`
gagal pada Gemma atau model lokal lain? Nonaktifkan skema tool terlebih dahulu dengan
`compat.supportsTools: false`, lalu uji lagi. Jika server masih crash hanya
pada prompt OpenClaw yang lebih besar, anggap itu sebagai keterbatasan server/model upstream.
- Keamanan: model lokal melewati filter sisi provider; jaga agar agen tetap sempit dan Compaction tetap aktif untuk membatasi dampak injeksi prompt.
pada prompt OpenClaw yang lebih besar, anggap itu sebagai keterbatasan model/server upstream.
- Keamanan: model lokal melewati filter sisi provider; batasi agen tetap sempit dan biarkan compaction aktif untuk membatasi radius dampak injeksi prompt.

View File

@ -1,14 +1,14 @@
---
read_when:
- Mencari definisi kanal rilis publik
- Mencari penamaan versi dan irama rilis
summary: Kanal rilis publik, penamaan versi, dan irama rilis
- Mencari definisi saluran rilis publik
- Mencari penamaan versi dan ritme rilis
summary: Saluran rilis publik, penamaan versi, dan ritme rilis
title: Kebijakan Rilis
x-i18n:
generated_at: "2026-04-14T02:08:41Z"
generated_at: "2026-04-14T09:14:19Z"
model: gpt-5.4
provider: openai
source_hash: fdc32839447205d74ba7a20a45fbac8e13b199174b442a1e260e3fce056c63da
source_hash: 3eaf9f1786b8c9fd4f5a9c657b623cb69d1a485958e1a9b8f108511839b63587
source_path: reference/RELEASING.md
workflow: 15
---
@ -19,7 +19,7 @@ OpenClaw memiliki tiga jalur rilis publik:
- stable: rilis bertag yang dipublikasikan ke npm `beta` secara default, atau ke npm `latest` jika diminta secara eksplisit
- beta: tag prarilis yang dipublikasikan ke npm `beta`
- dev: head bergerak dari `main`
- dev: head `main` yang terus bergerak
## Penamaan versi
@ -32,109 +32,153 @@ OpenClaw memiliki tiga jalur rilis publik:
- Jangan tambahkan nol di depan bulan atau hari
- `latest` berarti rilis npm stable yang saat ini dipromosikan
- `beta` berarti target instalasi beta saat ini
- Rilis stable dan rilis koreksi stable dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang telah divalidasi nanti
- Rilis stable dan rilis koreksi stable dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang telah diverifikasi nanti
- Setiap rilis OpenClaw mengirimkan paket npm dan aplikasi macOS secara bersamaan
## Irama rilis
## Ritme rilis
- Rilis bergerak dengan pendekatan beta-first
- Stable menyusul hanya setelah beta terbaru divalidasi
- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan hanya untuk maintainer
- Rilis bergerak dengan beta terlebih dahulu
- Stable mengikuti hanya setelah beta terbaru tervalidasi
- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan
hanya untuk maintainer
## Pra-penerbangan rilis
## Pemeriksaan awal rilis
- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar artefak rilis `dist/*` yang diharapkan dan bundle Control UI tersedia untuk langkah validasi pack
- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar
artefak rilis `dist/*` yang diharapkan dan bundle Control UI tersedia untuk langkah
validasi pack
- Jalankan `pnpm release:check` sebelum setiap rilis bertag
- Pemeriksaan rilis sekarang berjalan dalam workflow manual terpisah:
- Pemeriksaan rilis sekarang dijalankan dalam workflow manual terpisah:
`OpenClaw Release Checks`
- Pemisahan ini disengaja: menjaga jalur rilis npm yang sebenarnya tetap singkat, deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada di jalurnya sendiri agar tidak memperlambat atau memblokir publikasi
- Pemeriksaan rilis harus dipicu dari workflow ref `main` agar logika workflow dan secrets tetap kanonis
- Workflow tersebut menerima tag rilis yang sudah ada atau commit SHA `main` 40 karakter penuh saat ini
- Dalam mode commit-SHA, workflow hanya menerima HEAD `origin/main` saat ini; gunakan tag rilis untuk commit rilis yang lebih lama
- Pra-penerbangan hanya-validasi `OpenClaw NPM Release` juga menerima commit SHA `main` 40 karakter penuh saat ini tanpa memerlukan tag yang sudah di-push
- Jalur SHA tersebut hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata
- Dalam mode SHA, workflow menyintesis `v<package.json version>` hanya untuk pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis yang nyata
- Kedua workflow menjaga jalur publikasi dan promosi nyata tetap berada di runner yang di-host GitHub, sementara jalur validasi non-mutatif dapat menggunakan runner Blacksmith Linux yang lebih besar
- Workflow tersebut menjalankan
- Pemisahan ini disengaja: pertahankan jalur rilis npm yang sebenarnya tetap singkat,
deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada di
jalurnya sendiri agar tidak menunda atau memblokir publikasi
- Pemeriksaan rilis harus dipicu dari workflow ref `main` agar
logika workflow dan secret tetap kanonis
- Workflow itu menerima tag rilis yang sudah ada atau commit SHA `main`
penuh 40 karakter saat ini
- Dalam mode commit-SHA, workflow itu hanya menerima HEAD `origin/main` saat ini; gunakan
tag rilis untuk commit rilis yang lebih lama
- Validasi awal khusus `OpenClaw NPM Release` juga menerima commit SHA `main`
penuh 40 karakter saat ini tanpa memerlukan tag yang sudah dipush
- Jalur SHA itu hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata
- Dalam mode SHA, workflow mensintesis `v<package.json version>` hanya untuk
pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis yang nyata
- Kedua workflow menjaga jalur publikasi dan promosi nyata tetap berjalan di runner yang dihosting GitHub,
sementara jalur validasi non-mutasi dapat menggunakan runner Linux
Blacksmith yang lebih besar
- Workflow itu menjalankan
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
menggunakan kedua workflow secrets `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY`
- Pra-penerbangan rilis npm tidak lagi menunggu jalur pemeriksaan rilis terpisah
menggunakan secret workflow `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY`
- Validasi awal rilis npm tidak lagi menunggu jalur pemeriksaan rilis terpisah
- Jalankan `RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts`
(atau tag beta/koreksi yang sesuai) sebelum persetujuan
- Setelah publikasi npm, jalankan
- Setelah npm publish, jalankan
`node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D`
(atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instalasi registry yang dipublikasikan dalam prefix temp yang baru
(atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instalasi registry
yang dipublikasikan dalam temp prefix baru
- Otomatisasi rilis maintainer sekarang menggunakan preflight-then-promote:
- publikasi npm nyata harus lulus `preflight_run_id` npm yang berhasil
- rilis npm stable secara default menargetkan `beta`
- publikasi npm nyata harus lulus dengan npm `preflight_run_id` yang berhasil
- rilis npm stable secara default menuju `beta`
- publikasi npm stable dapat menargetkan `latest` secara eksplisit melalui input workflow
- promosi npm stable dari `beta` ke `latest` tetap tersedia sebagai mode manual eksplisit pada workflow tepercaya `OpenClaw NPM Release`
- publikasi stable langsung juga dapat menjalankan mode sinkronisasi dist-tag eksplisit yang mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
- mode dist-tag tersebut tetap memerlukan `NPM_TOKEN` yang valid di environment `npm-release` karena pengelolaan `npm dist-tag` terpisah dari trusted publishing
- promosi npm stable dari `beta` ke `latest` masih tersedia sebagai mode manual eksplisit pada workflow tepercaya `OpenClaw NPM Release`
- publikasi stable langsung juga dapat menjalankan mode sinkronisasi dist-tag eksplisit yang
mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
- mode dist-tag tersebut tetap memerlukan `NPM_TOKEN` yang valid di environment `npm-release` karena pengelolaan npm `dist-tag` terpisah dari trusted publishing
- `macOS Release` publik hanya untuk validasi
- publikasi mac privat yang nyata harus lulus `preflight_run_id` dan `validate_run_id` mac privat yang berhasil
- jalur publikasi nyata mempromosikan artefak yang sudah disiapkan alih-alih membangunnya ulang lagi
- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier pascapublikasi juga memeriksa jalur upgrade prefix temp yang sama dari `YYYY.M.D` ke `YYYY.M.D-N` agar koreksi rilis tidak secara diam-diam membuat instalasi global lama tetap berada pada payload stable dasar
- Pra-penerbangan rilis npm gagal secara tertutup kecuali tarball mencakup `dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong agar kita tidak lagi mengirim dashboard browser yang kosong
- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing ekstensi, atau matriks pengujian ekstensi, regenerasikan dan tinjau output matriks workflow `checks-node-extensions` yang dimiliki planner dari `.github/workflows/ci.yml` sebelum persetujuan agar catatan rilis tidak menggambarkan tata letak CI yang usang
- Kesiapan rilis macOS stable juga mencakup surface updater:
- rilis GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang telah dipaketkan
- `appcast.xml` di `main` harus menunjuk ke zip stable baru setelah publikasi
- aplikasi yang telah dipaketkan harus mempertahankan bundle id non-debug, URL feed Sparkle yang tidak kosong, dan `CFBundleVersion` pada atau di atas batas build Sparkle kanonis untuk versi rilis tersebut
- publikasi mac privat yang nyata harus lulus dengan `preflight_run_id` dan `validate_run_id`
mac privat yang berhasil
- jalur publikasi nyata mempromosikan artefak yang telah disiapkan alih-alih membangunnya
lagi
- Untuk rilis koreksi stable seperti `YYYY.M.D-N`, verifier pascapublikasi
juga memeriksa jalur upgrade temp-prefix yang sama dari `YYYY.M.D` ke `YYYY.M.D-N`
agar koreksi rilis tidak diam-diam meninggalkan instalasi global yang lebih lama pada
payload stable dasar
- Validasi awal rilis npm gagal secara tertutup kecuali tarball mencakup
`dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong
sehingga kita tidak mengirim dashboard browser kosong lagi
- `pnpm test:install:smoke` juga menegakkan anggaran `unpackedSize` npm pack pada
tarball pembaruan kandidat, sehingga installer e2e menangkap pembengkakan pack yang tidak disengaja
sebelum jalur publikasi rilis
- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing extension, atau
matriks pengujian extension, regenerasikan dan tinjau keluaran matriks workflow
`checks-node-extensions` milik planner dari `.github/workflows/ci.yml`
sebelum persetujuan agar catatan rilis tidak menjelaskan tata letak CI yang usang
- Kesiapan rilis macOS stable juga mencakup permukaan updater:
- rilis GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang sudah dipaketkan
- `appcast.xml` di `main` harus mengarah ke zip stable baru setelah publish
- aplikasi yang dipaketkan harus tetap memiliki bundle id non-debug, Sparkle feed
URL yang tidak kosong, dan `CFBundleVersion` pada atau di atas batas build Sparkle kanonis
untuk versi rilis tersebut
## Input workflow NPM
`OpenClaw NPM Release` menerima input yang dikendalikan operator berikut:
- `tag`: tag rilis yang wajib, seperti `v2026.4.2`, `v2026.4.2-1`, atau
- `tag`: tag rilis yang wajib seperti `v2026.4.2`, `v2026.4.2-1`, atau
`v2026.4.2-beta.1`; ketika `preflight_only=true`, ini juga dapat berupa
commit SHA `main` 40 karakter penuh saat ini untuk pra-penerbangan hanya-validasi
- `preflight_only`: `true` untuk validasi/build/package saja, `false` untuk jalur publikasi nyata
- `preflight_run_id`: wajib pada jalur publikasi nyata agar workflow menggunakan kembali tarball yang telah disiapkan dari run pra-penerbangan yang berhasil
- `npm_dist_tag`: tag target npm untuk jalur publikasi; default-nya `beta`
- `promote_beta_to_latest`: `true` untuk melewati publikasi dan memindahkan build `beta` stable yang sudah dipublikasikan ke `latest`
- `sync_stable_dist_tags`: `true` untuk melewati publikasi dan mengarahkan `latest` dan `beta` ke versi stable yang sudah dipublikasikan
commit SHA `main` penuh 40 karakter saat ini untuk validasi awal khusus validasi
- `preflight_only`: `true` untuk validasi/build/package saja, `false` untuk
jalur publish nyata
- `preflight_run_id`: wajib pada jalur publish nyata agar workflow menggunakan kembali
tarball yang telah disiapkan dari run preflight yang berhasil
- `npm_dist_tag`: tag target npm untuk jalur publish; default ke `beta`
- `promote_beta_to_latest`: `true` untuk melewati publish dan memindahkan build `beta` stable
yang sudah dipublikasikan ke `latest`
- `sync_stable_dist_tags`: `true` untuk melewati publish dan mengarahkan `latest` dan
`beta` ke versi stable yang sudah dipublikasikan
`OpenClaw Release Checks` menerima input yang dikendalikan operator berikut:
- `ref`: tag rilis yang sudah ada atau commit SHA `main` 40 karakter penuh saat ini yang akan divalidasi
- `ref`: tag rilis yang sudah ada atau commit
SHA `main` penuh 40 karakter saat ini untuk divalidasi
Aturan:
- Tag stable dan koreksi dapat dipublikasikan ke `beta` atau `latest`
- Tag prarilis beta hanya dapat dipublikasikan ke `beta`
- Input commit SHA penuh hanya diizinkan ketika `preflight_only=true`
- Mode commit-SHA pemeriksaan rilis juga memerlukan HEAD `origin/main` saat ini
- Jalur publikasi nyata harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan selama pra-penerbangan; workflow memverifikasi metadata tersebut sebelum publikasi dilanjutkan
- Input commit SHA penuh hanya diizinkan saat `preflight_only=true`
- Mode commit-SHA pemeriksaan rilis juga mensyaratkan HEAD `origin/main` saat ini
- Jalur publish nyata harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan saat preflight;
workflow memverifikasi metadata tersebut sebelum publish dilanjutkan
- Mode promosi harus menggunakan tag stable atau koreksi, `preflight_only=false`,
`preflight_run_id` kosong, dan `npm_dist_tag=beta`
- Mode sinkronisasi dist-tag harus menggunakan tag stable atau koreksi,
`preflight_only=false`, `preflight_run_id` kosong, `npm_dist_tag=latest`,
dan `promote_beta_to_latest=false`
- Mode promosi dan sinkronisasi dist-tag juga memerlukan `NPM_TOKEN` yang valid karena
`npm dist-tag add` tetap memerlukan autentikasi npm biasa; trusted publishing hanya mencakup jalur publikasi paket
`npm dist-tag add` tetap memerlukan autentikasi npm biasa; trusted publishing hanya mencakup
jalur publish paket
## Urutan rilis npm stable
Saat membuat rilis npm stable:
Saat memotong rilis npm stable:
1. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true`
- Sebelum tag ada, Anda dapat menggunakan commit SHA `main` penuh saat ini untuk dry run hanya-validasi dari workflow pra-penerbangan
2. Pilih `npm_dist_tag=beta` untuk alur beta-first normal, atau `latest` hanya ketika Anda memang ingin melakukan publikasi stable langsung
3. Jalankan `OpenClaw Release Checks` secara terpisah dengan tag yang sama atau commit SHA `main` penuh saat ini ketika Anda menginginkan cakupan cache prompt live
- Ini dipisahkan dengan sengaja agar cakupan live tetap tersedia tanpa mengaitkan kembali pemeriksaan yang berjalan lama atau flaky ke workflow publikasi
- Sebelum tag ada, Anda dapat menggunakan commit SHA `main` penuh saat ini untuk
dry run hanya validasi dari workflow preflight
2. Pilih `npm_dist_tag=beta` untuk alur beta-first normal, atau `latest` hanya
ketika Anda memang ingin melakukan publish stable langsung
3. Jalankan `OpenClaw Release Checks` secara terpisah dengan tag yang sama atau
commit SHA `main` penuh saat ini ketika Anda ingin cakupan cache prompt live
- Ini dipisahkan dengan sengaja agar cakupan live tetap tersedia tanpa
menghubungkan kembali pemeriksaan yang berjalan lama atau tidak stabil ke workflow publish
4. Simpan `preflight_run_id` yang berhasil
5. Jalankan `OpenClaw NPM Release` lagi dengan `preflight_only=false`, `tag` yang sama, `npm_dist_tag` yang sama, dan `preflight_run_id` yang disimpan
6. Jika rilis masuk ke `beta`, jalankan `OpenClaw NPM Release` nanti dengan `tag` stable yang sama, `promote_beta_to_latest=true`, `preflight_only=false`,
`preflight_run_id` kosong, dan `npm_dist_tag=beta` ketika Anda ingin memindahkan build yang sudah dipublikasikan itu ke `latest`
5. Jalankan `OpenClaw NPM Release` lagi dengan `preflight_only=false`, `tag`
yang sama, `npm_dist_tag` yang sama, dan `preflight_run_id` yang disimpan
6. Jika rilis mendarat di `beta`, jalankan `OpenClaw NPM Release` nanti dengan
`tag` stable yang sama, `promote_beta_to_latest=true`, `preflight_only=false`,
`preflight_run_id` kosong, dan `npm_dist_tag=beta` ketika Anda ingin memindahkan build
yang telah dipublikasikan itu ke `latest`
7. Jika rilis sengaja dipublikasikan langsung ke `latest` dan `beta`
harus mengikuti build stable yang sama, jalankan `OpenClaw NPM Release` dengan `tag` stable yang sama, `sync_stable_dist_tags=true`, `promote_beta_to_latest=false`,
harus mengikuti build stable yang sama, jalankan `OpenClaw NPM Release` dengan
`tag` stable yang sama, `sync_stable_dist_tags=true`, `promote_beta_to_latest=false`,
`preflight_only=false`, `preflight_run_id` kosong, dan `npm_dist_tag=latest`
Mode promosi dan sinkronisasi dist-tag tetap memerlukan persetujuan environment `npm-release`
dan `NPM_TOKEN` yang valid yang dapat diakses oleh run workflow tersebut.
dan `NPM_TOKEN` yang valid yang dapat diakses oleh workflow tersebut.
Hal ini menjaga agar jalur publikasi langsung dan jalur promosi beta-first tetap
Ini menjaga jalur publish langsung dan jalur promosi beta-first tetap
terdokumentasi dan terlihat oleh operator.
## Referensi publik
@ -145,6 +189,6 @@ terdokumentasi dan terlihat oleh operator.
- [`scripts/package-mac-dist.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-dist.sh)
- [`scripts/make_appcast.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/make_appcast.sh)
Maintainer menggunakan dokumen rilis privat di
Maintainer menggunakan dokumentasi rilis privat di
[`openclaw/maintainers/release/README.md`](https://github.com/openclaw/maintainers/blob/main/release/README.md)
untuk runbook yang sebenarnya.

View File

@ -1,41 +1,41 @@
---
read_when:
- Menambahkan otomasi browser yang dikendalikan agen
- Menambahkan otomatisasi browser yang dikendalikan agen
- Men-debug mengapa openclaw mengganggu Chrome Anda sendiri
- Menerapkan pengaturan browser + siklus hidup di aplikasi macOS
summary: Layanan kontrol browser terintegrasi + perintah tindakan
summary: Layanan kontrol browser terintegrasi + perintah aksi
title: Browser (dikelola OpenClaw)
x-i18n:
generated_at: "2026-04-11T02:47:57Z"
generated_at: "2026-04-14T09:14:20Z"
model: gpt-5.4
provider: openai
source_hash: da6fed36a6f40a50e825f90e5616778954545bd7e52397f7e088b85251ee024f
source_hash: ae9ef725f544d4236d229f498c7187871c69bd18d31069b30a7e67fac53166a2
source_path: tools/browser.md
workflow: 15
---
# Browser (dikelola openclaw)
OpenClaw dapat menjalankan **profil Chrome/Brave/Edge/Chromium khusus** yang dikendalikan agen.
Profil ini terisolasi dari browser pribadi Anda dan dikelola melalui layanan kontrol
lokal kecil di dalam Gateway (hanya loopback).
OpenClaw dapat menjalankan **profil Chrome/Brave/Edge/Chromium khusus** yang dikendalikan oleh agen.
Ini terisolasi dari browser pribadi Anda dan dikelola melalui layanan kontrol lokal kecil
di dalam Gateway (hanya loopback).
Tampilan untuk pemula:
- Anggap ini sebagai **browser terpisah khusus agen**.
- Anggap ini sebagai **browser terpisah, khusus agen**.
- Profil `openclaw` **tidak** menyentuh profil browser pribadi Anda.
- Agen dapat **membuka tab, membaca halaman, mengeklik, dan mengetik** di jalur yang aman.
- Profil bawaan `user` menempel ke sesi Chrome asli Anda yang sudah login melalui Chrome MCP.
- Profil bawaan `user` terhubung ke sesi Chrome nyata Anda yang sudah login melalui Chrome MCP.
## Yang Anda dapatkan
- Profil browser terpisah bernama **openclaw** (aksen oranye secara default).
- Kontrol tab deterministik (daftar/buka/fokus/tutup).
- Tindakan agen (klik/ketik/seret/pilih), snapshot, screenshot, PDF.
- Kontrol tab yang deterministik (daftar/buka/fokus/tutup).
- Aksi agen (klik/ketik/seret/pilih), snapshot, screenshot, PDF.
- Dukungan multi-profil opsional (`openclaw`, `work`, `remote`, ...).
Browser ini **bukan** browser harian Anda. Ini adalah permukaan yang aman dan terisolasi untuk
otomasi dan verifikasi agen.
otomatisasi dan verifikasi agen.
## Mulai cepat
@ -46,17 +46,17 @@ openclaw browser --browser-profile openclaw open https://example.com
openclaw browser --browser-profile openclaw snapshot
```
Jika Anda mendapatkan “Browser dinonaktifkan”, aktifkan di konfigurasi (lihat di bawah) dan restart
Jika Anda mendapatkan “Browser dinonaktifkan”, aktifkan di konfigurasi (lihat di bawah) dan mulai ulang
Gateway.
Jika `openclaw browser` hilang sepenuhnya, atau agen mengatakan tool browser
tidak tersedia, langsung ke [Perintah atau tool browser hilang](/id/tools/browser#missing-browser-command-or-tool).
Jika `openclaw browser` sama sekali tidak ada, atau agen mengatakan alat browser
tidak tersedia, langsung ke [Perintah atau alat browser tidak ada](/id/tools/browser#missing-browser-command-or-tool).
## Kontrol plugin
## Kontrol Plugin
Tool `browser` default sekarang merupakan plugin bawaan yang dikirim dalam keadaan aktif
secara default. Artinya Anda dapat menonaktifkan atau menggantinya tanpa menghapus
sisa sistem plugin OpenClaw:
Alat `browser` default sekarang adalah Plugin bawaan yang dikirim dalam keadaan aktif
secara default. Artinya Anda dapat menonaktifkan atau menggantinya tanpa menghapus sisa
sistem plugin OpenClaw:
```json5
{
@ -70,30 +70,31 @@ sisa sistem plugin OpenClaw:
}
```
Nonaktifkan plugin bawaan sebelum memasang plugin lain yang menyediakan nama
tool `browser` yang sama. Pengalaman browser default memerlukan keduanya:
Nonaktifkan Plugin bawaan sebelum memasang Plugin lain yang menyediakan
nama alat `browser` yang sama. Pengalaman browser default memerlukan keduanya:
- `plugins.entries.browser.enabled` tidak dinonaktifkan
- `browser.enabled=true`
Jika Anda hanya mematikan plugin, CLI browser bawaan (`openclaw browser`),
metode gateway (`browser.request`), tool agen, dan layanan kontrol browser default
semuanya hilang bersama-sama. Konfigurasi `browser.*` Anda tetap utuh agar dapat digunakan ulang
oleh plugin pengganti.
Jika Anda hanya mematikan Plugin, CLI browser bawaan (`openclaw browser`),
metode gateway (`browser.request`), alat agen, dan layanan kontrol browser default
semuanya hilang bersama. Konfigurasi `browser.*` Anda tetap utuh agar dapat digunakan ulang oleh
Plugin pengganti.
Plugin browser bawaan juga sekarang memiliki implementasi runtime browser.
Inti hanya menyimpan helper Plugin SDK bersama ditambah ekspor ulang kompatibilitas untuk
path impor internal lama. Dalam praktiknya, menghapus atau mengganti paket plugin browser
menghapus kumpulan fitur browser alih-alih meninggalkan runtime kedua milik inti.
Plugin browser bawaan kini juga memiliki implementasi runtime browser.
Core hanya menyimpan helper Plugin SDK bersama serta re-export kompatibilitas untuk
jalur import internal lama. Dalam praktiknya, menghapus atau mengganti paket Plugin browser
akan menghapus rangkaian fitur browser alih-alih meninggalkan runtime kedua yang masih dimiliki
core.
Perubahan konfigurasi browser tetap memerlukan restart Gateway agar plugin bawaan
Perubahan konfigurasi browser tetap memerlukan restart Gateway agar Plugin bawaan
dapat mendaftarkan ulang layanan browser-nya dengan pengaturan baru.
## Perintah atau tool browser hilang
## Perintah atau alat browser tidak ada
Jika `openclaw browser` tiba-tiba menjadi perintah yang tidak dikenal setelah upgrade, atau
agen melaporkan bahwa tool browser hilang, penyebab paling umum adalah daftar
`plugins.allow` yang ketat dan tidak menyertakan `browser`.
agen melaporkan bahwa alat browser hilang, penyebab paling umum adalah daftar
`plugins.allow` yang terlalu ketat dan tidak menyertakan `browser`.
Contoh konfigurasi yang rusak:
@ -105,7 +106,7 @@ Contoh konfigurasi yang rusak:
}
```
Perbaiki dengan menambahkan `browser` ke allowlist plugin:
Perbaiki dengan menambahkan `browser` ke allowlist Plugin:
```json5
{
@ -118,29 +119,29 @@ Perbaiki dengan menambahkan `browser` ke allowlist plugin:
Catatan penting:
- `browser.enabled=true` saja tidak cukup ketika `plugins.allow` disetel.
- `plugins.entries.browser.enabled=true` juga tidak cukup ketika `plugins.allow` disetel.
- `tools.alsoAllow: ["browser"]` **tidak** memuat plugin browser bawaan. Itu hanya menyesuaikan kebijakan tool setelah plugin dimuat.
- Jika Anda tidak memerlukan allowlist plugin yang ketat, menghapus `plugins.allow` juga mengembalikan perilaku browser bawaan default.
- `plugins.entries.browser.enabled=true` saja juga tidak cukup ketika `plugins.allow` disetel.
- `tools.alsoAllow: ["browser"]` **tidak** memuat Plugin browser bawaan. Itu hanya menyesuaikan kebijakan alat setelah Plugin sudah dimuat.
- Jika Anda tidak membutuhkan allowlist Plugin yang ketat, menghapus `plugins.allow` juga mengembalikan perilaku browser bawaan default.
Gejala umum:
- `openclaw browser` adalah perintah yang tidak dikenal.
- `browser.request` hilang.
- Agen melaporkan tool browser tidak tersedia atau hilang.
- `browser.request` tidak ada.
- Agen melaporkan alat browser tidak tersedia atau hilang.
## Profil: `openclaw` vs `user`
- `openclaw`: browser terkelola dan terisolasi (tanpa extension yang diperlukan).
- `openclaw`: browser terkelola dan terisolasi (tidak memerlukan ekstensi).
- `user`: profil attach Chrome MCP bawaan untuk sesi **Chrome asli Anda yang sudah login**.
Untuk pemanggilan tool browser oleh agen:
Untuk pemanggilan alat browser agen:
- Default: gunakan browser `openclaw` yang terisolasi.
- Pilih `profile="user"` ketika sesi yang sudah login penting dan pengguna
sedang berada di komputer untuk mengeklik/menyetujui prompt attach apa pun.
- `profile` adalah override eksplisit ketika Anda menginginkan mode browser tertentu.
- Gunakan `profile="user"` jika sesi login yang sudah ada penting dan pengguna
sedang berada di depan komputer untuk mengeklik/menyetujui prompt attach apa pun.
- `profile` adalah override eksplisit saat Anda menginginkan mode browser tertentu.
Set `browser.defaultProfile: "openclaw"` jika Anda ingin mode terkelola menjadi default.
Setel `browser.defaultProfile: "openclaw"` jika Anda ingin mode terkelola secara default.
## Konfigurasi
@ -151,14 +152,14 @@ Pengaturan browser berada di `~/.openclaw/openclaw.json`.
browser: {
enabled: true, // default: true
ssrfPolicy: {
// dangerouslyAllowPrivateNetwork: true, // aktifkan hanya untuk akses jaringan privat tepercaya
// dangerouslyAllowPrivateNetwork: true, // ikut serta hanya untuk akses jaringan privat tepercaya
// allowPrivateNetwork: true, // alias lama
// hostnameAllowlist: ["*.example.com", "example.com"],
// allowedHostnames: ["localhost"],
},
// cdpUrl: "http://127.0.0.1:18792", // override satu profil lama
remoteCdpTimeoutMs: 1500, // timeout HTTP CDP jarak jauh (md)
remoteCdpHandshakeTimeoutMs: 3000, // timeout handshake WebSocket CDP jarak jauh (md)
// cdpUrl: "http://127.0.0.1:18792", // override profil tunggal lama
remoteCdpTimeoutMs: 1500, // timeout HTTP CDP jarak jauh (ms)
remoteCdpHandshakeTimeoutMs: 3000, // timeout handshake WebSocket CDP jarak jauh (ms)
defaultProfile: "openclaw",
color: "#FF4500",
headless: false,
@ -189,29 +190,29 @@ Catatan:
- Layanan kontrol browser melakukan bind ke loopback pada port yang diturunkan dari `gateway.port`
(default: `18791`, yaitu gateway + 2).
- Jika Anda menimpa port Gateway (`gateway.port` atau `OPENCLAW_GATEWAY_PORT`),
- Jika Anda meng-override port Gateway (`gateway.port` atau `OPENCLAW_GATEWAY_PORT`),
port browser turunan akan bergeser agar tetap berada dalam “keluarga” yang sama.
- `cdpUrl` default ke port CDP lokal terkelola saat tidak disetel.
- `cdpUrl` secara default mengarah ke port CDP lokal terkelola saat tidak disetel.
- `remoteCdpTimeoutMs` berlaku untuk pemeriksaan keterjangkauan CDP jarak jauh (non-loopback).
- `remoteCdpHandshakeTimeoutMs` berlaku untuk pemeriksaan keterjangkauan WebSocket CDP jarak jauh.
- Navigasi browser/buka-tab dilindungi SSRF sebelum navigasi dan diperiksa ulang sebisa mungkin pada URL `http(s)` akhir setelah navigasi.
- Dalam mode SSRF ketat, penemuan/probe endpoint CDP jarak jauh (`cdpUrl`, termasuk lookup `/json/version`) juga diperiksa.
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan secara default. Setel ke `true` hanya ketika Anda sengaja mempercayai akses browser jaringan privat.
- `remoteCdpHandshakeTimeoutMs` berlaku untuk pemeriksaan keterjangkauan handshake WebSocket CDP jarak jauh.
- Navigasi browser/buka-tab dilindungi SSRF sebelum navigasi dan diperiksa ulang sebisa mungkin pada URL akhir `http(s)` setelah navigasi.
- Dalam mode SSRF ketat, discovery/probe endpoint CDP jarak jauh (`cdpUrl`, termasuk lookup `/json/version`) juga diperiksa.
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan secara default. Setel ke `true` hanya jika Anda memang memercayai akses browser ke jaringan privat.
- `browser.ssrfPolicy.allowPrivateNetwork` tetap didukung sebagai alias lama untuk kompatibilitas.
- `attachOnly: true` berarti “jangan pernah meluncurkan browser lokal; hanya attach jika browser sudah berjalan.”
- `color` + `color` per profil memberi tint pada UI browser sehingga Anda dapat melihat profil mana yang aktif.
- `color` + `color` per profil memberi warna UI browser agar Anda dapat melihat profil mana yang aktif.
- Profil default adalah `openclaw` (browser mandiri yang dikelola OpenClaw). Gunakan `defaultProfile: "user"` untuk memilih browser pengguna yang sudah login.
- Urutan deteksi otomatis: browser default sistem jika berbasis Chromium; jika tidak, Chrome → Brave → Edge → Chromium → Chrome Canary.
- Profil `openclaw` lokal menetapkan `cdpPort`/`cdpUrl` secara otomatis — setel itu hanya untuk CDP jarak jauh.
- `driver: "existing-session"` menggunakan Chrome DevTools MCP alih-alih CDP mentah. Jangan
- Profil `openclaw` lokal otomatis menetapkan `cdpPort`/`cdpUrl` — setel itu hanya untuk CDP jarak jauh.
- `driver: "existing-session"` menggunakan Chrome DevTools MCP, bukan CDP mentah. Jangan
setel `cdpUrl` untuk driver tersebut.
- Setel `browser.profiles.<name>.userDataDir` ketika profil existing-session
harus menempel ke profil pengguna Chromium non-default seperti Brave atau Edge.
- Setel `browser.profiles.<name>.userDataDir` saat profil existing-session
harus attach ke profil pengguna Chromium non-default seperti Brave atau Edge.
## Gunakan Brave (atau browser berbasis Chromium lainnya)
Jika browser **default sistem** Anda berbasis Chromium (Chrome/Brave/Edge/dll),
OpenClaw akan menggunakannya secara otomatis. Setel `browser.executablePath` untuk menimpa
OpenClaw akan menggunakannya secara otomatis. Setel `browser.executablePath` untuk meng-override
deteksi otomatis:
Contoh CLI:
@ -246,48 +247,48 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
## Kontrol lokal vs jarak jauh
- **Kontrol lokal (default):** Gateway memulai layanan kontrol loopback dan dapat meluncurkan browser lokal.
- **Kontrol jarak jauh (host node):** jalankan host node di mesin yang memiliki browser; Gateway mem-proxy tindakan browser ke sana.
- **Kontrol jarak jauh (host node):** jalankan host node di mesin yang memiliki browser; Gateway mem-proxy aksi browser ke sana.
- **CDP jarak jauh:** setel `browser.profiles.<name>.cdpUrl` (atau `browser.cdpUrl`) untuk
attach ke browser berbasis Chromium jarak jauh. Dalam kasus ini, OpenClaw tidak akan meluncurkan browser lokal.
Perilaku penghentian berbeda menurut mode profil:
- profil terkelola lokal: `openclaw browser stop` menghentikan proses browser yang
diluncurkan OpenClaw
- profil lokal terkelola: `openclaw browser stop` menghentikan proses browser yang
diluncurkan oleh OpenClaw
- profil attach-only dan CDP jarak jauh: `openclaw browser stop` menutup sesi
kontrol aktif dan melepaskan override emulasi Playwright/CDP (viewport,
skema warna, locale, zona waktu, mode offline, dan status serupa), meskipun
skema warna, lokal, zona waktu, mode offline, dan status serupa), meskipun
tidak ada proses browser yang diluncurkan oleh OpenClaw
URL CDP jarak jauh dapat menyertakan auth:
URL CDP jarak jauh dapat menyertakan autentikasi:
- Token kueri (misalnya `https://provider.example?token=<token>`)
- Auth Dasar HTTP (misalnya `https://user:pass@provider.example`)
- Token query (mis. `https://provider.example?token=<token>`)
- HTTP Basic auth (mis. `https://user:pass@provider.example`)
OpenClaw mempertahankan auth saat memanggil endpoint `/json/*` dan saat terhubung
ke WebSocket CDP. Pilih environment variable atau secret manager untuk
OpenClaw mempertahankan autentikasi saat memanggil endpoint `/json/*` dan saat terhubung
ke WebSocket CDP. Gunakan environment variable atau pengelola secret untuk
token alih-alih meng-commit-nya ke file konfigurasi.
## Proxy browser node (default tanpa konfigurasi)
## Proksi browser node (default tanpa konfigurasi)
Jika Anda menjalankan **host node** di mesin yang memiliki browser Anda, OpenClaw dapat
mengalihkan pemanggilan tool browser ke node itu secara otomatis tanpa konfigurasi browser tambahan.
Ini adalah jalur default untuk gateway jarak jauh.
secara otomatis merutekan pemanggilan alat browser ke node tersebut tanpa konfigurasi browser tambahan.
Ini adalah jalur default untuk Gateway jarak jauh.
Catatan:
- Host node mengekspos server kontrol browser lokalnya melalui **perintah proxy**.
- Profil berasal dari konfigurasi `browser.profiles` milik node sendiri (sama seperti lokal).
- `nodeHost.browserProxy.allowProfiles` bersifat opsional. Biarkan kosong untuk perilaku lama/default: semua profil yang dikonfigurasi tetap dapat dijangkau melalui proxy, termasuk rute pembuatan/penghapusan profil.
- Jika Anda menyetel `nodeHost.browserProxy.allowProfiles`, OpenClaw memperlakukannya sebagai batas least-privilege: hanya profil yang di-allowlist yang dapat ditargetkan, dan rute pembuatan/penghapusan profil persisten diblokir pada permukaan proxy.
- Profil berasal dari konfigurasi `browser.profiles` milik node itu sendiri (sama seperti lokal).
- `nodeHost.browserProxy.allowProfiles` bersifat opsional. Biarkan kosong untuk perilaku lama/default: semua profil yang dikonfigurasi tetap dapat dijangkau melalui proksi, termasuk rute buat/hapus profil.
- Jika Anda menyetel `nodeHost.browserProxy.allowProfiles`, OpenClaw memperlakukannya sebagai batas least-privilege: hanya profil yang di-allowlist yang dapat ditargetkan, dan rute buat/hapus profil persisten diblokir pada permukaan proksi.
- Nonaktifkan jika Anda tidak menginginkannya:
- Di node: `nodeHost.browserProxy.enabled=false`
- Di gateway: `gateway.nodes.browser.mode="off"`
- Pada node: `nodeHost.browserProxy.enabled=false`
- Pada gateway: `gateway.nodes.browser.mode="off"`
## Browserless (CDP jarak jauh terhosting)
[Browserless](https://browserless.io) adalah layanan Chromium terhosting yang mengekspos
URL koneksi CDP melalui HTTPS dan WebSocket. OpenClaw dapat menggunakan keduanya, tetapi
URL koneksi CDP melalui HTTPS dan WebSocket. OpenClaw dapat menggunakan salah satu bentuk tersebut, tetapi
untuk profil browser jarak jauh, opsi paling sederhana adalah URL WebSocket langsung
dari dokumentasi koneksi Browserless.
@ -314,18 +315,18 @@ Catatan:
- Ganti `<BROWSERLESS_API_KEY>` dengan token Browserless Anda yang sebenarnya.
- Pilih endpoint region yang sesuai dengan akun Browserless Anda (lihat dokumentasi mereka).
- Jika Browserless memberi Anda base URL HTTPS, Anda dapat mengubahnya menjadi
`wss://` untuk koneksi CDP langsung atau mempertahankan URL HTTPS dan membiarkan OpenClaw
- Jika Browserless memberi Anda URL dasar HTTPS, Anda dapat mengubahnya menjadi
`wss://` untuk koneksi CDP langsung atau tetap menggunakan URL HTTPS dan membiarkan OpenClaw
menemukan `/json/version`.
## Penyedia CDP WebSocket langsung
Beberapa layanan browser terhosting mengekspos endpoint **WebSocket langsung** alih-alih
penemuan CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduanya:
discovery CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduanya:
- **Endpoint HTTP(S)** — OpenClaw memanggil `/json/version` untuk menemukan
URL debugger WebSocket, lalu terhubung.
- **Endpoint WebSocket** (`ws://` / `wss://`) — OpenClaw terhubung langsung,
- **Endpoint WebSocket** (`ws://` / `wss://`) — OpenClaw terhubung secara langsung,
melewati `/json/version`. Gunakan ini untuk layanan seperti
[Browserless](https://browserless.io),
[Browserbase](https://www.browserbase.com), atau penyedia apa pun yang memberi Anda
@ -334,8 +335,8 @@ penemuan CDP berbasis HTTP standar (`/json/version`). OpenClaw mendukung keduany
### Browserbase
[Browserbase](https://www.browserbase.com) adalah platform cloud untuk menjalankan
browser headless dengan pemecahan CAPTCHA bawaan, mode stealth, dan
proxy residensial.
browser headless dengan pemecahan CAPTCHA bawaan, mode stealth, dan proxy
residensial.
```json5
{
@ -356,13 +357,13 @@ proxy residensial.
Catatan:
- [Daftar](https://www.browserbase.com/sign-up) dan salin **API Key** Anda
dari [dashboard Overview](https://www.browserbase.com/overview).
- [Daftar](https://www.browserbase.com/sign-up) dan salin **API Key**
Anda dari [dashboard Overview](https://www.browserbase.com/overview).
- Ganti `<BROWSERBASE_API_KEY>` dengan API key Browserbase Anda yang sebenarnya.
- Browserbase membuat sesi browser secara otomatis saat koneksi WebSocket, jadi tidak
- Browserbase otomatis membuat sesi browser saat terhubung ke WebSocket, jadi tidak
diperlukan langkah pembuatan sesi manual.
- Paket gratis mengizinkan satu sesi bersamaan dan satu jam browser per bulan.
Lihat [pricing](https://www.browserbase.com/pricing) untuk batas paket berbayar.
- Tingkat gratis memungkinkan satu sesi bersamaan dan satu jam browser per bulan.
Lihat [harga](https://www.browserbase.com/pricing) untuk batas paket berbayar.
- Lihat [dokumentasi Browserbase](https://docs.browserbase.com) untuk referensi API
lengkap, panduan SDK, dan contoh integrasi.
@ -370,46 +371,46 @@ Catatan:
Ide utama:
- Kontrol browser hanya loopback; akses mengalir melalui auth Gateway atau pairing node.
- API HTTP browser loopback mandiri hanya menggunakan **auth shared-secret**:
auth bearer token gateway, `x-openclaw-password`, atau auth dasar HTTP dengan
- Kontrol browser hanya loopback; akses mengalir melalui autentikasi Gateway atau pairing node.
- API HTTP browser loopback mandiri hanya menggunakan **autentikasi shared-secret**:
autentikasi bearer token gateway, `x-openclaw-password`, atau HTTP Basic auth dengan
kata sandi gateway yang dikonfigurasi.
- Header identitas Tailscale Serve dan `gateway.auth.mode: "trusted-proxy"` **tidak**
mengautentikasi API browser loopback mandiri ini.
- Jika kontrol browser diaktifkan dan tidak ada auth shared-secret yang dikonfigurasi, OpenClaw
- Header identitas Tailscale Serve dan `gateway.auth.mode: "trusted-proxy"`
**tidak** mengautentikasi API browser loopback mandiri ini.
- Jika kontrol browser diaktifkan dan tidak ada autentikasi shared-secret yang dikonfigurasi, OpenClaw
otomatis membuat `gateway.auth.token` saat startup dan menyimpannya ke konfigurasi.
- OpenClaw **tidak** otomatis membuat token itu ketika `gateway.auth.mode` sudah
- OpenClaw **tidak** otomatis membuat token tersebut ketika `gateway.auth.mode` sudah
`password`, `none`, atau `trusted-proxy`.
- Pertahankan Gateway dan host node apa pun di jaringan privat (Tailscale); hindari paparan publik.
- Perlakukan URL/token CDP jarak jauh sebagai secret; pilih env vars atau secret manager.
- Simpan Gateway dan host node apa pun di jaringan privat (Tailscale); hindari eksposur publik.
- Perlakukan URL/token CDP jarak jauh sebagai secret; gunakan environment variable atau pengelola secret.
Tips CDP jarak jauh:
- Pilih endpoint terenkripsi (HTTPS atau WSS) dan token berumur pendek jika memungkinkan.
- Hindari menanam token berumur panjang langsung di file konfigurasi.
- Gunakan endpoint terenkripsi (HTTPS atau WSS) dan token berumur pendek jika memungkinkan.
- Hindari menyematkan token berumur panjang langsung di file konfigurasi.
## Profil (multi-browser)
OpenClaw mendukung beberapa profil bernama (konfigurasi perutean). Profil dapat berupa:
OpenClaw mendukung beberapa profil bernama (konfigurasi routing). Profil dapat berupa:
- **dikelola openclaw**: instance browser berbasis Chromium khusus dengan direktori data pengguna + port CDP sendiri
- **dikelola openclaw**: instance browser berbasis Chromium khusus dengan direktori data pengguna + port CDP-nya sendiri
- **jarak jauh**: URL CDP eksplisit (browser berbasis Chromium yang berjalan di tempat lain)
- **sesi yang ada**: profil Chrome Anda yang ada melalui koneksi otomatis Chrome DevTools MCP
- **sesi yang sudah ada**: profil Chrome Anda yang sudah ada melalui koneksi otomatis Chrome DevTools MCP
Default:
- Profil `openclaw` dibuat otomatis jika belum ada.
- Profil `user` sudah bawaan untuk attach existing-session Chrome MCP.
- Profil `openclaw` dibuat otomatis jika tidak ada.
- Profil `user` bawaan tersedia untuk attach existing-session Chrome MCP.
- Profil existing-session bersifat opt-in di luar `user`; buat dengan `--driver existing-session`.
- Port CDP lokal dialokasikan dari **1880018899** secara default.
- Menghapus profil memindahkan direktori data lokalnya ke Trash.
- Menghapus profil akan memindahkan direktori data lokalnya ke Trash.
Semua endpoint kontrol menerima `?profile=<name>`; CLI menggunakan `--browser-profile`.
## Existing-session melalui Chrome DevTools MCP
OpenClaw juga dapat menempel ke profil browser berbasis Chromium yang sedang berjalan melalui
server resmi Chrome DevTools MCP. Ini menggunakan kembali tab dan status login
OpenClaw juga dapat attach ke profil browser berbasis Chromium yang sedang berjalan melalui
server MCP Chrome DevTools resmi. Ini menggunakan kembali tab dan status login
yang sudah terbuka di profil browser tersebut.
Latar belakang resmi dan referensi penyiapan:
@ -421,7 +422,7 @@ Profil bawaan:
- `user`
Opsional: buat profil existing-session kustom Anda sendiri jika menginginkan
Opsional: buat profil existing-session kustom Anda sendiri jika Anda menginginkan
nama, warna, atau direktori data browser yang berbeda.
Perilaku default:
@ -446,11 +447,11 @@ Gunakan `userDataDir` untuk Brave, Edge, Chromium, atau profil Chrome non-defaul
}
```
Lalu di browser yang sesuai:
Lalu pada browser yang sesuai:
1. Buka halaman inspect browser tersebut untuk debugging jarak jauh.
1. Buka halaman inspect browser tersebut untuk remote debugging.
2. Aktifkan remote debugging.
3. Biarkan browser tetap berjalan dan setujui prompt koneksi saat OpenClaw menempel.
3. Biarkan browser tetap berjalan dan setujui prompt koneksi saat OpenClaw melakukan attach.
Halaman inspect umum:
@ -458,7 +459,7 @@ Halaman inspect umum:
- Brave: `brave://inspect/#remote-debugging`
- Edge: `edge://inspect/#remote-debugging`
Smoke test attach langsung:
Uji smoke attach langsung:
```bash
openclaw browser --browser-profile user start
@ -467,36 +468,36 @@ openclaw browser --browser-profile user tabs
openclaw browser --browser-profile user snapshot --format ai
```
Seperti apa keberhasilan itu:
Seperti apa hasil yang berhasil:
- `status` menampilkan `driver: existing-session`
- `status` menampilkan `transport: chrome-mcp`
- `status` menampilkan `running: true`
- `tabs` mencantumkan tab browser Anda yang sudah terbuka
- `snapshot` mengembalikan ref dari tab aktif yang dipilih
- `tabs` menampilkan tab browser Anda yang sudah terbuka
- `snapshot` mengembalikan ref dari tab live yang dipilih
Yang perlu diperiksa jika attach tidak berfungsi:
- browser berbasis Chromium target adalah versi `144+`
- remote debugging diaktifkan di halaman inspect browser tersebut
- browser menampilkan prompt consent attach dan Anda menerimanya
- `openclaw doctor` memigrasikan konfigurasi browser lama berbasis extension dan memeriksa bahwa
Chrome terinstal secara lokal untuk profil koneksi otomatis default, tetapi tidak dapat
- browser berbasis Chromium target memiliki versi `144+`
- remote debugging diaktifkan pada halaman inspect browser tersebut
- browser menampilkan prompt persetujuan attach dan Anda menerimanya
- `openclaw doctor` memigrasikan konfigurasi browser lama berbasis ekstensi dan memeriksa bahwa
Chrome terpasang secara lokal untuk profil default auto-connect, tetapi tidak dapat
mengaktifkan remote debugging di sisi browser untuk Anda
Penggunaan agen:
- Gunakan `profile="user"` ketika Anda memerlukan status browser pengguna yang sudah login.
- Jika Anda menggunakan profil existing-session kustom, berikan nama profil eksplisit tersebut.
- Pilih mode ini hanya ketika pengguna berada di komputer untuk menyetujui prompt
- Gunakan `profile="user"` saat Anda memerlukan status browser pengguna yang sudah login.
- Jika Anda menggunakan profil existing-session kustom, kirim nama profil eksplisit tersebut.
- Pilih mode ini hanya ketika pengguna berada di depan komputer untuk menyetujui prompt
attach.
- Gateway atau host node dapat memunculkan `npx chrome-devtools-mcp@latest --autoConnect`
- Gateway atau host node dapat menjalankan `npx chrome-devtools-mcp@latest --autoConnect`
Catatan:
- Jalur ini berisiko lebih tinggi daripada profil `openclaw` yang terisolasi karena dapat
- Jalur ini berisiko lebih tinggi dibanding profil `openclaw` yang terisolasi karena dapat
bertindak di dalam sesi browser Anda yang sudah login.
- OpenClaw tidak meluncurkan browser untuk driver ini; OpenClaw hanya menempel ke
- OpenClaw tidak meluncurkan browser untuk driver ini; ia hanya attach ke
sesi yang sudah ada.
- OpenClaw menggunakan alur resmi Chrome DevTools MCP `--autoConnect` di sini. Jika
`userDataDir` disetel, OpenClaw meneruskannya untuk menargetkan direktori data pengguna
@ -506,30 +507,30 @@ Catatan:
- Screenshot halaman existing-session berfungsi tanpa Playwright melalui Chrome MCP.
Screenshot elemen berbasis ref (`--ref`) juga berfungsi di sana, tetapi `--full-page`
tidak dapat digabungkan dengan `--ref` atau `--element`.
- Tindakan existing-session masih lebih terbatas daripada
jalur browser terkelola:
- Aksi existing-session masih lebih terbatas dibanding jalur browser terkelola:
- `click`, `type`, `hover`, `scrollIntoView`, `drag`, dan `select` memerlukan
ref snapshot alih-alih selector CSS
- `click` hanya tombol kiri (tanpa override tombol atau modifier)
- `click` hanya mendukung tombol kiri (tanpa override tombol atau modifier)
- `type` tidak mendukung `slowly=true`; gunakan `fill` atau `press`
- `press` tidak mendukung `delayMs`
- `hover`, `scrollIntoView`, `drag`, `select`, `fill`, dan `evaluate` tidak
mendukung override timeout per pemanggilan
mendukung override timeout per panggilan
- `select` saat ini hanya mendukung satu nilai
- Existing-session `wait --url` mendukung pola exact, substring, dan glob
seperti driver browser lainnya. `wait --load networkidle` belum didukung.
- Hook upload existing-session memerlukan `ref` atau `inputRef`, mendukung satu file
sekaligus, dan tidak mendukung penargetan CSS `element`.
per kali, dan tidak mendukung penargetan CSS `element`.
- Hook dialog existing-session tidak mendukung override timeout.
- Beberapa fitur masih memerlukan jalur browser terkelola, termasuk tindakan batch, ekspor PDF, intersepsi unduhan, dan `responsebody`.
- Existing-session bersifat lokal ke host. Jika Chrome berada di mesin lain atau
namespace jaringan berbeda, gunakan CDP jarak jauh atau host node.
- Beberapa fitur masih memerlukan jalur browser terkelola, termasuk aksi
batch, ekspor PDF, intersepsi unduhan, dan `responsebody`.
- Existing-session bersifat host-local. Jika Chrome berada di mesin lain atau
namespace jaringan yang berbeda, gunakan CDP jarak jauh atau host node.
## Jaminan isolasi
- **Direktori data pengguna khusus**: tidak pernah menyentuh profil browser pribadi Anda.
- **Port khusus**: menghindari `9222` untuk mencegah benturan dengan alur kerja pengembangan.
- **Kontrol tab deterministik**: targetkan tab berdasarkan `targetId`, bukan “tab terakhir”.
- **Kontrol tab yang deterministik**: targetkan tab berdasarkan `targetId`, bukan “tab terakhir”.
## Pemilihan browser
@ -541,12 +542,12 @@ Saat meluncurkan secara lokal, OpenClaw memilih yang pertama tersedia:
4. Chromium
5. Chrome Canary
Anda dapat menimpa dengan `browser.executablePath`.
Anda dapat meng-override dengan `browser.executablePath`.
Platform:
- macOS: memeriksa `/Applications` dan `~/Applications`.
- Linux: mencari `google-chrome`, `brave`, `microsoft-edge`, `chromium`, dll.
- Linux: mencari `google-chrome`, `brave`, `microsoft-edge`, `chromium`, dan sebagainya.
- Windows: memeriksa lokasi instalasi umum.
## API kontrol (opsional)
@ -556,29 +557,29 @@ Hanya untuk integrasi lokal, Gateway mengekspos API HTTP loopback kecil:
- Status/start/stop: `GET /`, `POST /start`, `POST /stop`
- Tab: `GET /tabs`, `POST /tabs/open`, `POST /tabs/focus`, `DELETE /tabs/:targetId`
- Snapshot/screenshot: `GET /snapshot`, `POST /screenshot`
- Tindakan: `POST /navigate`, `POST /act`
- Aksi: `POST /navigate`, `POST /act`
- Hook: `POST /hooks/file-chooser`, `POST /hooks/dialog`
- Unduhan: `POST /download`, `POST /wait/download`
- Debugging: `GET /console`, `POST /pdf`
- Debugging: `GET /errors`, `GET /requests`, `POST /trace/start`, `POST /trace/stop`, `POST /highlight`
- Jaringan: `POST /response/body`
- State: `GET /cookies`, `POST /cookies/set`, `POST /cookies/clear`
- State: `GET /storage/:kind`, `POST /storage/:kind/set`, `POST /storage/:kind/clear`
- Status: `GET /cookies`, `POST /cookies/set`, `POST /cookies/clear`
- Status: `GET /storage/:kind`, `POST /storage/:kind/set`, `POST /storage/:kind/clear`
- Pengaturan: `POST /set/offline`, `POST /set/headers`, `POST /set/credentials`, `POST /set/geolocation`, `POST /set/media`, `POST /set/timezone`, `POST /set/locale`, `POST /set/device`
Semua endpoint menerima `?profile=<name>`.
Jika auth gateway shared-secret dikonfigurasi, rute HTTP browser juga memerlukan auth:
Jika autentikasi gateway shared-secret dikonfigurasi, rute HTTP browser juga memerlukan autentikasi:
- `Authorization: Bearer <gateway token>`
- `x-openclaw-password: <gateway password>` atau auth dasar HTTP dengan kata sandi tersebut
- `x-openclaw-password: <gateway password>` atau HTTP Basic auth dengan kata sandi tersebut
Catatan:
- API browser loopback mandiri ini **tidak** menggunakan header identitas trusted-proxy atau
Tailscale Serve.
- API browser loopback mandiri ini **tidak** menggunakan trusted-proxy atau
header identitas Tailscale Serve.
- Jika `gateway.auth.mode` adalah `none` atau `trusted-proxy`, rute browser loopback
ini tidak mewarisi mode pembawa identitas tersebut; pertahankan tetap loopback-only.
ini tidak mewarisi mode pembawa identitas tersebut; biarkan tetap hanya loopback.
### Kontrak error `/act`
@ -592,28 +593,28 @@ kegagalan kebijakan:
Nilai `code` saat ini:
- `ACT_KIND_REQUIRED` (HTTP 400): `kind` hilang atau tidak dikenali.
- `ACT_INVALID_REQUEST` (HTTP 400): payload tindakan gagal dinormalisasi atau divalidasi.
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` digunakan dengan jenis tindakan yang tidak didukung.
- `ACT_INVALID_REQUEST` (HTTP 400): payload aksi gagal dinormalisasi atau divalidasi.
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): `selector` digunakan dengan jenis aksi yang tidak didukung.
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (atau `wait --fn`) dinonaktifkan oleh konfigurasi.
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): `targetId` tingkat atas atau batch bertentangan dengan target permintaan.
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): tindakan tidak didukung untuk profil existing-session.
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): aksi tidak didukung untuk profil existing-session.
Kegagalan runtime lainnya masih dapat mengembalikan `{ "error": "<message>" }` tanpa field
`code`.
Kegagalan runtime lainnya mungkin masih mengembalikan `{ "error": "<message>" }` tanpa
field `code`.
### Persyaratan Playwright
Beberapa fitur (navigate/act/snapshot AI/snapshot role, screenshot elemen,
PDF) memerlukan Playwright. Jika Playwright tidak terinstal, endpoint tersebut mengembalikan
PDF) memerlukan Playwright. Jika Playwright belum terpasang, endpoint tersebut mengembalikan
error 501 yang jelas.
Yang masih berfungsi tanpa Playwright:
- Snapshot ARIA
- Screenshot halaman untuk browser `openclaw` terkelola ketika WebSocket CDP
per-tab tersedia
- Screenshot halaman untuk browser `openclaw` terkelola ketika tersedia WebSocket
CDP per tab
- Screenshot halaman untuk profil `existing-session` / Chrome MCP
- Screenshot berbasis ref existing-session (`--ref`) dari output snapshot
- Screenshot existing-session berbasis ref (`--ref`) dari output snapshot
Yang masih memerlukan Playwright:
@ -627,10 +628,10 @@ Screenshot elemen juga menolak `--full-page`; rute mengembalikan `fullPage is
not supported for element screenshots`.
Jika Anda melihat `Playwright is not available in this gateway build`, instal paket
Playwright lengkap (bukan `playwright-core`) lalu restart gateway, atau instal ulang
Playwright penuh (bukan `playwright-core`) dan mulai ulang gateway, atau instal ulang
OpenClaw dengan dukungan browser.
#### Instalasi Docker Playwright
#### Instalasi Playwright di Docker
Jika Gateway Anda berjalan di Docker, hindari `npx playwright` (konflik override npm).
Gunakan CLI bawaan sebagai gantinya:
@ -650,9 +651,9 @@ Alur tingkat tinggi:
- Sebuah **server kontrol** kecil menerima permintaan HTTP.
- Server ini terhubung ke browser berbasis Chromium (Chrome/Brave/Edge/Chromium) melalui **CDP**.
- Untuk tindakan lanjutan (klik/ketik/snapshot/PDF), server ini menggunakan **Playwright** di atas
- Untuk aksi lanjutan (klik/ketik/snapshot/PDF), server ini menggunakan **Playwright** di atas
CDP.
- Saat Playwright tidak tersedia, hanya operasi non-Playwright yang tersedia.
- Saat Playwright tidak ada, hanya operasi non-Playwright yang tersedia.
Desain ini menjaga agen tetap berada pada antarmuka yang stabil dan deterministik sambil memungkinkan
Anda menukar browser dan profil lokal/jarak jauh.
@ -662,7 +663,7 @@ Anda menukar browser dan profil lokal/jarak jauh.
Semua perintah menerima `--browser-profile <name>` untuk menargetkan profil tertentu.
Semua perintah juga menerima `--json` untuk output yang dapat dibaca mesin (payload stabil).
Dasar:
Dasar-dasar:
- `openclaw browser status`
- `openclaw browser start`
@ -693,16 +694,16 @@ Inspeksi:
Catatan siklus hidup:
- Untuk profil attach-only dan CDP jarak jauh, `openclaw browser stop` tetap menjadi
- Untuk profil attach-only dan CDP jarak jauh, `openclaw browser stop` tetap merupakan
perintah pembersihan yang tepat setelah pengujian. Perintah ini menutup sesi kontrol aktif dan
membersihkan override emulasi sementara alih-alih mematikan browser
yang mendasarinya.
menghapus override emulasi sementara alih-alih mematikan browser
dasarnya.
- `openclaw browser errors --clear`
- `openclaw browser requests --filter api --clear`
- `openclaw browser pdf`
- `openclaw browser responsebody "**/api" --max-chars 5000`
Tindakan:
Aksi:
- `openclaw browser navigate https://example.com`
- `openclaw browser resize 1280 720`
@ -726,7 +727,7 @@ Tindakan:
- `openclaw browser trace start`
- `openclaw browser trace stop`
State:
Status:
- `openclaw browser cookies`
- `openclaw browser cookies set session abc123 --url "https://example.com"`
@ -747,25 +748,25 @@ State:
Catatan:
- `upload` dan `dialog` adalah pemanggilan **arming**; jalankan sebelum klik/tekan
- `upload` dan `dialog` adalah panggilan **arming**; jalankan keduanya sebelum klik/press
yang memicu chooser/dialog.
- Path output unduhan dan trace dibatasi ke root temp OpenClaw:
- Jalur output unduhan dan trace dibatasi ke root temp OpenClaw:
- trace: `/tmp/openclaw` (fallback: `${os.tmpdir()}/openclaw`)
- unduhan: `/tmp/openclaw/downloads` (fallback: `${os.tmpdir()}/openclaw/downloads`)
- Path upload dibatasi ke root upload temp OpenClaw:
- Jalur upload dibatasi ke root upload temp OpenClaw:
- upload: `/tmp/openclaw/uploads` (fallback: `${os.tmpdir()}/openclaw/uploads`)
- `upload` juga dapat menyetel input file secara langsung melalui `--input-ref` atau `--element`.
- `snapshot`:
- `--format ai` (default saat Playwright terinstal): mengembalikan snapshot AI dengan ref numerik (`aria-ref="<n>"`).
- `--format aria`: mengembalikan tree aksesibilitas (tanpa ref; hanya untuk inspeksi).
- `--efficient` (atau `--mode efficient`): preset snapshot peran ringkas (interaktif + ringkas + kedalaman + maxChars lebih rendah).
- Default konfigurasi (hanya tool/CLI): setel `browser.snapshotDefaults.mode: "efficient"` untuk menggunakan snapshot efisien saat pemanggil tidak memberikan mode (lihat [Gateway configuration](/id/gateway/configuration-reference#browser)).
- Opsi snapshot peran (`--interactive`, `--compact`, `--depth`, `--selector`) memaksa snapshot berbasis peran dengan ref seperti `ref=e12`.
- `--frame "<iframe selector>"` membatasi snapshot peran ke sebuah iframe (berpasangan dengan ref peran seperti `e12`).
- `--interactive` menampilkan daftar datar elemen interaktif yang mudah dipilih (terbaik untuk menjalankan tindakan).
- `--labels` menambahkan screenshot hanya viewport dengan label ref yang dioverlay (mencetak `MEDIA:<path>`).
- `click`/`type`/dll memerlukan `ref` dari `snapshot` (baik numerik `12` atau ref peran `e12`).
Selector CSS sengaja tidak didukung untuk tindakan.
- `--format ai` (default saat Playwright terpasang): mengembalikan snapshot AI dengan ref numerik (`aria-ref="<n>"`).
- `--format aria`: mengembalikan pohon aksesibilitas (tanpa ref; hanya untuk inspeksi).
- `--efficient` (atau `--mode efficient`): preset snapshot role ringkas (interactive + compact + depth + maxChars lebih rendah).
- Default konfigurasi (hanya tool/CLI): setel `browser.snapshotDefaults.mode: "efficient"` untuk menggunakan snapshot efisien saat pemanggil tidak memberikan mode (lihat [Konfigurasi Gateway](/id/gateway/configuration-reference#browser)).
- Opsi snapshot role (`--interactive`, `--compact`, `--depth`, `--selector`) memaksa snapshot berbasis role dengan ref seperti `ref=e12`.
- `--frame "<iframe selector>"` membatasi snapshot role ke sebuah iframe (dipasangkan dengan ref role seperti `e12`).
- `--interactive` menghasilkan daftar datar elemen interaktif yang mudah dipilih (terbaik untuk menjalankan aksi).
- `--labels` menambahkan screenshot hanya viewport dengan label ref di atasnya (mencetak `MEDIA:<path>`).
- `click`/`type`/dll memerlukan `ref` dari `snapshot` (baik numerik `12` maupun ref role `e12`).
Selector CSS memang sengaja tidak didukung untuk aksi.
## Snapshot dan ref
@ -773,34 +774,34 @@ OpenClaw mendukung dua gaya “snapshot”:
- **Snapshot AI (ref numerik)**: `openclaw browser snapshot` (default; `--format ai`)
- Output: snapshot teks yang menyertakan ref numerik.
- Tindakan: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
- Secara internal, ref diresolusikan melalui `aria-ref` milik Playwright.
- Aksi: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
- Secara internal, ref diselesaikan melalui `aria-ref` milik Playwright.
- **Snapshot peran (ref peran seperti `e12`)**: `openclaw browser snapshot --interactive` (atau `--compact`, `--depth`, `--selector`, `--frame`)
- Output: daftar/tree berbasis peran dengan `[ref=e12]` (dan opsional `[nth=1]`).
- Tindakan: `openclaw browser click e12`, `openclaw browser highlight e12`.
- Secara internal, ref diresolusikan melalui `getByRole(...)` (ditambah `nth()` untuk duplikat).
- **Snapshot role (ref role seperti `e12`)**: `openclaw browser snapshot --interactive` (atau `--compact`, `--depth`, `--selector`, `--frame`)
- Output: daftar/pohon berbasis role dengan `[ref=e12]` (dan `[nth=1]` opsional).
- Aksi: `openclaw browser click e12`, `openclaw browser highlight e12`.
- Secara internal, ref diselesaikan melalui `getByRole(...)` (ditambah `nth()` untuk duplikasi).
- Tambahkan `--labels` untuk menyertakan screenshot viewport dengan label `e12` yang dioverlay.
Perilaku ref:
- Ref **tidak stabil antar navigasi**; jika sesuatu gagal, jalankan ulang `snapshot` dan gunakan ref baru.
- Jika snapshot peran diambil dengan `--frame`, ref peran dibatasi ke iframe itu sampai snapshot peran berikutnya.
- Ref **tidak stabil di seluruh navigasi**; jika sesuatu gagal, jalankan ulang `snapshot` dan gunakan ref baru.
- Jika snapshot role diambil dengan `--frame`, ref role dibatasi ke iframe tersebut sampai snapshot role berikutnya.
## Peningkatan kemampuan wait
## Peningkatan wait
Anda dapat menunggu lebih dari sekadar waktu/teks:
- Tunggu URL (glob didukung oleh Playwright):
- `openclaw browser wait --url "**/dash"`
- Tunggu status muat:
- Tunggu status load:
- `openclaw browser wait --load networkidle`
- Tunggu predikat JS:
- `openclaw browser wait --fn "window.ready===true"`
- Tunggu selector menjadi terlihat:
- `openclaw browser wait "#main"`
Semua ini dapat digabungkan:
Ini dapat digabungkan:
```bash
openclaw browser wait "#main" \
@ -812,11 +813,11 @@ openclaw browser wait "#main" \
## Alur kerja debug
Saat suatu tindakan gagal (mis. “not visible”, “strict mode violation”, “covered”):
Saat sebuah aksi gagal (mis. “not visible”, “strict mode violation”, “covered”):
1. `openclaw browser snapshot --interactive`
2. Gunakan `click <ref>` / `type <ref>` (pilih ref peran dalam mode interaktif)
3. Jika masih gagal: `openclaw browser highlight <ref>` untuk melihat apa yang ditargetkan Playwright
2. Gunakan `click <ref>` / `type <ref>` (utamakan ref role dalam mode interaktif)
3. Jika masih gagal: `openclaw browser highlight <ref>` untuk melihat target Playwright
4. Jika perilaku halaman aneh:
- `openclaw browser errors --clear`
- `openclaw browser requests --filter api --clear`
@ -827,7 +828,7 @@ Saat suatu tindakan gagal (mis. “not visible”, “strict mode violation”,
## Output JSON
`--json` ditujukan untuk scripting dan tool terstruktur.
`--json` ditujukan untuk scripting dan tooling terstruktur.
Contoh:
@ -838,33 +839,33 @@ openclaw browser requests --filter api --json
openclaw browser cookies --json
```
Snapshot peran dalam JSON menyertakan `refs` ditambah blok `stats` kecil (baris/karakter/ref/interaktif) agar tool dapat mempertimbangkan ukuran dan kepadatan payload.
Snapshot role dalam JSON menyertakan `refs` plus blok `stats` kecil (lines/chars/refs/interactive) sehingga tool dapat menalar ukuran dan kepadatan payload.
## Knob state dan lingkungan
## Pengaturan status dan environment
Ini berguna untuk alur kerja “buat situs berperilaku seperti X”:
- Cookies: `cookies`, `cookies set`, `cookies clear`
- Cookie: `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"}'` (`set headers --json '{"X-Debug":"1"}'` lama tetap didukung)
- Auth dasar HTTP: `set credentials user pass` (atau `--clear`)
- Header: `set headers --headers-json '{"X-Debug":"1"}'` (versi lama `set headers --json '{"X-Debug":"1"}'` tetap didukung)
- HTTP basic auth: `set credentials user pass` (atau `--clear`)
- Geolokasi: `set geo <lat> <lon> --origin "https://example.com"` (atau `--clear`)
- Media: `set media dark|light|no-preference|none`
- Zona waktu / locale: `set timezone ...`, `set locale ...`
- Zona waktu / lokal: `set timezone ...`, `set locale ...`
- Perangkat / viewport:
- `set device "iPhone 14"` (preset perangkat Playwright)
- `set viewport 1280 720`
## Keamanan & privasi
- Profil browser openclaw mungkin berisi sesi yang sudah login; perlakukan sebagai data sensitif.
- Profil browser openclaw dapat berisi sesi yang sudah login; perlakukan sebagai sesuatu yang sensitif.
- `browser act kind=evaluate` / `openclaw browser evaluate` dan `wait --fn`
mengeksekusi JavaScript arbitrer dalam konteks halaman. Prompt injection dapat
mengarahkannya. Nonaktifkan dengan `browser.evaluateEnabled=false` jika Anda tidak memerlukannya.
- Untuk login dan catatan anti-bot (X/Twitter, dll.), lihat [Browser login + X/Twitter posting](/id/tools/browser-login).
- Pertahankan Gateway/host node tetap privat (hanya loopback atau tailnet).
- Endpoint CDP jarak jauh sangat kuat; lakukan tunneling dan lindungi endpoint tersebut.
mengeksekusi JavaScript arbitrer dalam konteks halaman. Injeksi prompt dapat mengarahkan
hal ini. Nonaktifkan dengan `browser.evaluateEnabled=false` jika Anda tidak membutuhkannya.
- Untuk login dan catatan anti-bot (X/Twitter, dll.), lihat [Login browser + posting X/Twitter](/id/tools/browser-login).
- Jaga agar Gateway/host node tetap privat (hanya loopback atau tailnet).
- Endpoint CDP jarak jauh sangat kuat; tunnel-kan dan lindungi endpoint tersebut.
Contoh mode ketat (blokir tujuan privat/internal secara default):
@ -874,7 +875,7 @@ Contoh mode ketat (blokir tujuan privat/internal secara default):
ssrfPolicy: {
dangerouslyAllowPrivateNetwork: false,
hostnameAllowlist: ["*.example.com", "example.com"],
allowedHostnames: ["localhost"], // allow tepat opsional
allowedHostnames: ["localhost"], // exact allow opsional
},
},
}
@ -883,33 +884,90 @@ Contoh mode ketat (blokir tujuan privat/internal secara default):
## Pemecahan masalah
Untuk masalah khusus Linux (terutama snap Chromium), lihat
[Browser troubleshooting](/id/tools/browser-linux-troubleshooting).
[Pemecahan masalah browser](/id/tools/browser-linux-troubleshooting).
Untuk setup host-terpisah WSL2 Gateway + Windows Chrome, lihat
[WSL2 + Windows + remote Chrome CDP troubleshooting](/id/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
Untuk setup host terpisah WSL2 Gateway + Windows Chrome, lihat
[Pemecahan masalah WSL2 + Windows + remote Chrome CDP](/id/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
## Tool agen + cara kerja kontrol
### Kegagalan startup CDP vs blokir SSRF navigasi
Agen mendapatkan **satu tool** untuk otomasi browser:
Ini adalah kelas kegagalan yang berbeda dan masing-masing mengarah ke jalur kode yang berbeda.
- **Kegagalan startup atau kesiapan CDP** berarti OpenClaw tidak dapat memastikan bahwa control plane browser sehat.
- **Blokir SSRF navigasi** berarti control plane browser sehat, tetapi target navigasi halaman ditolak oleh kebijakan.
Contoh umum:
- Kegagalan startup atau kesiapan CDP:
- `Chrome CDP websocket for profile "openclaw" is not reachable after start`
- `Remote CDP for profile "<name>" is not reachable at <cdpUrl>`
- Blokir SSRF navigasi:
- alur `open`, `navigate`, snapshot, atau pembukaan tab gagal dengan error kebijakan browser/jaringan sementara `start` dan `tabs` tetap berfungsi
Gunakan urutan minimal ini untuk membedakan keduanya:
```bash
openclaw browser --browser-profile openclaw start
openclaw browser --browser-profile openclaw tabs
openclaw browser --browser-profile openclaw open https://example.com
```
Cara membaca hasilnya:
- Jika `start` gagal dengan `not reachable after start`, pecahkan masalah kesiapan CDP terlebih dahulu.
- Jika `start` berhasil tetapi `tabs` gagal, control plane masih tidak sehat. Perlakukan ini sebagai masalah keterjangkauan CDP, bukan masalah navigasi halaman.
- Jika `start` dan `tabs` berhasil tetapi `open` atau `navigate` gagal, control plane browser aktif dan kegagalannya ada pada kebijakan navigasi atau halaman target.
- Jika `start`, `tabs`, dan `open` semuanya berhasil, jalur kontrol browser terkelola dasar dalam kondisi sehat.
Detail perilaku penting:
- Konfigurasi browser secara default menggunakan objek kebijakan SSRF fail-closed bahkan ketika Anda tidak mengonfigurasi `browser.ssrfPolicy`.
- Untuk profil terkelola `openclaw` loopback lokal, pemeriksaan kesehatan CDP sengaja melewati penegakan keterjangkauan SSRF browser untuk control plane lokal milik OpenClaw sendiri.
- Perlindungan navigasi bersifat terpisah. Hasil `start` atau `tabs` yang berhasil tidak berarti target `open` atau `navigate` berikutnya diizinkan.
Panduan keamanan:
- **Jangan** melonggarkan kebijakan SSRF browser secara default.
- Utamakan pengecualian host yang sempit seperti `hostnameAllowlist` atau `allowedHostnames` dibanding akses jaringan privat yang luas.
- Gunakan `dangerouslyAllowPrivateNetwork: true` hanya di lingkungan yang memang tepercaya, saat akses browser ke jaringan privat diperlukan dan sudah ditinjau.
Contoh: navigasi diblokir, control plane sehat
- `start` berhasil
- `tabs` berhasil
- `open http://internal.example` gagal
Itu biasanya berarti startup browser baik-baik saja dan target navigasi perlu ditinjau kebijakannya.
Contoh: startup diblokir sebelum navigasi relevan
- `start` gagal dengan `not reachable after start`
- `tabs` juga gagal atau tidak dapat dijalankan
Itu mengarah ke peluncuran browser atau keterjangkauan CDP, bukan masalah allowlist URL halaman.
## Alat agen + cara kontrol bekerja
Agen mendapatkan **satu alat** untuk otomatisasi browser:
- `browser` — status/start/stop/tabs/open/focus/close/snapshot/screenshot/navigate/act
Pemetaan kerjanya:
- `browser snapshot` mengembalikan tree UI yang stabil (AI atau ARIA).
- `browser snapshot` mengembalikan pohon UI yang stabil (AI atau ARIA).
- `browser act` menggunakan ID `ref` dari snapshot untuk klik/ketik/seret/pilih.
- `browser screenshot` menangkap piksel (halaman penuh atau elemen).
- `browser` menerima:
- `profile` untuk memilih profil browser bernama (openclaw, chrome, atau CDP jarak jauh).
- `target` (`sandbox` | `host` | `node`) untuk memilih lokasi browser.
- Dalam sesi sandbox, `target: "host"` memerlukan `agents.defaults.sandbox.browser.allowHostControl=true`.
- Jika `target` dihilangkan: sesi sandbox default ke `sandbox`, sesi non-sandbox default ke `host`.
- Jika node yang mampu browser terhubung, tool dapat otomatis diarahkan ke sana kecuali Anda mengunci `target="host"` atau `target="node"`.
- `target` (`sandbox` | `host` | `node`) untuk memilih lokasi browser berada.
- Dalam sesi tersandbox, `target: "host"` memerlukan `agents.defaults.sandbox.browser.allowHostControl=true`.
- Jika `target` dihilangkan: sesi tersandbox default ke `sandbox`, sesi non-sandbox default ke `host`.
- Jika node yang mampu menjalankan browser terhubung, alat dapat otomatis diarahkan ke node tersebut kecuali Anda menetapkan `target="host"` atau `target="node"`.
Ini menjaga agen tetap deterministik dan menghindari selector yang rapuh.
## Terkait
- [Tools Overview](/id/tools) — semua tool agen yang tersedia
- [Sandboxing](/id/gateway/sandboxing) — kontrol browser di lingkungan sandbox
- [Security](/id/gateway/security) — risiko dan hardening kontrol browser
- [Gambaran Umum Tools](/id/tools) — semua alat agen yang tersedia
- [Sandboxing](/id/gateway/sandboxing) — kontrol browser di lingkungan tersandbox
- [Keamanan](/id/gateway/security) — risiko dan penguatan kontrol browser