open source · MCP-native · ~25MB RAM
Your logs are a wall of noise. The errors aren't.
Open-source log and error tracking for your apps. It groups your errors into issues, and your coding agent reads them over MCP.
$ docker run ghcr.io/agenterr/agenterr
The usual options don't fit.
Most error tracking is built for platform teams, so a side project ends up carrying the same weight and paying the same bills.
Sentry is too heavy
Self-hosting it means a dozen containers and gigabytes of RAM — for a side project's stack traces.
Datadog is priced for platform teams
Per-GB ingest pricing makes sense at platform scale. On a side project it means one crash loop can quietly turn into a bill.
MCP as an afterthought
Most trackers have bolted an MCP server onto a product built for dashboards. Agenterr was designed around the agent from the start, so every tool returns something your agent can actually work with.
Works with the logs you already write
Send JSON, logfmt, or plain text and there's nothing to instrument — severity, message, and fields are lifted at ingest, and errors get grouped into issues.
See how ingest worksQuiet down noisy services
Set severity floors, drop by match, or sample 1-in-N per project. Every dropped record is counted, and rules fail open by default.
See noise controlsBuilt around your agent
Seventeen MCP tools let your agent read issues and tune the pipeline itself, without you copying anything into the chat.
See the MCP toolsYour logs already have everything it needs.
No SDK to add. It reads the JSON, logfmt, or plain-text logs your services already
write — level, message, and fields like request_id lifted automatically, on by default.
When you want to look yourself.
The built-in web UI shows the same issues your agent sees — dense tables, full-text search, and filters for environment and release.
- pq: deadlock detected — orders/repo.go:142 ×312 2m ago
- stripe: card_declined unhandled — payment.go:88 ×41 1h ago
- retrying webhook delivery — hooks/send.go:61 ×18 3h ago
- context deadline exceeded — search/client.go:207 ×9 1d ago
- redis: connection pool exhausted — cache/pool.go:33 ×127 2d ago
first_seen: 2026-08-06 09:12:04.117 · last: 2026-08-06 11:58:41.093 · release: v1.8.2 · env: production
INFO checkout started · order_id=9f21 · user=4481
WARN inventory lock slow · waited=412ms
ERRO pq: deadlock detected · orders/repo.go:142
ERRO transaction rolled back · order_id=9f21
Tune out what you don't need.
Each project gets its own ingest rules, applied after parsing and before storage. Every drop is counted, so you always know what a rule is doing.
Severity floor, per service
Drop traefik below WARN and the
health-check chatter disappears while real errors still come through.
Drop by match, or sample
Match a substring and drop it outright, or keep 1-in-N of a noisy band instead of all of it.
A report shows what got dropped
The noise report lists your top services by volume and how much each rule dropped. Rules fail open by default, so a bad one keeps records instead of eating them.
noise report
last 24h| service | events | dropped | rule |
|---|---|---|---|
| traefik | 41,320 | 38,904 | severity < WARN |
| checkout-api | 12,041 | 602 | sample 1-in-20 "GET /healthz" |
| worker | 3,116 | 0 | — |
Built for indie devs with more projects than servers.
Six side projects on one VPS, and none of them big enough to deserve an observability stack.
A coding agent doing half the work — it should see production errors the way it sees your code.
No appetite for a monitoring bill that scales faster than the products it watches.
Connect whatever agent you use.
Your agent gets 21 tools covering issues, events, search, configuration, and alerting, and it can call them all directly.
> why is checkout failing in prod?
✻ Thinking…
⏺ agenterr — list_issues (project: checkout, status: open)
⎿ pq: deadlock detected — orders/repo.go:142 ×312 2m ago
stripe: card_declined unhandled — payment.go:88 ×41 1h ago
⏺ agenterr — get_issue (issue: a3f1)
⎿ first_seen: 2026-08-06 09:12:04.117 · release: v1.8.2 · env: production
The deadlock started with v1.8.2 — two transactions lock orders and inventory in opposite order in repo.go:142.
$ claude mcp add agenterr
Your agent can see a noisy service, add a drop rule, and verify the volume fell — or flip a project setting — without a human in the loop. The shipped Claude Code skill teaches it the workflow.
Alerts with a cooldown built in.
New-issue, regression, and threshold rules fire as webhooks, and your agent manages them over MCP. Each rule has a cooldown — 15 minutes by default — so a crash loop wakes you up once and then stays quiet.
new_issue
A fingerprint's first appearance
regression
A resolved issue comes back
threshold
≥ N events in M minutes, scoped
cooldown
Delivery is a JSON webhook you point at ntfy, Slack, Discord, or anything with a URL. It never blocks ingest, retries with backoff, and matches any grouped issue — panics arrive joined into one record and land as FATAL.
The shipper is the same binary.
agenterr ship tails your Docker
containers and sends everything home. There's no separate shipper to install and no
config file to maintain.
ship
$ agenterr ship --docker --url https://logs.example.com --key agt_ingest_...
Same binary, new mode. Tails every container over the Docker socket; service names come
from Swarm and Compose labels automatically. Exclude noisy containers with a flag or a
label. Plain log files work too, with rotation handling
(--file 'GLOB=service').
fixes logs at the source
Strips ANSI color codes and joins multiline stack traces, so a Go panic arrives as a single record instead of forty broken lines.
survives outages
Records spool to disk with checkpoints and resume when the server comes back, so delivery is at-least-once and every drop is counted. A bad key fails at startup with a clear message instead of looping on silent 401s. Configuration is flags and env vars only.
On the roadmap.
This is what we're building next. It isn't in the binary yet — watch the repo to hear when it ships.
Sentry-compatible ingest
A drop-in DSN endpoint — point existing Sentry SDKs at Agenterr without swapping libraries.
v2 web UI
A rebuilt web UI on the same data your agent already sees — issues, alerts, and noise rules in one place.
25MB
ram at idle
Runs beside the apps it watches.
1
process
Replaces a dozen containers.
0
external services
Nothing else to run.
9.4B
per log record
Measured on a real 317k-log day.
measured, not claimed
Faster on every query we measured.
One real production day — 317,229 logs — loaded into both systems and queried the same way. Log bodies are stored as a template plus its variables, so the structure every line shares gets written once.
| OpenObserve | ||
|---|---|---|
| storage, all-in | 9.4 B/record | 10.9 B/record |
| scoped search | 10.9 ms | 37.0 ms |
| unscoped search | 14.8 ms | 34.4 ms |
| aggregate by service | 0.17 ms | 20.3 ms |
| ingest | 79k logs/s, fsync-acked | 213k logs/s, async-acked |
The caveats, since they matter: OpenObserve's result cache flatters repeated queries by around 4×, so the harness pins use_cache=false for both. Its ingest number is higher because it acknowledges writes before they are durable, while agenterr fsyncs first. Run it yourself with make bench-vs-o2.
The lightweight alternative.
| Sentry | Datadog | ||
|---|---|---|---|
| RAM to run it | ~25MB idle | 16GB+ recommended (self-hosted) | SaaS only |
| Pricing model | free self-host | per-event | per-host + per-GB |
| Self-hosting | one process, one file | a dozen services | not available |
| Agent access | agent-first, MCP built in | MCP add-on | MCP add-on |
| License | AGPL-3.0, free forever | FSL (source-available) | proprietary |
agenterr vs Sentry · agenterr vs Datadog · agenterr vs OpenObserve · agenterr vs GlitchTip
Free to self-host, forever.
Self-host
Free, unlimited, AGPL-3.0. One process and one data file on the VPS you already have.
View on GitHubHosted
not yet availableLater we will run it for a flat monthly price. Nothing will ever be billed per event or per gigabyte.
What that meansSelf-host in one command.
$ docker run ghcr.io/agenterr/agenterr
open source · MCP-native · ~25MB RAM