MIT License · Single Binary · Local-first

Stop watching logs.
Start fixing errors.

Read stdout, stderr, files, Docker logs, or a supervised local dev stack. Inspect grouped failures in a local UI, and use sentinel dev to stop, restart, and copy logs for a single service. No SDK is required for log ingestion.

sentinel dev
Sentinel Dev group default running 8/8 issues 313 occurrences 13783
Metrics all services CPU 1.3% ............ MEM 2.2 GiB 3.4% ............
Services
All 8
postgres running
qdrant running
redis running
redis-insight running
backend running
workers running
beat running
frontend running
Logs stream all services mode follow
[qdrant] 2026-04-25T13:22:28.434332Z INFO collection::shards::local_shard: Recovering shard ./storage/collections/mem0_widget
[qdrant] 2026-04-25T13:22:28.446102Z INFO collection::shards::local_shard: Recovered collection mem0_widget_d8754963e70e4d6bbffa: 1/1 (100%)
[qdrant] 2026-04-25T13:22:28.447287Z INFO storage::content_manager::toc: Loading collection: mem0_widget_8260da14dbb541bcba1c
[qdrant] 2026-04-25T13:22:28.545444Z INFO collection::shards::local_shard: Recovering shard ./storage/collections/mem0_widget_8260da14dbb541bcba1c
[qdrant] 2026-04-25T13:22:28.557517Z INFO collection::shards::local_shard: Recovered collection mem0_widget_8260da14dbb541bcba1c: 1/1 (100%)
[qdrant] 2026-04-25T13:22:28.558970Z INFO storage::content_manager::toc: Loading collection: mem0_user_d6fe8d1b-38c7-45eb-99c8-c9b186787165
[qdrant] 2026-04-25T13:22:28.655132Z INFO collection::shards::local_shard: Recovering shard ./storage/collections/mem0_user_d6fe8d1b
Quick install

Start in under 10 seconds

macOS, Linux, and Git Bash on Windows install in one command. Native Windows starts from the latest release page. After first install, upgrades are just sentinel update.

bash
$curl -fsSL https://github.com/aneesahammed/sentinel-dist/releases/latest/download/sentinel.sh | bash
Windows

Windows install

Using Git Bash, MSYS2, or Cygwin? Run the same command above. Otherwise download the latest .exe from the public release page and place it on your PATH

Open public releases ↗
How it works

Pipe in. Get signal.

Three steps. No account. Basic ingestion needs no config; .sentinel.yml is only for the dev supervisor.

01

Point it at your logs

Run a stack with sentinel dev, wrap one process with sentinel run -- your_command, tail files, watch Docker, or pipe stdin. Sentinel reads whatever your app already emits.

02

Fingerprints, not raw lines

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.

03

Triage and track

Each new fingerprint is triaged — heuristically offline, or via a local or remote OpenAI-compatible endpoint when enabled. Mark issues as investigating, resolved, or suppressed. Regressions are auto-flagged.

Ingestion modes

Works wherever your logs live

Five workflows, one binary.

stdin

Pipe from anything

Pipe from Docker, journald, your build system, CI output — any process that writes to stdout.

$ docker logs -f api | sentinel stdin
watch

Tail log files

Glob patterns, seek-based offset tracking, and truncation handling for file-based logs.

$ sentinel watch ./logs/*.log
run

Wrap your dev server

Captures stdout and stderr from a child process. Tags the session with your git branch and commit.

$ sentinel run -- npm run dev
docker

Watch running containers

Auto-discover a Compose stack near your repo, or watch every running container with one command.

$ sentinel docker --all-running
Features

Built for engineers, not ops teams

Everything you need. Nothing you don't.

fingerprinting

Stable fingerprints

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.

multi-language

Parses 7 languages

Structured stack trace parsing for Python, Go, Node.js, Java, Kotlin, .NET, and Rust. Multiline exceptions are grouped automatically — no config required.

multi-project

Multi-project scoping

Same error in your billing service and auth service stays separate. Use --project to scope ingestion; the dashboard has a project filter built in.

llm triage

Optional LLM triage

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.

regression

Regression detection

When a resolved issue reappears after a 10-minute quiet period, it's automatically flagged as a regression. Status history tracks every transition.

breadcrumbs

Breadcrumb context

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.

otlp

OTLP trace correlation

Built-in OpenTelemetry HTTP receiver. Send spans from your existing OpenTelemetry setup, correlate traces with errors, and inspect the waterfall in the UI without running a separate collector.

local-first

Local-first storage

Logs and state live in SQLite with WAL mode. API keys are encrypted with AES-256-GCM. Offline mode or a local LLM keeps analysis local; remote LLM mode sends triage requests only to your configured endpoint.

Under the hood

Deliberately minimal stack

Single binary. No runtime, no daemon, no background services. Drop it in your PATH and it works.

Go 1.24 language
SQLite + WAL storage
Pure Go SQLite no CGO
Cobra CLI
Bubble Tea dev TUI
oat.ink web UI
go:embed web UI
OpenTelemetry traces
AES-256-GCM secrets
macOS · Linux · Windows platforms

Install once. Use it everywhere.

One command to install. One binary to run your dev stack, wrap a process, tail files, or watch Docker logs.

$curl -fsSL https://github.com/aneesahammed/sentinel-dist/releases/latest/download/sentinel.sh | bash
Then run: sentinel dev
Read the docs View on GitHub