Naar hoofdinhoud gaan

openclaw policy

openclaw policy wordt geleverd door de gebundelde Policy-plugin. Policy is een enterprise-conformiteitslaag boven op bestaande OpenClaw-instellingen. Het voegt geen tweede configuratiesysteem toe. policy.jsonc definieert opgestelde vereisten, OpenClaw observeert de actieve workspace als bewijs, en beleidshealthchecks rapporteren drift via doctor --lint. Het uiteindelijke conformiteitssignaal is een schone doctor --lint-run; policy draagt bevindingen bij aan dat gedeelde lint-oppervlak in plaats van een afzonderlijke health-gate te maken. Policy beheert momenteel geconfigureerde kanalen, MCP-servers, modelproviders, netwerk-SSRF-houding, ingress-/kanaaltoegangshouding, Gateway-blootstellingshouding, agent-workspacehouding, data-afhandelingshouding, OpenClaw-configuratiehouding voor secretprovider/auth-profiel, en beheerde tool- declaraties. IT of een workspace-operator kan bijvoorbeeld vastleggen dat Telegram geen goedgekeurde kanaalprovider is, MCP-servers en modelrefs beperken tot goedgekeurde vermeldingen, vereisen dat fetch-/browsertoegang tot privénetwerken uitgeschakeld blijft, vereisen dat directe-berichtsessie-isolatie en kanaalingresshouding binnen beoordeelde grenzen blijven, vereisen dat Gateway-bind/auth/HTTP-blootstelling binnen beoordeelde grenzen blijft, vereisen dat agent-workspacetoegang en tool-denies in een beoordeelde houding blijven, vereisen dat OpenClaw-configuratie-SecretRefs beheerde providers gebruiken, vereisen dat configuratie-auth-profielen provider-/modusmetadata bevatten, vereisen dat beheerde tools risico- en gevoeligheidsmetadata bevatten, vereisen dat gevoelige logging wordt geredigeerd, vastlegging van telemetrie-inhoud weigeren, onderhoud van sessieretentie vereisen, geheugenindexering van sessie- transcripten weigeren, en daarna doctor --lint gebruiken als de gedeelde conformiteitsgate. Gebruik policy wanneer een workspace een duurzame verklaring nodig heeft, zoals “deze kanalen mogen niet zijn ingeschakeld” of “beheerde tools moeten goedkeuringsmetadata declareren”, en een herhaalbare manier om te bewijzen dat OpenClaw nog steeds aan die verklaring voldoet. Gebruik alleen reguliere configuratie en workspacedocumentatie wanneer u alleen lokaal gedrag nodig hebt en geen beleidsbevindingen of attestatie-uitvoer nodig hebt.

Snelstart

Schakel de gebundelde Policy-plugin in vóór het eerste gebruik:
openclaw plugins enable policy
Wanneer policy is ingeschakeld, kan doctor beleidshealthchecks laden zonder willekeurige plugins te activeren. De plugin blijft ingeschakeld als policy.jsonc ontbreekt, zodat doctor het ontbrekende artefact kan rapporteren. Policy wordt opgesteld, niet gegenereerd uit de huidige instellingen van de gebruiker. Een minimaal beleid voor kanalen, MCP-servers, modelproviders, netwerkhouding, ingress-/kanaaltoegang, Gateway- blootstelling, agent-workspacehouding, geconfigureerde sandbox-runtimehouding, OpenClaw- data-afhandelingshouding, configuratiehouding voor secretprovider/auth-profiel, exec-goedkeurings- bestandshouding, en toolmetadata ziet er als volgt uit:
{
  "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"],
  },
}
De regels zijn de autoriteit. Een categorieblok is alleen een namespace; controles worden uitgevoerd wanneer er een concrete regel aanwezig is. OpenClaw leest huidige channels.*-instellingen, mcp.servers.*, models.providers.*, geselecteerde agent-modelrefs, netwerk-SSRF- instellingen, direct-message-sessiescope, kanaal-DM-beleid, kanaalgroepsbeleid, kanaal-/groepsvermeldingsgates, Gateway-bind/auth/Control UI/Tailscale/remote/HTTP- houding, OpenClaw-configuratie voor agent-sandbox-workspacetoegang en tool-denyhouding, data-afhandelingsconfiguratiehouding, configuratie-secret- provider en SecretRef-herkomst, configuratie-auth-profielmetadata, geconfigureerde globale/per-agent-toolhouding, en TOOLS.md-declaraties als bewijs, en rapporteert vervolgens geobserveerde staat die niet voldoet. Als een beleid non-loopback Gateway-binds weigert, laat gateway.bind dan alleen weg wanneer u bereid bent de runtime-standaard te beoordelen; stel gateway.bind=loopback in voor strikte configuratieconformiteit. Voor een read-only agent-houding configureert u de sandboxmodus op de toepasselijke defaults of agent en stelt u workspaceAccess in op none of ro; een weggelaten of off-sandboxmodus voldoet niet aan een read-only/no-write- beleid. agents.workspace.denyTools ondersteunt exec, process, write, edit, en apply_patch; OpenClaw-configuratie group:fs dekt bestandsmutatietools en group:runtime dekt shell-/procestools. Toolhoudingsbeleid observeert tools.profile, tools.allow, tools.alsoAllow, tools.deny, tools.fs.workspaceOnly, tools.exec.security, tools.exec.ask, tools.exec.host, tools.elevated.enabled, en dezelfde per-agent- agents.list[].tools.*-overrides. Exec-goedkeuringsbeleid leest het benoemde exec-approvals.json-productartefact alleen wanneer een execApprovals-regel aanwezig is; bewijs registreert defaults, per-agent-houding en allowlist-patronen zonder sockettokens of laatst gebruikte opdrachttekst. Policy handhaaft tool- aanroepen niet tijdens runtime. Secret-bewijs registreert provider-/bronhouding en SecretRef-metadata, nooit ruwe secretwaarden. Policy leest of attesteert geen per-agent-credentialstores zoals auth-profiles.json; die stores blijven eigendom van de bestaande auth- en credentialflows. Data-afhandelingsbewijs is alleen houding op configuratieniveau: het controleert de geconfigureerde redactiemodus, toggles voor vastlegging van telemetrie-inhoud, sessieonderhoudsmodus, en instellingen voor geheugenindexering van sessietranscripten. Het inspecteert geen ruwe logs, telemetrie-exports, transcriptinhoud of geheugenbestanden, en bewijst niet dat er geen persoonlijke gegevens of secrets bestaan.

Naslag voor beleidsregels

Elk beleidsveld hieronder is optioneel. Een controle wordt alleen uitgevoerd wanneer de overeenkomende regel aanwezig is in policy.jsonc. De geobserveerde staat is bestaande OpenClaw-configuratie of workspacemetadata; policy rapporteert drift maar herschrijft runtimegedrag niet, tenzij een herstelpad expliciet beschikbaar en ingeschakeld is. Policy-bestanden zijn strikt: niet-ondersteunde secties of regelsleutels worden gerapporteerd als policy/policy-jsonc-invalid in plaats van genegeerd. Policy-overlays houden brede top-level regels globaal en laten daarna benoemde scopeblokken strengere normale beleidssecties toevoegen voor expliciete selectors. Een scopenaam is alleen een beschrijvende bucket; matching gebruikt de selectorwaarden binnen de scope. De overlay is additief: globale claims worden nog steeds uitgevoerd, en een gescopete claim kan een eigen bevinding tegen dezelfde geobserveerde configuratie emitten.

Gescopeerde overlays

Gebruik scopes.<scopeName> wanneer één set agents of kanalen strenger beleid nodig heeft dan de top-level baseline. Agent-gescopeerde secties gebruiken agentIds, die tools.*, agents.workspace.*, sandbox.*, dataHandling.memory.*, en execApprovals.* ondersteunt. Kanaal-gescopeerde ingress gebruikt channelIds, die ingress.channels.* ondersteunt. Niet-ondersteunde secties worden geweigerd in plaats van genegeerd. Als een agentIds-vermelding niet aanwezig is in agents.list[], evalueert OpenClaw de gescopeerde regel tegen geërfde globale/default-houding voor die runtime-agent-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"],
      },
      "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,
        },
      },
    },
  },
}
Dezelfde agent kan in meerdere scopes voorkomen wanneer elke scope verschillende velden beheert, zoals hierboven getoond. Een herhaald gescopet veld voor dezelfde agent moet even streng of strenger zijn volgens beleidsmetadata; zwakkere dubbele claims worden geweigerd. Striktheidsmetadata behandelt allowlists als subsets, denylists als supersets, en vereiste booleans als vaste vereisten. Containerhoudingsbeleid wordt alleen geëvalueerd tegen bewijs dat OpenClaw kan observeren voor de gematchte agent. Als een ingeschakelde sandbox.containers.*-regel van toepassing is op een agent waarvan de sandboxbackend dat veld niet kan blootstellen, rapporteert policy policy/sandbox-container-posture-unobservable in plaats van de claim als geslaagd te behandelen. Gebruik afzonderlijke agentIds-scopes voor agentgroepen die verschillende sandboxbackends gebruiken, en laat niet-ondersteunde containerregels uitgeschakeld of false voor de groepen waar die velden niet kunnen worden geobserveerd. Top-level ingress.session.requireDmScope blijft globaal omdat session.dmScope geen kanaal-toewijsbaar bewijs is.
SelectorOndersteunde sectiesGebruik wanneer
agentIdstools, agents.workspace, sandbox, dataHandling.memory, and execApprovalsEen of meer runtime-agents strengere regels nodig hebben.
channelIdsingress.channelsEen of meer kanalen strengere ingress-regels nodig hebben.
Elke scope die aanwezig is in policy.jsonc moet geldig en afdwingbaar zijn.

Kanalen

BeleidsveldWaargenomen statusGebruik wanneer
channels.denyRules[].when.providerchannels.*-provider en ingeschakelde statusGeconfigureerde kanalen van een provider zoals telegram weigeren.
channels.denyRules[].reasonBericht bij bevinding en context voor reparatietipUitleggen waarom de provider wordt geweigerd.

MCP-servers

BeleidsveldWaargenomen statusGebruik wanneer
mcp.servers.allowmcp.servers.*-idsVereisen dat elke geconfigureerde MCP-server in een allowlist staat.
mcp.servers.denymcp.servers.*-idsSpecifieke geconfigureerde MCP-server-ids weigeren.

Modelproviders

BeleidsveldWaargenomen statusGebruik wanneer
models.providers.allowmodels.providers.*-ids en geselecteerde modelrefsVereisen dat geconfigureerde providers en geselecteerde modelrefs goedgekeurde providers gebruiken.
models.providers.denymodels.providers.*-ids en geselecteerde modelrefsGeconfigureerde providers en geselecteerde modelrefs weigeren op provider-id.

Netwerk

BeleidsveldWaargenomen statusGebruik wanneer
network.privateNetwork.allowPrivate-network SSRF-uitwijkroutesInstellen op false om te vereisen dat private-network-toegang uitgeschakeld blijft.

Ingress en kanaaltoegang

BeleidsveldWaargenomen statusGebruik wanneer
ingress.session.requireDmScopesession.dmScopeEen beoordeelde isolatiescope voor directe berichten vereisen.
ingress.channels.allowDmPolicieschannels.*.dmPolicy en legacy DM-beleidsvelden voor kanalenAlleen beoordeelde kanaalbeleidsregels voor directe berichten toestaan.
ingress.channels.denyOpenGroupsIngress-beleid voor kanaal, account en groepOpen groeps-ingress weigeren voor geconfigureerde kanalen en accounts.
ingress.channels.requireMentionInGroupsKanaal-, account-, groep-, guild- en geneste mention-gateconfiguratieMention-gates vereisen wanneer groeps-ingress open is of door mentions wordt afgeschermd.

Gateway

BeleidsveldWaargenomen statusGebruik wanneer
gateway.exposure.allowNonLoopbackBindgateway.bindInstellen op false om loopback-Gateway-binding te vereisen.
gateway.exposure.allowTailscaleFunnelTailscale serve/funnel-Gateway-houdingInstellen op false om Tailscale Funnel-blootstelling te weigeren.
gateway.auth.requireAuthgateway.auth.modeInstellen op true om uitgeschakelde Gateway-auth te weigeren.
gateway.auth.requireExplicitRateLimitgateway.auth.rateLimitInstellen op true om expliciete auth-rate-limit-configuratie te vereisen.
gateway.controlUi.allowInsecureOnveilige auth/device/origin-schakelaars van Control UIInstellen op false om onveilige blootstellingsschakelaars van Control UI te weigeren.
gateway.remote.allowRemote Gateway-modus/configuratieInstellen op false om remote Gateway-modus te weigeren.
gateway.http.denyEndpointsGateway HTTP API-eindpuntenEindpunt-ids zoals chatCompletions of responses weigeren.
gateway.http.requireUrlAllowlistsGateway HTTP URL-fetch-invoerInstellen op true om URL-allowlists te vereisen voor URL-fetch-invoer.

Agent-werkruimte

BeleidsveldWaargenomen statusGebruik wanneer
agents.workspace.allowedAccessagents.defaults.sandbox.workspaceAccess en agents.list[].sandbox.workspaceAccessAlleen sandbox-werkruimtetoegangswaarden zoals none of ro toestaan.
agents.workspace.denyToolsGlobale en per-agent tool-weigerconfiguratieVereisen dat mutatietools voor werkruimte/runtime zoals exec, process, write, edit of apply_patch worden geweigerd.

Sandbox-houding

BeleidsveldWaargenomen statusGebruik wanneer
sandbox.requireModeagents.defaults.sandbox.mode en modus per agentAlleen beoordeelde sandbox-modi zoals all of non-main toestaan.
sandbox.allowBackendsagents.defaults.sandbox.backend en backend per agentAlleen beoordeelde sandbox-backends zoals docker toestaan.
sandbox.containers.denyHostNetworkNetwerkmodus van container-backed sandbox/browserHostnetwerkmodus weigeren.
sandbox.containers.denyContainerNamespaceJoinNetwerkmodus van container-backed sandbox/browserDeelnemen aan de netwerknamespace van een andere container weigeren.
sandbox.containers.requireReadOnlyMountsMountmodus van container-backed sandbox/browserVereisen dat mounts alleen-lezen zijn.
sandbox.containers.denyContainerRuntimeSocketMountsMountdoelen van container-backed sandbox/browserMounts van container-runtime-sockets weigeren.
sandbox.containers.denyUnconfinedProfilesHouding van containerbeveiligingsprofielenUnconfined containerbeveiligingsprofielen weigeren.
sandbox.browser.requireCdpSourceRangeCDP-bronbereik van sandbox-browserVereisen dat browser-CDP-blootstelling een bronbereik declareert.
Policy behandelt ontbrekende sandbox.mode als de impliciete standaard off, waardoor sandbox.requireMode een nieuwe of niet-geconfigureerde sandbox rapporteert als buiten een allowlist zoals ["all"].

Gegevensverwerking

BeleidsveldWaargenomen statusGebruik wanneer
dataHandling.sensitiveLogging.requireRedactionlogging.redactSensitiveInstellen op true om logging.redactSensitive: "off" te weigeren.
dataHandling.telemetry.denyContentCapturediagnostics.otel.captureContentInstellen op true om telemetry-contentcapture te weigeren.
dataHandling.retention.requireSessionMaintenancesession.maintenance.modeInstellen op true om effectieve sessieonderhoudsmodus enforce te vereisen.
dataHandling.memory.denySessionTranscriptIndexingmemory.qmd.sessions.enabled en agents.*.memorySearch.experimental.sessionMemoryInstellen op true om indexering van sessietranscripten naar memory te weigeren.

Geheimen

BeleidsveldWaargenomen statusGebruik wanneer
secrets.requireManagedProvidersConfig SecretRefs en secrets.providers.*-declaratiesInstellen op true om te vereisen dat SecretRefs naar gedeclareerde providers verwijzen.
secrets.denySourcesBronnen van secret-providers en SecretRef-bronnenBronnen zoals exec, file of een andere geconfigureerde bronnaam weigeren.
secrets.allowInsecureProvidersOnveilige houdingsvlaggen van secret-providersInstellen op false om providers te weigeren die kiezen voor een onveilige houding.

Exec-goedkeuringen

Het beleid voor exec-goedkeuringen observeert het actieve runtime-artefact exec-approvals.json. Standaard is dit ~/.openclaw/exec-approvals.json; wanneer OPENCLAW_STATE_DIR is ingesteld, leest Policy $OPENCLAW_STATE_DIR/exec-approvals.json. Feitelijke houdingsregels zoals execApprovals.defaults.* of execApprovals.agents.* vereisen leesbaar artefactbewijs; een ontbrekend of ongeldig artefact wordt gerapporteerd als niet-observeerbaar bewijs in plaats van een best-effort pass te worden tegen synthetische runtime-standaarden. Zodra het artefact leesbaar is, erven weggelaten goedkeuringsvelden runtime-standaarden: ontbrekende defaults.security is full, en ontbrekende agentbeveiliging erft die standaard. Bewijs omvat defaults, agents.* en agents.*.allowlist[].pattern plus optioneel argPattern, effectieve autoAllowSkills-houding en invoerbron. Het omvat geen socketpad/token, commandText, lastUsedCommand, opgeloste paden of tijdstempels.
BeleidsveldWaargenomen statusGebruiken wanneer
execApprovals.requireFilePad van actief runtime-exec-approvals.jsonStel in op true om te vereisen dat het goedkeuringsartefact bestaat en kan worden geparset.
execApprovals.defaults.allowSecuritydefaults.security, standaard ingesteld op fullSta alleen goedgekeurde standaardbeveiligingsmodi voor goedkeuring toe.
execApprovals.agents.allowSecurityagents.*.security, overgenomen van standaardenSta alleen goedgekeurde effectieve beveiligingsmodi voor goedkeuring per agent toe.
execApprovals.agents.allowAutoAllowSkillsdefaults.autoAllowSkills en agents.*.autoAllowSkills, overgenomen van runtime-standaardenStel in op false om strikte handmatige allowlists te vereisen zonder impliciete Skills-CLI-goedkeuring.
execApprovals.agents.allowlist.expectedGeaggregeerd agents.*.allowlist[]-patroon en optionele argPattern-vermeldingenVereis dat de goedkeurings-allowlist overeenkomt met de beoordeelde patroonset.
Vereis bijvoorbeeld het goedkeuringsartefact, weiger permissieve standaarden en sta alleen een beoordeelde exec-goedkeuringshouding toe voor geselecteerde agents:
{
  "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",
            ],
          },
        },
      },
    },
  },
}

Auth-profielen

BeleidsveldWaargenomen statusGebruiken wanneer
auth.profiles.requireMetadataauth.profiles.* provider- en modusmetadataVereis metadatasleutels zoals provider en mode op configuratie-auth-profielen.
auth.profiles.allowModesauth.profiles.*.modeSta alleen ondersteunde auth-profielmodi toe, zoals api_key, aws-sdk, oauth of token.

Toolmetadata

BeleidsveldWaargenomen statusGebruiken wanneer
tools.requireMetadataBeheerde TOOLS.md-declaratiesVereis dat beheerde tools metadatasleutels declareren, zoals risk, sensitivity of owner.

Toolhouding

BeleidsveldWaargenomen statusGebruiken wanneer
tools.profiles.allowtools.profile en agents.list[].tools.profileSta alleen toolprofiel-id’s toe, zoals minimal, messaging of coding.
tools.fs.requireWorkspaceOnlytools.fs.workspaceOnly en per-agent tools.fs-overridesStel in op true om een bestandssysteemtoolhouding te vereisen die alleen de workspace gebruikt.
tools.exec.allowSecuritytools.exec.security en exec-beveiliging per agentSta alleen exec-beveiligingsmodi toe, zoals deny of allowlist.
tools.exec.requireAsktools.exec.ask en exec-vraagmodus per agentVereis een goedkeuringshouding zoals always.
tools.exec.allowHoststools.exec.host en exec-hostroutering per agentSta alleen exec-hostrouteringsmodi toe, zoals sandbox.
tools.elevated.allowtools.elevated.enabled en verhoogde houding per agentStel in op false om te vereisen dat verhoogde toolmodus uitgeschakeld blijft.
tools.alsoAllow.expectedtools.alsoAllow en per-agent tools.alsoAllowVereis exacte alsoAllow-vermeldingen en rapporteer ontbrekende of onverwachte aanvullende toolrechten.
tools.denyToolstools.deny en agents.list[].tools.denyVereis dat geconfigureerde tool-weigerlijsten tool-id’s of groepen bevatten, zoals group:runtime en group:fs.
Voer tijdens het schrijven alleen-beleidscontroles uit:
openclaw policy check
openclaw policy check --json
openclaw policy check --severity-min error
policy check voert alleen de set beleidscontroles uit en geeft bewijs, bevindingen en attestatiehashes uit. Dezelfde bevindingen verschijnen ook in openclaw doctor --lint wanneer de Policy plugin is ingeschakeld. Vergelijk een operatorbeleidsbestand met een geschreven baseline-beleidsbestand:
openclaw policy compare --baseline official.policy.jsonc
openclaw policy compare --baseline official.policy.jsonc --policy policy.jsonc --json
policy compare vergelijkt syntaxis van beleidsbestanden met syntaxis van beleidsbestanden. Het inspecteert geen OpenClaw-runtime-status, bewijs, referenties of geheimen. De opdracht gebruikt dezelfde metadata voor beleidsregels die scoped overlays beheert: allowlists moeten gelijk of smaller blijven, denylists moeten gelijk of breder blijven, vereiste booleans moeten hun vereiste waarde behouden, geordende strings mogen alleen naar het restrictievere uiteinde van de geconfigureerde volgorde bewegen, en exacte lijsten moeten overeenkomen. Het baselinebestand kan een door een organisatie geschreven beleid zijn. Het gecontroleerde beleid kan striktere waarden gebruiken of extra beleidsregels toevoegen. Een gecontroleerde regel op topniveau kan ook voldoen aan een scoped baseline-regel wanneer deze even restrictief of restrictiever is, omdat beleid op topniveau breed van toepassing is. Scopenamen hoeven niet overeen te komen; scoped vergelijking wordt bepaald door selectorwaarde zoals agentIds of channelIds en door het beleidsveld dat wordt gecontroleerd. Voorbeeld van schone vergelijkingsuitvoer in JSON rapporteert alleen de vergelijkingsstatus van beleidsbestanden:
{
  "ok": true,
  "baselinePath": "official.policy.jsonc",
  "policyPath": "policy.jsonc",
  "rulesChecked": 3,
  "findings": []
}
Voorbeeld van schone policy check --json-uitvoer bevat stabiele hashes die kunnen worden vastgelegd door een operator of supervisor:
{
  "ok": true,
  "attestation": {
    "policy": {
      "path": "policy.jsonc",
      "hash": "sha256:..."
    },
    "workspace": {
      "scope": "policy",
      "hash": "sha256:..."
    },
    "findingsHash": "sha256:...",
    "attestationHash": "sha256:..."
  },
  "checksRun": 5,
  "checksSkipped": 0,
  "findings": []
}

Beleid configureren

Beleidsconfiguratie bevindt zich onder plugins.entries.policy.config.
{
  "plugins": {
    "entries": {
      "policy": {
        "enabled": true,
        "config": {
          "enabled": true,
          "path": "policy.jsonc",
          "workspaceRepairs": false,
          "expectedHash": "sha256:...",
          "expectedAttestationHash": "sha256:...",
        },
      },
    },
  },
}
InstellingDoel
enabledSchakel beleidscontroles in, zelfs voordat policy.jsonc bestaat.
workspaceRepairsSta toe dat doctor --fix door beleid beheerde workspace-instellingen bewerkt.
expectedHashOptionele hashvergrendeling voor het goedgekeurde beleidsartefact.
expectedAttestationHashOptionele hashvergrendeling voor de laatst geaccepteerde schone beleidscontrole.
pathWorkspace-relatieve locatie van het beleidsartefact.
Stel plugins.entries.policy.config.enabled in op false om beleidscontroles voor een workspace uit te schakelen terwijl de plugin geinstalleerd blijft. Vereisten voor toolmetadata worden geschreven in policy.jsonc met tools.requireMetadata, bijvoorbeeld ["risk", "sensitivity", "owner"].

Beleidsstatus accepteren

Voorbeeld van JSON-uitvoer:
{
  "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": []
}
De beleidshash identificeert het opgestelde regelartefact. Het bewijsblok registreert de waargenomen OpenClaw-status die door de beleidscontroles is gebruikt. De waarde workspace.hash identificeert die bewijs-payload voor de gecontroleerde scope. De bevindingenhash identificeert de exacte set bevindingen die door de controle is geretourneerd. checkedAt registreert wanneer de evaluatie is uitgevoerd. De attestatiehash identificeert de stabiele claim: beleidshash, bewijshash, bevindingenhash en of het resultaat schoon was. Deze bevat bewust geen checkedAt, zodat dezelfde beleidsstatus dezelfde attestatie oplevert bij herhaalde controles. Samen vormen deze de audit-tuple voor deze beleidscontrole. Als een latere Gateway of supervisor beleid gebruikt om een runtime-actie te blokkeren, goed te keuren of te annoteren, moet deze de attestatiehash van de laatste schone beleidscontrole registreren. checkedAt blijft in JSON-uitvoer staan voor auditlogs, maar maakt geen deel uit van de stabiele attestatiehash. Gebruik deze levenscyclus bij het accepteren van beleidsstatus:
  1. Stel policy.jsonc op of review het.
  2. Voer openclaw policy check --json uit.
  3. Als het resultaat schoon is, registreer attestation.policy.hash als expectedHash.
  4. Registreer attestation.attestationHash als expectedAttestationHash.
  5. Voer openclaw doctor --lint opnieuw uit in CI- of releasepoorten.
Als beleidsregels bewust veranderen, werk dan beide geaccepteerde hashes bij op basis van een schone controle. Als workspace-instellingen bewust veranderen maar het beleid hetzelfde blijft, verandert meestal alleen expectedAttestationHash. Het inschakelen of upgraden van agents.workspace-regels voegt agentWorkspace-bewijs toe aan de workspace-hash en attestatiehash. Operators moeten het nieuwe bewijs reviewen en geaccepteerde attestatiehashes vernieuwen nadat ze deze regels hebben ingeschakeld. Het inschakelen of upgraden van regels voor toolhouding voegt op dezelfde manier toolPosture-bewijs toe. openclaw policy watch voert dezelfde controle herhaaldelijk uit en rapporteert wanneer het huidige bewijs niet langer overeenkomt met expectedAttestationHash:
openclaw policy watch --json
Gebruik --once in CI of scripts die slechts één driftevaluatie nodig hebben. Zonder --once pollt de opdracht standaard elke twee seconden; gebruik --interval-ms om een ander interval te kiezen.

Bevindingen

Beleid verifieert momenteel:
Controle-idBevinding
policy/policy-jsonc-missingBeleid is ingeschakeld, maar policy.jsonc ontbreekt.
policy/policy-jsonc-invalidBeleid kan niet worden geparseerd of bevat ongeldige regelvermeldingen.
policy/policy-hash-mismatchBeleid komt niet overeen met geconfigureerde expectedHash.
policy/attestation-hash-mismatchHuidig beleidsbewijs komt niet meer overeen met de geaccepteerde attestatie.
policy/policy-conformance-invalidEen basislijn- of gecontroleerd beleidsbestand heeft ongeldige vergelijkingssyntaxis.
policy/policy-conformance-missingEen gecontroleerd beleidsbestand mist een regel die vereist is door het basislijnbeleidsbestand.
policy/policy-conformance-weakerEen gecontroleerd beleidsbestand heeft een zwakkere waarde dan het basislijnbeleidsbestand.
policy/channels-denied-providerEen ingeschakeld kanaal komt overeen met een kanaalweigerregel.
policy/mcp-denied-serverEen geconfigureerde MCP-server wordt door beleid geweigerd.
policy/mcp-unapproved-serverEen geconfigureerde MCP-server staat buiten de toelatingslijst.
policy/models-denied-providerEen geconfigureerde modelprovider of modelverwijzing gebruikt een geweigerde provider.
policy/models-unapproved-providerEen geconfigureerde modelprovider of modelverwijzing staat buiten de toelatingslijst.
policy/network-private-access-enabledEen SSRF-ontsnappingsmechanisme voor privénetwerken is ingeschakeld terwijl beleid dit weigert.
policy/ingress-dm-policy-unapprovedEen kanaal-DM-beleid staat buiten de beleidstoelatingslijst.
policy/ingress-dm-scope-unapprovedsession.dmScope komt niet overeen met het door beleid vereiste DM-isolatiebereik.
policy/ingress-open-groups-deniedEen kanaalgroepsbeleid is open terwijl beleid open groepsingang weigert.
policy/ingress-group-mention-requiredEen kanaal- of groepsvermelding schakelt vermeldingspoorten uit terwijl beleid ze vereist.
policy/gateway-non-loopback-bindGateway-bindhouding staat niet-loopback-blootstelling toe terwijl beleid dit weigert.
policy/gateway-auth-disabledGateway-authenticatie is uitgeschakeld terwijl beleid authenticatie vereist.
policy/gateway-rate-limit-missingGateway-authenticatie-ratelimit-houding is niet expliciet terwijl beleid dit vereist.
policy/gateway-control-ui-insecureOnveilige blootstellingsschakelaars voor de Gateway Control UI zijn ingeschakeld.
policy/gateway-tailscale-funnelGateway Tailscale Funnel-blootstelling is ingeschakeld terwijl beleid dit weigert.
policy/gateway-remote-enabledGateway-externe modus is actief terwijl beleid dit weigert.
policy/gateway-http-endpoint-enabledEen Gateway HTTP API-eindpunt is ingeschakeld terwijl beleid dit weigert.
policy/gateway-http-url-fetch-unrestrictedGateway HTTP URL-fetch-invoer mist een vereiste URL-toelatingslijst.
policy/agents-workspace-access-deniedAgent-sandboxmodus of werkruimtetoegang staat buiten de beleidstoelatingslijst.
policy/agents-tool-not-deniedEen agent- of standaardconfiguratie weigert geen tool die door beleid vereist wordt.
policy/tools-profile-unapprovedEen geconfigureerd globaal of per-agent toolprofiel staat buiten de toelatingslijst.
policy/tools-fs-workspace-only-requiredBestandssysteemtools zijn niet geconfigureerd met een padbeleid alleen voor de werkruimte.
policy/tools-exec-security-unapprovedExec-beveiligingsmodus staat buiten de beleidstoelatingslijst.
policy/tools-exec-ask-unapprovedExec-vraagmodus staat buiten de beleidstoelatingslijst.
policy/tools-exec-host-unapprovedExec-hostroutering staat buiten de beleidstoelatingslijst.
policy/tools-elevated-enabledVerhoogde toolmodus is ingeschakeld terwijl beleid dit weigert.
policy/tools-also-allow-missingEen geconfigureerde alsoAllow-lijst mist een vermelding die door beleid vereist is.
policy/tools-also-allow-unexpectedEen geconfigureerde alsoAllow-lijst bevat een vermelding die niet door beleid wordt verwacht.
policy/tools-required-deny-missingEen globale of per-agent toolweigerlijst bevat geen vereiste geweigerde tool.
policy/sandbox-mode-unapprovedSandboxmodus staat buiten de beleidstoelatingslijst.
policy/sandbox-backend-unapprovedSandboxbackend staat buiten de beleidstoelatingslijst.
policy/sandbox-container-posture-unobservableEen containerhoudingsregel is ingeschakeld voor een backend die deze niet kan observeren.
policy/sandbox-container-host-network-deniedEen containergebaseerde sandbox of browser gebruikt hostnetwerkmodus.
policy/sandbox-container-namespace-join-deniedEen containergebaseerde sandbox of browser sluit zich aan bij een andere containernamespace.
policy/sandbox-container-mount-mode-requiredEen containergebaseerde sandbox- of browsermount is niet alleen-lezen.
policy/sandbox-container-runtime-socket-mountEen containergebaseerde sandbox- of browsermount stelt de containerruntime-socket bloot.
policy/sandbox-container-unconfined-profileContainersandboxprofiel is onbeperkt terwijl beleid dit weigert.
policy/sandbox-browser-cdp-source-range-missingSandboxbrowser-CDP-bronbereik ontbreekt terwijl beleid er een vereist.
policy/data-handling-redaction-disabledRedactie van gevoelige loggegevens is uitgeschakeld terwijl beleid dit vereist.
policy/data-handling-telemetry-content-captureVastlegging van telemetrie-inhoud is ingeschakeld terwijl beleid dit weigert.
policy/data-handling-session-retention-not-enforcedOnderhoud van sessiebewaring wordt niet afgedwongen terwijl beleid dit vereist.
policy/data-handling-session-transcript-memory-enabledIndexering van sessietranscriptgeheugen is ingeschakeld terwijl beleid dit weigert.
policy/secrets-unmanaged-providerEen configuratie-SecretRef verwijst naar een provider die niet is gedeclareerd onder secrets.providers.
policy/secrets-denied-provider-sourceEen configuratiegeheimprovider of SecretRef gebruikt een bron die door beleid wordt geweigerd.
policy/secrets-insecure-providerEen geheimprovider kiest voor een onveilige houding terwijl beleid dit weigert.
policy/auth-profile-invalid-metadataEen configuratie-authenticatieprofiel mist geldige provider- of modusmetadata.
policy/auth-profile-unapproved-modeEen configuratie-authenticatieprofielmodus staat buiten de beleidstoelatingslijst.
policy/exec-approvals-missingBeleid vereist exec-approvals.json, maar het artefact ontbreekt.
policy/exec-approvals-invalidHet geconfigureerde exec-goedkeuringsartefact kan niet worden geparseerd.
policy/exec-approvals-default-security-unapprovedExec-goedkeuringsstandaarden gebruiken een beveiligingsmodus buiten de beleidstoelatingslijst.
policy/exec-approvals-agent-security-unapprovedEen effectieve exec-goedkeuringsbeveiligingsmodus per agent staat buiten de toelatingslijst.
policy/exec-approvals-auto-allow-skills-enabledEen exec-goedkeuringsagent staat impliciet automatisch skill-CLI’s toe terwijl beleid dit weigert.
policy/exec-approvals-allowlist-missingDe goedkeuringstoelatingslijst mist een patroon dat door beleid vereist is.
policy/exec-approvals-allowlist-unexpectedDe goedkeuringstoelatingslijst bevat een patroon dat niet door beleid wordt verwacht.
policy/tools-missing-risk-levelEen beheerde tooldeclaratie mist risicometadata.
policy/tools-unknown-risk-levelEen beheerde tooldeclaratie gebruikt een onbekende risicowaarde.
policy/tools-missing-sensitivity-tokenEen beheerde tooldeclaratie mist gevoeligheidsmetadata.
policy/tools-missing-ownerEen beheerde tooldeclaratie mist eigenaarsmetadata.
policy/tools-unknown-sensitivity-tokenEen beheerde tooldeclaratie gebruikt een onbekende gevoeligheidswaarde.
Beleidsbevindingen kunnen zowel target als requirement bevatten. target is het waargenomen werkruimteobject dat niet voldoet. requirement is de geschreven beleidsregel waardoor het een bevinding werd. Beide waarden zijn momenteel adressen, meestal oc://-paden, maar de veldnamen beschrijven hun beleidsrol in plaats van de adresindeling. Voorbeeld-JSON-bevinding:
{
  "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."
}
Voorbeeld-toolbevinding:
{
  "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"
}
Voorbeeld-MCP-bevinding:
{
  "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"
}
Voorbeeld-modelproviderbevinding:
{
  "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"
}
Voorbeeld-netwerkbevinding:
{
  "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"
}
Voorbeeldbevinding voor Gateway-blootstelling:
{
  "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"
}
Voorbeeldbevinding voor agentwerkruimte:
{
  "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"
}

Herstel

doctor --lint en policy check zijn alleen-lezen. doctor --fix bewerkt alleen door beleid beheerde werkruimte-instellingen wanneer workspaceRepairs expliciet is ingeschakeld. Zonder die opt-in melden beleidscontroles wat ze zouden repareren en laten ze instellingen ongewijzigd. In deze versie kan reparatie kanalen uitschakelen die in de OpenClaw-configuratie zijn ingeschakeld maar door channels.denyRules worden geweigerd. Schakel workspaceRepairs pas in nadat het beleidsbestand is beoordeeld, omdat een geldige weigerregel een geconfigureerd kanaal kan uitschakelen:
{
  "plugins": {
    "entries": {
      "policy": {
        "config": {
          "workspaceRepairs": true,
        },
      },
    },
  },
}

Exitcodes

Opdracht012
policy checkGeen bevindingen op de drempel.Een of meer bevindingen voldeden aan de drempel.Argument- of runtimefout.
policy compareHet beleidsbestand is minstens zo strikt als de baseline.Het beleidsbestand is ongeldig, ontbreekt of is zwakker dan baseline-regels.Argument- of runtimefout.
policy watchGeen bevindingen en geaccepteerde hash is actueel.Er bestaan bevindingen of de geaccepteerde attestatie is verouderd.Argument- of runtimefout.

Gerelateerd