Capabilities are strings
A capability is an opaque permission string, conventionally namespaced with colons. Examples:A guard declares its ceiling
guard.permissions is the maximum set of capabilities this guard’s calls may use. The special value ["*"] means “no capability restriction” - useful for development but disables the capability gate.
Each tool call declares what it needs
required_capabilities is present in guard.permissions. Anything else - including a single missing capability - blocks the call.
Subset rule in delegation chains
In a multi-agent pipeline, a parent guard can hand off to a child. The rule the Lean model enforces is that the child’s permission set must be a subset of the parent’s. This is thedelegationSafety theorem in lean4/CertiorLattice/Certior/Delegation.lean.
For OpenClaw pipelines, the subset check is enforced at add_step time by GuardedPipeline - see /guides/openclaw. For other frameworks, the same rule applies whenever you instantiate a sub-guard from a parent guard’s token.
Wildcards short-circuit Z3
Ifpermissions includes "*", the capability gate trusts the call and only the budget portion runs through Z3. This is the development default. In production-style configurations, declare the actual permission set so the gate has work to do.
What gets recorded
Every verify call (allowed or blocked) appends toguard.audit_log with the tool name, the requested capabilities, the verdict, and (for allowed calls) the issued certificate. Blocked calls record the violations list.
See also
- How it works - the three-gate pipeline.
- Certificates - what a successful verify produces.
- OpenClaw guide -
GuardedPipelineenforces subset checking on delegation chains.