CLI commands
Política
openclaw policy
openclaw policy é fornecido pelo Plugin Policy incluído. A política é uma
camada de conformidade empresarial sobre as configurações existentes do OpenClaw.
Ela não adiciona um segundo sistema de configuração. policy.jsonc define
requisitos declarados, o OpenClaw observa o workspace ativo como evidência, e as
verificações de integridade da política relatam desvios por meio de doctor --lint.
O sinal final de conformidade é uma execução limpa de doctor --lint; a política
contribui com achados para essa superfície de lint compartilhada em vez de criar
um gate de integridade separado.
Atualmente, a política gerencia canais configurados, servidores MCP, provedores
de modelo, postura de SSRF de rede, postura de acesso de ingresso/canal, postura
de exposição do Gateway, postura do workspace de agentes, postura de tratamento
de dados, postura de provedor de segredo/perfil de autenticação da configuração
do OpenClaw e declarações de ferramentas governadas. Por exemplo, a TI ou um
operador de workspace pode registrar que Telegram não é um provedor de canal
aprovado, restringir servidores MCP e refs de modelo a entradas aprovadas,
exigir que o acesso de fetch/navegador à rede privada permaneça desativado,
exigir que o isolamento de sessão de mensagem direta e a postura de ingresso de
canal permaneçam dentro dos limites revisados, exigir que bind/autenticação/exposição
HTTP do Gateway permaneçam dentro dos limites revisados, exigir que o acesso ao
workspace do agente e negações de ferramentas permaneçam em uma postura revisada,
exigir que SecretRefs da configuração do OpenClaw usem provedores gerenciados,
exigir que perfis de autenticação da configuração carreguem metadados de
provedor/modo, exigir que ferramentas governadas carreguem metadados de risco e
sensibilidade, exigir redação de logs sensíveis, negar captura de conteúdo de
telemetria, exigir manutenção de retenção de sessão, negar indexação em memória
de transcrições de sessão e então usar doctor --lint como o gate de
conformidade compartilhado.
Use a política quando um workspace precisar de uma declaração durável, como "estes canais não devem ser habilitados" ou "ferramentas governadas devem declarar metadados de aprovação", e de uma forma repetível de provar que o OpenClaw ainda está em conformidade com essa declaração. Use apenas a configuração regular e a documentação do workspace quando você só precisar de comportamento local e não precisar de achados de política ou saída de atestação.
Início rápido
Habilite o Plugin Policy incluído antes do primeiro uso:
openclaw plugins enable policyQuando a política está habilitada, o doctor pode carregar verificações de
integridade de política sem ativar plugins arbitrários. O Plugin permanece
habilitado se policy.jsonc estiver ausente, para que o doctor possa relatar o
artefato ausente.
A política é declarada, não gerada a partir das configurações atuais do usuário. Uma política mínima para canais, servidores MCP, provedores de modelo, postura de rede, acesso de ingresso/canal, exposição do Gateway, postura do workspace de agentes, postura de runtime de sandbox configurado, postura de tratamento de dados do OpenClaw, postura de provedor de segredo/perfil de autenticação da configuração, postura de arquivo de aprovação de exec e metadados de ferramenta se parece com isto:
{ "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"], },}As regras são a autoridade. Um bloco de categoria é apenas um namespace; as
verificações são executadas quando uma regra concreta está presente. O OpenClaw
lê as configurações atuais de channels.*, mcp.servers.*,
models.providers.*, refs de modelo de agentes selecionados, configurações de
SSRF de rede, escopo de sessão de mensagem direta, política de DM de canal,
política de grupo de canal, gates de menção de canal/grupo, postura de
bind/autenticação/Control UI/Tailscale/remoto/HTTP do Gateway, postura de acesso
ao workspace de sandbox de agente da configuração do OpenClaw e negação de
ferramentas, postura de configuração de tratamento de dados, proveniência de
provedor de segredo e SecretRef da configuração, metadados de perfil de
autenticação da configuração, postura de ferramenta global/por agente
configurada e declarações de TOOLS.md como evidência, e então relata o estado
observado que não está em conformidade. Se uma política negar binds de Gateway
que não sejam local loopback, omita gateway.bind apenas quando você estiver
disposto a revisar o padrão de runtime; defina gateway.bind=loopback para
conformidade estrita da configuração. Para postura de agente somente leitura,
configure o modo sandbox nos padrões ou agente aplicáveis e defina
workspaceAccess como none ou ro; modo sandbox omitido ou off não
satisfaz uma política somente leitura/sem escrita. agents.workspace.denyTools
oferece suporte a exec, process, write, edit e apply_patch; a
configuração do OpenClaw group:fs cobre ferramentas de mutação de arquivos e
group:runtime cobre ferramentas de shell/processo. A política de postura de
ferramentas observa tools.profile, tools.allow, tools.alsoAllow,
tools.deny, tools.fs.workspaceOnly, tools.exec.security, tools.exec.ask,
tools.exec.host, tools.elevated.enabled e as mesmas substituições por agente
em agents.list[].tools.*. A política de aprovação de exec lê o artefato de
produto exec-approvals.json nomeado somente quando uma regra execApprovals
está presente; a evidência registra padrões, postura por agente e padrões de
allowlist sem tokens de socket ou texto do último comando usado. A política não
impõe chamadas de ferramentas em runtime. A evidência de segredo registra a
postura de provedor/fonte e metadados de SecretRef, nunca valores brutos de
segredo. A política não lê nem atesta armazenamentos de credenciais por agente,
como auth-profiles.json; esses armazenamentos continuam pertencendo aos fluxos
existentes de autenticação e credenciais. A evidência de tratamento de dados é
apenas postura em nível de configuração: ela verifica o modo de redação
configurado, alternâncias de captura de conteúdo de telemetria, modo de
manutenção de sessão e configurações de indexação em memória de transcrições de
sessão. Ela não inspeciona logs brutos, exportações de telemetria, conteúdos de
transcrições, arquivos de memória nem prova que não existem dados pessoais ou
segredos.
Referência de regras de política
Cada campo de política abaixo é opcional. Uma verificação é executada somente
quando a regra correspondente está presente em policy.jsonc. O estado
observado é a configuração existente do OpenClaw ou metadados do workspace; a
política relata desvios, mas não reescreve o comportamento de runtime, a menos
que um caminho de reparo esteja explicitamente disponível e habilitado.
Arquivos de política são estritos: seções ou chaves de regra sem suporte são
relatadas como policy/policy-jsonc-invalid em vez de serem ignoradas.
Sobreposições de política mantêm regras amplas de nível superior como globais e então permitem que blocos de escopo nomeados adicionem seções normais de política mais estritas para seletores explícitos. Um nome de escopo é apenas um agrupamento descritivo; a correspondência usa os valores de seletor dentro do escopo. A sobreposição é aditiva: declarações globais continuam sendo executadas, e uma declaração com escopo pode emitir seu próprio achado contra a mesma configuração observada.
Sobreposições com escopo
Use scopes.<scopeName> quando um conjunto de agentes ou canais precisar de
política mais estrita do que a linha de base de nível superior. Seções com
escopo de agente usam agentIds, que oferece suporte a tools.*,
agents.workspace.*, sandbox.*, dataHandling.memory.* e execApprovals.*.
Ingresso com escopo de canal usa channelIds, que oferece suporte a
ingress.channels.*. Seções sem suporte são rejeitadas em vez de serem
ignoradas. Se uma entrada agentIds não estiver presente em agents.list[], o
OpenClaw avalia a regra com escopo contra a postura global/padrão herdada para
esse id de agente de runtime.
{ "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, }, }, }, },}O mesmo agente pode aparecer em vários escopos quando cada escopo governa campos diferentes, como mostrado acima. Um campo com escopo repetido para o mesmo agente deve ser igualmente ou mais restritivo de acordo com os metadados de política; declarações duplicadas mais fracas são rejeitadas. Metadados de rigor tratam allowlists como subconjuntos, denylists como superconjuntos e booleanos obrigatórios como requisitos fixos.
A política de postura de contêiner é avaliada somente contra evidências que o
OpenClaw consegue observar para o agente correspondente. Se uma regra
sandbox.containers.* habilitada se aplicar a um agente cujo backend de sandbox
não consegue expor esse campo, a política relata
policy/sandbox-container-posture-unobservable em vez de tratar a declaração
como aprovada. Use escopos agentIds separados para grupos de agentes que usam
backends de sandbox diferentes e deixe regras de contêiner sem suporte
indefinidas ou falsas para os grupos em que esses campos não podem ser
observados.
ingress.session.requireDmScope de nível superior permanece global porque
session.dmScope não é evidência atribuível a canal.
| Seletor | Seções compatíveis | Use quando |
|---|---|---|
agentIds |
tools, agents.workspace, sandbox, dataHandling.memory e execApprovals |
Um ou mais agentes de runtime precisam de regras mais rígidas. |
channelIds |
ingress.channels |
Um ou mais canais precisam de regras de ingresso mais rígidas. |
Todo escopo presente em policy.jsonc deve ser válido e aplicável.
Canais
| Campo da política | Estado observado | Use quando |
|---|---|---|
channels.denyRules[].when.provider |
Provedor de channels.* e estado habilitado |
Negar canais configurados de um provedor como telegram. |
channels.denyRules[].reason |
Mensagem da constatação e contexto da dica de reparo | Explicar por que o provedor é negado. |
Servidores MCP
| Campo da política | Estado observado | Use quando |
|---|---|---|
mcp.servers.allow |
IDs de mcp.servers.* |
Exigir que todo servidor MCP configurado esteja em uma lista de permissões. |
mcp.servers.deny |
IDs de mcp.servers.* |
Negar IDs específicos de servidores MCP configurados. |
Provedores de modelo
| Campo da política | Estado observado | Use quando |
|---|---|---|
models.providers.allow |
IDs de models.providers.* e refs de modelo selecionadas |
Exigir que provedores configurados e refs de modelo selecionadas usem provedores aprovados. |
models.providers.deny |
IDs de models.providers.* e refs de modelo selecionadas |
Negar provedores configurados e refs de modelo selecionadas por ID de provedor. |
Rede
| Campo da política | Estado observado | Use quando |
|---|---|---|
network.privateNetwork.allow |
Escapes de SSRF para rede privada | Definir como false para exigir que o acesso à rede privada permaneça desabilitado. |
Ingresso e acesso a canais
| Campo da política | Estado observado | Use quando |
|---|---|---|
ingress.session.requireDmScope |
session.dmScope |
Exigir um escopo de isolamento de mensagem direta revisado. |
ingress.channels.allowDmPolicies |
channels.*.dmPolicy e campos legados de política de DM de canal |
Permitir apenas políticas de canal de mensagem direta revisadas. |
ingress.channels.denyOpenGroups |
Política de ingresso de canal, conta e grupo | Negar ingresso de grupo aberto para canais e contas configurados. |
ingress.channels.requireMentionInGroups |
Configuração de gates de menção de canal, conta, grupo, guilda e aninhados | Exigir gates de menção quando o ingresso de grupo estiver aberto ou condicionado a menção. |
Gateway
| Campo da política | Estado observado | Use quando |
|---|---|---|
gateway.exposure.allowNonLoopbackBind |
gateway.bind |
Definir como false para exigir vinculação do Gateway a loopback. |
gateway.exposure.allowTailscaleFunnel |
Postura de serve/funnel do Gateway no Tailscale | Definir como false para negar exposição via Tailscale Funnel. |
gateway.auth.requireAuth |
gateway.auth.mode |
Definir como true para rejeitar autenticação desabilitada do Gateway. |
gateway.auth.requireExplicitRateLimit |
gateway.auth.rateLimit |
Definir como true para exigir configuração explícita de limite de taxa de autenticação. |
gateway.controlUi.allowInsecure |
Alternâncias inseguras de autenticação/dispositivo/origem da Control UI | Definir como false para negar alternâncias inseguras de exposição da Control UI. |
gateway.remote.allow |
Modo/configuração de Gateway remoto | Definir como false para negar o modo Gateway remoto. |
gateway.http.denyEndpoints |
Endpoints da API HTTP do Gateway | Negar IDs de endpoint como chatCompletions ou responses. |
gateway.http.requireUrlAllowlists |
Entradas de busca de URL do Gateway HTTP | Definir como true para exigir listas de permissões de URL em entradas de busca de URL. |
Espaço de trabalho do agente
| Campo da política | Estado observado | Use quando |
|---|---|---|
agents.workspace.allowedAccess |
agents.defaults.sandbox.workspaceAccess e agents.list[].sandbox.workspaceAccess |
Permitir apenas valores de acesso ao espaço de trabalho do sandbox como none ou ro. |
agents.workspace.denyTools |
Configuração global e por agente de negação de ferramentas | Exigir que ferramentas de mutação de espaço de trabalho/runtime como exec, process, write, edit ou apply_patch sejam negadas. |
Postura do sandbox
| Campo da política | Estado observado | Use quando |
|---|---|---|
sandbox.requireMode |
agents.defaults.sandbox.mode e modo por agente |
Permitir apenas modos de sandbox revisados como all ou non-main. |
sandbox.allowBackends |
agents.defaults.sandbox.backend e backend por agente |
Permitir apenas backends de sandbox revisados como docker. |
sandbox.containers.denyHostNetwork |
Modo de rede de sandbox/navegador baseado em contêiner | Negar modo de rede do host. |
sandbox.containers.denyContainerNamespaceJoin |
Modo de rede de sandbox/navegador baseado em contêiner | Negar entrada no namespace de rede de outro contêiner. |
sandbox.containers.requireReadOnlyMounts |
Modo de montagem de sandbox/navegador baseado em contêiner | Exigir que as montagens sejam somente leitura. |
sandbox.containers.denyContainerRuntimeSocketMounts |
Alvos de montagem de sandbox/navegador baseado em contêiner | Negar montagens de socket do runtime de contêiner. |
sandbox.containers.denyUnconfinedProfiles |
Postura de perfil de segurança de contêiner | Negar perfis de segurança de contêiner sem confinamento. |
sandbox.browser.requireCdpSourceRange |
Intervalo de origem CDP do navegador do sandbox | Exigir que a exposição CDP do navegador declare um intervalo de origem. |
A política trata sandbox.mode ausente como o padrão implícito off, portanto
sandbox.requireMode relata um sandbox novo ou não configurado como fora de uma
lista de permissões como ["all"].
Tratamento de dados
| Campo da política | Estado observado | Use quando |
|---|---|---|
dataHandling.sensitiveLogging.requireRedaction |
logging.redactSensitive |
Definir como true para rejeitar logging.redactSensitive: "off". |
dataHandling.telemetry.denyContentCapture |
diagnostics.otel.captureContent |
Definir como true para rejeitar captura de conteúdo de telemetria. |
dataHandling.retention.requireSessionMaintenance |
session.maintenance.mode |
Definir como true para exigir o modo efetivo de manutenção de sessão enforce. |
dataHandling.memory.denySessionTranscriptIndexing |
memory.qmd.sessions.enabled e agents.*.memorySearch.experimental.sessionMemory |
Definir como true para rejeitar indexação de transcritos de sessão na memória. |
Segredos
| Campo da política | Estado observado | Use quando |
|---|---|---|
secrets.requireManagedProviders |
Configurar SecretRefs e declarações de secrets.providers.* |
Definir como true para exigir que SecretRefs apontem para provedores declarados. |
secrets.denySources |
Origens de provedores de segredo e origens de SecretRef | Negar origens como exec, file ou outro nome de origem configurado. |
secrets.allowInsecureProviders |
Flags de postura insegura de provedor de segredo | Definir como false para rejeitar provedores que optam por postura insegura. |
Aprovações de exec
A política de aprovações de exec observa o artefato ativo de runtime
exec-approvals.json. Por padrão, ele é ~/.openclaw/exec-approvals.json; quando
OPENCLAW_STATE_DIR está definido, a Política lê
$OPENCLAW_STATE_DIR/exec-approvals.json. Regras de postura reais como
execApprovals.defaults.* ou execApprovals.agents.* exigem evidência de artefato
legível; um artefato ausente ou inválido é relatado como evidência não observável
em vez de se tornar uma aprovação de melhor esforço contra padrões sintéticos de runtime. Depois
que o artefato é legível, campos de aprovação omitidos herdam os padrões de runtime: defaults.security ausente
é full, e a segurança de agente ausente herda esse
padrão. A evidência inclui defaults, agents.* e
agents.*.allowlist[].pattern, além de argPattern opcional, postura efetiva de
autoAllowSkills e origem da entrada. Ela não inclui caminho/token de socket,
commandText, lastUsedCommand, caminhos resolvidos ou carimbos de data/hora.
| Campo de política | Estado observado | Use quando |
|---|---|---|
execApprovals.requireFile |
Caminho ativo de runtime exec-approvals.json |
Defina como true para exigir que o artefato de aprovações exista e seja analisado. |
execApprovals.defaults.allowSecurity |
defaults.security, com padrão full |
Permita somente modos aprovados de segurança de aprovação padrão. |
execApprovals.agents.allowSecurity |
agents.*.security, herdando os padrões |
Permita somente modos aprovados de segurança de aprovação efetiva por agente. |
execApprovals.agents.allowAutoAllowSkills |
defaults.autoAllowSkills e agents.*.autoAllowSkills, herdando padrões de runtime |
Defina como false para exigir listas de permissão manuais estritas sem aprovação implícita da CLI de Skills. |
execApprovals.agents.allowlist.expected |
Padrão agregado agents.*.allowlist[] e entradas opcionais argPattern |
Exija que a lista de permissão de aprovações corresponda ao conjunto de padrões revisado. |
Por exemplo, exija o artefato de aprovações, negue padrões permissivos e permita somente a postura revisada de aprovação de exec para agentes selecionados:
{ "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", ], }, }, }, }, },}Perfis de autenticação
| Campo de política | Estado observado | Use quando |
|---|---|---|
auth.profiles.requireMetadata |
Metadados de provedor e modo auth.profiles.* |
Exija chaves de metadados como provider e mode em perfis de autenticação da configuração. |
auth.profiles.allowModes |
auth.profiles.*.mode |
Permita somente modos compatíveis de perfil de autenticação, como api_key, aws-sdk, oauth ou token. |
Metadados de ferramentas
| Campo de política | Estado observado | Use quando |
|---|---|---|
tools.requireMetadata |
Declarações governadas de TOOLS.md |
Exija que ferramentas governadas declarem chaves de metadados como risk, sensitivity ou owner. |
Postura de ferramentas
| Campo de política | Estado observado | Use quando |
|---|---|---|
tools.profiles.allow |
tools.profile e agents.list[].tools.profile |
Permita somente ids de perfil de ferramenta, como minimal, messaging ou coding. |
tools.fs.requireWorkspaceOnly |
tools.fs.workspaceOnly e substituições por agente de tools.fs |
Defina como true para exigir postura de ferramenta de sistema de arquivos somente no workspace. |
tools.exec.allowSecurity |
tools.exec.security e segurança de exec por agente |
Permita somente modos de segurança de exec, como deny ou allowlist. |
tools.exec.requireAsk |
tools.exec.ask e modo de solicitação de exec por agente |
Exija postura de aprovação, como always. |
tools.exec.allowHosts |
tools.exec.host e roteamento de host de exec por agente |
Permita somente modos de roteamento de host de exec, como sandbox. |
tools.elevated.allow |
tools.elevated.enabled e postura elevada por agente |
Defina como false para exigir que o modo de ferramenta elevada permaneça desabilitado. |
tools.alsoAllow.expected |
tools.alsoAllow e tools.alsoAllow por agente |
Exija entradas exatas de alsoAllow e relate concessões aditivas de ferramenta ausentes ou inesperadas. |
tools.denyTools |
tools.deny e agents.list[].tools.deny |
Exija que listas configuradas de negação de ferramentas incluam ids ou grupos de ferramenta, como group:runtime e group:fs. |
Execute verificações somente de política durante a autoria:
openclaw policy checkopenclaw policy check --jsonopenclaw policy check --severity-min errorpolicy check executa somente o conjunto de verificações de política e emite evidências, achados e
hashes de atestação. Os mesmos achados também aparecem em openclaw doctor --lint
quando o Plugin de Política está habilitado.
Compare um arquivo de política do operador com um arquivo de política de baseline criado:
openclaw policy compare --baseline official.policy.jsoncopenclaw policy compare --baseline official.policy.jsonc --policy policy.jsonc --jsonpolicy compare compara a sintaxe de arquivo de política com a sintaxe de arquivo de política. Ele não
inspeciona estado de runtime do OpenClaw, evidências, credenciais ou segredos. O comando
usa os mesmos metadados de regra de política que governam sobreposições com escopo: listas de permissão devem
permanecer iguais ou mais restritas, listas de negação devem permanecer iguais ou mais amplas, booleanos obrigatórios
devem manter seu valor obrigatório, strings ordenadas devem mover-se apenas em direção à extremidade mais
restritiva da ordem configurada, e listas exatas devem corresponder.
O arquivo de baseline pode ser uma política criada pela organização. A política verificada pode
usar valores mais estritos ou adicionar regras de política extras. Uma regra verificada de nível superior também pode
satisfazer uma regra de baseline com escopo quando ela for igualmente ou mais restritiva porque
a política de nível superior se aplica amplamente. Os nomes de escopo não precisam corresponder; a
comparação com escopo é indexada pelo valor do seletor, como agentIds ou channelIds, e pelo
campo de política verificado.
Exemplo de saída JSON limpa de comparação relata somente o estado de comparação de arquivo de política:
{ "ok": true, "baselinePath": "official.policy.jsonc", "policyPath": "policy.jsonc", "rulesChecked": 3, "findings": []}Exemplo de saída limpa de policy check --json inclui hashes estáveis que podem ser
registrados por um operador ou supervisor:
{ "ok": true, "attestation": { "policy": { "path": "policy.jsonc", "hash": "sha256:..." }, "workspace": { "scope": "policy", "hash": "sha256:..." }, "findingsHash": "sha256:...", "attestationHash": "sha256:..." }, "checksRun": 5, "checksSkipped": 0, "findings": []}Configurar política
A configuração de política fica em plugins.entries.policy.config.
{ "plugins": { "entries": { "policy": { "enabled": true, "config": { "enabled": true, "path": "policy.jsonc", "workspaceRepairs": false, "expectedHash": "sha256:...", "expectedAttestationHash": "sha256:...", }, }, }, },}| Configuração | Finalidade |
|---|---|
enabled |
Habilitar verificações de política mesmo antes de policy.jsonc existir. |
workspaceRepairs |
Permitir que doctor --fix edite configurações de workspace gerenciadas por política. |
expectedHash |
Bloqueio de hash opcional para o artefato de política aprovado. |
expectedAttestationHash |
Bloqueio de hash opcional para a última verificação de política limpa aceita. |
path |
Localização relativa ao workspace do artefato de política. |
Defina plugins.entries.policy.config.enabled como false para desabilitar verificações de política
para um workspace enquanto mantém o plugin instalado.
Os requisitos de metadados de ferramentas são criados em policy.jsonc com
tools.requireMetadata, por exemplo ["risk", "sensitivity", "owner"].
Aceitar estado de política
Exemplo de saída 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": []}O hash da política identifica o artefato de regra criado. O bloco de evidências
registra o estado observado do OpenClaw usado pelas verificações de política. O
valor workspace.hash identifica esse payload de evidências para o escopo
verificado. O hash das constatações identifica o conjunto exato de constatações
retornado pela verificação. checkedAt registra quando a avaliação foi
executada. O hash da attestação identifica a declaração estável: hash da
política, hash das evidências, hash das constatações e se o resultado estava
limpo. Intencionalmente, ele não inclui checkedAt, para que o mesmo estado de
política produza a mesma attestação em verificações repetidas. Juntos, eles
formam a tupla de auditoria para esta verificação de política.
Se um Gateway ou supervisor posterior usar a política para bloquear, aprovar ou
anotar uma ação de runtime, ele deve registrar o hash da attestação da última
verificação de política limpa. checkedAt permanece na saída JSON para logs de
auditoria, mas não faz parte do hash de attestação estável.
Use este ciclo de vida ao aceitar o estado de política:
- Crie ou revise
policy.jsonc. - Execute
openclaw policy check --json. - Se o resultado estiver limpo, registre
attestation.policy.hashcomoexpectedHash. - Registre
attestation.attestationHashcomoexpectedAttestationHash. - Execute novamente
openclaw doctor --lintna CI ou em gates de lançamento.
Se as regras de política mudarem intencionalmente, atualize ambos os hashes
aceitos a partir de uma verificação limpa. Se as configurações do workspace
mudarem intencionalmente, mas a política permanecer a mesma, normalmente apenas
expectedAttestationHash muda.
Habilitar ou atualizar regras de agents.workspace adiciona evidências
agentWorkspace ao hash do workspace e ao hash da attestação. Os operadores
devem revisar as novas evidências e atualizar os hashes de attestação aceitos
após habilitar essas regras. Habilitar ou atualizar regras de postura de
ferramentas adiciona evidências toolPosture da mesma forma.
openclaw policy watch executa a mesma verificação repetidamente e relata
quando as evidências atuais não correspondem mais a expectedAttestationHash:
openclaw policy watch --jsonUse --once em CI ou scripts que precisam de apenas uma avaliação de desvio.
Sem --once, o comando consulta a cada dois segundos por padrão; use
--interval-ms para escolher um intervalo diferente.
Constatações
Atualmente, a política verifica:
| ID da verificação | Achado |
|---|---|
policy/policy-jsonc-missing |
A política está habilitada, mas policy.jsonc está ausente. |
policy/policy-jsonc-invalid |
A política não pode ser analisada ou contém entradas de regra malformadas. |
policy/policy-hash-mismatch |
A política não corresponde ao expectedHash configurado. |
policy/attestation-hash-mismatch |
A evidência de política atual não corresponde mais à atestação aceita. |
policy/policy-conformance-invalid |
Um arquivo de política de referência ou verificado tem sintaxe de comparação inválida. |
policy/policy-conformance-missing |
Um arquivo de política verificado não tem uma regra exigida pelo arquivo de política de referência. |
policy/policy-conformance-weaker |
Um arquivo de política verificado tem um valor mais fraco do que o arquivo de política de referência. |
policy/channels-denied-provider |
Um canal habilitado corresponde a uma regra de negação de canal. |
policy/mcp-denied-server |
Um servidor MCP configurado é negado pela política. |
policy/mcp-unapproved-server |
Um servidor MCP configurado está fora da lista de permissões. |
policy/models-denied-provider |
Um provedor de modelo ou referência de modelo configurado usa um provedor negado. |
policy/models-unapproved-provider |
Um provedor de modelo ou referência de modelo configurado está fora da lista de permissões. |
policy/network-private-access-enabled |
Uma exceção de SSRF para rede privada está habilitada quando a política a nega. |
policy/ingress-dm-policy-unapproved |
Uma política de DM de canal está fora da lista de permissões da política. |
policy/ingress-dm-scope-unapproved |
session.dmScope não corresponde ao escopo de isolamento de DM exigido pela política. |
policy/ingress-open-groups-denied |
Uma política de grupo de canal é open enquanto a política nega ingresso de grupos abertos. |
policy/ingress-group-mention-required |
Uma entrada de canal ou grupo desabilita portões de menção enquanto a política os exige. |
policy/gateway-non-loopback-bind |
A postura de vinculação do Gateway permite exposição fora de loopback quando a política a nega. |
policy/gateway-auth-disabled |
A autenticação do Gateway está desabilitada quando a política exige autenticação. |
policy/gateway-rate-limit-missing |
A postura de limite de taxa da autenticação do Gateway não está explícita quando a política a exige. |
policy/gateway-control-ui-insecure |
Alternâncias de exposição insegura da UI de Controle do Gateway estão habilitadas. |
policy/gateway-tailscale-funnel |
A exposição do Gateway Tailscale Funnel está habilitada quando a política a nega. |
policy/gateway-remote-enabled |
O modo remoto do Gateway está ativo quando a política o nega. |
policy/gateway-http-endpoint-enabled |
Um endpoint da API HTTP do Gateway está habilitado enquanto é negado pela política. |
policy/gateway-http-url-fetch-unrestricted |
A entrada de busca de URL HTTP do Gateway não tem uma lista de permissões de URL obrigatória. |
policy/agents-workspace-access-denied |
O modo de sandbox do agente ou o acesso ao espaço de trabalho está fora da lista de permissões da política. |
policy/agents-tool-not-denied |
Um agente ou configuração padrão não nega uma ferramenta exigida pela política. |
policy/tools-profile-unapproved |
Um perfil de ferramentas global ou por agente configurado está fora da lista de permissões. |
policy/tools-fs-workspace-only-required |
As ferramentas de sistema de arquivos não estão configuradas com postura de caminho restrita ao espaço de trabalho. |
policy/tools-exec-security-unapproved |
O modo de segurança de exec está fora da lista de permissões da política. |
policy/tools-exec-ask-unapproved |
O modo de solicitação de exec está fora da lista de permissões da política. |
policy/tools-exec-host-unapproved |
O roteamento de host de exec está fora da lista de permissões da política. |
policy/tools-elevated-enabled |
O modo de ferramenta elevada está habilitado quando a política o nega. |
policy/tools-also-allow-missing |
Uma lista alsoAllow configurada não tem uma entrada exigida pela política. |
policy/tools-also-allow-unexpected |
Uma lista alsoAllow configurada inclui uma entrada não esperada pela política. |
policy/tools-required-deny-missing |
Uma lista de negação de ferramentas global ou por agente não inclui uma ferramenta negada obrigatória. |
policy/sandbox-mode-unapproved |
O modo de sandbox está fora da lista de permissões da política. |
policy/sandbox-backend-unapproved |
O backend de sandbox está fora da lista de permissões da política. |
policy/sandbox-container-posture-unobservable |
Uma regra de postura de contêiner está habilitada para um backend que não consegue observá-la. |
policy/sandbox-container-host-network-denied |
Um sandbox ou navegador baseado em contêiner usa modo de rede do host. |
policy/sandbox-container-namespace-join-denied |
Um sandbox ou navegador baseado em contêiner entra no namespace de outro contêiner. |
policy/sandbox-container-mount-mode-required |
Uma montagem de sandbox ou navegador baseado em contêiner não é somente leitura. |
policy/sandbox-container-runtime-socket-mount |
Uma montagem de sandbox ou navegador baseado em contêiner expõe o soquete do runtime de contêiner. |
policy/sandbox-container-unconfined-profile |
O perfil de sandbox de contêiner é irrestrito quando a política o nega. |
policy/sandbox-browser-cdp-source-range-missing |
O intervalo de origem CDP do navegador de sandbox está ausente quando a política exige um. |
policy/data-handling-redaction-disabled |
A redação de logs sensíveis está desabilitada quando a política a exige. |
policy/data-handling-telemetry-content-capture |
A captura de conteúdo de telemetria está habilitada quando a política a nega. |
policy/data-handling-session-retention-not-enforced |
A manutenção de retenção de sessão não é aplicada quando a política a exige. |
policy/data-handling-session-transcript-memory-enabled |
A indexação de memória de transcrições de sessão está habilitada quando a política a nega. |
policy/secrets-unmanaged-provider |
Um SecretRef de configuração referencia um provedor não declarado em secrets.providers. |
policy/secrets-denied-provider-source |
Um provedor de segredo de configuração ou SecretRef usa uma origem negada pela política. |
policy/secrets-insecure-provider |
Um provedor de segredo opta por uma postura insegura quando a política a nega. |
policy/auth-profile-invalid-metadata |
Um perfil de autenticação de configuração não tem metadados válidos de provedor ou modo. |
policy/auth-profile-unapproved-mode |
Um modo de perfil de autenticação de configuração está fora da lista de permissões da política. |
policy/exec-approvals-missing |
A política exige exec-approvals.json, mas o artefato está ausente. |
policy/exec-approvals-invalid |
O artefato de aprovações de exec configurado não pode ser analisado. |
policy/exec-approvals-default-security-unapproved |
Os padrões de aprovação de exec usam um modo de segurança fora da lista de permissões da política. |
policy/exec-approvals-agent-security-unapproved |
Um modo de segurança efetivo de aprovação de exec por agente está fora da lista de permissões. |
policy/exec-approvals-auto-allow-skills-enabled |
Um agente de aprovação de exec permite automaticamente CLIs de Skills de forma implícita quando a política nega isso. |
policy/exec-approvals-allowlist-missing |
A lista de permissões de aprovações não tem um padrão exigido pela política. |
policy/exec-approvals-allowlist-unexpected |
A lista de permissões de aprovações inclui um padrão não esperado pela política. |
policy/tools-missing-risk-level |
Uma declaração de ferramenta governada não tem metadados de risco. |
policy/tools-unknown-risk-level |
Uma declaração de ferramenta governada usa um valor de risco desconhecido. |
policy/tools-missing-sensitivity-token |
Uma declaração de ferramenta governada não tem metadados de sensibilidade. |
policy/tools-missing-owner |
Uma declaração de ferramenta governada não tem metadados de proprietário. |
policy/tools-unknown-sensitivity-token |
Uma declaração de ferramenta governada usa um valor de sensibilidade desconhecido. |
Achados de política podem incluir tanto target quanto requirement. target é a
coisa observada no espaço de trabalho que não está em conformidade. requirement é a regra de
política criada que fez disso um achado. Ambos os valores são endereços hoje, geralmente
caminhos oc://, mas os nomes dos campos descrevem seu papel na política em vez do
formato do endereço.
Exemplo de achado 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."}Exemplo de achado de ferramenta:
{ "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"}Exemplo de achado 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"}Exemplo de achado de provedor de modelo:
{ "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"}Exemplo de achado de rede:
{ "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"}Exemplo de constatação de exposição do 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"}Exemplo de achado de workspace de agente:
{ "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"}Reparo
doctor --lint e policy check são somente leitura.
doctor --fix só edita configurações de workspace gerenciadas por política quando
workspaceRepairs está explicitamente habilitado. Sem essa adesão, as verificações de política
relatam o que reparariam e deixam as configurações inalteradas.
Nesta versão, o reparo pode desabilitar canais que estão habilitados na configuração do OpenClaw
mas negados por channels.denyRules. Habilite workspaceRepairs somente depois que o
arquivo de política tiver sido revisado, porque uma regra de negação válida pode desativar um
canal configurado:
{ "plugins": { "entries": { "policy": { "config": { "workspaceRepairs": true, }, }, }, },}Códigos de saída
| Comando | 0 |
1 |
2 |
|---|---|---|---|
policy check |
Nenhuma descoberta no limite. | Uma ou mais descobertas atingiram o limite. | Falha de argumento ou runtime. |
policy compare |
O arquivo de política é pelo menos tão rigoroso quanto a baseline. | O arquivo de política é inválido, ausente ou mais fraco que as regras da baseline. | Falha de argumento ou runtime. |
policy watch |
Nenhuma descoberta e o hash aceito está atual. | Existem descobertas ou a atestação aceita está obsoleta. | Falha de argumento ou runtime. |