Kestrel supervises your dev stack, pinpoints what broke first and proves the fix holds. Zero configuration, for developers and AI agents.
Same stack, start to finish. Scroll to watch Kestrel work.
Reads your repo and finds every service, port, health route and dependency. No config, no README archaeology.
kestrel inspectStarts services by dependency, probes readiness, classifies logs live and redacts secrets before anything is stored.
kestrel watchWhen things fall over, Kestrel walks the dependency graph and ports to the first failure, and ranks causes with event IDs.
kestrel diagnoseA 30 second, multi-sample stability window across every service. Not one lucky health check.
kestrel verifyservices: db: image: postgres:16 mem_limit: 64m 512m api: build: ./api ports: ["4000:4000"] depends_on: [db] web: build: ./web ports: ["5173:5173"] depends_on: [api]
get_service_statusdb down · api, web erroring
get_recent_errorsECONNREFUSED 127.0.0.1:5432 ×214
get_failure_timelinefirst signal db exited 137 · 14:02:11.384
get_diagnosisK002 dependency-down · confidence 0.94
get_verification_resultsPASS · 6/6 samples after the fix
| Kestrel | Shell / logs | Compose logs | LLM on raw logs | |
|---|---|---|---|---|
| Zero-config execution | Yes | Yes | Needs compose | Yes |
| Causal root-cause attribution | Graph + ports | No | No | Guesses on timing |
| Clean process containment | Zero orphans | Leaves orphans | Containers only | No |
| Multi-sample stability window | Continuous | No | No | No |
| Automatic secret redaction | Pre-storage | No | No | No |
| Bounded memory under floods | Ring buffers | Hangs terminal | Fills disk | Token overflow |
| Offline and private | 100% local | Yes | Yes | No |
K001Two things want the same port. Kestrel names both.
K002A dependency died and took its dependents with it.
K003Became ready, then fell over.
K004Never reached ready. Here's the first fatal line.
K005Started before what it needs was up.
K006An import or package that isn't installed.
Detected from the files already in your repo. Nothing to declare, nothing to configure.