/v1/*, auth bearer rahasia bersama diperlakukan sebagai akses operator tepercaya untuk seluruh gateway.
POST /tools/invoke- Port yang sama dengan Gateway (multiplex WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
Autentikasi
Menggunakan konfigurasi auth Gateway. Jalur auth HTTP umum:- auth rahasia bersama (
gateway.auth.mode="token"atau"password"):Authorization: Bearer <token-or-password> - auth HTTP pembawa identitas tepercaya (
gateway.auth.mode="trusted-proxy"): rutekan melalui proxy sadar-identitas yang dikonfigurasi dan biarkan proxy tersebut menyisipkan header identitas yang diperlukan - auth terbuka private-ingress (
gateway.auth.mode="none"): tidak memerlukan header auth
- Ketika
gateway.auth.mode="token", gunakangateway.auth.token(atauOPENCLAW_GATEWAY_TOKEN). - Ketika
gateway.auth.mode="password", gunakangateway.auth.password(atauOPENCLAW_GATEWAY_PASSWORD). - Ketika
gateway.auth.mode="trusted-proxy", permintaan HTTP harus berasal dari sumber proxy tepercaya yang dikonfigurasi; proxy loopback pada host yang sama memerlukangateway.auth.trustedProxy.allowLoopback = truesecara eksplisit. - Pemanggil internal pada host yang sama yang melewati proxy dapat menggunakan
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDsebagai fallback langsung lokal. Bukti headerForwarded,X-Forwarded-*, atauX-Real-IPapa pun akan tetap menempatkan permintaan pada jalur trusted-proxy. - Jika
gateway.auth.rateLimitdikonfigurasi dan terlalu banyak kegagalan auth terjadi, endpoint mengembalikan429denganRetry-After.
Batas keamanan (penting)
Perlakukan endpoint ini sebagai permukaan akses operator penuh untuk instance gateway.- Auth bearer HTTP di sini bukan model cakupan per pengguna yang sempit.
- Token/kata sandi Gateway yang valid untuk endpoint ini harus diperlakukan seperti kredensial pemilik/operator.
- Untuk mode auth rahasia bersama (
tokendanpassword), endpoint memulihkan default operator penuh yang normal meskipun pemanggil mengirim headerx-openclaw-scopesyang lebih sempit. - Auth rahasia bersama juga memperlakukan pemanggilan tool langsung pada endpoint ini sebagai giliran owner-sender.
- Mode HTTP pembawa identitas tepercaya (misalnya auth proxy tepercaya atau
gateway.auth.mode="none"pada private ingress) menghormatix-openclaw-scopessaat ada dan jika tidak ada akan fallback ke set cakupan default operator normal. - Pertahankan endpoint ini hanya pada loopback/tailnet/private ingress; jangan mengeksposnya langsung ke internet publik.
gateway.auth.mode="token"atau"password"+Authorization: Bearer ...- membuktikan kepemilikan rahasia operator gateway bersama
- mengabaikan
x-openclaw-scopesyang lebih sempit - memulihkan set cakupan operator default penuh:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - memperlakukan pemanggilan tool langsung pada endpoint ini sebagai giliran owner-sender
- mode HTTP pembawa identitas tepercaya (misalnya auth proxy tepercaya, atau
gateway.auth.mode="none"pada private ingress)- mengautentikasi identitas tepercaya luar atau batas deployment tertentu
- menghormati
x-openclaw-scopesketika header ada - fallback ke set cakupan default operator normal ketika header tidak ada
- hanya kehilangan semantik pemilik ketika pemanggil secara eksplisit mempersempit cakupan dan menghilangkan
operator.admin
Isi permintaan
tool(string, wajib): nama tool yang akan dipanggil.action(string, opsional): dipetakan ke dalam args jika skema tool mendukungactiondan payload args menghilangkannya.args(object, opsional): argumen khusus tool.sessionKey(string, opsional): kunci sesi target. Jika dihilangkan atau"main", Gateway menggunakan kunci sesi utama yang dikonfigurasi (menghormatisession.mainKeydan agen default, atauglobaldalam cakupan global).dryRun(boolean, opsional): dicadangkan untuk penggunaan mendatang; saat ini diabaikan.
Perilaku kebijakan + routing
Ketersediaan tool difilter melalui rantai kebijakan yang sama dengan yang digunakan oleh agen Gateway:tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- kebijakan grup (jika kunci sesi dipetakan ke grup atau channel)
- kebijakan subagent (ketika memanggil dengan kunci sesi subagent)
- Persetujuan exec adalah guardrail operator, bukan batas otorisasi terpisah untuk endpoint HTTP ini. Jika sebuah tool dapat dijangkau di sini melalui auth Gateway + kebijakan tool,
/tools/invoketidak menambahkan prompt persetujuan ekstra per panggilan. - Jika
execdapat dijangkau di sini, perlakukan itu sebagai permukaan shell yang memutasi. Menolakwrite,edit,apply_patch, atau tool HTTP penulisan-filesystem tidak membuat eksekusi shell menjadi read-only. - Jangan bagikan kredensial bearer Gateway dengan pemanggil yang tidak tepercaya. Jika Anda memerlukan pemisahan lintas batas kepercayaan, jalankan gateway terpisah (dan idealnya pengguna/host OS terpisah).
exec- eksekusi perintah langsung (permukaan RCE)spawn- pembuatan proses anak arbitrer (permukaan RCE)shell- eksekusi perintah shell (permukaan RCE)fs_write- mutasi file arbitrer pada hostfs_delete- penghapusan file arbitrer pada hostfs_move- pemindahan/penggantian nama file arbitrer pada hostapply_patch- penerapan patch dapat menulis ulang file arbitrersessions_spawn- orkestrasi sesi; men-spawn agen dari jarak jauh adalah RCEsessions_send- injeksi pesan lintas sesicron- bidang kendali automasi persistengateway- bidang kendali gateway; mencegah konfigurasi ulang melalui HTTPnodes- relay perintah node dapat menjangkau system.run pada host yang dipasangkanwhatsapp_login- penyiapan interaktif yang memerlukan pemindaian QR terminal; hang pada HTTP
gateway.tools:
gateway.tools.allow adalah override eksposur, bukan peningkatan cakupan. Dalam
mode HTTP pembawa identitas, cron, gateway, dan nodes tetap tidak tersedia
bagi pemanggil yang tidak memiliki identitas owner/admin (operator.admin) meskipun
ketiganya tercantum dalam gateway.tools.allow. Auth bearer rahasia bersama tetap mengikuti
aturan operator tepercaya penuh di atas.
Untuk membantu kebijakan grup menyelesaikan konteks, Anda dapat secara opsional menetapkan:
x-openclaw-message-channel: <channel>(contoh:slack,telegram)x-openclaw-account-id: <accountId>(ketika ada beberapa akun)
Respons
200→{ ok: true, result }400→{ ok: false, error: { type, message } }(permintaan tidak valid atau error input tool)401→ tidak terotorisasi429→ auth terkena rate limit (Retry-Afterditetapkan)404→ tool tidak tersedia (tidak ditemukan atau tidak masuk allowlist)405→ metode tidak diizinkan500→{ ok: false, error: { type, message } }(error eksekusi tool yang tidak terduga; pesan disanitasi)