Wrap every tool call with timeouts, circuit breakers, audit logging, and crash loop protection. Enforcement the agent cannot bypass.
---
name: supervision-layer
version: 1.0.0
description: "Wrap every tool call with timeouts, circuit breakers, audit logging, and crash loop protection. Enforcement the agent cannot bypass."
license: MIT
tags: [supervision, circuit-breaker, timeout, audit-logging, crash-loop, safety, reliability, agent-control, middleware, production]
source: el-rudo-larios/supervision-layer
trigger: "agent supervision timeout circuit breaker audit protection"
metadata:
openclaw:
emoji: "π‘οΈ"
---
# Supervision Layer
**Stop trusting agents to police themselves.** Supervision Layer wraps every tool call in timeouts, circuit breakers, and audit logs β enforcement the agent cannot bypass.
## Before vs After
| | Without Supervision | With Supervision |
|---|---|---|
| **Runaway calls** | Agent loops infinitely on a failing API | Circuit breaker trips after 3 failures |
| **Stuck sessions** | Tool hangs silently, agent waits forever | Timeout kills it after 30s |
| **Audit trail** | No record of what happened | Every call logged with timestamp, outcome, cost |
| **Crash loops** | Subagent restarts infinitely | After 3 crashes, marked permanently failed |
## Quick Start
```python
from supervision import get_supervisor
supervisor = get_supervisor()
result = await supervisor.execute(
tool="web_fetch",
fn=fetch_fn,
agent_id="worker-1",
session_id="sess-abc",
)
```
## Components
1. **TimeoutWrapper** β Per-tool configurable timeouts (default 30s)
2. **CircuitBreaker** β 3-state machine (CLOSED β OPEN β HALF_OPEN)
3. **AuditLogger** β Structured JSONL logging, 50MB rotation, queryable
4. **CrashLoopProtector** β Track restarts, mark failed after 3 within window
5. **SupervisedCall** β All-in-one: crash check β circuit check β audit β timeout β audit
## Testing
```bash
cd scripts/ && python -m pytest test_supervision.py -v
```
58 tests. 0 external dependencies. Works with any async Python project.
## License
MIT
don't have the plugin yet? install it then click "run inline in claude" again.