Sentinel reads your stdout and stderr — no SDK, no code changes, no cloud. Pipe it in and it groups, fingerprints, and triages every error across all your services.
Three steps. No account, no config file, no YAML.
Pipe stdin, tail files with watch ./logs/*.log, or wrap
a process with run -- your_command. Sentinel reads
whatever your app already emits.
Multiline stack traces are grouped. UUIDs, IDs, and timestamps are stripped before hashing so the same error from different requests lands in the same bucket, every time.
Each new fingerprint is triaged — heuristically offline, or via a local LLM if you have Ollama running. Mark issues as investigating, resolved, or suppressed. Regressions are auto-flagged.
Three ingestion modes, one binary.
Pipe from Docker, journald, your build system, CI output — any process that writes to stdout.
Glob patterns, seek-based offset tracking, and automatic rotation detection for file-based logs.
Captures stdout and stderr from a child process. Tags the session with your git branch and commit.
Filter by project, severity, status. View occurrence timelines, breadcrumbs, and stack frames. Real-time via SSE.
Everything you need. Nothing you don't.
SHA-256 over a normalized message and top-3 stack frames. UUIDs, IDs, timestamps, and paths are stripped first — so the same bug gets the same fingerprint across every run.
Structured stack trace parsing for Python, Go, Node.js, Java, Kotlin, .NET, and Rust. Multiline exceptions are grouped automatically — no config required.
Same error in your billing service and auth service stays separate.
Use --project to scope ingestion; the dashboard has a
project filter built in.
Works with Ollama, LM Studio, or any OpenAI-compatible endpoint.
Falls back to heuristic automatically. Pass
--offline to skip LLM entirely — zero latency, zero
calls.
When a resolved issue reappears after a 10-minute quiet period, it's automatically flagged as a regression. Status history tracks every transition.
The 50 log lines preceding each error are captured and stored with the occurrence. You see what led up to it, not just the exception itself.
Built-in OpenTelemetry HTTP receiver. Traces are correlated with error events and shown as a span waterfall in the UI — no external collector needed.
SQLite with WAL mode. API keys encrypted with AES-256-GCM. Data never leaves your machine. Self-update pulls from GitHub with SHA-256 checksum verification.
Single binary. No runtime, no daemon, no background services. Drop it in your PATH and it works.
Download the binary, add it to your PATH, and pipe your first logs in.