Skip to main content

Capabilities are strings

A capability is an opaque permission string, conventionally namespaced with colons. Examples:
You choose your own taxonomy. Certior does not interpret the strings - it only checks set containment.

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

Or in a direct verify:
The call is admitted only if every entry in 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 the delegationSafety 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

If permissions 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 a compact record to guard.audit_log: the tool name, the allowed verdict, the violation count, the PII count, the call latency, and a timestamp. The full certificate and the detailed violation list live on the returned VerifyResult, not in the audit-log entry.

See also