CLI commands
Kebijakan
openclaw policy
openclaw policy disediakan oleh Plugin Policy bawaan. Policy adalah lapisan
kesesuaian enterprise di atas pengaturan OpenClaw yang sudah ada. Ini tidak
menambahkan sistem konfigurasi kedua. policy.jsonc mendefinisikan persyaratan
yang ditulis, OpenClaw mengamati workspace aktif sebagai bukti, dan pemeriksaan
kesehatan policy melaporkan drift melalui doctor --lint. Sinyal kesesuaian
akhir adalah eksekusi doctor --lint yang bersih; policy menyumbangkan temuan
ke permukaan lint bersama tersebut alih-alih membuat gerbang kesehatan terpisah.
Policy saat ini mengelola channel yang dikonfigurasi, server MCP, penyedia
model, postur SSRF jaringan, postur akses ingress/channel, postur eksposur Gateway, postur workspace agent,
postur penanganan data, postur penyedia rahasia/profil auth konfigurasi OpenClaw, dan deklarasi tool
yang diatur. Misalnya, IT atau operator workspace dapat mencatat bahwa Telegram
bukan penyedia channel yang disetujui, membatasi server MCP dan ref model ke
entri yang disetujui, mewajibkan akses fetch/browser jaringan privat tetap
dinonaktifkan, mewajibkan isolasi sesi pesan langsung dan postur ingress channel
tetap dalam batas yang telah ditinjau, mewajibkan bind/auth/eksposur HTTP Gateway tetap dalam batas yang telah ditinjau,
mewajibkan akses workspace agent dan penolakan tool tetap dalam postur yang telah ditinjau,
mewajibkan SecretRef konfigurasi OpenClaw menggunakan penyedia terkelola, mewajibkan
profil auth konfigurasi membawa metadata penyedia/mode, mewajibkan tool yang diatur
membawa metadata risiko dan sensitivitas, mewajibkan redaksi logging sensitif, menolak
pengambilan konten telemetri, mewajibkan pemeliharaan retensi sesi, menolak pengindeksan memori
transkrip sesi, lalu menggunakan doctor --lint sebagai gerbang kesesuaian
bersama.
Gunakan policy ketika workspace membutuhkan pernyataan tahan lama seperti "channel ini tidak boleh diaktifkan" atau "tool yang diatur harus mendeklarasikan metadata persetujuan" dan cara berulang untuk membuktikan bahwa OpenClaw masih sesuai dengan pernyataan tersebut. Gunakan konfigurasi biasa dan dokumen workspace saja ketika Anda hanya membutuhkan perilaku lokal dan tidak membutuhkan temuan policy atau output atestasi.
Mulai cepat
Aktifkan Plugin Policy bawaan sebelum penggunaan pertama:
openclaw plugins enable policyKetika policy diaktifkan, doctor dapat memuat pemeriksaan kesehatan policy tanpa mengaktifkan
Plugin arbitrer. Plugin tetap aktif jika policy.jsonc hilang, sehingga
doctor dapat melaporkan artefak yang hilang.
Policy ditulis, bukan dibuat dari pengaturan pengguna saat ini. Policy minimal untuk channel, server MCP, penyedia model, postur jaringan, akses ingress/channel, eksposur Gateway, postur workspace agent, postur runtime sandbox yang dikonfigurasi, postur penanganan data OpenClaw, postur penyedia rahasia/profil auth konfigurasi, postur file persetujuan exec, dan metadata tool terlihat seperti ini:
{ "channels": { "denyRules": [ { "id": "no-telegram", "when": { "provider": "telegram" }, "reason": "Telegram is not approved for this workspace.", }, ], }, "mcp": { "servers": { "allow": ["docs"], "deny": ["untrusted"], }, }, "models": { "providers": { "allow": ["openai", "anthropic"], "deny": ["openrouter"], }, }, "network": { "privateNetwork": { "allow": false, }, }, "ingress": { "session": { "requireDmScope": "per-channel-peer", }, "channels": { "allowDmPolicies": ["pairing", "allowlist", "disabled"], "denyOpenGroups": true, "requireMentionInGroups": true, }, }, "gateway": { "exposure": { "allowNonLoopbackBind": false, "allowTailscaleFunnel": false, }, "auth": { "requireAuth": true, "requireExplicitRateLimit": true, }, "controlUi": { "allowInsecure": false, }, "remote": { "allow": false, }, "http": { "denyEndpoints": ["chatCompletions", "responses"], "requireUrlAllowlists": true, }, }, "agents": { "workspace": { "allowedAccess": ["none", "ro"], "denyTools": ["exec", "process", "write", "edit", "apply_patch"], }, }, "dataHandling": { "sensitiveLogging": { "requireRedaction": true, }, "telemetry": { "denyContentCapture": true, }, "retention": { "requireSessionMaintenance": true, }, "memory": { "denySessionTranscriptIndexing": true, }, }, "secrets": { "requireManagedProviders": true, "denySources": ["exec"], "allowInsecureProviders": false, }, "auth": { "profiles": { "requireMetadata": ["provider", "mode"], "allowModes": ["api_key", "token"], }, }, "execApprovals": { "requireFile": true, "defaults": { "allowSecurity": ["deny"] }, "agents": { "allowSecurity": ["deny", "allowlist"], "allowAutoAllowSkills": false, "allowlist": { "expected": ["deploy", "status"] }, }, }, "tools": { "requireMetadata": ["risk", "sensitivity", "owner"], "profiles": { "allow": ["messaging", "minimal"], }, "fs": { "requireWorkspaceOnly": true, }, "exec": { "allowSecurity": ["deny", "allowlist"], "requireAsk": ["always"], "allowHosts": ["sandbox"], }, "elevated": { "allow": false, }, "denyTools": ["group:runtime", "group:fs"], },}Aturan adalah otoritasnya. Blok kategori hanyalah namespace; pemeriksaan berjalan
ketika aturan konkret ada. OpenClaw membaca pengaturan channels.* saat ini,
mcp.servers.*, models.providers.*, ref model agent yang dipilih, pengaturan SSRF jaringan,
cakupan sesi pesan langsung, policy DM channel, policy grup channel,
gerbang mention channel/grup, postur bind/auth/Control UI/Tailscale/remote/HTTP Gateway,
postur akses workspace sandbox agent konfigurasi OpenClaw dan penolakan tool,
postur konfigurasi penanganan data, asal-usul penyedia rahasia
konfigurasi dan SecretRef, metadata profil auth konfigurasi, postur tool
global/per-agent yang dikonfigurasi, dan deklarasi TOOLS.md sebagai bukti, lalu
melaporkan status teramati yang tidak sesuai. Jika policy menolak bind Gateway
non-loopback, hilangkan gateway.bind hanya ketika Anda
bersedia meninjau default runtime; atur gateway.bind=loopback untuk
kesesuaian konfigurasi yang ketat. Untuk postur agent read-only, konfigurasikan mode sandbox
pada default atau agent yang berlaku dan atur workspaceAccess ke none atau
ro; mode sandbox yang dihilangkan atau off tidak memenuhi policy read-only/no-write.
agents.workspace.denyTools mendukung exec, process, write,
edit, dan apply_patch; konfigurasi OpenClaw group:fs mencakup tool mutasi file
dan group:runtime mencakup tool shell/proses. Policy postur tool mengamati
tools.profile, tools.allow, tools.alsoAllow, tools.deny,
tools.fs.workspaceOnly, tools.exec.security, tools.exec.ask,
tools.exec.host, tools.elevated.enabled, dan override per-agent yang sama
agents.list[].tools.*. Policy persetujuan exec membaca artefak produk
exec-approvals.json bernama hanya ketika aturan execApprovals ada;
bukti mencatat default, postur per-agent, dan pola allowlist
tanpa token soket atau teks perintah yang terakhir digunakan. Policy tidak menerapkan panggilan tool
saat runtime. Bukti rahasia mencatat
postur penyedia/sumber dan metadata SecretRef, tidak pernah nilai rahasia mentah. Policy
tidak membaca atau mengatestasi store kredensial per-agent seperti auth-profiles.json;
store tersebut tetap dimiliki oleh alur auth dan kredensial yang sudah ada.
Bukti penanganan data hanya berupa postur tingkat konfigurasi: ini memeriksa
mode redaksi yang dikonfigurasi, toggle pengambilan konten telemetri, mode pemeliharaan sesi, dan
pengaturan pengindeksan memori transkrip sesi. Ini tidak memeriksa log mentah,
ekspor telemetri, isi transkrip, file memori, atau membuktikan bahwa tidak ada data pribadi
atau rahasia.
Referensi aturan policy
Setiap field policy di bawah ini opsional. Pemeriksaan berjalan hanya ketika aturan yang cocok
ada di policy.jsonc. Status teramati adalah konfigurasi OpenClaw yang sudah ada atau
metadata workspace; policy melaporkan drift tetapi tidak menulis ulang perilaku runtime
kecuali jalur perbaikan tersedia secara eksplisit dan diaktifkan.
File policy bersifat ketat: section atau key aturan yang tidak didukung dilaporkan sebagai
policy/policy-jsonc-invalid alih-alih diabaikan.
Overlay policy menjaga aturan tingkat atas yang luas tetap global, lalu memungkinkan blok scope bernama menambahkan section policy normal yang lebih ketat untuk selector eksplisit. Nama scope hanyalah bucket deskriptif; pencocokan menggunakan nilai selector di dalam scope. Overlay bersifat aditif: klaim global tetap berjalan, dan klaim scoped dapat memancarkan temuannya sendiri terhadap konfigurasi teramati yang sama.
Overlay scoped
Gunakan scopes.<scopeName> ketika satu set agent atau channel membutuhkan
policy yang lebih ketat daripada baseline tingkat atas. Section scoped agent menggunakan agentIds, yang
mendukung tools.*, agents.workspace.*, sandbox.*, dataHandling.memory.*,
dan execApprovals.*. Ingress scoped channel
menggunakan channelIds, yang mendukung ingress.channels.*. Section yang tidak didukung
ditolak alih-alih diabaikan. Jika entri agentIds tidak
ada di agents.list[], OpenClaw mengevaluasi aturan scoped terhadap postur global/default
yang diwarisi untuk id agent runtime tersebut.
{ "tools": { "exec": { "allowHosts": ["sandbox", "node"], }, }, "sandbox": { "requireMode": ["all", "non-main"], }, "scopes": { "release-workspace": { "agentIds": ["release-agent", "review-agent"], "agents": { "workspace": { "allowedAccess": ["none", "ro"], }, }, }, "release-lockdown": { "agentIds": ["release-agent"], "tools": { "exec": { "allowHosts": ["sandbox"], "allowSecurity": ["deny", "allowlist"], "requireAsk": ["always"], }, "denyTools": ["exec", "process", "write", "edit", "apply_patch"], }, "sandbox": { "requireMode": ["all"], "allowBackends": ["docker"], }, "dataHandling": { "memory": { "denySessionTranscriptIndexing": true, }, }, }, "shell-sandbox": { "agentIds": ["shell-agent"], "sandbox": { "allowBackends": ["openshell"], "containers": { "requireReadOnlyMounts": false, }, }, }, "telegram-ingress": { "channelIds": ["telegram"], "ingress": { "channels": { "allowDmPolicies": ["pairing"], "denyOpenGroups": true, "requireMentionInGroups": true, }, }, }, },}Agent yang sama dapat muncul di beberapa scope ketika setiap scope mengatur field yang berbeda, seperti ditunjukkan di atas. Field scoped berulang untuk agent yang sama harus sama ketatnya atau lebih ketat menurut metadata policy; klaim duplikat yang lebih lemah ditolak. Metadata strictness memperlakukan allow-list sebagai subset, deny-list sebagai superset, dan boolean wajib sebagai persyaratan tetap.
Policy postur container dievaluasi hanya terhadap bukti yang dapat
diamati OpenClaw untuk agent yang cocok. Jika aturan sandbox.containers.* yang aktif berlaku
untuk agent yang backend sandbox-nya tidak dapat mengekspos field tersebut, policy melaporkan
policy/sandbox-container-posture-unobservable alih-alih memperlakukan klaim sebagai
lulus. Gunakan scope agentIds terpisah untuk grup agent yang menggunakan backend
sandbox berbeda, dan biarkan aturan container yang tidak didukung tidak diatur atau false untuk
grup tempat field tersebut tidak dapat diamati.
ingress.session.requireDmScope tingkat atas tetap global karena
session.dmScope bukan bukti yang dapat diatribusikan ke channel.
| Pemilih | Bagian yang didukung | Gunakan saat |
|---|---|---|
agentIds |
tools, agents.workspace, sandbox, dataHandling.memory, dan execApprovals |
Satu atau beberapa agen runtime memerlukan aturan yang lebih ketat. |
channelIds |
ingress.channels |
Satu atau beberapa saluran memerlukan aturan ingress yang lebih ketat. |
Setiap cakupan yang ada di policy.jsonc harus valid dan dapat diberlakukan.
Saluran
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
channels.denyRules[].when.provider |
Provider channels.* dan status aktif |
Menolak saluran yang dikonfigurasi dari provider seperti telegram. |
channels.denyRules[].reason |
Konteks pesan temuan dan petunjuk perbaikan | Menjelaskan mengapa provider ditolak. |
Server MCP
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
mcp.servers.allow |
id mcp.servers.* |
Mengharuskan setiap server MCP yang dikonfigurasi ada dalam allowlist. |
mcp.servers.deny |
id mcp.servers.* |
Menolak id server MCP tertentu yang dikonfigurasi. |
Provider model
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
models.providers.allow |
id models.providers.* dan referensi model yang dipilih |
Mengharuskan provider yang dikonfigurasi dan referensi model yang dipilih menggunakan provider yang disetujui. |
models.providers.deny |
id models.providers.* dan referensi model yang dipilih |
Menolak provider yang dikonfigurasi dan referensi model yang dipilih berdasarkan id provider. |
Jaringan
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
network.privateNetwork.allow |
Jalur pengecualian SSRF jaringan privat | Atur ke false untuk mengharuskan akses jaringan privat tetap dinonaktifkan. |
Ingress dan akses saluran
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
ingress.session.requireDmScope |
session.dmScope |
Mengharuskan cakupan isolasi pesan langsung yang telah ditinjau. |
ingress.channels.allowDmPolicies |
channels.*.dmPolicy dan kolom kebijakan DM saluran lama |
Hanya mengizinkan kebijakan saluran pesan langsung yang telah ditinjau. |
ingress.channels.denyOpenGroups |
Kebijakan ingress saluran, akun, dan grup | Menolak ingress grup terbuka untuk saluran dan akun yang dikonfigurasi. |
ingress.channels.requireMentionInGroups |
Konfigurasi gerbang mention saluran, akun, grup, guild, dan bertingkat | Mengharuskan gerbang mention saat ingress grup terbuka atau dibatasi mention. |
Gateway
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
gateway.exposure.allowNonLoopbackBind |
gateway.bind |
Atur ke false untuk mengharuskan pengikatan Gateway loopback. |
gateway.exposure.allowTailscaleFunnel |
Postur Gateway Tailscale serve/funnel | Atur ke false untuk menolak eksposur Tailscale Funnel. |
gateway.auth.requireAuth |
gateway.auth.mode |
Atur ke true untuk menolak auth Gateway yang dinonaktifkan. |
gateway.auth.requireExplicitRateLimit |
gateway.auth.rateLimit |
Atur ke true untuk mengharuskan konfigurasi rate-limit auth yang eksplisit. |
gateway.controlUi.allowInsecure |
Toggle auth/perangkat/origin Control UI yang tidak aman | Atur ke false untuk menolak toggle eksposur Control UI yang tidak aman. |
gateway.remote.allow |
Mode/konfigurasi Gateway jarak jauh | Atur ke false untuk menolak mode Gateway jarak jauh. |
gateway.http.denyEndpoints |
Endpoint API HTTP Gateway | Menolak id endpoint seperti chatCompletions atau responses. |
gateway.http.requireUrlAllowlists |
Input pengambilan URL HTTP Gateway | Atur ke true untuk mengharuskan allowlist URL pada input pengambilan URL. |
Ruang kerja agen
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
agents.workspace.allowedAccess |
agents.defaults.sandbox.workspaceAccess dan agents.list[].sandbox.workspaceAccess |
Hanya mengizinkan nilai akses ruang kerja sandbox seperti none atau ro. |
agents.workspace.denyTools |
Konfigurasi penolakan alat global dan per agen | Mengharuskan alat mutasi ruang kerja/runtime seperti exec, process, write, edit, atau apply_patch ditolak. |
Postur sandbox
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
sandbox.requireMode |
agents.defaults.sandbox.mode dan mode per agen |
Hanya mengizinkan mode sandbox yang telah ditinjau seperti all atau non-main. |
sandbox.allowBackends |
agents.defaults.sandbox.backend dan backend per agen |
Hanya mengizinkan backend sandbox yang telah ditinjau seperti docker. |
sandbox.containers.denyHostNetwork |
Mode jaringan sandbox/browser berbasis kontainer | Menolak mode jaringan host. |
sandbox.containers.denyContainerNamespaceJoin |
Mode jaringan sandbox/browser berbasis kontainer | Menolak bergabung ke namespace jaringan kontainer lain. |
sandbox.containers.requireReadOnlyMounts |
Mode mount sandbox/browser berbasis kontainer | Mengharuskan mount bersifat hanya baca. |
sandbox.containers.denyContainerRuntimeSocketMounts |
Target mount sandbox/browser berbasis kontainer | Menolak mount socket runtime kontainer. |
sandbox.containers.denyUnconfinedProfiles |
Postur profil keamanan kontainer | Menolak profil keamanan kontainer tanpa pembatasan. |
sandbox.browser.requireCdpSourceRange |
Rentang sumber CDP browser sandbox | Mengharuskan eksposur CDP browser mendeklarasikan rentang sumber. |
Kebijakan memperlakukan sandbox.mode yang hilang sebagai default implisit off, sehingga
sandbox.requireMode melaporkan sandbox baru atau belum dikonfigurasi sebagai berada di luar
allowlist seperti ["all"].
Penanganan Data
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
dataHandling.sensitiveLogging.requireRedaction |
logging.redactSensitive |
Atur ke true untuk menolak logging.redactSensitive: "off". |
dataHandling.telemetry.denyContentCapture |
diagnostics.otel.captureContent |
Atur ke true untuk menolak penangkapan konten telemetri. |
dataHandling.retention.requireSessionMaintenance |
session.maintenance.mode |
Atur ke true untuk mengharuskan mode pemeliharaan sesi efektif enforce. |
dataHandling.memory.denySessionTranscriptIndexing |
memory.qmd.sessions.enabled dan agents.*.memorySearch.experimental.sessionMemory |
Atur ke true untuk menolak pengindeksan transkrip sesi ke memori. |
Rahasia
| Kolom kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
secrets.requireManagedProviders |
SecretRef konfigurasi dan deklarasi secrets.providers.* |
Atur ke true untuk mengharuskan SecretRef menunjuk ke provider yang dideklarasikan. |
secrets.denySources |
Sumber provider rahasia dan sumber SecretRef | Menolak sumber seperti exec, file, atau nama sumber lain yang dikonfigurasi. |
secrets.allowInsecureProviders |
Flag postur provider rahasia yang tidak aman | Atur ke false untuk menolak provider yang memilih postur tidak aman. |
Persetujuan exec
Kebijakan persetujuan exec mengamati artefak runtime aktif exec-approvals.json.
Secara default ini adalah ~/.openclaw/exec-approvals.json; saat
OPENCLAW_STATE_DIR ditetapkan, Kebijakan membaca
$OPENCLAW_STATE_DIR/exec-approvals.json. Aturan postur aktual seperti
execApprovals.defaults.* atau execApprovals.agents.* memerlukan bukti artefak
yang dapat dibaca; artefak yang hilang atau tidak valid dilaporkan sebagai bukti
yang tidak dapat diamati, bukan menjadi kelulusan best-effort terhadap default runtime sintetis. Setelah
artefak dapat dibaca, kolom persetujuan yang dihilangkan mewarisi default runtime: defaults.security yang hilang
adalah full, dan keamanan agen yang hilang mewarisi default tersebut. Bukti mencakup
defaults, agents.*, dan agents.*.allowlist[].pattern ditambah argPattern opsional, postur
autoAllowSkills efektif, dan sumber entri. Bukti tidak mencakup path/token
socket, commandText, lastUsedCommand, path yang di-resolve, atau timestamp.
| Bidang kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
execApprovals.requireFile |
Path exec-approvals.json runtime aktif |
Atur ke true untuk mewajibkan artefak persetujuan ada dan dapat diurai. |
execApprovals.defaults.allowSecurity |
defaults.security, dengan default full |
Izinkan hanya mode keamanan persetujuan default yang disetujui. |
execApprovals.agents.allowSecurity |
agents.*.security, mewarisi default |
Izinkan hanya mode keamanan persetujuan efektif per agen yang disetujui. |
execApprovals.agents.allowAutoAllowSkills |
defaults.autoAllowSkills dan agents.*.autoAllowSkills, mewarisi default runtime |
Atur ke false untuk mewajibkan allowlist manual ketat tanpa persetujuan CLI skill implisit. |
execApprovals.agents.allowlist.expected |
Pola agregat agents.*.allowlist[] dan entri argPattern opsional |
Wajibkan allowlist persetujuan cocok dengan kumpulan pola yang telah ditinjau. |
Misalnya, wajibkan artefak persetujuan, tolak default yang permisif, dan izinkan hanya postur persetujuan exec yang telah ditinjau untuk agen terpilih:
{ "execApprovals": { "requireFile": true, "defaults": { // Security modes: "deny", "allowlist", or "full". // This default permits only the locked-down deny posture. "allowSecurity": ["deny"], }, }, "scopes": { "restricted-shell": { "agentIds": ["family-agent", "groups-agent"], "execApprovals": { "agents": { // Selected agents may use reviewed allowlist posture, but not "full". "allowSecurity": ["allowlist"], // false means skill CLIs must appear in the reviewed allowlist instead of // being implicitly approved by autoAllowSkills. "allowAutoAllowSkills": false, "allowlist": { "expected": [ // Simple entry: exact reviewed executable pattern with no argPattern. "travel-hub", // Constrained entry: pattern plus reviewed argument regex. { "pattern": "calendar-cli", "argPattern": "^sync\\b" }, "/bin/date", ], }, }, }, }, },}Profil autentikasi
| Bidang kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
auth.profiles.requireMetadata |
Metadata penyedia dan mode auth.profiles.* |
Wajibkan kunci metadata seperti provider dan mode pada profil autentikasi config. |
auth.profiles.allowModes |
auth.profiles.*.mode |
Izinkan hanya mode profil autentikasi yang didukung seperti api_key, aws-sdk, oauth, atau token. |
Metadata alat
| Bidang kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
tools.requireMetadata |
Deklarasi TOOLS.md yang diatur |
Wajibkan alat yang diatur mendeklarasikan kunci metadata seperti risk, sensitivity, atau owner. |
Postur alat
| Bidang kebijakan | Status yang diamati | Gunakan saat |
|---|---|---|
tools.profiles.allow |
tools.profile dan agents.list[].tools.profile |
Izinkan hanya id profil alat seperti minimal, messaging, atau coding. |
tools.fs.requireWorkspaceOnly |
tools.fs.workspaceOnly dan override tools.fs per agen |
Atur ke true untuk mewajibkan postur alat filesystem khusus workspace. |
tools.exec.allowSecurity |
tools.exec.security dan keamanan exec per agen |
Izinkan hanya mode keamanan exec seperti deny atau allowlist. |
tools.exec.requireAsk |
tools.exec.ask dan mode ask exec per agen |
Wajibkan postur persetujuan seperti always. |
tools.exec.allowHosts |
tools.exec.host dan routing host exec per agen |
Izinkan hanya mode routing host exec seperti sandbox. |
tools.elevated.allow |
tools.elevated.enabled dan postur elevated per agen |
Atur ke false untuk mewajibkan mode alat elevated tetap nonaktif. |
tools.alsoAllow.expected |
tools.alsoAllow dan tools.alsoAllow per agen |
Wajibkan entri alsoAllow persis dan laporkan pemberian alat tambahan yang hilang atau tidak diharapkan. |
tools.denyTools |
tools.deny dan agents.list[].tools.deny |
Wajibkan daftar penolakan alat yang dikonfigurasi menyertakan id atau grup alat seperti group:runtime dan group:fs. |
Jalankan pemeriksaan khusus kebijakan selama penulisan:
openclaw policy checkopenclaw policy check --jsonopenclaw policy check --severity-min errorpolicy check hanya menjalankan kumpulan pemeriksaan kebijakan dan menghasilkan bukti, temuan, serta
hash atestasi. Temuan yang sama juga muncul di openclaw doctor --lint
saat Plugin Policy diaktifkan.
Bandingkan file kebijakan operator dengan file kebijakan baseline yang ditulis:
openclaw policy compare --baseline official.policy.jsoncopenclaw policy compare --baseline official.policy.jsonc --policy policy.jsonc --jsonpolicy compare membandingkan sintaks file kebijakan dengan sintaks file kebijakan. Perintah ini tidak
memeriksa status runtime OpenClaw, bukti, kredensial, atau rahasia. Perintah ini
menggunakan metadata aturan kebijakan yang sama yang mengatur overlay berscope: allowlist harus
tetap sama atau lebih sempit, denylist harus tetap sama atau lebih luas, boolean wajib
harus mempertahankan nilai wajibnya, string berurutan hanya boleh bergerak ke ujung yang lebih
restriktif dari urutan yang dikonfigurasi, dan daftar persis harus cocok.
File baseline dapat berupa kebijakan yang ditulis organisasi. Kebijakan yang diperiksa dapat
menggunakan nilai yang lebih ketat atau menambahkan aturan kebijakan ekstra. Aturan terperiksa tingkat atas juga dapat
memenuhi aturan baseline berscope saat sama atau lebih restriktif karena
kebijakan tingkat atas berlaku luas. Nama scope tidak perlu cocok; perbandingan
berscope dikunci oleh nilai selector seperti agentIds atau channelIds dan oleh
bidang kebijakan yang diperiksa.
Contoh output JSON perbandingan bersih hanya melaporkan status perbandingan file kebijakan:
{ "ok": true, "baselinePath": "official.policy.jsonc", "policyPath": "policy.jsonc", "rulesChecked": 3, "findings": []}Contoh output bersih policy check --json menyertakan hash stabil yang dapat
dicatat oleh operator atau supervisor:
{ "ok": true, "attestation": { "policy": { "path": "policy.jsonc", "hash": "sha256:..." }, "workspace": { "scope": "policy", "hash": "sha256:..." }, "findingsHash": "sha256:...", "attestationHash": "sha256:..." }, "checksRun": 5, "checksSkipped": 0, "findings": []}Konfigurasikan kebijakan
Config kebijakan berada di bawah plugins.entries.policy.config.
{ "plugins": { "entries": { "policy": { "enabled": true, "config": { "enabled": true, "path": "policy.jsonc", "workspaceRepairs": false, "expectedHash": "sha256:...", "expectedAttestationHash": "sha256:...", }, }, }, },}| Pengaturan | Tujuan |
|---|---|
enabled |
Aktifkan pemeriksaan kebijakan bahkan sebelum policy.jsonc ada. |
workspaceRepairs |
Izinkan doctor --fix mengedit pengaturan workspace yang dikelola kebijakan. |
expectedHash |
Kunci hash opsional untuk artefak kebijakan yang disetujui. |
expectedAttestationHash |
Kunci hash opsional untuk pemeriksaan kebijakan bersih terakhir yang diterima. |
path |
Lokasi artefak kebijakan relatif terhadap workspace. |
Atur plugins.entries.policy.config.enabled ke false untuk menonaktifkan pemeriksaan kebijakan
untuk sebuah workspace sambil membiarkan plugin tetap terpasang.
Persyaratan metadata alat ditulis di policy.jsonc dengan
tools.requireMetadata, misalnya ["risk", "sensitivity", "owner"].
Terima status kebijakan
Contoh output JSON:
{ "ok": true, "attestation": { "checkedAt": "2026-05-10T20:00:00.000Z", "policy": { "path": "policy.jsonc", "hash": "sha256:..." }, "workspace": { "scope": "policy", "hash": "sha256:..." }, "findingsHash": "sha256:...", "attestationHash": "sha256:..." }, "evidence": { "channels": [ { "id": "telegram", "provider": "telegram", "source": "oc://openclaw.config/channels/telegram", "enabled": false } ], "mcpServers": [ { "id": "docs", "transport": "stdio", "source": "oc://openclaw.config/mcp/servers/docs", "command": "npx" } ], "modelProviders": [ { "id": "openai", "source": "oc://openclaw.config/models/providers/openai" } ], "modelRefs": [ { "ref": "openai/gpt-5.5", "provider": "openai", "model": "gpt-5.5", "source": "oc://openclaw.config/agents/defaults/model" } ], "network": [ { "id": "browser-private-network", "source": "oc://openclaw.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork", "value": false } ], "gatewayExposure": [ { "id": "gateway-bind", "kind": "bind", "source": "oc://openclaw.config/gateway/bind", "value": "loopback", "nonLoopback": false, "explicit": true } ], "agentWorkspace": [ { "id": "agents-defaults-workspace-access", "kind": "workspaceAccess", "source": "oc://openclaw.config/agents/defaults/sandbox/workspaceAccess", "scope": "defaults", "value": "ro", "sandboxMode": "all", "sandboxModeSource": "oc://openclaw.config/agents/defaults/sandbox/mode", "sandboxEnabled": true, "explicit": true }, { "id": "agents-defaults-tool-exec", "kind": "toolDeny", "source": "oc://openclaw.config/tools/deny", "scope": "defaults", "tool": "exec", "denied": true, "explicit": true } ], "secrets": [ { "id": "vault", "kind": "provider", "source": "oc://openclaw.config/secrets/providers/vault", "providerSource": "env" }, { "id": "oc://openclaw.config/models/providers/openai/apiKey", "kind": "input", "source": "oc://openclaw.config/models/providers/openai/apiKey", "provenance": "secretRef", "refSource": "env", "refProvider": "vault" } ], "authProfiles": [ { "id": "github", "source": "oc://openclaw.config/auth/profiles/github", "validMetadata": true, "provider": "github", "mode": "token" } ], "tools": [ { "id": "deploy", "source": "oc://TOOLS.md/tools/deploy", "line": 12, "risk": "critical", "sensitivity": "restricted", "capabilities": ["IRREVERSIBLE_EXTERNAL"] } ] }, "checksRun": 30, "checksSkipped": 0, "findings": []}Hash kebijakan mengidentifikasi artefak aturan yang ditulis. Blok bukti
mencatat status OpenClaw yang diamati dan digunakan oleh pemeriksaan kebijakan.
Nilai workspace.hash mengidentifikasi payload bukti tersebut untuk cakupan
yang diperiksa. Hash temuan mengidentifikasi set temuan persis yang dikembalikan
oleh pemeriksaan. checkedAt mencatat waktu evaluasi dijalankan. Hash atestasi
mengidentifikasi klaim yang stabil: hash kebijakan, hash bukti, hash temuan, dan
apakah hasilnya bersih. Hash ini sengaja tidak menyertakan checkedAt, sehingga
status kebijakan yang sama menghasilkan atestasi yang sama di berbagai
pemeriksaan berulang. Bersama-sama, semua ini membentuk tuple audit untuk
pemeriksaan kebijakan ini.
Jika gateway atau supervisor berikutnya menggunakan kebijakan untuk memblokir,
menyetujui, atau memberi anotasi pada tindakan runtime, ia harus mencatat hash
atestasi dari pemeriksaan kebijakan bersih terakhir. checkedAt tetap ada dalam
keluaran JSON untuk log audit, tetapi bukan bagian dari hash atestasi yang
stabil.
Gunakan siklus hidup ini saat menerima status kebijakan:
- Tulis atau tinjau
policy.jsonc. - Jalankan
openclaw policy check --json. - Jika hasilnya bersih, catat
attestation.policy.hashsebagaiexpectedHash. - Catat
attestation.attestationHashsebagaiexpectedAttestationHash. - Jalankan ulang
openclaw doctor --lintdi CI atau gerbang rilis.
Jika aturan kebijakan berubah secara sengaja, perbarui kedua hash yang diterima
dari pemeriksaan bersih. Jika pengaturan workspace berubah secara sengaja tetapi
kebijakan tetap sama, biasanya hanya expectedAttestationHash yang berubah.
Mengaktifkan atau memutakhirkan aturan agents.workspace menambahkan bukti
agentWorkspace ke hash workspace dan hash atestasi. Operator harus meninjau
bukti baru tersebut dan memperbarui hash atestasi yang diterima setelah
mengaktifkan aturan ini. Mengaktifkan atau memutakhirkan aturan postur alat
menambahkan bukti toolPosture dengan cara yang sama.
openclaw policy watch menjalankan pemeriksaan yang sama berulang kali dan
melaporkan ketika bukti saat ini tidak lagi cocok dengan
expectedAttestationHash:
openclaw policy watch --jsonGunakan --once di CI atau skrip yang hanya memerlukan satu evaluasi drift.
Tanpa --once, perintah melakukan polling setiap dua detik secara default;
gunakan --interval-ms untuk memilih interval yang berbeda.
Temuan
Kebijakan saat ini memverifikasi:
| Id pemeriksaan | Temuan |
|---|---|
policy/policy-jsonc-missing |
Kebijakan diaktifkan tetapi policy.jsonc tidak ada. |
policy/policy-jsonc-invalid |
Kebijakan tidak dapat diurai atau berisi entri aturan yang salah format. |
policy/policy-hash-mismatch |
Kebijakan tidak cocok dengan expectedHash yang dikonfigurasi. |
policy/attestation-hash-mismatch |
Bukti kebijakan saat ini tidak lagi cocok dengan atestasi yang diterima. |
policy/policy-conformance-invalid |
File kebijakan dasar atau yang diperiksa memiliki sintaks perbandingan tidak valid. |
policy/policy-conformance-missing |
File kebijakan yang diperiksa tidak memiliki aturan yang diwajibkan oleh file kebijakan dasar. |
policy/policy-conformance-weaker |
File kebijakan yang diperiksa memiliki nilai yang lebih lemah daripada file kebijakan dasar. |
policy/channels-denied-provider |
Channel yang diaktifkan cocok dengan aturan penolakan channel. |
policy/mcp-denied-server |
Server MCP yang dikonfigurasi ditolak oleh kebijakan. |
policy/mcp-unapproved-server |
Server MCP yang dikonfigurasi berada di luar daftar izin. |
policy/models-denied-provider |
Penyedia model atau referensi model yang dikonfigurasi menggunakan penyedia yang ditolak. |
policy/models-unapproved-provider |
Penyedia model atau referensi model yang dikonfigurasi berada di luar daftar izin. |
policy/network-private-access-enabled |
Celah pelolosan SSRF jaringan privat diaktifkan ketika kebijakan menolaknya. |
policy/ingress-dm-policy-unapproved |
Kebijakan DM channel berada di luar daftar izin kebijakan. |
policy/ingress-dm-scope-unapproved |
session.dmScope tidak cocok dengan cakupan isolasi DM yang diwajibkan kebijakan. |
policy/ingress-open-groups-denied |
Kebijakan grup channel adalah open sementara kebijakan menolak ingress grup terbuka. |
policy/ingress-group-mention-required |
Entri channel atau grup menonaktifkan gerbang mention sementara kebijakan mewajibkannya. |
policy/gateway-non-loopback-bind |
Postur bind Gateway mengizinkan eksposur non-loopback ketika kebijakan menolaknya. |
policy/gateway-auth-disabled |
Autentikasi Gateway dinonaktifkan ketika kebijakan mewajibkan auth. |
policy/gateway-rate-limit-missing |
Postur pembatasan laju auth Gateway tidak eksplisit ketika kebijakan mewajibkannya. |
policy/gateway-control-ui-insecure |
Toggle eksposur tidak aman Gateway Control UI diaktifkan. |
policy/gateway-tailscale-funnel |
Eksposur Gateway Tailscale Funnel diaktifkan ketika kebijakan menolaknya. |
policy/gateway-remote-enabled |
Mode jarak jauh Gateway aktif ketika kebijakan menolaknya. |
policy/gateway-http-endpoint-enabled |
Endpoint HTTP API Gateway diaktifkan sementara ditolak oleh kebijakan. |
policy/gateway-http-url-fetch-unrestricted |
Input pengambilan URL HTTP Gateway tidak memiliki daftar izin URL yang diwajibkan. |
policy/agents-workspace-access-denied |
Mode sandbox agen atau akses ruang kerja berada di luar daftar izin kebijakan. |
policy/agents-tool-not-denied |
Agen atau konfigurasi default tidak menolak alat yang diwajibkan oleh kebijakan. |
policy/tools-profile-unapproved |
Profil alat global atau per agen yang dikonfigurasi berada di luar daftar izin. |
policy/tools-fs-workspace-only-required |
Alat sistem file tidak dikonfigurasi dengan postur jalur khusus ruang kerja. |
policy/tools-exec-security-unapproved |
Mode keamanan exec berada di luar daftar izin kebijakan. |
policy/tools-exec-ask-unapproved |
Mode tanya exec berada di luar daftar izin kebijakan. |
policy/tools-exec-host-unapproved |
Routing host exec berada di luar daftar izin kebijakan. |
policy/tools-elevated-enabled |
Mode alat elevated diaktifkan ketika kebijakan menolaknya. |
policy/tools-also-allow-missing |
Daftar alsoAllow yang dikonfigurasi tidak memiliki entri yang diwajibkan oleh kebijakan. |
policy/tools-also-allow-unexpected |
Daftar alsoAllow yang dikonfigurasi menyertakan entri yang tidak diharapkan oleh kebijakan. |
policy/tools-required-deny-missing |
Daftar penolakan alat global atau per agen tidak menyertakan alat ditolak yang diwajibkan. |
policy/sandbox-mode-unapproved |
Mode sandbox berada di luar daftar izin kebijakan. |
policy/sandbox-backend-unapproved |
Backend sandbox berada di luar daftar izin kebijakan. |
policy/sandbox-container-posture-unobservable |
Aturan postur container diaktifkan untuk backend yang tidak dapat mengamatinya. |
policy/sandbox-container-host-network-denied |
Sandbox atau browser berbasis container menggunakan mode jaringan host. |
policy/sandbox-container-namespace-join-denied |
Sandbox atau browser berbasis container bergabung dengan namespace container lain. |
policy/sandbox-container-mount-mode-required |
Mount sandbox atau browser berbasis container tidak read-only. |
policy/sandbox-container-runtime-socket-mount |
Mount sandbox atau browser berbasis container mengekspos socket runtime container. |
policy/sandbox-container-unconfined-profile |
Profil sandbox container tidak dibatasi ketika kebijakan menolaknya. |
policy/sandbox-browser-cdp-source-range-missing |
Rentang sumber CDP browser sandbox tidak ada ketika kebijakan mewajibkannya. |
policy/data-handling-redaction-disabled |
Redaksi logging sensitif dinonaktifkan ketika kebijakan mewajibkannya. |
policy/data-handling-telemetry-content-capture |
Pengambilan konten telemetri diaktifkan ketika kebijakan menolaknya. |
policy/data-handling-session-retention-not-enforced |
Pemeliharaan retensi sesi tidak ditegakkan ketika kebijakan mewajibkannya. |
policy/data-handling-session-transcript-memory-enabled |
Pengindeksan memori transkrip sesi diaktifkan ketika kebijakan menolaknya. |
policy/secrets-unmanaged-provider |
SecretRef konfigurasi mereferensikan penyedia yang tidak dideklarasikan di bawah secrets.providers. |
policy/secrets-denied-provider-source |
Penyedia secret konfigurasi atau SecretRef menggunakan sumber yang ditolak oleh kebijakan. |
policy/secrets-insecure-provider |
Penyedia secret memilih postur tidak aman ketika kebijakan menolaknya. |
policy/auth-profile-invalid-metadata |
Profil auth konfigurasi tidak memiliki metadata penyedia atau mode yang valid. |
policy/auth-profile-unapproved-mode |
Mode profil auth konfigurasi berada di luar daftar izin kebijakan. |
policy/exec-approvals-missing |
Kebijakan mewajibkan exec-approvals.json, tetapi artefaknya tidak ada. |
policy/exec-approvals-invalid |
Artefak persetujuan exec yang dikonfigurasi tidak dapat diurai. |
policy/exec-approvals-default-security-unapproved |
Default persetujuan exec menggunakan mode keamanan di luar daftar izin kebijakan. |
policy/exec-approvals-agent-security-unapproved |
Mode keamanan persetujuan exec efektif per agen berada di luar daftar izin. |
policy/exec-approvals-auto-allow-skills-enabled |
Agen persetujuan exec secara implisit mengizinkan otomatis CLI skill ketika kebijakan menolaknya. |
policy/exec-approvals-allowlist-missing |
Daftar izin persetujuan tidak memiliki pola yang diwajibkan oleh kebijakan. |
policy/exec-approvals-allowlist-unexpected |
Daftar izin persetujuan menyertakan pola yang tidak diharapkan oleh kebijakan. |
policy/tools-missing-risk-level |
Deklarasi alat yang diatur tidak memiliki metadata risiko. |
policy/tools-unknown-risk-level |
Deklarasi alat yang diatur menggunakan nilai risiko yang tidak dikenal. |
policy/tools-missing-sensitivity-token |
Deklarasi alat yang diatur tidak memiliki metadata sensitivitas. |
policy/tools-missing-owner |
Deklarasi alat yang diatur tidak memiliki metadata pemilik. |
policy/tools-unknown-sensitivity-token |
Deklarasi alat yang diatur menggunakan nilai sensitivitas yang tidak dikenal. |
Temuan kebijakan dapat menyertakan target dan requirement. target adalah
hal ruang kerja yang diamati yang tidak sesuai. requirement adalah aturan
kebijakan yang ditulis yang menjadikannya temuan. Kedua nilai saat ini adalah
alamat, biasanya jalur oc://, tetapi nama field menjelaskan peran kebijakannya
alih-alih format alamatnya.
Contoh temuan JSON:
{ "checkId": "policy/channels-denied-provider", "severity": "error", "message": "Channel 'telegram' uses denied provider 'telegram'.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/channels/telegram", "target": "oc://openclaw.config/channels/telegram", "requirement": "oc://policy.jsonc/channels/denyRules/#0", "fixHint": "Telegram is not approved for this workspace."}Contoh temuan alat:
{ "checkId": "policy/tools-missing-risk-level", "severity": "error", "message": "TOOLS.md tool 'deploy' has no explicit risk classification.", "source": "policy", "path": "TOOLS.md", "line": 12, "ocPath": "oc://TOOLS.md/tools/deploy", "target": "oc://TOOLS.md/tools/deploy", "requirement": "oc://policy.jsonc/tools/requireMetadata"}Contoh temuan MCP:
{ "checkId": "policy/mcp-unapproved-server", "severity": "error", "message": "MCP server 'remote' is not in the policy allowlist.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/mcp/servers/remote", "target": "oc://openclaw.config/mcp/servers/remote", "requirement": "oc://policy.jsonc/mcp/servers/allow"}Contoh temuan penyedia model:
{ "checkId": "policy/models-unapproved-provider", "severity": "error", "message": "Model ref 'anthropic/claude-sonnet-4.7' uses unapproved provider 'anthropic'.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/agents/defaults/model/fallbacks/#0", "target": "oc://openclaw.config/agents/defaults/model/fallbacks/#0", "requirement": "oc://policy.jsonc/models/providers/allow"}Contoh temuan jaringan:
{ "checkId": "policy/network-private-access-enabled", "severity": "error", "message": "Network setting 'browser-private-network' allows private-network access.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork", "target": "oc://openclaw.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork", "requirement": "oc://policy.jsonc/network/privateNetwork/allow"}Contoh temuan eksposur Gateway:
{ "checkId": "policy/gateway-non-loopback-bind", "severity": "error", "message": "Gateway bind setting 'gateway-bind' permits non-loopback exposure.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/gateway/bind", "target": "oc://openclaw.config/gateway/bind", "requirement": "oc://policy.jsonc/gateway/exposure/allowNonLoopbackBind"}Contoh temuan ruang kerja agen:
{ "checkId": "policy/agents-workspace-access-denied", "severity": "error", "message": "agents.defaults sandbox workspaceAccess 'rw' is not allowed by policy.", "source": "policy", "path": "openclaw config", "ocPath": "oc://openclaw.config/agents/defaults/sandbox/workspaceAccess", "target": "oc://openclaw.config/agents/defaults/sandbox/workspaceAccess", "requirement": "oc://policy.jsonc/agents/workspace/allowedAccess"}Perbaikan
doctor --lint dan policy check bersifat hanya-baca.
doctor --fix hanya mengedit pengaturan ruang kerja yang dikelola kebijakan saat
workspaceRepairs diaktifkan secara eksplisit. Tanpa opt-in tersebut, pemeriksaan kebijakan
melaporkan apa yang akan diperbaiki dan membiarkan pengaturan tidak berubah.
Dalam versi ini, perbaikan dapat menonaktifkan channel yang diaktifkan dalam konfigurasi OpenClaw
tetapi ditolak oleh channels.denyRules. Aktifkan workspaceRepairs hanya setelah
file kebijakan ditinjau, karena aturan penolakan yang valid dapat mematikan
channel yang sudah dikonfigurasi:
{ "plugins": { "entries": { "policy": { "config": { "workspaceRepairs": true, }, }, }, },}Kode keluar
| Perintah | 0 |
1 |
2 |
|---|---|---|---|
policy check |
Tidak ada temuan pada ambang batas. | Satu atau beberapa temuan memenuhi ambang batas. | Kegagalan argumen atau runtime. |
policy compare |
File kebijakan setidaknya seketat baseline. | File kebijakan tidak valid, hilang, atau lebih lemah dari aturan baseline. | Kegagalan argumen atau runtime. |
policy watch |
Tidak ada temuan dan hash yang diterima masih terkini. | Temuan ada atau attestasi yang diterima sudah usang. | Kegagalan argumen atau runtime. |