Skip to main content
Interpreting a policy finding, repairing it, and the exit codes. Part of the openclaw policy reference.

Findings

A finding can include both target (the observed workspace thing that does not conform) and requirement (the authored rule that made it a finding). Both are oc:// address strings today, but the field names describe policy role rather than address format. Example findings:

Repair

doctor --lint and policy check are read-only. doctor --fix only edits policy-managed workspace settings when workspaceRepairs is explicitly enabled; otherwise checks report what they would repair and leave settings unchanged. In this version, repair can disable channels denied by channels.denyRules and apply the automatic narrowing repairs listed below. Enable workspaceRepairs only after the policy file has been reviewed, because a valid rule can change workspace config:
  • set tools.elevated.enabled=false when a global policy forbids elevated tools
  • add missing required-deny tool ids to tools.deny or agents.entries.*.tools.deny when policy requires those tools to be denied
  • set insecure gateway.controlUi.* toggles to false
  • set gateway.mode=local when policy denies remote gateway mode
  • set reported gateway.http.endpoints.*.enabled paths to false when policy denies Gateway HTTP API endpoints
  • set reported channel ingress groupPolicy paths to allowlist when policy denies open group ingress
  • set reported channel ingress requireMention paths to true when policy requires group mentions
  • set diagnostics.otel.captureContent=false, or diagnostics.otel.captureContent.enabled=false for object-form telemetry capture settings, when policy denies telemetry content capture
Scoped elevated-tools repairs are detect-only. Scoped data-handling repairs are also skipped when the finding reports shared telemetry config, because changing the shared setting would affect more than the scoped policy target. dataHandling.sensitiveLogging.requireRedaction has no check and no repair. Sensitive log redaction is unconditional in OpenClaw, so nothing can report it as disabled. The key stays a supported policy rule: openclaw policy validates its shape, openclaw policy compare still requires a candidate policy to be at least as strict as the baseline for it, and openclaw policy check records the runtime invariant oc://openclaw.invariant/logging/redaction in the dataHandling evidence and attestation as proof the requirement is satisfied. Scoped required-deny repairs are skipped when the finding reports inherited root tools.deny, because adding the required tool to root config would affect more than the scoped policy target. Agent-local required-deny repairs can update the reported agents.entries.*.tools.deny path. Scoped channel ingress repairs are skipped when the finding reports inherited channels.defaults.*, because changing the shared channel default would affect more than the scoped policy target. Gateway HTTP URL-fetch allowlist findings remain manual because automatic repair cannot choose the correct endpoint URL allowlist values. Gateway bind and node-command findings stay review-required. When policy/gateway-non-loopback-bind or policy/gateway-node-command-denied can be mapped to a config path, doctor --fix reports the proposed gateway.bind or gateway.nodes.commands.deny change as skipped preview guidance. It does not apply the change, and the finding does not count as repaired until an operator reviews and updates config or policy.

Exit codes