Langsung ke konten utama

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 policy
Ketika 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.
PemilihBagian yang didukungGunakan saat
agentIdstools, agents.workspace, sandbox, dataHandling.memory, dan execApprovalsSatu atau beberapa agen runtime memerlukan aturan yang lebih ketat.
channelIdsingress.channelsSatu atau beberapa saluran memerlukan aturan ingress yang lebih ketat.
Setiap cakupan yang ada di policy.jsonc harus valid dan dapat diberlakukan.

Saluran

Kolom kebijakanStatus yang diamatiGunakan saat
channels.denyRules[].when.providerProvider channels.* dan status aktifMenolak saluran yang dikonfigurasi dari provider seperti telegram.
channels.denyRules[].reasonKonteks pesan temuan dan petunjuk perbaikanMenjelaskan mengapa provider ditolak.

Server MCP

Kolom kebijakanStatus yang diamatiGunakan saat
mcp.servers.allowid mcp.servers.*Mengharuskan setiap server MCP yang dikonfigurasi ada dalam allowlist.
mcp.servers.denyid mcp.servers.*Menolak id server MCP tertentu yang dikonfigurasi.

Provider model

Kolom kebijakanStatus yang diamatiGunakan saat
models.providers.allowid models.providers.* dan referensi model yang dipilihMengharuskan provider yang dikonfigurasi dan referensi model yang dipilih menggunakan provider yang disetujui.
models.providers.denyid models.providers.* dan referensi model yang dipilihMenolak provider yang dikonfigurasi dan referensi model yang dipilih berdasarkan id provider.

Jaringan

Kolom kebijakanStatus yang diamatiGunakan saat
network.privateNetwork.allowJalur pengecualian SSRF jaringan privatAtur ke false untuk mengharuskan akses jaringan privat tetap dinonaktifkan.

Ingress dan akses saluran

Kolom kebijakanStatus yang diamatiGunakan saat
ingress.session.requireDmScopesession.dmScopeMengharuskan cakupan isolasi pesan langsung yang telah ditinjau.
ingress.channels.allowDmPolicieschannels.*.dmPolicy dan kolom kebijakan DM saluran lamaHanya mengizinkan kebijakan saluran pesan langsung yang telah ditinjau.
ingress.channels.denyOpenGroupsKebijakan ingress saluran, akun, dan grupMenolak ingress grup terbuka untuk saluran dan akun yang dikonfigurasi.
ingress.channels.requireMentionInGroupsKonfigurasi gerbang mention saluran, akun, grup, guild, dan bertingkatMengharuskan gerbang mention saat ingress grup terbuka atau dibatasi mention.

Gateway

Kolom kebijakanStatus yang diamatiGunakan saat
gateway.exposure.allowNonLoopbackBindgateway.bindAtur ke false untuk mengharuskan pengikatan Gateway loopback.
gateway.exposure.allowTailscaleFunnelPostur Gateway Tailscale serve/funnelAtur ke false untuk menolak eksposur Tailscale Funnel.
gateway.auth.requireAuthgateway.auth.modeAtur ke true untuk menolak auth Gateway yang dinonaktifkan.
gateway.auth.requireExplicitRateLimitgateway.auth.rateLimitAtur ke true untuk mengharuskan konfigurasi rate-limit auth yang eksplisit.
gateway.controlUi.allowInsecureToggle auth/perangkat/origin Control UI yang tidak amanAtur ke false untuk menolak toggle eksposur Control UI yang tidak aman.
gateway.remote.allowMode/konfigurasi Gateway jarak jauhAtur ke false untuk menolak mode Gateway jarak jauh.
gateway.http.denyEndpointsEndpoint API HTTP GatewayMenolak id endpoint seperti chatCompletions atau responses.
gateway.http.requireUrlAllowlistsInput pengambilan URL HTTP GatewayAtur ke true untuk mengharuskan allowlist URL pada input pengambilan URL.

Ruang kerja agen

Kolom kebijakanStatus yang diamatiGunakan saat
agents.workspace.allowedAccessagents.defaults.sandbox.workspaceAccess dan agents.list[].sandbox.workspaceAccessHanya mengizinkan nilai akses ruang kerja sandbox seperti none atau ro.
agents.workspace.denyToolsKonfigurasi penolakan alat global dan per agenMengharuskan alat mutasi ruang kerja/runtime seperti exec, process, write, edit, atau apply_patch ditolak.

Postur sandbox

Kolom kebijakanStatus yang diamatiGunakan saat
sandbox.requireModeagents.defaults.sandbox.mode dan mode per agenHanya mengizinkan mode sandbox yang telah ditinjau seperti all atau non-main.
sandbox.allowBackendsagents.defaults.sandbox.backend dan backend per agenHanya mengizinkan backend sandbox yang telah ditinjau seperti docker.
sandbox.containers.denyHostNetworkMode jaringan sandbox/browser berbasis kontainerMenolak mode jaringan host.
sandbox.containers.denyContainerNamespaceJoinMode jaringan sandbox/browser berbasis kontainerMenolak bergabung ke namespace jaringan kontainer lain.
sandbox.containers.requireReadOnlyMountsMode mount sandbox/browser berbasis kontainerMengharuskan mount bersifat hanya baca.
sandbox.containers.denyContainerRuntimeSocketMountsTarget mount sandbox/browser berbasis kontainerMenolak mount socket runtime kontainer.
sandbox.containers.denyUnconfinedProfilesPostur profil keamanan kontainerMenolak profil keamanan kontainer tanpa pembatasan.
sandbox.browser.requireCdpSourceRangeRentang sumber CDP browser sandboxMengharuskan 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 kebijakanStatus yang diamatiGunakan saat
dataHandling.sensitiveLogging.requireRedactionlogging.redactSensitiveAtur ke true untuk menolak logging.redactSensitive: "off".
dataHandling.telemetry.denyContentCapturediagnostics.otel.captureContentAtur ke true untuk menolak penangkapan konten telemetri.
dataHandling.retention.requireSessionMaintenancesession.maintenance.modeAtur ke true untuk mengharuskan mode pemeliharaan sesi efektif enforce.
dataHandling.memory.denySessionTranscriptIndexingmemory.qmd.sessions.enabled dan agents.*.memorySearch.experimental.sessionMemoryAtur ke true untuk menolak pengindeksan transkrip sesi ke memori.

Rahasia

Kolom kebijakanStatus yang diamatiGunakan saat
secrets.requireManagedProvidersSecretRef konfigurasi dan deklarasi secrets.providers.*Atur ke true untuk mengharuskan SecretRef menunjuk ke provider yang dideklarasikan.
secrets.denySourcesSumber provider rahasia dan sumber SecretRefMenolak sumber seperti exec, file, atau nama sumber lain yang dikonfigurasi.
secrets.allowInsecureProvidersFlag postur provider rahasia yang tidak amanAtur 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 kebijakanStatus yang diamatiGunakan saat
execApprovals.requireFilePath exec-approvals.json runtime aktifAtur ke true untuk mewajibkan artefak persetujuan ada dan dapat diurai.
execApprovals.defaults.allowSecuritydefaults.security, dengan default fullIzinkan hanya mode keamanan persetujuan default yang disetujui.
execApprovals.agents.allowSecurityagents.*.security, mewarisi defaultIzinkan hanya mode keamanan persetujuan efektif per agen yang disetujui.
execApprovals.agents.allowAutoAllowSkillsdefaults.autoAllowSkills dan agents.*.autoAllowSkills, mewarisi default runtimeAtur ke false untuk mewajibkan allowlist manual ketat tanpa persetujuan CLI skill implisit.
execApprovals.agents.allowlist.expectedPola agregat agents.*.allowlist[] dan entri argPattern opsionalWajibkan 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 kebijakanStatus yang diamatiGunakan saat
auth.profiles.requireMetadataMetadata penyedia dan mode auth.profiles.*Wajibkan kunci metadata seperti provider dan mode pada profil autentikasi config.
auth.profiles.allowModesauth.profiles.*.modeIzinkan hanya mode profil autentikasi yang didukung seperti api_key, aws-sdk, oauth, atau token.

Metadata alat

Bidang kebijakanStatus yang diamatiGunakan saat
tools.requireMetadataDeklarasi TOOLS.md yang diaturWajibkan alat yang diatur mendeklarasikan kunci metadata seperti risk, sensitivity, atau owner.

Postur alat

Bidang kebijakanStatus yang diamatiGunakan saat
tools.profiles.allowtools.profile dan agents.list[].tools.profileIzinkan hanya id profil alat seperti minimal, messaging, atau coding.
tools.fs.requireWorkspaceOnlytools.fs.workspaceOnly dan override tools.fs per agenAtur ke true untuk mewajibkan postur alat filesystem khusus workspace.
tools.exec.allowSecuritytools.exec.security dan keamanan exec per agenIzinkan hanya mode keamanan exec seperti deny atau allowlist.
tools.exec.requireAsktools.exec.ask dan mode ask exec per agenWajibkan postur persetujuan seperti always.
tools.exec.allowHoststools.exec.host dan routing host exec per agenIzinkan hanya mode routing host exec seperti sandbox.
tools.elevated.allowtools.elevated.enabled dan postur elevated per agenAtur ke false untuk mewajibkan mode alat elevated tetap nonaktif.
tools.alsoAllow.expectedtools.alsoAllow dan tools.alsoAllow per agenWajibkan entri alsoAllow persis dan laporkan pemberian alat tambahan yang hilang atau tidak diharapkan.
tools.denyToolstools.deny dan agents.list[].tools.denyWajibkan daftar penolakan alat yang dikonfigurasi menyertakan id atau grup alat seperti group:runtime dan group:fs.
Jalankan pemeriksaan khusus kebijakan selama penulisan:
openclaw policy check
openclaw policy check --json
openclaw policy check --severity-min error
policy 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.jsonc
openclaw policy compare --baseline official.policy.jsonc --policy policy.jsonc --json
policy 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:...",
        },
      },
    },
  },
}
PengaturanTujuan
enabledAktifkan pemeriksaan kebijakan bahkan sebelum policy.jsonc ada.
workspaceRepairsIzinkan doctor --fix mengedit pengaturan workspace yang dikelola kebijakan.
expectedHashKunci hash opsional untuk artefak kebijakan yang disetujui.
expectedAttestationHashKunci hash opsional untuk pemeriksaan kebijakan bersih terakhir yang diterima.
pathLokasi 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:
  1. Tulis atau tinjau policy.jsonc.
  2. Jalankan openclaw policy check --json.
  3. Jika hasilnya bersih, catat attestation.policy.hash sebagai expectedHash.
  4. Catat attestation.attestationHash sebagai expectedAttestationHash.
  5. Jalankan ulang openclaw doctor --lint di 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 --json
Gunakan --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 pemeriksaanTemuan
policy/policy-jsonc-missingKebijakan diaktifkan tetapi policy.jsonc tidak ada.
policy/policy-jsonc-invalidKebijakan tidak dapat diurai atau berisi entri aturan yang salah format.
policy/policy-hash-mismatchKebijakan tidak cocok dengan expectedHash yang dikonfigurasi.
policy/attestation-hash-mismatchBukti kebijakan saat ini tidak lagi cocok dengan atestasi yang diterima.
policy/policy-conformance-invalidFile kebijakan dasar atau yang diperiksa memiliki sintaks perbandingan tidak valid.
policy/policy-conformance-missingFile kebijakan yang diperiksa tidak memiliki aturan yang diwajibkan oleh file kebijakan dasar.
policy/policy-conformance-weakerFile kebijakan yang diperiksa memiliki nilai yang lebih lemah daripada file kebijakan dasar.
policy/channels-denied-providerChannel yang diaktifkan cocok dengan aturan penolakan channel.
policy/mcp-denied-serverServer MCP yang dikonfigurasi ditolak oleh kebijakan.
policy/mcp-unapproved-serverServer MCP yang dikonfigurasi berada di luar daftar izin.
policy/models-denied-providerPenyedia model atau referensi model yang dikonfigurasi menggunakan penyedia yang ditolak.
policy/models-unapproved-providerPenyedia model atau referensi model yang dikonfigurasi berada di luar daftar izin.
policy/network-private-access-enabledCelah pelolosan SSRF jaringan privat diaktifkan ketika kebijakan menolaknya.
policy/ingress-dm-policy-unapprovedKebijakan DM channel berada di luar daftar izin kebijakan.
policy/ingress-dm-scope-unapprovedsession.dmScope tidak cocok dengan cakupan isolasi DM yang diwajibkan kebijakan.
policy/ingress-open-groups-deniedKebijakan grup channel adalah open sementara kebijakan menolak ingress grup terbuka.
policy/ingress-group-mention-requiredEntri channel atau grup menonaktifkan gerbang mention sementara kebijakan mewajibkannya.
policy/gateway-non-loopback-bindPostur bind Gateway mengizinkan eksposur non-loopback ketika kebijakan menolaknya.
policy/gateway-auth-disabledAutentikasi Gateway dinonaktifkan ketika kebijakan mewajibkan auth.
policy/gateway-rate-limit-missingPostur pembatasan laju auth Gateway tidak eksplisit ketika kebijakan mewajibkannya.
policy/gateway-control-ui-insecureToggle eksposur tidak aman Gateway Control UI diaktifkan.
policy/gateway-tailscale-funnelEksposur Gateway Tailscale Funnel diaktifkan ketika kebijakan menolaknya.
policy/gateway-remote-enabledMode jarak jauh Gateway aktif ketika kebijakan menolaknya.
policy/gateway-http-endpoint-enabledEndpoint HTTP API Gateway diaktifkan sementara ditolak oleh kebijakan.
policy/gateway-http-url-fetch-unrestrictedInput pengambilan URL HTTP Gateway tidak memiliki daftar izin URL yang diwajibkan.
policy/agents-workspace-access-deniedMode sandbox agen atau akses ruang kerja berada di luar daftar izin kebijakan.
policy/agents-tool-not-deniedAgen atau konfigurasi default tidak menolak alat yang diwajibkan oleh kebijakan.
policy/tools-profile-unapprovedProfil alat global atau per agen yang dikonfigurasi berada di luar daftar izin.
policy/tools-fs-workspace-only-requiredAlat sistem file tidak dikonfigurasi dengan postur jalur khusus ruang kerja.
policy/tools-exec-security-unapprovedMode keamanan exec berada di luar daftar izin kebijakan.
policy/tools-exec-ask-unapprovedMode tanya exec berada di luar daftar izin kebijakan.
policy/tools-exec-host-unapprovedRouting host exec berada di luar daftar izin kebijakan.
policy/tools-elevated-enabledMode alat elevated diaktifkan ketika kebijakan menolaknya.
policy/tools-also-allow-missingDaftar alsoAllow yang dikonfigurasi tidak memiliki entri yang diwajibkan oleh kebijakan.
policy/tools-also-allow-unexpectedDaftar alsoAllow yang dikonfigurasi menyertakan entri yang tidak diharapkan oleh kebijakan.
policy/tools-required-deny-missingDaftar penolakan alat global atau per agen tidak menyertakan alat ditolak yang diwajibkan.
policy/sandbox-mode-unapprovedMode sandbox berada di luar daftar izin kebijakan.
policy/sandbox-backend-unapprovedBackend sandbox berada di luar daftar izin kebijakan.
policy/sandbox-container-posture-unobservableAturan postur container diaktifkan untuk backend yang tidak dapat mengamatinya.
policy/sandbox-container-host-network-deniedSandbox atau browser berbasis container menggunakan mode jaringan host.
policy/sandbox-container-namespace-join-deniedSandbox atau browser berbasis container bergabung dengan namespace container lain.
policy/sandbox-container-mount-mode-requiredMount sandbox atau browser berbasis container tidak read-only.
policy/sandbox-container-runtime-socket-mountMount sandbox atau browser berbasis container mengekspos socket runtime container.
policy/sandbox-container-unconfined-profileProfil sandbox container tidak dibatasi ketika kebijakan menolaknya.
policy/sandbox-browser-cdp-source-range-missingRentang sumber CDP browser sandbox tidak ada ketika kebijakan mewajibkannya.
policy/data-handling-redaction-disabledRedaksi logging sensitif dinonaktifkan ketika kebijakan mewajibkannya.
policy/data-handling-telemetry-content-capturePengambilan konten telemetri diaktifkan ketika kebijakan menolaknya.
policy/data-handling-session-retention-not-enforcedPemeliharaan retensi sesi tidak ditegakkan ketika kebijakan mewajibkannya.
policy/data-handling-session-transcript-memory-enabledPengindeksan memori transkrip sesi diaktifkan ketika kebijakan menolaknya.
policy/secrets-unmanaged-providerSecretRef konfigurasi mereferensikan penyedia yang tidak dideklarasikan di bawah secrets.providers.
policy/secrets-denied-provider-sourcePenyedia secret konfigurasi atau SecretRef menggunakan sumber yang ditolak oleh kebijakan.
policy/secrets-insecure-providerPenyedia secret memilih postur tidak aman ketika kebijakan menolaknya.
policy/auth-profile-invalid-metadataProfil auth konfigurasi tidak memiliki metadata penyedia atau mode yang valid.
policy/auth-profile-unapproved-modeMode profil auth konfigurasi berada di luar daftar izin kebijakan.
policy/exec-approvals-missingKebijakan mewajibkan exec-approvals.json, tetapi artefaknya tidak ada.
policy/exec-approvals-invalidArtefak persetujuan exec yang dikonfigurasi tidak dapat diurai.
policy/exec-approvals-default-security-unapprovedDefault persetujuan exec menggunakan mode keamanan di luar daftar izin kebijakan.
policy/exec-approvals-agent-security-unapprovedMode keamanan persetujuan exec efektif per agen berada di luar daftar izin.
policy/exec-approvals-auto-allow-skills-enabledAgen persetujuan exec secara implisit mengizinkan otomatis CLI skill ketika kebijakan menolaknya.
policy/exec-approvals-allowlist-missingDaftar izin persetujuan tidak memiliki pola yang diwajibkan oleh kebijakan.
policy/exec-approvals-allowlist-unexpectedDaftar izin persetujuan menyertakan pola yang tidak diharapkan oleh kebijakan.
policy/tools-missing-risk-levelDeklarasi alat yang diatur tidak memiliki metadata risiko.
policy/tools-unknown-risk-levelDeklarasi alat yang diatur menggunakan nilai risiko yang tidak dikenal.
policy/tools-missing-sensitivity-tokenDeklarasi alat yang diatur tidak memiliki metadata sensitivitas.
policy/tools-missing-ownerDeklarasi alat yang diatur tidak memiliki metadata pemilik.
policy/tools-unknown-sensitivity-tokenDeklarasi 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

Perintah012
policy checkTidak ada temuan pada ambang batas.Satu atau beberapa temuan memenuhi ambang batas.Kegagalan argumen atau runtime.
policy compareFile kebijakan setidaknya seketat baseline.File kebijakan tidak valid, hilang, atau lebih lemah dari aturan baseline.Kegagalan argumen atau runtime.
policy watchTidak ada temuan dan hash yang diterima masih terkini.Temuan ada atau attestasi yang diterima sudah usang.Kegagalan argumen atau runtime.

Terkait