Skip to content

原則

openclaw policy 由內建的 Policy 外掛程式提供。Policy 是現有 OpenClaw 設定之上的企業合規層。它並未新增 第二個設定系統。policy.jsonc 定義了編寫的需求, OpenClaw 將活動的工作區視為證據進行觀察,而原則健康檢查 則透過 doctor --lint 回報差異。最終的合規訊號是乾淨的 doctor --lint 執行;原則會將發現貢獻至該共用的 lint 表面, 而不是建立獨立的健康閘道。

Policy 目前管理已設定的通道、MCP 伺服器、模型提供者、 網路 SSRF 姿態、輸入/通道存取姿態、Gateway 暴露姿態、代理程式工作區姿態、 OpenClaw 設定秘密提供者/驗證設定檔姿態,以及受控工具 宣告。例如,IT 或工作區操作員可以記錄 Telegram 不是核准的通道提供者、將 MCP 伺服器和模型參考限制為 核准的項目、要求私有網路 fetch/browser 存取保持 停用、要求直接訊息工作階段隔離和通道輸入姿態 保持在審查範圍內、要求 Gateway 繫結/驗證/HTTP 暴露保持在審查 範圍內、要求代理程式工作區存取和工具拒絕保持在已審查的 姿態、要求 OpenClaw 設定 SecretRefs 使用受管理的提供者、要求 設定驗證設定檔攜帶提供者/模式中繼資料、要求受控工具攜帶 風險和敏感性中繼資料,然後使用 doctor --lint 作為共用 合規閘道。

當工作區需要持續性聲明(例如「不得啟用這些頻道」 或「受控工具必須宣告核准元資料」)以及可重複的方式 來證明 OpenClaw 仍符合該聲明時,請使用原則。如果您僅需要 本機行為,且不需要原則發現結果或證明輸出,請單獨使用 一般設定和工作區文件。

在首次使用前啟用內建的 Policy 外掛程式:

Terminal window
openclaw plugins enable policy

啟用原則時,doctor 可以載入原則健康檢查而无需啟用 任意外掛程式。如果缺少 policy.jsonc,該外掛程式會保持啟用狀態,以便 doctor 回報該遺失的構件。

Policy 是由作者撰寫的,而非根據使用者目前的設定產生。涵蓋通道、MCP 伺服器、模型提供者、網路狀態、入站/通道存取、Gateway 暴露、代理程式工作區狀態、已設定的沙箱執行時期狀態、OpenClaw 設定祕密提供者/驗證設定檔狀態以及工具中繼資料的最小原則如下所示:

{
"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"],
},
},
"secrets": {
"requireManagedProviders": true,
"denySources": ["exec"],
"allowInsecureProviders": false,
},
"auth": {
"profiles": {
"requireMetadata": ["provider", "mode"],
"allowModes": ["api_key", "token"],
},
},
"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"],
},
}

規則即權威。類別區塊僅作為命名空間;當存在具體規則時才會執行檢查。OpenClaw 讀取目前的 channels.* 設定 mcp.servers.*models.providers.*、選取的代理程式模型參照、網路 SSRF 設定、直接訊息工作階段範圍、頻道 DM 原則、頻道群組原則、 頻道/群組提及閘道、Gateway 繫結/驗證/Control UI/Tailscale/遠端/HTTP 狀態、OpenClaw 設定代理程式沙箱工作區存取和工具拒絕狀態、設定密碼 提供者和 SecretRef 出處、設定驗證設定檔中繼資料、已設定 全域/每代理程式工具狀態,以及 TOOLS.md 宣告作為證據,然後 回報不符合的觀察狀態。如果原則拒絕非 loopback Gateway 繫結,僅在您 願意檢閱執行時期預設值時省略 gateway.bind;請設定 gateway.bind=loopback 以達到 嚴格的設定一致性。對於唯讀代理程式狀態,請在適用的預設值或代理程式上設定沙箱模式 並將 workspaceAccess 設為 nonero;省略或設定為 off 的沙箱模式無法滿足唯讀/禁止寫入 原則。agents.workspace.denyTools 支援 execprocesswriteeditapply_patch;OpenClaw 設定 group:fs 涵蓋檔案變異工具 而 group:runtime 涵蓋 shell/程序工具。工具狀態原則觀察 tools.profiletools.allowtools.alsoAllowtools.denytools.fs.workspaceOnlytools.exec.securitytools.exec.asktools.exec.hosttools.elevated.enabled 以及相同的每代理程式 agents.list[].tools.* 覆寫。它不會讀取執行時期/操作員批准 狀態(例如 exec-approvals.),也不會在執行時期強制執行工具呼叫。密碼證據記錄 提供者/來源狀態和 SecretRef 中繼資料,絕不包含原始密碼值。原則 不會讀取或證實每代理程式憑證存放區(例如 auth-profiles.json); 這些存放區仍由現有的驗證和憑證流程擁有。

以下每個原則欄位都是可選的。僅當 policy.jsonc 中存在相符的規則時,才會執行檢查。觀察到的狀態是指既有的 OpenClaw 設定或工作區元資料;原則會報告差異,但除非有明確提供並啟用修復路徑,否則不會重寫執行時期的行為。

原則覆蓋層將廣泛的頂層規則保持為全域,然後允許具名範圍區塊為特定選擇器加入更嚴格的常規原則章節。範圍名稱只是一個描述性的分類;比對使用的是範圍內的選擇器值。覆蓋層是累加的:全域宣告仍會執行,而範圍宣告可以針對相同的觀察設定發出其自己的發現。

當一組代理或通道需要比頂層基準更嚴格的原則時,請使用 scopes.<scopeName>。代理範圍章節使用 agentIds,它支援 tools.*agents.workspace.*sandbox.*。通道範圍入口使用 channelIds,它支援 ingress.channels.*。不支援的章節會被拒絕,而非被忽略。如果 agents.list[] 中不存在 agentIds 條目,OpenClaw 會針對該執行時期代理 ID 繼承的全域/預設姿態來評估範圍規則。

{
"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"],
},
},
"shell-sandbox": {
"agentIds": ["shell-agent"],
"sandbox": {
"allowBackends": ["openshell"],
"containers": {
"requireReadOnlyMounts": false,
},
},
},
"telegram-ingress": {
"channelIds": ["telegram"],
"ingress": {
"channels": {
"allowDmPolicies": ["pairing"],
"denyOpenGroups": true,
"requireMentionInGroups": true,
},
},
},
},
}

當每個範圍管轄不同的欄位時,如上圖所示,同一個代理可以出現在多個範圍中。根據原則元資料,同一個代理重複的範圍欄位必須具有相同或更嚴格的限制;較弱的重複宣告會被拒絕。嚴格性元資料將允許清單視為子集,拒絕清單視為超集,並將所需的布林值視為固定需求。

容器姿態原則僅根據 OpenClaw 對相符代理所能觀察到的證據進行評估。如果已啟用的 sandbox.containers.* 規則套用至其沙箱後端無法公開該欄位的代理,原則會回報 policy/sandbox-container-posture-unobservable,而非將該宣告視為通過。請針對使用不同沙箱後端的代理群組使用個別的 agentIds 範圍,並將不支援的容器規則保持未設定或設為 false,適用於那些無法觀察到這些欄位的群組。

頂層 ingress.session.requireDmScope 保持全域性,因為 session.dmScope 不是可歸因於通道的證據。

選擇器支援的區段使用時機
agentIdstoolsagents.workspacesandbox一或多個執行時代理需要更嚴格的規則。
channelIdsingress.channels一或多個通道需要更嚴格的入口規則。

policy.jsonc 中呈現的每個範圍都必須有效且可執行。

原則欄位觀察狀態使用時機
channels.denyRules[].when.providerchannels.* 提供者和已啟用狀態拒絕來自提供者(例如 telegram)的已設定通道。
channels.denyRules[].reason發現訊息和修復提示內容說明為何拒絕該提供者。
原則欄位觀察狀態使用時機
mcp.servers.allowmcp.servers.* ID要求每個已設定的 MCP 伺服器都必須位於允許清單中。
mcp.servers.denymcp.servers.* ID拒絕特定的已設定 MCP 伺服器 ID。
原則欄位觀察狀態使用時機
models.providers.allowmodels.providers.* ID 和選取的模型參照要求設定的提供者和選取的模型參照必須使用已核准的提供者。
models.providers.denymodels.providers.* ID 和選取的模型參照根據提供者 ID 拒絕設定的提供者和選取的模型參照。
原則欄位觀察狀態使用時機
network.privateNetwork.allow私人網路 SSRF 逃生艙設為 false 以要求私人網路存取保持停用。
原則欄位觀察狀態使用時機
ingress.session.requireDmScopesession.dmScope要求經過審查的直接訊息隔離範圍。
ingress.channels.allowDmPolicieschannels.*.dmPolicy 和舊版通道 DM 原則欄位僅允許經過審查的直接訊息通道原則。
ingress.channels.denyOpenGroups頻道、帳戶和群組入口政策拒絕已設定頻道和帳戶的開放式群組入口。
ingress.channels.requireMentionInGroups頻道、帳戶、群組、公會和巢狀提及閘道設定當群組入口為開放或提及閘道時,要求提及閘道。
Policy 欄位觀察狀態使用時機
gateway.exposure.allowNonLoopbackBindgateway.bind設定為 false 以要求回送 Gateway 繫結。
gateway.exposure.allowTailscaleFunnelTailscale serve/funnel Gateway 姿態設定為 false 以拒絕 Tailscale Funnel 暴露。
gateway.auth.requireAuthgateway.auth.mode設定為 true 以拒絕已停用的 Gateway 驗證。
gateway.auth.requireExplicitRateLimitgateway.auth.rateLimit設定為 true 以要求明確的驗證速率限制設定。
gateway.controlUi.allowInsecure控制 UI 不安全驗證/裝置/來源切換設定為 false 以拒絕不安全的控制 UI 暴露切換。
gateway.remote.allow遠端 Gateway 模式/設定設定為 false 以拒絕遠端 Gateway 模式。
gateway.http.denyEndpointsGateway HTTP API 端點拒絕端點 ID,例如 chatCompletionsresponses
gateway.http.requireUrlAllowlistsGateway HTTP URL 擷取輸入設定為 true 以要求 URL 擷取輸入上的 URL 允許清單。
Policy 欄位觀察狀態使用時機
agents.workspace.allowedAccessagents.defaults.sandbox.workspaceAccessagents.list[].sandbox.workspaceAccess僅允許沙箱工作區存取值,例如 nonero
agents.workspace.denyTools全域和個別代理程式工具拒絕設定要求工作區/執行時期變異工具(例如 execprocesswriteeditapply_patch)必須被拒絕。
Policy 欄位觀察狀態使用時機
sandbox.requireModeagents.defaults.sandbox.mode 和每代理模式僅允許經過審查的沙盒模式,例如 allnon-main
sandbox.allowBackendsagents.defaults.sandbox.backend 和每代理後端僅允許經過審查的沙盒後端,例如 docker
sandbox.containers.denyHostNetwork容器支援的沙盒/瀏覽器網路模式拒絕主機網路模式。
sandbox.containers.denyContainerNamespaceJoin容器支援的沙盒/瀏覽器網路模式拒絕加入另一個容器的網路命名空間。
sandbox.containers.requireReadOnlyMounts容器支援的沙盒/瀏覽器掛載模式要求掛載為唯讀。
sandbox.containers.denyContainerRuntimeSocketMounts容器支援的沙盒/瀏覽器掛載目標拒絕容器執行時期 socket 掛載。
sandbox.containers.denyUnconfinedProfiles容器安全性配置檔態勢拒絕未受限的容器安全性配置檔。
sandbox.browser.requireCdpSourceRange沙盒瀏覽器 CDP 來源範圍要求瀏覽器 CDP 暴露聲明來源範圍。

Policy 將遺失的 sandbox.mode 視為隱含預設值 off,因此 sandbox.requireMode 會將新鮮或未設定的沙盒回報為超出允許清單(例如 ["all"])。

Policy 欄位觀察到的狀態使用時機
secrets.requireManagedProviders設定 SecretRefs 和 secrets.providers.* 宣告設為 true 以要求 SecretRefs 指向已宣告的提供者。
secrets.denySourcesSecret 提供者來源和 SecretRef 來源拒絕來源,例如 execfile 或另一個設定的來源名稱。
secrets.allowInsecureProviders不安全的 secret-provider 態勢旗標設為 false 以拒絕選擇不安全態勢的提供者。
Policy 欄位觀察到的狀態使用時機
auth.profiles.requireMetadataauth.profiles.* 提供者和模式元資料要求在設定 auth profiles 上具備元資料金鑰,例如 providermode
auth.profiles.allowModesauth.profiles.*.mode僅允許支援的驗證設定檔模式,例如 api_keyaws-sdkoauthtoken
策略欄位觀察狀態使用時機
tools.requireMetadata受管制的 TOOLS.md 宣告要求受管制的工具宣告元數據金鑰,例如 risksensitivityowner
策略欄位觀察狀態使用時機
tools.profiles.allowtools.profileagents.list[].tools.profile僅允許工具設定檔 ID,例如 minimalmessagingcoding
tools.fs.requireWorkspaceOnlytools.fs.workspaceOnly 和個別代理 tools.fs 覆寫設定為 true 以要求僅限工作區的檔案系統工具姿態。
tools.exec.allowSecuritytools.exec.security 和個別代理 exec 安全性僅允許 exec 安全性模式,例如 denyallowlist
tools.exec.requireAsktools.exec.ask 和個別代理 exec 詢問模式要求核准姿態,例如 always
tools.exec.allowHoststools.exec.host 和個別代理 exec 主機路由僅允許 exec 主機路由模式,例如 sandbox
tools.elevated.allowtools.elevated.enabled 和個別代理 提權姿態設定為 false 以要求提權工具模式保持停用。
tools.alsoAllow.expectedtools.alsoAllow 和個別代理 tools.alsoAllow要求精確的 alsoAllow 項目,並回報遺漏或非預期的額外工具授權。
tools.denyToolstools.denyagents.list[].tools.deny要求設定的工具拒絕清單包含工具 ID 或群組,例如 group:runtimegroup:fs

在編寫期間僅執行原則檢查:

Terminal window
openclaw policy check
openclaw policy check --json
openclaw policy check --severity-min error

policy check 僅執行原則檢查集並輸出證據、發現結果和認證雜湊。當啟用 Policy 插件時,相同的發現結果也會顯示在 openclaw doctor --lint 中。

將操作員原則檔案與已編寫的基準原則檔案進行比較:

Terminal window
openclaw policy compare --baseline official.policy.jsonc
openclaw policy compare --baseline official.policy.jsonc --policy policy.jsonc --json

policy compare 將原則檔案語法與原則檔案語法進行比較。它不會檢查 OpenClaw 執行時狀態、證據、憑證或機密。該指令使用與管控範圍層疊相同的原則規則中繼資料:允許清單必須保持相等或更窄,拒絕清單必須保持相等或更寬,所需的布林值必須保持其所需值,有序字串只能朝向設定順序的更嚴格端移動,而精確清單必須完全相符。

基準檔案可以是組織編寫的原則。受檢查的原則可以使用更嚴格的值或新增額外的原則規則。頂層受檢查的規則也可以滿足範圍基準規則,因為它具有同等或更嚴格的限制,且頂層原則適用範圍廣泛。範圍名稱不需要相符;範圍比較是以選擇器值(例如 agentIdschannelIds)以及受檢查的原則欄位為鍵值。

範例簡潔比較 JSON 輸出僅報告原則檔案的比較狀態:

{
"ok": true,
"baselinePath": "official.policy.jsonc",
"policyPath": "policy.jsonc",
"rulesChecked": 3,
"findings": []
}

範例簡潔 policy check --json 輸出包含穩定的雜湊值,可由操作員或監督人員記錄:

{
"ok": true,
"attestation": {
"policy": {
"path": "policy.jsonc",
"hash": "sha256:..."
},
"workspace": {
"scope": "policy",
"hash": "sha256:..."
},
"findingsHash": "sha256:...",
"attestationHash": "sha256:..."
},
"checksRun": 5,
"checksSkipped": 0,
"findings": []
}

原則設定位於 plugins.entries.policy.config 之下。

{
"plugins": {
"entries": {
"policy": {
"enabled": true,
"config": {
"enabled": true,
"path": "policy.jsonc",
"workspaceRepairs": false,
"expectedHash": "sha256:...",
"expectedAttestationHash": "sha256:...",
},
},
},
},
}
設定用途
enabled即使 policy.jsonc 尚未存在,也啟用原則檢查。
workspaceRepairs允許 doctor --fix 編輯由原則管理的工作區設定。
expectedHash已核准原則製件的選用雜湊鎖定。
expectedAttestationHash上次接受之乾淨原則檢查的選用雜湊鎖定。
path原則製件的工作區相對位置。

plugins.entries.policy.config.enabled 設為 false 以停用工作區的 策略檢查,同時保留外掛程式的安裝。

工具中繼資料需求是在 policy.jsonc 中使用 tools.requireMetadata 撰寫的, 例如 ["risk", "sensitivity", "owner"]

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": []
}

策略雜湊用於識別已撰寫的規則成品。證據區塊會記錄策略檢查所使用的 觀察到的 OpenClaw 狀態。workspace.hash 值用於識別已檢查範圍的 該證據承載。發現雜湊用於識別檢查所返回的確切發現集合。 checkedAt 記錄評估執行的時間。證明雜湊識別穩定的 宣告:策略雜湊、證據雜湊、發現雜湊,以及結果是否乾淨。它刻意不包含 checkedAt,因此相同的策略狀態在重複檢查中會產生相同的 證明。這些共同組成了此策略檢查的稽核元組。

如果後續的閘道或監督器使用策略來封鎖、核准或註解執行時期動作, 它應該記錄上次乾淨策略檢查的證明雜湊。 checkedAt 會保留在 JSON 輸出中以便進行稽核日誌記錄, 但不是穩定證明雜湊的一部分。

接受策略狀態時,請使用此生命週期:

  1. 撰寫或審閱 policy.jsonc
  2. 執行 openclaw policy check --json
  3. 如果結果是乾淨的,請將 attestation.policy.hash 記錄為 expectedHash
  4. attestation.attestationHash 記錄為 expectedAttestationHash
  5. 在 CI 或發行閘道中重新執行 openclaw doctor --lint

如果策略規則有意變更,請從乾淨的檢查中更新兩個已接受的雜湊。 如果工作區設定有意變更但策略保持不變,通常只有 expectedAttestationHash 會變更。

啟用或升級 agents.workspace 規則會將 agentWorkspace 證據新增到 工作區雜湊和證明雜湊中。操作人員應在啟用這些規則後檢視新 證據並重新整理已接受的證明雜湊。 啟用或升級工具姿態規則會以相同方式新增 toolPosture 證據。

openclaw policy watch 重複執行相同的檢查,並在當前 證據不再符合 expectedAttestationHash 時進行回報:

Terminal window
openclaw policy watch --json

在僅需一次差異評估的 CI 或腳本中使用 --once。如果沒有 --once,該指令預設每兩秒輪詢一次;請使用 --interval-ms 來 選擇不同的間隔。

Policy 目前會驗證:

檢查 ID檢查結果
policy/policy-jsonc-missingPolicy 已啟用,但缺少 policy.jsonc
policy/policy-jsonc-invalidPolicy 無法解析或包含格式錯誤的規則項目。
policy/policy-hash-mismatchPolicy 不符合設定的 expectedHash
policy/attestation-hash-mismatch目前的 Policy 證據不再符合已接受的證明。
policy/policy-conformance-invalid基準或受檢查的 Policy 檔案具有無效的比較語法。
policy/policy-conformance-missing受檢查的 Policy 檔案缺少基準 Policy 檔案所需的規則。
policy/policy-conformance-weaker受檢查的 Policy 檔案的值比基準 Policy 檔案更弱。
policy/channels-denied-provider已啟用的頻道符合頻道拒絕規則。
policy/mcp-denied-server設定的 MCP 伺服器被 Policy 拒絕。
policy/mcp-unapproved-server設定的 MCP 伺服器不在允許清單中。
policy/models-denied-provider設定的模型提供者或模型參考使用了被拒絕的提供者。
policy/models-unapproved-provider設定的模型提供者或模型參考不在允許清單中。
policy/network-private-access-enabled當 Policy 拒絕時,啟用了私有網路 SSRF 逃生艙。
policy/ingress-dm-policy-unapproved頻道 DM Policy 不在 Policy 允許清單中。
policy/ingress-dm-scope-unapprovedsession.dmScope 不符合原則要求的 DM 隔離範圍。
policy/ingress-open-groups-denied頻道群組原則為 open,而原則拒絕開放群組入口。
policy/ingress-group-mention-required頻道或群組項目停用了提及閘門,但原則要求啟用它們。
policy/gateway-non-loopback-bind閘道綁定狀態允許非回環暴露,但原則拒絕此情況。
policy/gateway-auth-disabled閘道驗證已停用,但原則要求驗證。
policy/gateway-rate-limit-missing當原則要求明確指定時,閘道驗證速率限制狀態未明確指定。
policy/gateway-control-ui-insecure閘道控制 UI 不安全暴露切換已啟用。
policy/gateway-tailscale-funnel當原則拒絕時,閘道 Tailscale Funnel 暴露已啟用。
policy/gateway-remote-enabled當原則拒絕時,閘道遠端模式處於啟用狀態。
policy/gateway-http-endpoint-enabled閘道 HTTP API 端點已啟用,但遭原則拒絕。
policy/gateway-http-url-fetch-unrestricted閘道 HTTP URL 擷取輸入缺少必要的 URL 允許清單。
policy/agents-workspace-access-deniedAgent 沙箱模式或工作區存取權限超出原則允許清單範圍。
policy/agents-tool-not-deniedAgent 或預設配置未拒絕原則要求的工具。
policy/tools-profile-unapproved設定的全域或個別 Agent 工具設定檔超出允許清單範圍。
policy/tools-fs-workspace-only-required檔案系統工具未設定為僅限工作區路徑狀態。
policy/tools-exec-security-unapprovedExec 安全模式超出原則允許清單範圍。
policy/tools-exec-ask-unapprovedExec 詢問模式超出原則允許清單範圍。
policy/tools-exec-host-unapprovedExec 主機路由超出原則允許清單範圍。
policy/tools-elevated-enabled當原則拒絕時,提升工具模式已啟用。
policy/tools-also-allow-missing設定的 alsoAllow 清單缺少原則要求的項目。
policy/tools-also-allow-unexpected設定的 alsoAllow 清單包含原則未預期的項目。
policy/tools-required-deny-missing全域或個別 Agent 工具拒絕清單未包含必要的拒絕工具。
policy/sandbox-mode-unapproved沙箱模式位於政策允許清單之外。
policy/sandbox-backend-unapproved沙箱後端位於政策允許清單之外。
policy/sandbox-container-posture-unobservable針對無法觀察的後端啟用了容器姿態規則。
policy/sandbox-container-host-network-denied容器支援的沙箱或瀏覽器使用了主機網路模式。
policy/sandbox-container-namespace-join-denied容器支援的沙箱或瀏覽器加入了另一個容器的命名空間。
policy/sandbox-container-mount-mode-required容器支援的沙箱或瀏覽器掛載並非唯讀。
policy/sandbox-container-runtime-socket-mount容器支援的沙箱或瀏覽器掛載暴露了容器執行時期通訊端。
policy/sandbox-container-unconfined-profile當政策拒絕時,容器沙箱設定檔不受限制。
policy/sandbox-browser-cdp-source-range-missing當政策要求時,缺少沙箱瀏覽器 CDP 來源範圍。
policy/secrets-unmanaged-provider組態 SecretRef 參照了未在 secrets.providers 下宣告的提供者。
policy/secrets-denied-provider-source組態密碼提供者或 SecretRef 使用了政策拒絕的來源。
policy/secrets-insecure-provider當政策拒絕時,密碼提供者選擇了不安全的姿態。
policy/auth-profile-invalid-metadata組態驗證設定檔缺少有效的提供者或模式中繼資料。
policy/auth-profile-unapproved-mode組態驗證設定檔模式位於政策允許清單之外。
policy/tools-missing-risk-level受管工具宣告缺少風險中繼資料。
policy/tools-unknown-risk-level受管工具宣告使用了未知的風險值。
policy/tools-missing-sensitivity-token受管工具宣告缺少敏感性中繼資料。
policy/tools-missing-owner受管工具宣告缺少擁有者中繼資料。
policy/tools-unknown-sensitivity-token受管工具宣告使用了未知的敏感性值。

Policy 發現結果可以同時包含 targetrequirementtarget 是 觀察到的不符合規範的工作區項目。requirement 是使其成為 發現結果的編寫策略規則。這兩個值目前都是位址,通常是 oc:// 路徑,但欄位名稱描述的是其策略角色,而不是 位址格式。

範例 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."
}

範例工具發現結果:

{
"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"
}

範例 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"
}

範例模型提供者 發現結果:

{
"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"
}

範例網路 發現結果:

{
"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"
}

範例 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"
}

範例代理程式工作區 發現結果:

{
"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"
}

doctor --lintpolicy check 是唯讀的。

doctor --fix 僅在明確啟用 workspaceRepairs 時,才會編輯受策略管理的工作區設定。如果未選擇加入,策略檢查 會回報它們將修復的內容,並保持設定不變。

在此版本中,修復可以停用在 OpenClaw 設定中啟用 但被 channels.denyRules 拒絕的通道。請僅在 審閱策略檔案後啟用 workspaceRepairs,因為有效的拒絕規則可以關閉 已設定的通道:

{
"plugins": {
"entries": {
"policy": {
"config": {
"workspaceRepairs": true,
},
},
},
},
}
指令012
policy check在閾值處沒有發現結果。一或多個發現結果達到閾值。引數或執行階段失敗。
policy compare策略檔案至少與基準一樣嚴格。策略檔案無效、遺失,或比基準規則更寬鬆。引數或執行階段失敗。
policy watch沒有發現結果,且接受的雜湊值是目前的。存在發現結果或接受的認證已過期。引數或執行階段失敗。