Observability your coding agent can read.
When something breaks, the answer is already in your telemetry. Bilis keeps your logs, traces and metrics on hardware you own, with no per-gigabyte bill, and gets you from “something is wrong” to the exact line or span that explains it in seconds. Your coding agent gets the same view: connect Claude Code, Cursor or any MCP client in one line, and it can search production while it works in the code that produced it.
- INFO billing Invoice finalized for team acme-inc (amount: 4900)
- DEBUG api Cache miss for plan:pro — reading from SQLite
- INFO api POST /v1/subscriptions 201 in 91ms
- INFO worker Job "export-csv" restarted after OOM kill
- FATAL worker Out of memory processing job "export-csv" (2048MB limit)
- TRACE worker Heartbeat ok, queue depth 0
- INFO api GET /v1/logs?window=1h 200 in 142ms
- DEBUG auth Session refreshed for user 4821
- INFO worker Processed 1 job in 8ms (queue: default)
- ERROR api POST /v1/checkout 500: Undefined array key "currency"
- INFO ingest Accepted 247 log records for project acme-web
- WARN ingest Batch contained 3 malformed records, skipped
See the whole request.
Then find the line that explains it.
One trace id joins the waterfall and the stream. The investigation stays in one place, and each view is one click from the other.
Traces
Where the request spent its time
Every span in order, durations to scale, services separated, and the failure marked. Select a span to inspect its attributes or jump straight to its logs.
Logs
What the code said about it
Search every line, narrow by time, project, service or severity, and leave a live tail open while the deploy goes out. Every search is a URL you can share.
Works with the stack you already run.
If your tooling speaks OpenTelemetry — and most already does — sending logs and traces to Bilis is a configuration change, not a project. No agents to deploy, no SDK to adopt, nothing to rewrite.
Plain JSON covers everything else. Existing Sentry SDKs can report straight to Bilis too.
{"accepted":1,"skipped":0}
Ingest never blames the client: malformed records are skipped with a count rather than failing the batch. Writes are queued asynchronously, so a success means accepted, not yet durable.
Your coding agent counts too
Claude Code speaks OpenTelemetry out of the box. A few lines of configuration put every prompt, tool call, token and dollar it spends beside the application it is editing — no plugin, nothing in between.
Point Claude Code at Bilis →One key, one project
Revocable in a click, and useless for anything but writing telemetry to that project. Access stays under your thumb.
Keep the data.
Lose the telemetry tax.
Bilis is built for the team that owns the box, reads its own incidents, and does not want observability to become another platform to operate.
- Your data never leaves the building
- You own the box, so you own the logs — all of them, for as long as your disk allows. Retention costs storage you already pay for, not a metered bill that punishes a noisy deploy.
- Small enough to run yourself
- One app and one database is the entire deployment — a stack you can hold in your head, deploy in an afternoon, and keep healthy without a platform team.
- Open, so you're never stuck
- Standard OpenTelemetry in, standard tables underneath. Your scripts, queries and AI tools work on the data today, and walking away is a SELECT, not a migration. The code is public.
Logs. Traces. Metrics.
Then software that acts.
Bilis keeps logs, traces and metrics on your box today, with logs and traces linked so each explains the other. The direction is alerting and AI that helps fix what the signals reveal. Self-hosting stays first-class through all of it.
In the product today
- OTLP, plain JSON, and Sentry-compatible ingest
- Fast full-text search across every log body
- Distributed traces drawn as a span waterfall
- Logs and traces linked in both directions
- OTLP metrics, charted as rates, levels and percentiles
- Live tail, teams, projects, and revocable keys
- Open, portable telemetry tables
Where it is heading
- Alerting, so the stack tells you when to look
- Dashboards and saved searches
- AI that spots, explains, and helps fix errors
eBPF collection, S3 tiering, and replication stay a bigger platform's job.
Bilis is early.
The product is not hypothetical.
Run it on your own box today, or sign up on bilis.app — the Free plan has published limits and no card. Self-hosting stays the first-class way to use Bilis. See pricing.
The whole thing is open on GitHub, so you can read exactly what it does with your telemetry before you point anything at it.