Gateway
Referensi konfigurasi
Referensi tingkat bidang untuk ~/.openclaw/openclaw.json: kunci, nilai default, dan tautan ke halaman subsistem yang lebih mendalam. Untuk panduan penyiapan berorientasi tugas, lihat Konfigurasi. Katalog perintah milik saluran dan plugin serta pengaturan memori/QMD mendalam tersedia di halamannya masing-masing, bukan di sini.
Format konfigurasi adalah JSON5 (komentar + koma di akhir diperbolehkan). Semua bidang bersifat opsional; OpenClaw menggunakan nilai default yang aman jika dihilangkan.
Kode adalah acuan yang lebih kuat daripada halaman ini:
openclaw config schemamencetak JSON Schema aktif yang digunakan untuk validasi dan Control UI, dengan metadata bawaan/plugin/saluran yang digabungkan.- Agen harus memanggil tindakan alat
gatewayconfig.schema.lookupuntuk satu node skema persis yang dibatasi berdasarkan jalur sebelum mengedit konfigurasi. pnpm config:docs:check/pnpm config:docs:genmemvalidasi hash garis dasar dokumen ini terhadap permukaan skema saat ini.
Referensi mendalam khusus:
- Referensi konfigurasi memori untuk
agents.defaults.memorySearch.*,memory.qmd.*,memory.citations, dan konfigurasi dreaming di bawahplugins.entries.memory-core.config.dreaming. - Perintah garis miring untuk katalog perintah bawaan + terbundel saat ini.
- Halaman saluran/plugin pemilik untuk permukaan perintah khusus saluran.
Saluran
Kunci konfigurasi per saluran tersedia di Konfigurasi - saluran: channels.* untuk Slack, Discord, Telegram, WhatsApp, Matrix, iMessage, dan saluran terbundel lainnya (autentikasi, kontrol akses, multiakun, pembatasan penyebutan).
Nilai default agen, multiagen, sesi, dan pesan
Lihat Konfigurasi - agen untuk:
agents.defaults.*(ruang kerja, model, penalaran, Heartbeat, memori, media, Skills, sandbox)multiAgent.*(perutean dan pengikatan multiagen)session.*(siklus hidup sesi, Compaction, pemangkasan)messages.*(pengiriman pesan, TTS, perenderan markdown)talk.*(mode Bicara)talk.consultThinkingLevel: penggantian tingkat penalaran untuk seluruh proses agen OpenClaw di balik konsultasi waktu nyata Bicara pada Control UItalk.consultFastMode: penggantian mode cepat sekali pakai untuk konsultasi waktu nyata Bicara pada Control UItalk.speechLocale: ID lokal BCP 47 opsional untuk pengenalan ucapan Bicara di Android, iOS, dan macOStalk.silenceTimeoutMs: jika tidak ditetapkan, Bicara mempertahankan rentang jeda default platform sebelum mengirim transkrip (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: mekanisme cadangan relai Gateway untuk transkrip Bicara waktu nyata yang telah difinalisasi dan melewatiopenclaw_agent_consult
Alat dan penyedia khusus
Kebijakan alat, pengalih eksperimental, konfigurasi alat berbasis penyedia, serta penyiapan penyedia / URL dasar khusus tersedia di Konfigurasi - alat dan penyedia khusus.
Model
Definisi penyedia, daftar model yang diizinkan, dan penyiapan penyedia khusus tersedia di
Konfigurasi - alat dan penyedia khusus.
Root models juga mengelola perilaku katalog model global.
{ models: { // Opsional. Default: true. Memerlukan mulai ulang Gateway saat diubah. pricing: { enabled: false }, },}models.mode: perilaku katalog penyedia (mergeataureplace).models.providers: peta penyedia khusus dengan kunci berupa ID penyedia.models.providers.*.localService: pengelola proses sesuai permintaan opsional untuk server model lokal. OpenClaw memeriksa endpoint kesehatan yang dikonfigurasi, memulaicommandabsolut saat diperlukan, menunggu kesiapan, lalu mengirim permintaan model. Lihat Layanan model lokal.models.pricing.enabled: mengontrol bootstrap harga latar belakang yang dimulai setelah sidecar dan saluran mencapai jalur siap Gateway. Saatfalse, Gateway melewati pengambilan katalog harga OpenRouter dan LiteLLM; nilaimodels.providers.*.models[].costyang dikonfigurasi tetap berfungsi untuk estimasi biaya lokal.
MCP
Definisi server MCP yang dikelola OpenClaw tersedia di bawah mcp.servers dan
digunakan oleh OpenClaw tertanam serta adaptor runtime lainnya. Perintah openclaw mcp list,
show, set, dan unset mengelola blok ini tanpa terhubung ke
server tujuan selama pengeditan konfigurasi.
{ mcp: { servers: { docs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-fetch"], }, remote: { url: "https://example.com/mcp", transport: "streamable-http", // streamable-http | sse requestTimeoutMs: 20000, connectionTimeoutMs: 5000, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // Kontrol proyeksi server aplikasi Codex opsional. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: definisi server MCP bernama berbasis stdio atau jarak jauh untuk runtime yang mengekspos alat MCP yang dikonfigurasi. Entri jarak jauh menggunakantransport: "streamable-http"atautransport: "sse";type: "http"adalah alias bawaan CLI yang dinormalisasi olehopenclaw mcp setdanopenclaw doctor --fixmenjadi bidang kanonistransport.mcp.servers.<name>.enabled: tetapkanfalseuntuk mempertahankan definisi server yang tersimpan sekaligus mengecualikannya dari penemuan MCP OpenClaw tertanam dan proyeksi alat.mcp.servers.<name>.requestTimeoutMs: batas waktu permintaan MCP per server dalam milidetik.mcp.servers.<name>.connectionTimeoutMs: batas waktu koneksi per server dalam milidetik.mcp.servers.<name>.supportsParallelToolCalls: petunjuk konkurensi opsional bagi adaptor yang dapat memilih apakah akan menjalankan panggilan alat MCP secara paralel.mcp.servers.<name>.auth: tetapkan"oauth"untuk server MCP HTTP yang memerlukan OAuth. Jalankanopenclaw mcp login <name>untuk menyimpan token di bawah status OpenClaw.mcp.servers.<name>.oauth: penggantian opsional untuk cakupan OAuth, URL pengalihan, dan URL metadata klien.mcp.servers.<name>.sslVerify,clientCert,clientKey: kontrol TLS HTTP untuk endpoint privat dan TLS timbal balik.mcp.servers.<name>.toolFilter: pemilihan alat per server opsional.includemembatasi alat MCP yang ditemukan ke nama yang cocok;excludemenyembunyikan nama yang cocok. Entri berupa nama alat MCP persis atau glob*sederhana. Server dengan sumber daya atau prompt juga menghasilkan nama alat utilitas (resources_list,resources_read,prompts_list,prompts_get), dan nama-nama tersebut menggunakan filter yang sama.mcp.servers.<name>.codex: kontrol proyeksi server aplikasi Codex opsional. Blok ini merupakan metadata OpenClaw khusus untuk utas server aplikasi Codex; blok ini tidak memengaruhi sesi ACP, konfigurasi harness Codex generik, atau adaptor runtime lainnya.codex.agentsyang tidak kosong membatasi server ke ID agen OpenClaw yang tercantum. Daftar agen bercakupan yang kosong, hanya berisi spasi, atau tidak valid ditolak oleh validasi konfigurasi dan dihilangkan oleh jalur proyeksi runtime alih-alih menjadi global.codex.defaultToolsApprovalModemenghasilkandefault_tools_approval_modebawaan Codex untuk server tersebut. OpenClaw menghapus blokcodexsebelum meneruskan konfigurasi bawaanmcp_serverske Codex. Hilangkan blok tersebut untuk mempertahankan proyeksi server bagi setiap agen server aplikasi Codex dengan perilaku persetujuan MCP default Codex.- Runtime MCP terbundel yang dibatasi per sesi menggunakan TTL menganggur bawaan selama 10 menit. Proses tertanam sekali pakai meminta pembersihan pada akhir proses; TTL menjadi pengaman terakhir untuk sesi berumur panjang dan pemanggil mendatang.
- Perubahan di bawah
mcp.*diterapkan langsung dengan membuang runtime MCP sesi yang di-cache. Penemuan/penggunaan alat berikutnya membuat ulang runtime tersebut dari konfigurasi baru, sehingga entrimcp.serversyang dihapus langsung dibersihkan alih-alih menunggu TTL menganggur. - Penemuan runtime juga mematuhi notifikasi perubahan daftar alat MCP dengan menghapus katalog yang di-cache untuk sesi tersebut. Server yang mengiklankan sumber daya atau prompt memperoleh alat utilitas untuk mencantumkan/membaca sumber daya serta mencantumkan/mengambil prompt. Kegagalan panggilan alat berulang menjeda server yang terdampak untuk sementara sebelum panggilan lain dicoba.
Lihat MCP dan Backend CLI untuk perilaku runtime.
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, entries: { "image-lab": { apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // atau string teks biasa env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled: daftar izin opsional khusus untuk skill terbundel (skill terkelola/ruang kerja tidak terpengaruh).load.extraDirs: root skill bersama tambahan (prioritas terendah).load.allowSymlinkTargets: root target nyata tepercaya yang dapat menjadi tujuan resolusi symlink skill saat tautan berada di luar root sumber yang dikonfigurasi.workshop.allowSymlinkTargetWrites: mengizinkan penerapan Skill Workshop untuk menulis melalui target symlink yang sudah dipercaya (default: false).install.preferBrew: jika true, utamakan penginstal Homebrew saatbrewtersedia sebelum beralih ke jenis penginstal lainnya.install.nodeManager: preferensi penginstal node untuk spesifikasimetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: mengizinkan klien Gatewayoperator.admintepercaya untuk menginstal arsip zip privat yang disiapkan melaluiskills.upload.*(default: false). Ini hanya mengaktifkan jalur arsip yang diunggah; penginstalan ClawHub normal tidak memerlukannya.entries.<skillKey>.enabled: falsemenonaktifkan sebuah skill meskipun terbundel/terinstal.entries.<skillKey>.apiKey: kemudahan bagi skill yang mendeklarasikan variabel lingkungan utama (string teks biasa atau objek SecretRef).limits.maxCandidatesPerRoot,limits.maxSkillsLoadedPerSource,limits.maxSkillsInPrompt,limits.maxSkillsPromptChars,limits.maxSkillFileBytes: membatasi penemuan skill dan prompt skill yang ditampilkan kepada model.- Pengaturan otonomi/persetujuan Skill Workshop (
workshop.autonomous.enabled,workshop.approvalPolicy,workshop.maxPending,workshop.maxSkillBytes) didokumentasikan dalam Konfigurasi Skills.
Plugin
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}- Dimuat dari direktori paket atau bundel di bawah
~/.openclaw/extensionsdan<workspace>/.openclaw/extensions, serta file atau direktori yang tercantum dalamplugins.load.paths. - Letakkan file plugin mandiri di
plugins.load.paths; root ekstensi yang ditemukan secara otomatis mengabaikan file.js,.mjs, dan.tstingkat teratas agar skrip pembantu di root tersebut tidak menghalangi proses mulai. - Penemuan menerima plugin OpenClaw native serta bundel Codex dan bundel Claude yang kompatibel, termasuk bundel tata letak default Claude tanpa manifes.
- Perubahan konfigurasi memerlukan dimulainya ulang Gateway.
allow: daftar izin opsional (hanya plugin yang tercantum yang dimuat).denydiprioritaskan.plugins.entries.<id>.apiKey: kolom praktis untuk kunci API tingkat plugin (jika didukung oleh plugin).plugins.entries.<id>.env: peta variabel lingkungan dengan cakupan plugin.plugins.entries.<id>.hooks.allowPromptInjection: ketikafalse, core memblokir hook yang mengubah prompt sepertibefore_prompt_build. Berlaku untuk hook plugin native dan direktori hook yang disediakan bundel dan didukung.plugins.entries.<id>.hooks.allowConversationAccess: ketikatrue, plugin tepercaya yang tidak dibundel dapat membaca konten percakapan mentah dari hook bertipe sepertillm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalize, danagent_end.plugins.entries.<id>.subagent.allowModelOverride: secara eksplisit percayai plugin ini untuk meminta penggantianproviderdanmodelper eksekusi bagi eksekusi subagen latar belakang.plugins.entries.<id>.subagent.allowedModels: daftar izin opsional untuk targetprovider/modelkanonis bagi penggantian subagen tepercaya. Gunakan"*"hanya jika Anda sengaja ingin mengizinkan model apa pun.plugins.entries.<id>.llm.allowModelOverride: secara eksplisit percayai plugin ini untuk meminta penggantian model bagiapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: daftar izin opsional untuk targetprovider/modelkanonis bagi penggantian penyelesaian LLM plugin tepercaya. Gunakan"*"hanya jika Anda sengaja ingin mengizinkan model apa pun.plugins.entries.<id>.llm.allowAgentIdOverride: secara eksplisit percayai plugin ini untuk menjalankanapi.runtime.llm.completeterhadap id agen non-default.plugins.entries.<id>.config: objek konfigurasi yang ditentukan plugin (divalidasi oleh skema plugin OpenClaw native jika tersedia).- Pengaturan akun/runtime plugin saluran berada di bawah
channels.<id>dan harus dijelaskan oleh metadatachannelConfigsmanifes plugin pemiliknya, bukan oleh registri opsi OpenClaw pusat.
Konfigurasi plugin harness Codex
Plugin codex yang dibundel memiliki pengaturan harness app-server Codex native di bawah
plugins.entries.codex.config. Lihat
Referensi harness Codex untuk seluruh permukaan konfigurasi
dan Harness Codex untuk model runtime.
codexPlugins hanya berlaku untuk sesi yang memilih harness Codex native.
Ini tidak mengaktifkan plugin Codex untuk eksekusi penyedia OpenClaw, pengikatan
percakapan ACP, atau harness non-Codex apa pun.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_all_plugins: true, allow_destructive_actions: "auto", plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: mengaktifkan dukungan plugin/aplikasi Codex native untuk harness Codex. Default:false.plugins.entries.codex.config.codexPlugins.allow_all_plugins: mengekspos setiap aplikasi yang saat ini dapat diakses dan terhubung ke akun Codex terautentikasi dalam setiap thread Codex native baru. Default:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: kebijakan tindakan destruktif default untuk elisitasi aplikasi plugin yang dikonfigurasi. Gunakantrueuntuk menerima skema persetujuan Codex yang aman tanpa meminta konfirmasi,falseuntuk menolaknya,"auto"untuk merutekan persetujuan yang diwajibkan Codex melalui persetujuan plugin OpenClaw, atau"ask"untuk meminta konfirmasi bagi setiap tindakan tulis/destruktif plugin tanpa persetujuan permanen. Mode"ask"menghapus penggantian persetujuan Codex per alat yang permanen untuk aplikasi terkait dan memilih peninjau persetujuan manusia untuk aplikasi tersebut sebelum thread Codex dimulai. Default:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: mengaktifkan entri plugin yang dikonfigurasi ketikacodexPlugins.enabledglobal juga bernilai true. Default:trueuntuk entri eksplisit.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: identitas marketplace stabil, diwajibkan bersamapluginNameuntuk setiap entri yang diresolusi. Mendukung"openai-curated"dan"workspace-directory". Entri yang tidak memiliki salah satu kolom identitas akan diabaikan.plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: identitas plugin Codex stabil, diwajibkan bersamamarketplaceName. Entriworkspace-directoryharus menggunakansummary.idberkualifikasi marketplace persis yang dikembalikan olehplugin/list, misalnya"example-plugin@workspace-directory".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: penggantian tindakan destruktif per plugin. Jika dihilangkan, nilaiallow_destructive_actionsglobal digunakan. Nilai per plugin menerima kebijakantrue,false,"auto", atau"ask"yang sama.
Setiap aplikasi plugin yang diterima dan menggunakan "ask" merutekan permintaan
persetujuan aplikasi tersebut kepada peninjau manusia. Aplikasi lain dan persetujuan thread
non-aplikasi mempertahankan peninjau yang dikonfigurasi, sehingga kebijakan plugin campuran
tidak mewarisi perilaku "ask".
codexPlugins.enabled adalah direktif pengaktifan global. Entri plugin eksplisit
yang ditulis oleh migrasi merupakan kumpulan kelayakan penginstalan dan perbaikan terkurasi
yang permanen. Entri workspace-directory yang dikonfigurasi secara manual harus sudah
diinstal dan diaktifkan, serta aplikasi miliknya harus dapat diakses; OpenClaw
tidak menginstal atau mengautentikasinya. Jika Codex menolak permintaan katalog workspace
eksplisit, entri workspace yang diaktifkan gagal secara tertutup dengan
marketplace_missing, sedangkan entri terkurasi dari katalog default tetap
tersedia. plugins["*"] tidak didukung, tidak ada sakelar install, dan
nilai marketplacePath lokal sengaja tidak dijadikan kolom konfigurasi karena
bersifat spesifik host. Lihat
Plugin Codex native untuk persyaratan versi app-server dan
kesiapan.
Pemeriksaan kesiapan app/list di-cache selama satu jam dan disegarkan
secara asinkron ketika usang. Konfigurasi aplikasi thread Codex dihitung saat pembentukan
sesi harness Codex, bukan pada setiap giliran; gunakan /new, /reset, atau mulai ulang Gateway
setelah mengubah konfigurasi plugin native.
codexPlugins.allow_all_plugins mengambil snapshot setiap aplikasi akun yang saat ini dapat diakses
ke dalam setiap thread Codex native baru. Ini tidak menginstal plugin atau aplikasi, dan
aplikasi yang tidak dapat diakses tetap dikecualikan. Aplikasi akun menggunakan kebijakan
codexPlugins.allow_destructive_actions global. Entri plugin eksplisit lebih diprioritaskan
ketika aplikasi yang sama tersedia di kedua jalur. Jika app/list tidak dapat
dibaca, eksposur seluruh akun gagal secara tertutup.
plugins.entries.firecrawl.config.webFetch: pengaturan penyedia pengambilan web Firecrawl.apiKey: Kunci API Firecrawl opsional untuk batas yang lebih tinggi (menerima SecretRef). Beralih ke variabel lingkunganplugins.entries.firecrawl.config.webSearch.apiKeyatauFIRECRAWL_API_KEYjika tidak tersedia.baseUrl: URL dasar API Firecrawl (default:https://api.firecrawl.dev; penggantian yang di-host sendiri harus menargetkan endpoint privat/internal).onlyMainContent: hanya ekstrak konten utama dari halaman (default:true).maxAgeMs: usia cache maksimum dalam milidetik (default:172800000/ 2 hari).timeoutSeconds: batas waktu permintaan scraping dalam detik (default:60).
plugins.entries.xai.config.xSearch: pengaturan xAI X Search (pencarian web Grok).enabled: aktifkan penyedia X Search.model: model Grok yang digunakan untuk pencarian (misalnya"grok-4.3").
plugins.entries.memory-core.config.dreaming: pengaturan Dreaming memori. Lihat Dreaming untuk fase dan ambang batas.enabled: sakelar utama Dreaming (defaultfalse).frequency: irama Cron untuk setiap penyisiran Dreaming penuh (default"0 3 * * *").model: penggantian model subagen Dream Diary opsional. Memerlukanplugins.entries.memory-core.subagent.allowModelOverride: true; pasangkan denganallowedModelsuntuk membatasi target. Kesalahan model tidak tersedia mencoba kembali satu kali dengan model default sesi; kegagalan kepercayaan atau daftar izin tidak beralih secara diam-diam.- kebijakan dan ambang batas fase merupakan detail implementasi (bukan kunci konfigurasi yang ditampilkan kepada pengguna).
- Konfigurasi memori lengkap tersedia di Referensi konfigurasi memori:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Plugin bundel Claude yang diaktifkan juga dapat menyumbangkan default OpenClaw tersemat dari
settings.json; OpenClaw menerapkannya sebagai pengaturan agen yang disanitasi, bukan sebagai patch konfigurasi OpenClaw mentah. plugins.slots.memory: pilih id plugin memori aktif, atau"none"untuk menonaktifkan plugin memori.plugins.slots.contextEngine: pilih id plugin mesin konteks aktif; default-nya"legacy"kecuali Anda menginstal dan memilih mesin lain.
Lihat Plugin.
Komitmen
commitments mengontrol memori tindak lanjut yang disimpulkan: OpenClaw dapat mendeteksi check-in dari giliran percakapan dan mengirimkannya melalui eksekusi Heartbeat.
commitments.enabled: aktifkan ekstraksi LLM tersembunyi, penyimpanan, dan pengiriman Heartbeat untuk komitmen tindak lanjut yang disimpulkan. Default:false.commitments.maxPerDay: jumlah maksimum komitmen tindak lanjut yang disimpulkan dan dikirim per sesi agen dalam satu hari berjalan. Default:3.
Lihat Komitmen yang disimpulkan.
Browser
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // izinkan jaringan privat secara berbahaya: true, // aktifkan hanya untuk akses jaringan privat tepercaya // izinkan jaringan privat: true, // alias lama // daftar izin nama host: ["*.example.com", "example.com"], // nama host yang diizinkan: ["localhost"], }, tabCleanup: { enabled: true, idleMinutes: 120, maxTabsPerSession: 8, sweepMinutes: 5, }, profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, color: "#FF4500", // headless: false, // noSandbox: false, // extraArgs: [], // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", // attachOnly: false, },}evaluateEnabled: falsemenonaktifkanact:evaluatedanwait --fn.tabCleanupmengontrol pembersihan berkala dengan upaya terbaik untuk tab agen utama yang dilacak setelah waktu idle atau ketika sesi melampaui batasnya. Pelacakan hanya berlaku untuk tab yang dibuat oleh alat browseraction: "open"; tab yang dibuka oleh pengguna atau yang kepemilikannya tidak diketahui tidak pernah diambil alih. MenonaktifkantabCleanuptidak menonaktifkan pembersihan siklus hidup sesi secara eksplisit.- Pembukaan lokal-host dengan target CDP native dan identitas browser yang stabil
disimpan dalam status SQLite bersama dan tetap memenuhi syarat setelah Gateway dimulai ulang untuk
/newdan pembersihan siklus hidup sesi. Target CDP native yang tersedia bagi alat juga tetap memenuhi syarat untuk pembersihan idle dan batas setelah dimulai ulang. Chrome MCP menggunakan handle target lokal-proses, sehingga catatan sesi yang sudah ada dalam kondisi dingin menunggu pembersihan siklus hidup alih-alih berisiko mengalami pembersihan idle terhadap aktivitas setelah dimulai ulang yang tidak dapat diatribusikan. OpenClaw memverifikasi profil dan instans browser sebelum menutupnya. Sambungan otomatis Chrome MCP, identitas browser/json/versionyang tidak ada, dan target native yang belum terselesaikan tetap sepenuhnya lokal-proses, sehingga tidak ditutup secara otomatis setelah dimulai ulang. Tab lama yang tidak dilacak harus ditutup secara manual. Kegagalan sementara tetap tertunda untuk dicoba lagi nanti. Lihat Kepemilikan pembersihan tab. ssrfPolicy.dangerouslyAllowPrivateNetworkdinonaktifkan jika tidak ditetapkan, sehingga navigasi browser tetap ketat secara default.- Tetapkan
ssrfPolicy.dangerouslyAllowPrivateNetwork: truehanya jika Anda secara sengaja memercayai navigasi browser jaringan privat. - Dalam mode ketat, endpoint profil CDP jarak jauh (
profiles.*.cdpUrl) dikenai pemblokiran jaringan privat yang sama selama pemeriksaan keterjangkauan/penemuan. ssrfPolicy.allowPrivateNetworktetap didukung sebagai alias lama.- Dalam mode ketat, gunakan
ssrfPolicy.hostnameAllowlistdanssrfPolicy.allowedHostnamesuntuk pengecualian eksplisit. - Profil jarak jauh hanya dapat dilampirkan (mulai/hentikan/atur ulang dinonaktifkan).
profiles.*.cdpUrlmenerimahttp://,https://,ws://, danwss://. Gunakan HTTP(S) jika Anda ingin OpenClaw menemukan/json/version; gunakan WS(S) jika penyedia Anda memberikan URL WebSocket DevTools langsung.- Jika layanan CDP yang dikelola secara eksternal dapat dijangkau melalui loopback, tetapkan
attachOnly: trueprofil tersebut; jika tidak, OpenClaw memperlakukan port loopback sebagai profil browser lokal terkelola dan dapat melaporkan kesalahan kepemilikan port lokal. - Profil
existing-sessionmenggunakan Chrome MCP alih-alih CDP dan dapat dilampirkan pada host yang dipilih atau melalui node browser yang terhubung. - Profil
existing-sessiondapat menetapkanuserDataDiruntuk menargetkan profil browser berbasis Chromium tertentu seperti Brave atau Edge. - Profil
existing-sessiondapat menetapkancdpUrlketika Chrome sudah berjalan di balik endpoint penemuan HTTP(S) DevTools atau endpoint WS(S) langsung. Dalam mode tersebut, OpenClaw meneruskan endpoint ke Chrome MCP alih-alih menggunakan sambungan otomatis;userDataDirdiabaikan untuk argumen peluncuran Chrome MCP. - Profil
existing-sessionmempertahankan batas rute Chrome MCP saat ini: tindakan berbasis snapshot/referensi alih-alih penargetan selektor CSS, hook unggahan satu file, tanpa penggantian batas waktu dialog, tanpawait --load networkidle, dan tanparesponsebody, ekspor PDF, intersepsi unduhan, atau tindakan batch. - Profil
openclawlokal terkelola secara otomatis menetapkancdpPortdancdpUrl; tetapkancdpUrlsecara eksplisit hanya untuk profil CDP jarak jauh atau pelampiran endpoint sesi yang sudah ada. - Profil lokal terkelola dapat menetapkan
executablePathuntuk menggantibrowser.executablePathglobal bagi profil tersebut. Gunakan ini untuk menjalankan satu profil di Chrome dan profil lainnya di Brave. - Urutan deteksi otomatis: browser default jika berbasis Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathdanbrowser.profiles.<name>.executablePathkeduanya menerima~dan~/...untuk direktori beranda OS Anda sebelum Chromium diluncurkan.userDataDirper profil pada profilexisting-sessionjuga diperluas dari tilde.- Layanan kontrol: hanya loopback (port diturunkan dari
gateway.port, default18791). extraArgsmenambahkan flag peluncuran tambahan ke proses mulai Chromium lokal (misalnya--disable-gpu, ukuran jendela, atau flag debug).
UI
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // emoji, teks pendek, URL gambar, atau URI data }, prefs: { theme: "claw", // claw | knot | dash | custom themeMode: "system", // light | dark | system textScale: 100, // 90 | 100 | 110 | 125 | 140 locale: "en", chatShowThinking: true, chatShowToolCalls: true, chatPersistCommentary: true, // Pertahankan komentar setelah proses dijalankan di UI Kontrol; tidak mengirimkannya ke kanal chatSendShortcut: "enter", // enter | modifier-enter chatFollowUpMode: "steer", // steer | queue; hilangkan untuk menggunakan mode antrean server }, },}seamColor: warna aksen untuk krom UI aplikasi native (warna gelembung Mode Bicara, dan sebagainya).assistant: penggantian identitas UI Kontrol. Beralih ke identitas agen aktif jika tidak ditetapkan.prefs: preferensi tampilan operator. Ini adalah lokasi kanonis agar agen dapat mengubahnya melalui gerbang persetujuan dan setiap klien UI Kontrol tetap tersinkronisasi; browser mencerminkan nilai tersebut ke penyimpanan lokal untuk proses mulai instan dan menyimpan salinan lokal-perangkat ketika tidak dapat menulis konfigurasi (cakupan penampil, luring).chatPersistCommentarysecara default bernilaitrue. Menetapkannya kefalsemembuat komentar langsung tetap terlihat selama proses berjalan, tetapi menghapusnya saat selesai dan mencegah komentar Codex baru masuk ke cerminan transkrip persisten. Pengiriman melalui kanal perpesanan tetap terpisah dan tidak berubah. Klien yang terhubung menerapkan perubahan sisi server secara langsung: gateway menyiarkan peristiwaconfig.changedyang hanya berisi hash setelah setiap penulisan konfigurasi persisten dan klien menyegarkan snapshot mereka (dilewati saat draf pengaturan lokal memiliki pengeditan yang belum disimpan). Klien yang terhubung kembali melakukan rekonsiliasi saat tersambung.
Gateway
{ gateway: { mode: "local", // local | remote port: 18789, bind: "loopback", auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", // password: "your-password", // atau OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // untuk mode=trusted-proxy; lihat /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // off | serve | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // toolTitles: false, // judul tujuan AI opsional untuk pemanggilan alat (menggunakan token model utilitas) // embedSandbox: "scripts", // strict | scripts | trusted // allowExternalEmbedUrls: false, // berbahaya: izinkan URL sematan http(s) eksternal absolut // chatMessageMaxWidth: "min(1280px, 82%)", // lebar maksimum opsional untuk transkrip obrolan yang dipusatkan // allowedOrigins: ["https://control.example.com"], // diwajibkan untuk UI Kontrol non-loopback // dangerouslyAllowHostHeaderOriginFallback: false, // mode fallback origin header Host yang berbahaya // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, terminal: { enabled: false, // shell: "/bin/zsh", }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | direct token: "your-token", // password: "your-password", }, trustedProxies: ["10.0.0.1"], // Opsional. Default false. allowRealIpFallback: false, nodes: { pairing: { // Opsional. Default tidak ditetapkan/dinonaktifkan. autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], // Persetujuan otomatis yang diverifikasi SSH. Default: diaktifkan (true). // Tetapkan false untuk menonaktifkan verifikasi SSH saja; hal ini tidak memengaruhi // autoApproveCidrs di atas. Untuk pemasangan node secara manual saja, tetapkan false DAN // hapus autoApproveCidrs. Teruskan objek untuk menyesuaikan: { user, identity, // timeoutMs, cidrs }. sshVerify: true, }, allowCommands: ["canvas.navigate"], denyCommands: ["system.run"], }, tools: { // Penolakan HTTP /tools/invoke tambahan deny: ["browser"], // Hapus alat dari daftar penolakan HTTP default untuk pemanggil pemilik/admin allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Detail bidang Gateway
mode:local(jalankan gateway) atauremote(hubungkan ke gateway jarak jauh). Gateway menolak untuk dimulai kecualilocal.port: satu port multipleks untuk WS + HTTP. Prioritas:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(default),lan(0.0.0.0),tailnet(IPv4 Tailscale jika tersedia, jika tidak loopback), ataucustom(satu alamat IPv4). Alamattailnetyang diresolusi dan alamatcustomapa pun selain127.0.0.1atau0.0.0.0memerlukan127.0.0.1pada port yang sama untuk klien pada host yang sama; proses mulai gagal jika salah satu listener tidak dapat melakukan bind. Eksposur non-loopback tetap terbatas pada antarmuka yang dipilih.- Alias bind lama: gunakan nilai mode bind di
gateway.bind(auto,loopback,lan,tailnet,custom), bukan alias host (0.0.0.0,127.0.0.1,localhost,::,::1). - Catatan Docker: bind
loopbackdefault mendengarkan pada127.0.0.1di dalam kontainer. Dengan jaringan bridge Docker (-p 18789:18789), lalu lintas tiba padaeth0, sehingga gateway tidak dapat dijangkau. Gunakan--network host, atau aturbind: "lan"(ataubind: "custom"dengancustomBindHost: "0.0.0.0") agar mendengarkan pada semua antarmuka. - Autentikasi: diperlukan secara default. Bind non-loopback memerlukan autentikasi gateway. Dalam praktiknya, ini berarti token/kata sandi bersama atau reverse proxy yang sadar identitas dengan
gateway.auth.mode: "trusted-proxy". Wizard onboarding menghasilkan token secara default. - Jika
gateway.auth.tokendangateway.auth.passwordsama-sama dikonfigurasi (termasuk SecretRef), aturgateway.auth.modesecara eksplisit ketokenataupassword. Proses mulai serta alur pemasangan/perbaikan layanan gagal jika keduanya dikonfigurasi dan mode belum diatur. gateway.auth.mode: "none": mode tanpa autentikasi eksplisit. Gunakan hanya untuk penyiapan loopback lokal tepercaya; opsi ini sengaja tidak ditawarkan oleh prompt onboarding.gateway.auth.mode: "trusted-proxy": delegasikan autentikasi browser/pengguna ke reverse proxy yang sadar identitas dan percayai header identitas darigateway.trustedProxies(lihat Autentikasi Proxy Tepercaya). Secara default, mode ini mengharapkan sumber proxy non-loopback; reverse proxy loopback pada host yang sama memerlukangateway.auth.trustedProxy.allowLoopback = trueeksplisit. Pemanggil internal pada host yang sama dapat menggunakangateway.auth.passwordsebagai fallback langsung lokal;gateway.auth.tokentetap saling eksklusif dengan mode proxy tepercaya.gateway.auth.allowTailscale: saattrue, header identitas Tailscale Serve dapat memenuhi autentikasi UI Kontrol/WebSocket (diverifikasi melaluitailscale whois). Endpoint API HTTP tidak menggunakan autentikasi header Tailscale tersebut; endpoint itu mengikuti mode autentikasi HTTP normal gateway. Alur tanpa token ini mengasumsikan host gateway tepercaya. Default ketruesaattailscale.mode = "serve".gateway.auth.rateLimit: pembatas opsional untuk autentikasi yang gagal. Berlaku per IP klien dan per cakupan autentikasi (rahasia bersama dan token perangkat dilacak secara terpisah). Percobaan yang diblokir mengembalikan429+Retry-After.- Pada jalur asinkron UI Kontrol Tailscale Serve, percobaan yang gagal untuk
{scope, clientIp}yang sama diserialkan sebelum kegagalan ditulis. Oleh karena itu, percobaan buruk serentak dari klien yang sama dapat memicu pembatas pada permintaan kedua, alih-alih keduanya berlomba lolos sebagai ketidakcocokan biasa. gateway.auth.rateLimit.exemptLoopbackmemiliki defaulttrue; aturfalsejika Anda memang ingin lalu lintas localhost juga dibatasi lajunya (untuk penyiapan pengujian atau deployment proxy yang ketat).- Percobaan autentikasi WS yang berasal dari browser selalu dibatasi lajunya dengan pengecualian loopback dinonaktifkan (pertahanan berlapis terhadap brute force localhost berbasis browser).
- Pada loopback, penguncian yang berasal dari browser tersebut diisolasi per nilai
Originyang dinormalisasi, sehingga kegagalan berulang dari satu origin localhost tidak secara otomatis mengunci origin lain. tailscale.mode:serve(hanya tailnet, bind loopback) ataufunnel(publik, memerlukan autentikasi).tailscale.serviceName: nama Layanan Tailscale opsional untuk mode Serve, sepertisvc:openclaw. Saat diatur, OpenClaw meneruskannya ketailscale serve --serviceagar UI Kontrol dapat diekspos melalui Layanan bernama alih-alih nama host perangkat. Nilainya harus menggunakan format nama Layanansvc:<dns-label>milik Tailscale; proses mulai melaporkan URL Layanan yang diturunkan.tailscale.preserveFunnel: saattruedantailscale.mode = "serve", OpenClaw memeriksatailscale funnel statussebelum menerapkan ulang Serve saat dimulai dan melewatinya jika rute Funnel yang dikonfigurasi secara eksternal sudah mencakup port gateway. Defaultfalse.controlUi.allowedOrigins: daftar izin origin browser eksplisit untuk koneksi WebSocket Gateway. Diperlukan untuk origin browser non-loopback publik. Pemuatan UI LAN/Tailnet privat dengan origin yang sama dari host loopback, RFC1918/link-local,.local,.ts.net, atau CGNAT Tailscale diterima tanpa mengaktifkan fallback header Host.controlUi.toolTitles: ikut serta menggunakan judul tujuan yang dihasilkan AI untuk pemanggilan alat dalam obrolan UI Kontrol. Default:false(perenderan alat tetap sepenuhnya deterministik tanpa pemanggilan model di latar belakang). Saat diaktifkan, metodechat.toolTitlesmemberi label pada pemanggilan kompleks melalui perutean model utilitas standar —utilityModelagen (keputusan operator yang dapat mengirim argumen alat terbatas ke penyedia yang dipilih, seperti setiap tugas utilitas), atau default model kecil yang dinyatakan penyedia sesi (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5) — dan menyimpan hasil dalam cache di basis data status per agen agar tampilan berulang tidak pernah ditagih ulang.utilityModel: \"\"menonaktifkan judul seperti pada setiap tugas utilitas lainnya; judul tidak pernah beralih ke model utama sebagai fallback.controlUi.chatMessageMaxWidth: lebar maksimum opsional untuk transkrip obrolan UI Kontrol yang dipusatkan. Menerima nilai lebar CSS terbatas seperti960px,82%,min(1280px, 82%), dancalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: mode berbahaya yang mengaktifkan fallback origin header Host untuk deployment yang secara sengaja mengandalkan kebijakan origin header Host.terminal.enabled: ikut serta menggunakan terminal operator dengan cakupan admin. Default:false. Terminal memulai PTY host di ruang kerja agen yang dipilih, mewarisi lingkungan proses Gateway, dan ditolak untuk agen dengansandbox.mode: "all". Aktifkan hanya untuk deployment operator tepercaya; mengubahnya akan memulai ulang Gateway dan memperbarui kebijakan keamanan konten UI Kontrol.terminal.shell: executable shell opsional. Jika tidak diatur, OpenClaw menggunakan$SHELLdi Unix dan%ComSpec%di Windows.terminal.detachedSessionTimeoutSeconds: berapa lama sesi terminal bertahan setelah koneksinya terputus (pemuatan ulang halaman, laptop tidur), tetap dapat disambungkan kembali melaluiterminal.attachdengan output terbarunya diputar ulang. Default:300. Atur0untuk menghentikan sesi saat koneksinya terputus. Sesi yang terlepas tetap menjalankan perintahnya, jadi persingkat durasi ini pada host bersama atau yang terekspos.remote.transport:ssh(default) ataudirect(ws/wss). Untukdirect,remote.urlharus berupawss://untuk host publik;ws://teks biasa hanya diterima untuk host loopback, LAN, link-local,.local,.ts.net, dan CGNAT Tailscale.remote.remotePort: port gateway pada host SSH jarak jauh. Default ke18789; gunakan ini saat port tunnel lokal berbeda dari port gateway jarak jauh.remote.sshHostKeyPolicy: kebijakan kunci host tunnel SSH macOS.strictadalah default dan memerlukan kunci yang sudah tepercaya.opensshadalah pilihan eksplisit untuk menggunakan konfigurasi OpenSSH efektif bagi alias terkelola; tinjau pengaturan SSH pengguna dan sistem yang cocok sebelum menggunakannya. Aplikasi macOS danconfigure-remotemereset kebijakan ini kestrictsaat mengganti target, kecuali dipilih kembali secara eksplisit.gateway.remote.token/.passwordadalah bidang kredensial klien jarak jauh. Keduanya tidak mengonfigurasi autentikasi gateway dengan sendirinya.gateway.push.apns.relay.baseUrl: URL HTTPS dasar untuk relai APNs eksternal yang digunakan setelah build iOS berbasis relai memublikasikan pendaftaran ke gateway. Build App Store publik menggunakan relai OpenClaw yang dihosting. URL relai kustom harus sesuai dengan jalur build/deployment iOS yang sengaja dipisahkan dan URL relainya mengarah ke relai tersebut.gateway.push.apns.relay.timeoutMs: batas waktu pengiriman dari gateway ke relai dalam milidetik. Default ke10000.- Pendaftaran berbasis relai didelegasikan kepada identitas gateway tertentu. Aplikasi iOS yang dipasangkan mengambil
gateway.identity.get, menyertakan identitas tersebut dalam pendaftaran relai, dan meneruskan izin pengiriman dengan cakupan pendaftaran ke gateway. Gateway lain tidak dapat menggunakan kembali pendaftaran tersimpan tersebut. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: penggantian sementara melalui variabel lingkungan untuk konfigurasi relai di atas.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: jalan keluar khusus pengembangan untuk URL relai HTTP loopback. URL relai produksi harus tetap menggunakan HTTPS.OPENCLAW_HANDSHAKE_TIMEOUT_MS: penggantian lingkungan opsional untuk batas waktu handshake WebSocket Gateway pra-autentikasi bawaan.channels.<provider>.healthMonitor.enabled: pilihan untuk menonaktifkan per kanal bagi proses mulai ulang monitor kesehatan sambil tetap mengaktifkan monitor global.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: penggantian per akun untuk kanal multi-akun. Saat diatur, nilainya memiliki prioritas atas penggantian tingkat kanal.- Jalur pemanggilan gateway lokal dapat menggunakan
gateway.remote.*sebagai fallback hanya saatgateway.auth.*tidak diatur. - Jika
gateway.auth.token/gateway.auth.passworddikonfigurasi secara eksplisit melalui SecretRef dan tidak dapat diresolusi, resolusi gagal secara tertutup (tanpa fallback jarak jauh yang menyamarkan kegagalan). trustedProxies: IP reverse proxy yang mengakhiri TLS atau menyuntikkan header klien yang diteruskan. Cantumkan hanya proxy yang Anda kendalikan. Entri loopback tetap valid untuk penyiapan proxy/deteksi lokal pada host yang sama (misalnya Tailscale Serve atau reverse proxy lokal), tetapi entri tersebut tidak membuat permintaan loopback memenuhi syarat untukgateway.auth.mode: "trusted-proxy".allowRealIpFallback: saattrue, gateway menerimaX-Real-IPjikaX-Forwarded-Fortidak ada. Defaultfalseuntuk perilaku gagal tertutup.gateway.nodes.pairing.autoApproveCidrs: daftar izin CIDR/IP opsional untuk menyetujui secara otomatis pemasangan perangkat Node pertama kali tanpa cakupan yang diminta. Fitur ini dinonaktifkan jika tidak diatur. Ini tidak menyetujui secara otomatis pemasangan operator/browser/UI Kontrol/WebChat, dan tidak menyetujui secara otomatis peningkatan peran, cakupan, metadata, atau kunci publik.gateway.nodes.pairing.sshVerify: persetujuan otomatis yang diverifikasi SSH untuk pemasangan perangkat Node pertama kali (default: diaktifkan). Gateway melakukan SSH kembali ke host pemasangan (BatchMode, kunci host ketat) dan hanya menyetujui jika kunci perangkatopenclaw node identitybenar-benar cocok. Batas kelayakan sama sepertiautoApproveCidrs; pemeriksaan dibatasi pada alamat sumber privat/CGNAT kecualicidrsmenggantikannya. Aturfalseuntuk menonaktifkan, atau{ user, identity, timeoutMs, cidrs }untuk menyesuaikan. Lihat Pemasangan Node.gateway.nodes.allowCommands/gateway.nodes.denyCommands: pembentukan izin/tolak global untuk perintah node yang dideklarasikan setelah evaluasi pemasangan dan daftar izin platform. GunakanallowCommandsuntuk mengaktifkan perintah node berbahaya seperticamera.snap,camera.clip,screen.record,health.summary,sms.search, dansms.send;denyCommandsmenghapus perintah meskipun perintah tersebut seharusnya disertakan oleh pengaturan default platform atau izin eksplisit. Izin Health iOS, izin SMS Android, dan otorisasi perintah Gateway bersifat independen. Setelah node mengubah daftar perintah yang dideklarasikannya, tolak lalu setujui kembali pemasangan perangkat tersebut agar gateway menyimpan snapshot perintah yang telah diperbarui.gateway.tools.deny: nama alat tambahan yang diblokir untuk HTTPPOST /tools/invoke(memperluas daftar penolakan default).gateway.tools.allow: hapus nama alat dari daftar penolakan HTTP default untuk pemanggil pemilik/admin. Hal ini tidak meningkatkan pemanggiloperator.writeyang membawa identitas menjadi memiliki akses pemilik/admin;cron,gateway, dannodestetap tidak tersedia bagi pemanggil nonpemilik meskipun dimasukkan ke daftar izin.
Endpoint yang kompatibel dengan OpenAI
- RPC HTTP Admin: dinonaktifkan secara default sebagai plugin
admin-http-rpc. Aktifkan plugin untuk mendaftarkanPOST /api/v1/admin/rpc. Lihat RPC HTTP Admin. - Chat Completions: dinonaktifkan secara default. Aktifkan dengan
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Penguatan input URL Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistDaftar izin kosong dianggap belum ditetapkan; gunakangateway.http.endpoints.responses.files.allowUrl=falsedan/ataugateway.http.endpoints.responses.images.allowUrl=falseuntuk menonaktifkan pengambilan URL.
- Header penguatan respons opsional:
gateway.http.securityHeaders.strictTransportSecurity(tetapkan hanya untuk origin HTTPS yang Anda kendalikan; lihat Autentikasi Proksi Tepercaya)
Isolasi multi-instans
Jalankan beberapa Gateway pada satu host dengan port dan direktori status yang unik:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001Flag praktis: --dev (menggunakan ~/.openclaw-dev + port 19001), --profile <name> (menggunakan ~/.openclaw-<name>).
Lihat Beberapa Gateway.
gateway.tls
{ gateway: { tls: { enabled: false, autoGenerate: false, certPath: "/etc/openclaw/tls/server.crt", keyPath: "/etc/openclaw/tls/server.key", caPath: "/etc/openclaw/tls/ca-bundle.crt", }, },}enabled: mengaktifkan terminasi TLS pada listener Gateway (HTTPS/WSS) (default:false).autoGenerate: membuat otomatis pasangan sertifikat/kunci lokal yang ditandatangani sendiri saat file eksplisit tidak dikonfigurasi; hanya untuk penggunaan lokal/pengembangan.certPath: jalur sistem berkas ke file sertifikat TLS.keyPath: jalur sistem berkas ke file kunci privat TLS; batasi izinnya.caPath: jalur bundel CA opsional untuk verifikasi klien atau rantai kepercayaan khusus.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: mengontrol cara perubahan konfigurasi diterapkan saat runtime."off": abaikan perubahan langsung; perubahan memerlukan pemulaian ulang eksplisit."restart": selalu mulai ulang proses Gateway saat konfigurasi berubah."hot": terapkan perubahan di dalam proses tanpa memulai ulang."hybrid"(default): coba pemuatan ulang panas terlebih dahulu; kembali ke pemulaian ulang jika diperlukan.
debounceMs: jendela debounce dalam ms sebelum perubahan konfigurasi diterapkan (bilangan bulat nonnegatif; default:300).deferralTimeoutMs: waktu maksimum opsional dalam ms untuk menunggu operasi yang sedang berlangsung sebelum memaksa pemulaian ulang atau pemuatan ulang panas kanal. Hilangkan untuk menggunakan waktu tunggu terbatas default (300000); tetapkan0untuk menunggu tanpa batas dan mencatat peringatan berkala bahwa operasi masih tertunda.
Lingkungan worker cloud
Worker cloud bersifat ikut serta. Jika cloudWorkers tidak ada, atau profiles kosong, OpenClaw tidak menerima pembuatan worker baru. Rekaman persisten yang dibuat sebelumnya tetap direkonsiliasi dan terlihat; proyeksi Gateway/Node yang ada tidak berubah.
Setiap penyedia worker harus mengembalikan hostKey SSH dari output penyediaan tepercaya tepat sebagai algorithm base64, tanpa nama host atau komentar. Bootstrap menulis kunci tersebut ke file known_hosts yang terisolasi, menggunakan StrictHostKeyChecking=yes, dan gagal sebelum membuka koneksi jika penyedia tidak menyertakannya. Tidak ada fallback percaya-pada-penggunaan-pertama.
Penyiapan tunnel dilakukan sesuai permintaan, bukan sebagai bagian dari penyediaan. Saat dimulai, Gateway meneruskan balik soket Unix lokal worker ke endpoint WebSocket loopback-nya. Soket berada dalam direktori jarak jauh khusus pemilik yang dialokasikan secara acak; tidak seperti port TCP loopback, soket tersebut tidak dapat dijangkau oleh akun lain pada worker multipengguna dan tidak dapat bertabrakan dengan port lingkungan lain. Keepalive SSH dan backoff koneksi ulang berbatas hanya berjalan selama pemilik tunnel tetap aktif. Menghentikan tunnel membatasi koneksi ulang sebelum menutup proses SSH.
Lalu lintas kontrol dan transfer ruang kerja menggunakan koneksi SSH terpisah. Keduanya menggunakan kembali identitas terselesaikan dan file known_hosts tersemat yang sama, tetapi transfer ruang kerja tidak berbagi multipleks koneksi SSH dengan tunnel berumur panjang, sehingga rsync tidak dapat memblokir lalu lintas kontrol.
Profil Crabbox
Penyedia crabbox yang dibundel menyediakan lease berkemampuan SSH melalui CLI Crabbox lokal. settings.provider bagian dalam memilih backend Crabbox; ini terpisah dari id penyedia OpenClaw bagian luar.
{ cloudWorkers: { profiles: { production: { provider: "crabbox", install: "bundle", // Default; use "npm" only for a released gateway version. settings: { provider: "aws", class: "standard", ttl: "24h", idleTimeout: "60m", // Optional absolute path. Default: sibling ../crabbox/bin/crabbox, then PATH. binary: "/usr/local/bin/crabbox", }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}settings.provider(wajib): backend Crabbox yang diteruskan melalui--provider. Gunakan backend yang output pemeriksaannya menyertakan endpoint SSH;awsmemilih backend AWS langsung.settings.class(wajib): kelas mesin Crabbox yang diteruskan ke--class.settings.ttldansettings.idleTimeout(wajib): string durasi Go positif yang diteruskan ke--ttldan--idle-timeout. Pengaman sisi penyedia ini berbeda dari kebijakanlifetimetersimpan milik OpenClaw di bawah.settings.binary: jalur absolut opsional ke executable Crabbox. Tanpanya, OpenClaw memeriksa checkout Crabbox yang bersebelahan, lalu entri executable padaPATH, dan terakhir menjalankancrabboxagar CLI yang tidak ada tetap menjadi galat penyedia yang terlihat.
Pengaturan yang tidak dikenal ditolak. Kredensial Crabbox dan konfigurasi akun khusus backend tetap dimiliki oleh Crabbox; jangan tempatkan keduanya dalam settings. OpenClaw hanya menjalankan CLI lokal dan tidak melakukan panggilan jaringan penyedia dari plugin ini. Penyediaan selalu meneruskan --keep=true; OpenClaw memiliki siklus hidup eksternal dan menghancurkan lease dengan crabbox stop.
Profil pengembangan SSH statis
{ cloudWorkers: { profiles: { development: { provider: "static-ssh", settings: { host: "worker.example.test", port: 22, user: "openclaw", hostKey: "ssh-ed25519 <base64-public-host-key>", keyRef: { source: "env", provider: "default", id: "OPENCLAW_WORKER_SSH_KEY", }, }, lifetime: { idleTimeoutMinutes: 60, maxLifetimeMinutes: 1440, }, }, }, },}profiles: profil worker bernama dengan id yang tidak kosong dan spasi tepi yang dipangkas. Setiap profil memilih penyedia yang didaftarkan oleh plugin.provider: id penyedia worker yang tidak kosong. Contoh menggunakan penyediacrabboxyang dibundel dan penyedia QA Labstatic-ssh.install: metode instalasi worker."bundle"(default) mentransfer bundel dengan hash konten dari build Gateway yang terinstal serta mendukung versi rilis, pengembangan, dan belum dirilis."npm"adalah optimisasi opsional untuk rilis paket yang tidak dimodifikasi; metode ini menginstalopenclaw@<exact gateway version>dari registri npm publik dan tidak pernah menginstallatest.- Plugin penyedia yang dibundel dipilih secara otomatis saat dikonfigurasi, tetapi penonaktifan eksplisit dan
plugins.allowtetap berlaku. Sertakan id penyedia (misalnya,crabbox) saat daftar izin dikonfigurasi. Plugin penyedia eksternal juga harus diinstal dan diaktifkan secara eksplisit. settings: JSON terbatas milik penyedia. Plugin yang dipilih menentukan dan memvalidasi kuncinya; gunakan objek SecretRef untuk nilai yang mengandung secret. Penyedia SSH statis memerlukanhost,user,hostKey, dankeyRef;portmemiliki default22.hostKeyharus berupa satu baris kunci host publik OpenSSH (algorithm base64) yang diperoleh dari host yang diketahui atau kanal tepercaya lainnya, tanpa prefiks opsi.lifetime.idleTimeoutMinutes: menit berupa bilangan bulat positif yang disimpan untuk kebijakan pengambilan kembali saat tidak aktif di kemudian hari.lifetime.maxLifetimeMinutes: menit berupa bilangan bulat positif yang disimpan untuk kebijakan siklus hidup di kemudian hari.
Runtime Node yang didukung (22.22.3+, 24.15+, atau 25.9+) dengan SQLite yang aman terhadap reset WAL harus sudah terinstal pada worker. Metode opsional "npm" juga memerlukan npm dan akses HTTPS keluar ke registri npm publik. Penyiapan toolchain berjaringan merupakan kebijakan penyedia; bootstrap melaporkan galat yang dapat ditindaklanjuti alih-alih menginstal toolchain itu sendiri.
Fondasi ini menginstal dan memverifikasi build Gateway serta menyediakan siklus hidup mulai/henti tunnel, tetapi tidak menjalankan CLI OpenClaw umum. Entri worker mandiri dan loop hadir pada tonggak worker cloud berikutnya.
Setiap rekaman lingkungan persisten mempertahankan pengaturan penyedia yang telah divalidasi, metode instalasi yang terselesaikan, dan kebijakan masa pakainya dalam snapshot profil saat pembuatan. Mengubah atau menghapus profil bernama memengaruhi pembuatan baru; rekaman yang ada melanjutkan rekonsiliasi siklus hidup dengan snapshot tersebut, selama plugin pemilik tetap tersedia.
Nilai masa pakai hanya berupa data dalam rilis worker cloud pertama; penerapan otomatis hadir bersama pekerjaan siklus hidup berikutnya. Perubahan profil memerlukan pemulaian ulang Gateway.
Hook
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: true, allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"], allowedAgentIds: ["hooks", "main"], presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "hooks", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.6-sol", }, ], },}Autentikasi: Authorization: Bearer <token> atau x-openclaw-token: <token>.
Token hook dalam string kueri ditolak.
Catatan validasi dan keamanan:
hooks.enabled=truememerlukanhooks.tokenyang tidak kosong.hooks.tokenharus berbeda dari autentikasi rahasia bersama Gateway yang aktif (gateway.auth.token/OPENCLAW_GATEWAY_TOKENataugateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); saat mendeteksi penggunaan ulang, proses startup mencatat peringatan keamanan yang tidak fatal.openclaw security auditmenandai penggunaan ulang autentikasi hook/Gateway sebagai temuan kritis, termasuk autentikasi kata sandi Gateway yang hanya diberikan pada waktu audit (--auth password --password <password>). Jalankanopenclaw doctor --fixuntuk merotasihooks.tokentersimpan yang digunakan ulang, lalu perbarui pengirim hook eksternal agar menggunakan token hook baru.hooks.pathtidak boleh berupa/; gunakan subjalur khusus seperti/hooks.- Jika
hooks.allowRequestSessionKey=true, batasihooks.allowedSessionKeyPrefixes(misalnya["hook:"]). - Jika pemetaan atau preset menggunakan
sessionKeybertemplat, aturhooks.allowedSessionKeyPrefixesdanhooks.allowRequestSessionKey=true. Kunci pemetaan statis tidak memerlukan keikutsertaan tersebut.
Endpoint:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeydari payload permintaan hanya diterima jikahooks.allowRequestSessionKey=true(default:false).
POST /hooks/<name>→ diselesaikan melaluihooks.mappings- Nilai
sessionKeypemetaan yang dirender dari templat dianggap berasal dari luar dan juga memerlukanhooks.allowRequestSessionKey=true.
- Nilai
Detail pemetaan
match.pathmencocokkan subjalur setelah/hooks(misalnya/hooks/gmail→gmail).match.sourcemencocokkan bidang payload untuk jalur generik.- Templat seperti
{{messages[0].subject}}membaca dari payload. transformdapat menunjuk ke modul JS/TS yang mengembalikan tindakan hook.transform.moduleharus berupa jalur relatif dan tetap berada di dalamhooks.transformsDir(jalur absolut dan penelusuran direktori ditolak).- Simpan
hooks.transformsDirdi bawah~/.openclaw/hooks/transforms; direktori skill ruang kerja ditolak. Jikaopenclaw doctormelaporkan jalur ini sebagai tidak valid, pindahkan modul transformasi ke direktori transformasi hook atau hapushooks.transformsDir. agentIdmerutekan ke agen tertentu; ID yang tidak dikenal kembali ke agen default.allowedAgentIds: membatasi perutean agen efektif, termasuk jalur agen default saatagentIddihilangkan (*atau dihilangkan = izinkan semua,[]= tolak semua).defaultSessionKey: kunci sesi tetap opsional untuk proses agen hook tanpasessionKeyeksplisit.allowRequestSessionKey: mengizinkan pemanggil/hooks/agentdan kunci sesi pemetaan berbasis templat untuk mengatursessionKey(default:false).allowedSessionKeyPrefixes: daftar izin awalan opsional untuk nilaisessionKeyeksplisit (permintaan + pemetaan), misalnya["hook:"]. Ini menjadi wajib saat pemetaan atau preset mana pun menggunakansessionKeybertemplat.deliver: truemengirim balasan akhir ke saluran;channelsecara default menggunakanlast.modelmengganti LLM untuk proses hook ini (harus diizinkan jika katalog model ditetapkan).
Integrasi Gmail
- Preset Gmail bawaan menggunakan
sessionKey: "hook:gmail:{{messages[0].id}}". - Kunci per pesan ini mengisolasi konteks percakapan, bukan alat atau akses ruang kerja. Tanpa pemetaan khusus yang mengatur
agentId, preset menggunakan agen default. - Untuk kotak masuk yang tidak tepercaya, rutekan Gmail ke agen pembaca khusus dan batasi agen tersebut dengan sandbox dan kebijakan alat per agen. Jika pembaca harus memberi tahu agen utama, batasi serah terima dengan
tools.agentToAgent. Lihat Injeksi prompt untuk model ancaman dan tingkat model yang direkomendasikan. - Jika Anda mempertahankan perutean per pesan tersebut, atur
hooks.allowRequestSessionKey: truedan batasihooks.allowedSessionKeyPrefixesagar cocok dengan namespace Gmail, misalnya["hook:", "hook:gmail:"]. - Jika Anda memerlukan
hooks.allowRequestSessionKey: false, ganti preset dengansessionKeystatis alih-alih default bertemplat.
{ hooks: { gmail: { account: "openclaw@gmail.com", topic: "projects/<project-id>/topics/gog-gmail-watch", subscription: "gog-gmail-watch-push", pushToken: "shared-push-token", hookUrl: "http://127.0.0.1:18789/hooks/gmail", includeBody: true, maxBytes: 20000, renewEveryMinutes: 720, serve: { bind: "127.0.0.1", port: 8788, path: "/" }, tailscale: { mode: "funnel", path: "/gmail-pubsub" }, model: "openai/gpt-5.6-sol", thinking: "high", }, },}- Gateway secara otomatis memulai
gog gmail watch servesaat boot ketika dikonfigurasi. AturOPENCLAW_SKIP_GMAIL_WATCHER=1untuk menonaktifkannya. - Jangan jalankan
gog gmail watch serveterpisah bersama Gateway.
Host plugin Canvas
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // atau OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- Menyajikan HTML/CSS/JS yang dapat diedit agen dan A2UI melalui HTTP pada port Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Hanya lokal: pertahankan
gateway.bind: "loopback"(default). - Bind non-loopback: rute canvas memerlukan autentikasi Gateway (token/kata sandi/proksi tepercaya), sama seperti permukaan HTTP Gateway lainnya.
- WebView Node biasanya tidak mengirim header autentikasi; setelah suatu node dipasangkan dan terhubung, Gateway mengiklankan URL kapabilitas yang tercakup untuk node tersebut guna mengakses canvas/A2UI.
- URL kapabilitas terikat pada sesi WS node yang aktif dan cepat kedaluwarsa. Fallback berbasis IP tidak digunakan.
- Menyisipkan klien muat ulang langsung ke dalam HTML yang disajikan.
- Secara otomatis membuat
index.htmlawal saat kosong. - Juga menyajikan A2UI di
/__openclaw__/a2ui/. - Perubahan memerlukan restart Gateway.
- Nonaktifkan muat ulang langsung untuk direktori besar atau galat
EMFILE.
Penemuan
mDNS (Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(default): hilangkancliPath+sshPortdari catatan TXT.full: sertakancliPath+sshPort; pengiklanan multicast LAN tetap mengharuskan pluginbonjourbawaan diaktifkan.off: hentikan pengiklanan multicast LAN tanpa mengubah status pengaktifan plugin.- Plugin
bonjourbawaan dimulai secara otomatis pada host macOS dan bersifat opsional pada penerapan Gateway di Linux, Windows, dan lingkungan terkontainerisasi. - Nama host secara default menggunakan nama host sistem jika merupakan label DNS yang valid, dengan fallback ke
openclaw. Ganti denganOPENCLAW_MDNS_HOSTNAME. OPENCLAW_DISABLE_BONJOUR=1menonaktifkan pengiklanan mDNS sepenuhnya, dengan mengesampingkandiscovery.mdns.mode.
Area luas (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}Menulis zona DNS-SD unicast di bawah ~/.openclaw/dns/. Untuk penemuan lintas jaringan, pasangkan dengan server DNS (CoreDNS direkomendasikan) + DNS terbagi Tailscale.
Penyiapan: openclaw dns setup --apply.
Lingkungan
env (variabel lingkungan sebaris)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- Variabel lingkungan sebaris hanya diterapkan jika lingkungan proses tidak memiliki kunci tersebut.
- File
.env:.envCWD +~/.openclaw/.env(keduanya tidak mengganti variabel yang sudah ada). shellEnv: mengimpor kunci yang diharapkan tetapi belum ada dari profil shell login Anda.- Lihat Lingkungan untuk urutan prioritas lengkap.
Substitusi variabel lingkungan
Referensikan variabel lingkungan dalam string konfigurasi apa pun dengan ${VAR_NAME}:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- Hanya nama huruf besar yang dicocokkan:
[A-Z_][A-Z0-9_]*. - Variabel yang hilang/kosong memicu galat saat konfigurasi dimuat.
- Loloskan dengan
$${VAR}untuk${VAR}literal. - Berfungsi dengan
$include.
Rahasia
Referensi rahasia bersifat aditif: nilai teks biasa tetap berfungsi.
SecretRef
Gunakan satu bentuk objek:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }Validasi:
- Pola
provider:^[a-z][a-z0-9_-]{0,63}$ - Pola ID
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - ID
source: "file": penunjuk JSON absolut (misalnya"/providers/openai/apiKey") - Pola ID
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(mendukung pemilihsecret#json_keybergaya AWS) - ID
source: "exec"tidak boleh berisi segmen jalur yang dipisahkan garis miring berupa.atau..(misalnyaa/../bditolak)
Permukaan kredensial yang didukung
- Matriks kanonis: Permukaan Kredensial SecretRef
secrets applymenargetkan jalur kredensialopenclaw.jsonyang didukung.- Referensi
auth-profiles.jsondisertakan dalam resolusi waktu proses dan cakupan audit.
Konfigurasi penyedia rahasia
{ secrets: { providers: { default: { source: "env" }, // penyedia env eksplisit opsional filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", timeoutMs: 5000, }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", passEnv: ["PATH", "VAULT_ADDR"], }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, },}Catatan:
- Penyedia
filemendukungmode: "json"danmode: "singleValue"(idharus berupa"value"dalam mode singleValue). - Jalur penyedia file dan exec gagal secara tertutup saat verifikasi ACL Windows tidak tersedia. Atur
allowInsecurePath: truehanya untuk jalur tepercaya yang tidak dapat diverifikasi. - Penyedia
execmemerlukan jalurcommandabsolut dan menggunakan payload protokol pada stdin/stdout. - Secara default, jalur perintah symlink ditolak. Atur
allowSymlinkCommand: trueuntuk mengizinkan jalur symlink sembari memvalidasi jalur target yang telah diselesaikan. - Jika
trustedDirsdikonfigurasi, pemeriksaan direktori tepercaya berlaku pada jalur target yang telah diselesaikan. - Lingkungan anak
execsecara default bersifat minimal; teruskan variabel yang diperlukan secara eksplisit denganpassEnv. - Referensi rahasia diselesaikan saat aktivasi menjadi snapshot dalam memori, lalu jalur permintaan hanya membaca snapshot tersebut.
- Pemfilteran permukaan aktif diterapkan selama aktivasi: referensi yang tidak dapat diselesaikan pada permukaan aktif menggagalkan startup/muat ulang, sedangkan permukaan tidak aktif dilewati dengan diagnostik.
Penyimpanan autentikasi
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal"], }, },}- Profil per agen disimpan di
<agentDir>/auth-profiles.json. auth-profiles.jsonmendukung referensi tingkat nilai (keyRefuntukapi_key,tokenRefuntuktoken) bagi mode kredensial statis.- Peta datar
auth-profiles.jsonlama seperti{ "provider": { "apiKey": "..." } }bukan format runtime;openclaw doctor --fixmenulis ulang peta tersebut menjadi profil kunci APIprovider:defaultkanonis dengan cadangan.legacy-flat.*.bak. - Profil mode OAuth (
auth.profiles.<id>.mode = "oauth") tidak mendukung kredensial profil autentikasi yang didukung SecretRef. - Kredensial runtime statis berasal dari snapshot terselesaikan dalam memori; entri statis
auth.jsonlama dibersihkan saat ditemukan. - Impor OAuth lama dari
~/.openclaw/credentials/oauth.json. - Lihat OAuth.
- Perilaku runtime rahasia dan perkakas
audit/configure/apply: Pengelolaan Rahasia.
Audit
{ audit: { enabled: true, messages: "off", // off | direct | all },}Gateway mencatat peristiwa audit khusus metadata untuk eksekusi agen dan
tindakan alat ke dalam basis data status bersama. Metadata siklus hidup pesan
merupakan pilihan keikutsertaan yang terpisah. Buku besar menyimpan identitas,
waktu, nama alat, dan hasil yang dinormalisasi, tetapi tidak pernah menyimpan
prompt, isi pesan, argumen alat, hasil, atau teks galat mentah. Baris pesan
tidak menyimpan id akun platform, percakapan, pesan, dan target mentah. Kunci
sesi eksekusi/alat tetap tersedia untuk korelasi dan kunci tersebut sendiri
dapat berisi id akun platform atau rekan. Catatan kedaluwarsa setelah 30 hari
dan buku besar dibatasi hingga 100.000 baris. Kueri catatan tersebut dengan
openclaw audit atau RPC Gateway
audit.activity.list. Lihat
Riwayat audit untuk model data lengkap, semantik privasi,
dan batas cakupan.
enabled: catat peristiwa audit baru (default:true). Buku besar aktif secara default karena jejak audit yang baru diaktifkan setelah insiden tidak dapat menjelaskan insiden tersebut. Menyetelfalsemenghentikan penyisipan peristiwa baru setelah Gateway dimulai ulang; catatan yang ada tetap dapat dibaca hingga kedaluwarsa. Mengaktifkannya kembali melanjutkan pencatatan sejak titik tersebut—kesenjangannya tidak diisi ulang.messages: cakupan metadata pesan (default:"off")."direct"hanya mencatat percakapan langsung yang diketahui."all"juga mencatat jenis percakapan grup, kanal, dan yang tidak diketahui. Kedua mode tetap bebas konten dan mengganti pengidentifikasi mentah dengan pseudonim berkunci lokal instalasi jika korelasi tersedia. Ini merupakan alat bantu korelasi, bukan anonimisasi; basis data status menyimpan kunci derivasi, tetapi ekspor RPC dan CLI tidak.
Gateway yang berjalan mengambil audit.enabled dan audit.messages saat dimulai;
mulai ulang Gateway setelah mengubah salah satu pengaturan. Cakupan pesan saat
ini mencakup pesan masuk yang diterima dan mencapai pengiriman inti serta satu
baris terminal per muatan balasan keluar logis asli yang mencapai pengiriman
tahan lama bersama. Jalur lokal Plugin dan pengiriman langsung yang melewati
batas bersama tersebut belum tercakup. Penulis latar belakang berbatas ini
bersifat upaya terbaik, bukan arsip kepatuhan tanpa kehilangan.
Pencatatan Log
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // pretty | compact | json redactSensitive: "tools", // off | tools redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- Berkas log default:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Setel
logging.fileuntuk jalur yang stabil. consoleLeveldinaikkan menjadidebugsaat--verbose.maxFileBytes: ukuran maksimum berkas log aktif dalam byte sebelum rotasi (bilangan bulat positif; default:104857600= 100 MB). OpenClaw menyimpan hingga lima arsip bernomor di samping berkas aktif.redactSensitive/redactPatterns: penyamaran upaya terbaik untuk keluaran konsol, log berkas, catatan log OTLP, dan teks transkrip sesi yang dipersistenkan.redactSensitive: "off"hanya menonaktifkan kebijakan umum log/transkrip ini; permukaan keamanan UI/alat/diagnostik tetap menyunting rahasia sebelum dipancarkan.
Diagnostik
{ diagnostics: { enabled: true, flags: ["telegram.*"], otel: { enabled: false, endpoint: "https://otel-collector.example.com:4318", tracesEndpoint: "https://traces.example.com/v1/traces", metricsEndpoint: "https://metrics.example.com/v1/metrics", logsEndpoint: "https://logs.example.com/v1/logs", protocol: "http/protobuf", // http/protobuf | grpc headers: { "x-tenant-id": "my-org" }, serviceName: "openclaw-gateway", traces: true, metrics: true, logs: false, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: sakelar utama untuk keluaran instrumentasi (default:true).flags: larik string flag yang mengaktifkan keluaran log tertarget (mendukung karakter pengganti seperti"telegram.*"atau"*").otel.enabled: mengaktifkan pipeline ekspor OpenTelemetry (default:false). Untuk konfigurasi lengkap, katalog sinyal, dan model privasi, lihat Ekspor OpenTelemetry.otel.endpoint: URL kolektor untuk ekspor OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: endpoint OTLP khusus sinyal opsional. Jika disetel, nilai tersebut menggantikanotel.endpointhanya untuk sinyal terkait.otel.protocol:"http/protobuf"(default) atau"grpc".otel.headers: header metadata HTTP/gRPC tambahan yang dikirim bersama permintaan ekspor OTel.otel.serviceName: nama layanan untuk atribut sumber daya.otel.traces/otel.metrics/otel.logs: aktifkan ekspor jejak, metrik, atau log.otel.logsExporter: tujuan ekspor log:"otlp"(default),"stdout"untuk satu objek JSON per baris stdout, atau"both".otel.sampleRate: tingkat pengambilan sampel jejak0-1.otel.flushIntervalMs: interval pengosongan telemetri berkala dalam ms.otel.captureContent: pengambilan konten mentah yang bersifat pilihan untuk atribut span OTEL. Default-nya nonaktif. Booleantruemengambil konten pesan/alat non-sistem; bentuk objek memungkinkan Anda mengaktifkaninputMessages,outputMessages,toolInputs,toolOutputs,systemPrompt, dantoolDefinitionssecara eksplisit.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: sakelar lingkungan untuk bentuk span inferensi GenAI eksperimental terbaru, termasuk nama span{gen_ai.operation.name} {gen_ai.request.model}, jenis spanCLIENT, dangen_ai.provider.namesebagai penggantigen_ai.systemlama. Secara default, span mempertahankanopenclaw.model.calldangen_ai.systemdemi kompatibilitas; metrik GenAI menggunakan atribut semantik berbatas.OPENCLAW_OTEL_PRELOADED=1: sakelar lingkungan untuk host yang telah mendaftarkan SDK OpenTelemetry global. OpenClaw kemudian melewati pengaktifan/penonaktifan SDK milik Plugin sambil tetap mempertahankan listener diagnostik aktif.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINT, danOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: variabel lingkungan endpoint khusus sinyal yang digunakan saat kunci konfigurasi terkait tidak disetel.cacheTrace.enabled: catat snapshot jejak cache untuk eksekusi tertanam (default:false).cacheTrace.filePath: jalur keluaran untuk JSONL jejak cache (default:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: kendalikan apa yang disertakan dalam keluaran jejak cache (semua default:true).
Pembaruan
{ update: { channel: "stable", // stable | extended-stable | beta | dev checkOnStart: true, auto: { enabled: false, }, },}channel: kanal rilis—"stable","extended-stable","beta", atau"dev". Extended-stable hanya untuk paket: perintah latar depan menangani instalasi, sedangkan Gateway dapat memancarkan petunjuk pembaruan hanya-baca.checkOnStart: periksa pembaruan npm saat Gateway dimulai (default:true). Pilihan extended-stable yang tersimpan menggunakan petunjuk hanya-baca dan jadwal petunjuk 24 jam yang sama.auto.enabled: aktifkan pembaruan otomatis latar belakang untuk instalasi paket stable dan beta (default:false). Extended-stable tidak pernah diterapkan secara otomatis.
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", fallbacks: ["acpx-secondary"], defaultAgent: "main", allowedAgents: ["main", "ops"], stream: { repeatSuppression: true, deliveryMode: "live", // live | final_only }, },}enabled: gerbang fitur ACP global (default:true; setelfalseuntuk menyembunyikan kemampuan pengiriman dan pembuatan ACP).dispatch.enabled: gerbang independen untuk pengiriman giliran sesi ACP (default:true). Setelfalseagar perintah ACP tetap tersedia sekaligus memblokir eksekusi.backend: id backend runtime ACP default (harus cocok dengan Plugin runtime ACP yang terdaftar). Instal Plugin backend terlebih dahulu, dan jikaplugins.allowdisetel, sertakan id Plugin backend (misalnyaacpx) atau backend ACP tidak akan dimuat.fallbacks: daftar berurutan id backend ACP cadangan yang dicoba saat backend utama gagal lebih awal dengan galat yang tampak sementara (tidak tersedia, dibatasi laju, kuota habis, atau kelebihan beban) sebelum menghasilkan keluaran apa pun. Setiap entri harus cocok dengan backend Plugin runtime ACP yang terdaftar.defaultAgent: id agen target ACP cadangan saat pembuatan tidak menentukan target eksplisit.allowedAgents: daftar yang diizinkan berisi id agen yang diperbolehkan untuk sesi runtime ACP; kosong berarti tidak ada pembatasan tambahan.stream.repeatSuppression: sembunyikan baris status/alat berulang per giliran (default:true).stream.deliveryMode:"live"mengalirkan secara bertahap;"final_only"menyangga hingga peristiwa terminal giliran.stream.tagVisibility: catatan nama tag ke penggantian visibilitas boolean untuk peristiwa yang dialirkan.runtime.installCommand: perintah instalasi opsional yang dijalankan saat melakukan bootstrap lingkungan runtime ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModemengontrol gaya slogan banner:"random"(default): slogan lucu/musiman yang berganti-ganti."default": slogan netral tetap (All your chats, one OpenClaw.)."off": tanpa teks slogan (judul/versi banner tetap ditampilkan).
- Untuk menyembunyikan seluruh banner (bukan hanya slogan), atur env
OPENCLAW_HIDE_BANNER=1.
Wizard
Perilaku dan metadata untuk alur penyiapan terpandu CLI (onboard, configure, doctor):
{ wizard: { accessMode: "full", appRecommendations: true, lastRunAt: "2026-01-01T00:00:00.000Z", lastRunVersion: "2026.1.4", lastRunCommit: "abc1234", lastRunCommand: "configure", lastRunMode: "local", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}-
wizard.accessMode: persetujuan penemuan yang dipilih pada awal onboarding terpandu."full"(direkomendasikan) memungkinkan penyiapan mencari aplikasi AI, kunci, dan runtime lokal secara otomatis;"guarded"membuat penyiapan bertanya sekali sebelum melakukan pencarian dan menawarkan konfigurasi manual sebagai gantinya. -
wizard.appRecommendationssecara default bernilaitrue. Atur kefalseuntuk menonaktifkan rekomendasi aplikasi terinstal selama onboarding terpandu atau klasik dan memblokir aksesdevice.appsGateway. Host Node tetap memerlukan flag berbagi aplikasi terinstal terpisah miliknya, yang secara default nonaktif, sebelum mengiklankan perintah tersebut.
Identitas
Lihat kolom identitas agents.list pada Default agen.
Bridge (lama, telah dihapus)
Build saat ini tidak lagi menyertakan bridge TCP. Node terhubung melalui WebSocket Gateway. Kunci bridge.* tidak lagi menjadi bagian dari skema konfigurasi (validasi gagal hingga kunci tersebut dihapus; openclaw doctor --fix dapat menghapus kunci yang tidak dikenal).
Konfigurasi bridge lama (referensi historis)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, webhook: "https://example.invalid/legacy", // fallback lama yang tidak digunakan lagi untuk tugas tersimpan dengan notify:true webhookToken: "replace-with-dedicated-token", // token bearer opsional untuk autentikasi webhook keluar sessionRetention: "24h", // string durasi atau false },}sessionRetention: lamanya menyimpan sesi eksekusi cron terisolasi yang telah selesai sebelum memangkas baris sesi SQLite. Juga mengontrol pembersihan transkrip cron terhapus yang diarsipkan. Default:24h; aturfalseuntuk menonaktifkannya.- Riwayat eksekusi secara otomatis menyimpan 2000 baris terminal terbaru per tugas. Baris yang hilang tetap memiliki jangka waktu pembersihan 24 jam.
webhookToken: token bearer yang digunakan untuk pengiriman POST webhook cron (delivery.mode = "webhook"); jika dihilangkan, tidak ada header autentikasi yang dikirim.webhook: URL webhook fallback lama yang tidak digunakan lagi (http/https), yang digunakan olehopenclaw doctor --fixuntuk memigrasikan tugas tersimpan yang masih memilikinotify: true; pengiriman runtime menggunakandelivery.mode="webhook"per tugas ditambahdelivery.to, ataudelivery.completionDestinationsaat mempertahankan pengiriman pengumuman.
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: aktifkan peringatan kegagalan untuk tugas cron (default:false).after: jumlah kegagalan berturut-turut sebelum peringatan dipicu (bilangan bulat positif, min:1).cooldownMs: jumlah minimum milidetik antara peringatan berulang untuk tugas yang sama (bilangan bulat nonnegatif).includeSkipped: hitung eksekusi berturut-turut yang dilewati terhadap ambang peringatan (default:false). Eksekusi yang dilewati dilacak secara terpisah dan tidak memengaruhi backoff kesalahan eksekusi.mode: mode pengiriman -"announce"mengirim melalui pesan kanal;"webhook"melakukan POST ke webhook yang dikonfigurasi.accountId: ID akun atau kanal opsional untuk membatasi cakupan pengiriman peringatan.
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- Tujuan default untuk notifikasi kegagalan cron pada semua tugas.
mode:"announce"atau"webhook"; secara default menggunakan"announce"jika tersedia cukup data target.channel: penggantian kanal untuk pengiriman pengumuman."last"menggunakan kembali kanal pengiriman terakhir yang diketahui.to: target pengumuman eksplisit atau URL webhook. Wajib untuk mode webhook.accountId: penggantian akun opsional untuk pengiriman.delivery.failureDestinationper tugas menggantikan default global ini.- Jika tujuan kegagalan global maupun per tugas tidak ditetapkan, tugas yang telah melakukan pengiriman melalui
announceakan menggunakan target pengumuman utama tersebut sebagai fallback saat gagal. delivery.failureDestinationhanya didukung untuk tugassessionTarget="isolated", kecualidelivery.modeutama tugas tersebut adalah"webhook".
Lihat Tugas Cron. Eksekusi cron terisolasi dilacak sebagai tugas latar belakang.
Variabel templat model media
Placeholder templat yang diperluas dalam tools.media.models[].args:
| Variabel | Deskripsi |
|---|---|
{{Body}} |
Isi lengkap pesan masuk |
{{RawBody}} |
Isi mentah (tanpa pembungkus riwayat/pengirim) |
{{BodyStripped}} |
Isi dengan penyebutan grup dihapus |
{{From}} |
Pengidentifikasi pengirim |
{{To}} |
Pengidentifikasi tujuan |
{{MessageSid}} |
ID pesan kanal |
{{SessionId}} |
UUID sesi saat ini |
{{IsNewSession}} |
"true" saat sesi baru dibuat |
{{MediaUrl}} |
URL semu media masuk |
{{MediaPath}} |
Jalur media lokal |
{{MediaType}} |
Jenis media (gambar/audio/dokumen/…) |
{{Transcript}} |
Transkrip audio |
{{Prompt}} |
Prompt media yang telah diuraikan untuk entri CLI |
{{MaxChars}} |
Jumlah maksimum karakter keluaran yang telah diuraikan untuk entri CLI |
{{ChatType}} |
"direct" atau "group" |
{{GroupSubject}} |
Subjek grup (upaya terbaik) |
{{GroupMembers}} |
Pratinjau anggota grup (upaya terbaik) |
{{SenderName}} |
Nama tampilan pengirim (upaya terbaik) |
{{SenderE164}} |
Nomor telepon pengirim (upaya terbaik) |
{{Provider}} |
Petunjuk penyedia (whatsapp, telegram, discord, dll.) |
Penyertaan konfigurasi ($include)
Pisahkan konfigurasi menjadi beberapa file:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}Perilaku penggabungan:
- Satu file: menggantikan objek yang memuatnya.
- Array file: digabungkan secara mendalam sesuai urutan (yang belakangan menggantikan yang sebelumnya).
- Kunci saudara: digabungkan setelah penyertaan (menggantikan nilai yang disertakan).
- Penyertaan bersarang: hingga kedalaman 10 tingkat.
- Jalur: diuraikan relatif terhadap file yang menyertakan, tetapi harus tetap berada di dalam direktori konfigurasi tingkat atas (
dirnamedariopenclaw.json). Bentuk absolut/../hanya diizinkan jika hasil penguraiannya tetap berada di dalam batas tersebut. AturOPENCLAW_INCLUDE_ROOTS(jalur absolut) untuk mengizinkan root tambahan di luar direktori konfigurasi. - Batas: jalur tidak boleh mengandung byte null dan panjangnya harus benar-benar kurang dari 4096 karakter sebelum dan sesudah penguraian; setiap file yang disertakan dibatasi hingga 2 MB.
- Penulisan milik OpenClaw yang hanya mengubah satu bagian tingkat atas yang didukung oleh penyertaan satu file akan ditulis langsung ke file yang disertakan tersebut. Misalnya,
plugins installmemperbaruiplugins: { $include: "./plugins.json5" }dalamplugins.json5dan membiarkanopenclaw.jsontetap utuh. - Penyertaan root, array penyertaan, dan penyertaan dengan penggantian saudara bersifat hanya-baca untuk penulisan milik OpenClaw; penulisan tersebut gagal secara tertutup alih-alih meratakan konfigurasi.
- Kesalahan: pesan yang jelas untuk file yang tidak ditemukan, kesalahan penguraian, penyertaan melingkar, format jalur tidak valid, dan panjang berlebihan.