Retrieved article excerpt
Open article · Retrieved 2026-10-10T15:42:27.971088+00:00
# Tessary
Stop your agents from failing silently in production.
[Docs](https://docs.tessary.ai) ·
[Self-host](https://github.com/tessaryai/tessary#get-running) ·
[Report an issue](https://github.com/tessaryai/tessary/issues) ·
[Discussions](https://github.com/tessaryai/tessary/discussions)
[Apache 2.0 license](https://github.com/tessaryai/tessary/blob/main/LICENSE)
[Latest release](https://github.com/tessaryai/tessary/releases)
[Docker pulls](https://hub.docker.com/r/tessaryai/tessary)
[CI status](https://github.com/tessaryai/tessary/actions/workflows/check.yml)
Tessary is an open-source reliability platform for AI agents in production. It monitors every trace, detects issues using cheap classifiers, groups related findings into cases, and investigates their root cause using trace and repository evidence.
## Get running
To try it without installing anything, sign up for Tessary Cloud at <https://app.tessary.ai>. It's free, needs no credit card, and its limits are on the [pricing page](https://tessary.ai/pricing).
To self-host, paste this into your coding agent:
```
Self-host Tessary for me by following https://github.com/tessaryai/tessary/blob/main/setup.md
```
[`setup.md`](https://github.com/tessaryai/tessary/blob/main/setup.md) is written as instructions to an agent: install what's missing, bring every service up, verify the frontend, and hand back the URL.
Prefer to run it yourself? The same install is one command, with nothing cloned and no `.env` to edit:
```
docker compose -f oci://docker.io/tessaryai/tessary:compose up -d -y
```
Either way, open <http://localhost> when `docker compose -p tessary ps` reports every service healthy. It needs Docker Engine 26 or newer and Docker Compose v2.34 or newer on the machine. [Set up Tessary](https://github.com/tessaryai/tessary/blob/main/docs/self-hosting/setup.mdx) takes it from there.
Once it's running, instrument your agent so Tessary has traces to watch: see the [instrumentation overview](https://docs.tessary.ai/instrument/overview).
### 1. Point your agent's traces at it
Send OTLP traces to the endpoint shown during setup and add `tessary.call_site.id` to spans that invoke a model. Use [`instrument.md`](https://github.com/tessaryai/tessary/blob/main/instrument.md) to have a coding agent identify and instrument these call sites.
### 2. Connect the repo (optional)
Connect a GitHub repository under **Settings > Git integration** and both triage and RCA cite the code that produced the failing traces.
## How it works
1. **Watch every trace.** OTLP over HTTP and gRPC, and SDK push, normalize to the OpenTelemetry `gen_ai.*` conventions at the edge. PII (personally identifiable information) redaction runs before storage.
2. **Filter cheaply.** Classifiers sweep every trace continuously and open a finding when one fires. The per-trace check stays cheap enough to afford at production volume, which is what makes reading all of it possible instead of sampling. Two classifiers are exceptions, and both are off until you turn them on: `frustration` scores eligible user messages with a hosted model on your own OpenRouter or TypeSafe key, and `groundedness` checks answers against their retrieved documents with a public model you run on a Mac with Apple silicon or a GPU instance on AWS, not an LLM call.
3. **Group into cases.** Related findings collapse into one case, surfaced on **Triage**. An LLM triage step rules whether a finding is a real deviation rather than a legitimate change, and only a finding it rules real becomes a case. Two kinds of finding are ruled when they are filed instead, because their numbers are the claim: a high-confidence secret leak, and a rise in frustrated conversations.
4. **Explain the case.** RCA runs an agentic session over the failing traces and, when a repo is connected, the code itself. It returns a one-sentence summary, the causes it found with the traces behind each, and the checks it ruled out.
5. **Route it to a human.** An alert carries the case to whoever owns it. Tessary explains and hands off. It doesn't open the fix.
## License
Tessary is licensed under the [Apache License 2.0](https://github.com/tessaryai/tessary/blob/main/LICENSE).
## Telemetry
A self-hosted instance sends one anonymous heartbeat to `home.tessary.ai` at backend start and every 6 hours after. It carries a schema version, an install id, a ping sequence number, a timestamp, the edition, the app version, the host OS family and CPU architecture, install-wide totals of projects, ingested spans, findings, cases, and classifier detections, and the hash of the model price book it holds. On the same schedule it checks `home.tessary.ai` for a newer price book and downloads it only when the hash has changed. It never carries trace or prompt content, an email address, an org or project name, a hostname, or a retained IP address.
```
TESSARY_TELEMETRY_ENABLED=false
```
Set that in `.env` and the instance makes no call to that host, DNS lookups included, and loses nothing: no feature, license check, or in-app behavior depends on the heartbeat reaching us. The field-by-field contract is [the telemetry contract](https://github.com/tessaryai/tessary/blob/main/devdocs/reference/telemetry-contract.md).
## Contributing
[`CONTRIBUTING.md`](https://github.com/tessaryai/tessary/blob/main/CONTRIBUTING.md) explains how to open an issue or a pull request, how to run the checks locally, and what to expect from review. [The documentation map](https://github.com/tessaryai/tessary/blob/main/devdocs/README.md) is where to start reading the rest.
## Security
Report a vulnerability privately by emailing [email protected]. See [`SECURITY.md`](https://github.com/tessaryai/tessary/blob/main/SECURITY.md) for what to expect.