GuardedAgent - the enforcement primitive
GuardedAgent wraps an OpenClaw Agent and raises CertiorBlocked outside OpenClaw’s exception-swallowing callback chain. This is the only adapter surface that actually halts the call on a block.
CertiorCallbackHandler - observability + accounting
CompositeCallbackHandler swallows handler exceptions (“so one failing handler does not block the others”). Use GuardedAgent for enforcement and the callback handler for accounting.
GuardedPipeline - delegation with subset checks
GuardedPipeline(pipeline, guard, step_capabilities=None) proxies an OpenClaw Pipeline and checks each add_step call against the parent guard’s permissions. A step whose declared capability surface is not a subset of the parent is rejected at registration time, before any LLM ever sees the pipeline. The optional step_capabilities mapping declares each step’s capability surface up front; steps not present in the mapping fall back to the empty set (most restrictive). Per-step budget and content gates fire through the CertiorCallbackHandler running alongside - the supported pattern is to use both together to avoid double-charging.
Skill-level capability declaration
Steps in an OpenClaw pipeline can carry their capability surface in theirSKILL.md frontmatter under metadata.certior.capabilities. Certior reads it with:
Static pre-install skill audit
Before a skill is wired into a pipeline, audit it statically withcertior-skill-audit. The audit proves the skill’s declared capability surface is a subset of a parent guard’s permissions, with SHA-256 fingerprint pinning for drift detection.
What this covers
Certior’s OpenClaw integration addresses the eight threats enumerated in Uncovering Security Threats and Architecting Defenses in Autonomous Agents: A Case Study of OpenClaw (arXiv:2603.12644). The per-threat mapping lives in the GitHub source atdocs/openclaw-defenses.md.
See also
- Skill audit CLI - pre-install audit recipe.
- Capability model - the subset rule the delegation checks enforce.