production trace → failure detection → regression test → CI gate → alert
One workspace: what ran, what broke, what is already pinned as a test.
Evaluators are **columns on the trace table**, not a separate tab — each one grades at conversation,
run or span level and writes its verdict into the grid. Scores stream in live over SSE as judges
finish, so you watch a run get graded in place. Tokens, cost, latency, metadata and the rolling
per-turn summary are columns too.
### 3 · Test — freeze the failure
One click promotes a failing trace into a hermetic case: recorded input, tool and LLM outputs bundled
as fixtures, and a **fail-to-pass contract** attached — the case must fail on the old code and pass on
the fix, or the promotion isn't trusted. Multi-turn behaviour gets **scenarios** instead: a scripted
conversation, or an adversarial goal a red-team model improvises against.
### 4 · Ship — block the PR
The suite replays in CI against recorded fixtures: deterministic, offline, **no API keys and no model
spend**. `tracely gate` exits non-zero, posts a commit status, and upserts a PR comment.
### 5 · Tell me — alerts as a flow
A rule has two halves: **when** (a gate fails, a live conversation breaks on a judge, a failure mode
appears that nobody has seen before, or a rate crosses a line) and **what happens** — drawn on a
canvas. Conditions that gate the rest of the flow, Slack, email, a webhook with your own method and
headers, an **LLM step** whose answer the next step can use, and a Python expression for a number a
template can't compute. Every field is a template over the failure's own variables, dragged in as
chips. Or describe it to the in-app assistant and it draws the whole thing onto the canvas.
### Plus — trends, cross-metric analysis, judge calibration
Daily failure and gate pass-rates, latency percentiles, token spend, per-agent meta-analysis
(Spearman correlations + z-score outliers, LLM-synthesized) — and a calibration screen where you
label judge verdicts against human review and see each judge's agreement, so you catch an
over-flagging judge *before* you let it gate a release.
---
## Everything in the box
| | What it does | Where |
|---|---|---|
| **Ingest** | OTLP/HTTP from any language; blob-first durability (S3 before the queue); agent semantics as indexed columns; three message conventions normalized | [`backend/`](backend/README.md) |
| **Evaluators** | Columns on the trace table. Structural checks (no model) + LLM judges at conversation / run / span level, multi-output (score, boolean, number, text, JSON schema), basic or `@VARIABLE` advanced prompts with live preview, batch or sequential, per-agent/env targeting, deterministic sampling, advisory verdicts | [Docs](https://doc.tracely-ai.com/product/traces) |
| **Failure clusters** | Structural signature + semantic embedding clustering, taxonomy, suggested evaluators, promote-to-case | [Docs](https://doc.tracely-ai.com/product/clusters) |
| **Regression cases** | Hermetic fixture bundles, fail-to-pass contracts, assertions, reference trajectory, replay history | [Docs](https://doc.tracely-ai.com/product/cases) |
| **Scenarios** | Multi-turn conversations Tracely drives at your agent's own endpoint, or an adversarial goal a red-team model pursues (goal achieved = FAIL) | [Docs](https://doc.tracely-ai.com/product/scenarios) |
| **CI gates** | `tracely simulate` / `replay` / `gate` + a GitHub Action: commit status, PR comment, non-zero exit | [Docs](https://doc.tracely-ai.com/product/gates) |
| **Alerts** | Trigger + visual flow: conditions, Slack, email, webhooks with headers, an LLM step, Python expressions. Event triggers fire inline; thresholds poll a window. Test runs show what each step actually sent | [Docs](https://doc.tracely-ai.com/product/alerts) |
| **Trends & analysis** | Daily traces/failures/gate pass-rate, latency + cost, per-agent cross-metric meta-analysis | [Docs](https://doc.tracely-ai.com/product/trends) |
| **Judge calibration** | Label judge verdicts against human review; per-evaluator agreement, missed failures vs over-flagging | [Docs](https://doc.tracely-ai.com/product/calibration) |
| **Conversation intelligence** | Rolling per-turn summary (backs the judge's `@HISTORY`), declared agent catalog, state deltas, Replay + Fleet views, shareable read-only links | [Docs](https://doc.tracely-ai.com/product/traces) |
| **In-app assistant** | ⌘J — an agent over *your* workspace: reads traces, creates evaluators, scenarios, cases and alerts, as you. ⌘K jumps anywhere | [Docs](https://doc.tracely-ai.com/product/assistant) |
| **MCP server** | The API doubles as an MCP endpoint (`/mcp`) so a coding agent drives the workspace with an ordinary ingest key | [Docs](https://doc.tracely-ai.com/mcp) |
| **Auth & teams** | `dev` (open) · `local` (email/password + invites) · `clerk`. Organizations, workspaces, seats, API keys, per-workspace OpenRouter key | [Docs](https://doc.tracely-ai.com/product/settings) |
| **Ops** | Beat self-check (queue depth, worker liveness, ingest freshness) + `/health/queue`, optional Sentry, optional trace quota + Stripe billing | [`guides/DEPLOY.md`](guides/DEPLOY.md) |
Near-term plan: [design/part2-tracely/11-prd-next-steps.md](design/part2-tracely/11-prd-next-steps.md) ·
Long-term roadmap: [10-mvp-and-roadmap.md](design/part2-tracely/10-mvp-and-roadmap.md)
---
## Quickstart
**Prerequisites:** Docker + Docker Compose. (For local dev also [uv](https://docs.astral.sh/uv/) and Node 20+ / pnpm.)
### Everything in Docker — the whole product, populated
```bash
git clone https://github.com/jwuthri-cloud/Tracely-ai && cd Tracely
docker compose --profile demo up -d --build --wait
open http://localhost:3001
```
That brings up ClickHouse, Postgres, Redis and MinIO, runs every migration, seeds the default project
and ingest key (`tracely_dev_key`), then populates **traces, clusters, cases and gates** — so the app
opens with the screenshots above rather than an empty shell.
```bash
docker compose down # stop (add -v to wipe data)
```
Host ports default to web **:3001** and backend **:8000**; remap with `TRACELY_WEB_PORT` / `TRACELY_BACKEND_PORT`.
`backend`/`worker`/`frontend` run off source volume-mounts, so most edits need only `docker compose restart
The same rules are reachable from the [in-app assistant](https://doc.tracely-ai.com/product/assistant)
(*"Slack me when the refund judge fails a conversation"*) and from the MCP server, so an agent can
arm one for you. [Alerts guide →](https://doc.tracely-ai.com/product/alerts)
---
## Drive it from your editor
Every backend serves an [MCP](https://modelcontextprotocol.io) endpoint at `/mcp`, so a coding agent
reads your traces and writes your evaluators without any glue code:
```bash
claude mcp add --transport http tracely http://localhost:8000/mcp \
--header "Authorization: Bearer tracely_dev_key"
```
Then: *"look at the last 20 traces, find what's failing, and add an evaluation column that catches
it."* Tools over traces, failure clusters, evaluators and trends — scoped to the key's workspace,
same as every other call. On hosted Tracely the endpoint is
`https://api.tracely-ai.com/mcp`. [Docs](https://doc.tracely-ai.com/mcp)
---
## Teach your coding agent Tracely
MCP gives your agent your *data*. The **Tracely skill** gives it the *know-how* — how to instrument,
what to evaluate, and how to wire the gate — so "add Tracely to this agent" is one sentence instead
of a docs tab.
```bash
npx skills add https://github.com/jwuthri-cloud/Tracely-ai --skill tracely
```
Works with Claude Code, Cursor, Copilot, Antigravity and anything else the
[`skills`](https://github.com/vercel-labs/skills) CLI supports — add `-g` for a global install,
`--agent '*'` for every agent on the machine.
| **Knows the whole surface** - **Automatic tracing** — `init(instrument="auto")`, provider + framework extras, `@observe`, drop-ins, LangGraph, LiteLLM, agent SDKs, redaction - **Manual spans** — every observation type, handoffs, RAG, state deltas, multimodal I/O - **Non-Python** — the OTLP conventions to emit from TypeScript, Go or Ruby - **Evaluators** — structural vs judge, levels, `@VARIABLE` templates, advisory verdicts, sampling - **CI gate** — scenarios, red-team runs, hermetic replay, the GitHub Action - **Troubleshooting** — symptom → cause → fix for the failures that look like success | **And the traps that silently produce a useless workspace** - a missing `conversation` id turns one thread into twelve orphan rows - a swallowed tool error is invisible to detection, clustering *and* the gate - no `flush()` and a script loses its last spans - a dropped `traceparent` makes the gate blind to what your agent *did* - an adversarial scenario is **inverted** — goal achieved means the attack won |