Triana
for teams shipping autonomous agents

Find the failures before your customers do.

The mechanical failures, and the quiet ones — where the agent reports success and the job didn't happen. Triana reads your traces and names the first step where the run stopped matching what success required — with the proof attached.

just your email to start · or read the research →

one verdict, per failed runrun_4f2c
readplanedittestcommitleft the path here

How it works

From failed run to a guard in your CI.

Drop-in SDK or CLI. Your traces never leave your infra. No rubric to write, no judge to tune.

01

Bring your traces

OTel spans, transcripts, whatever you have. triana analyze ./traces

02

Read the verdicts

One per failed run: the first broken link, the proof, whether it's been seen before.

03

Adopt the eval guards

Each failure proposes the check that would have caught it. triana evals

04

The guards run on every change

Each confirmed failure becomes a check that replays in CI; if it comes back, the PR gets flagged — which is what makes it safe to let your coding agent iterate your agent. triana guard --ci

Verdicts don't drift when a judge model changes — so the same failure can be matched across months.

How much of your pass rate is actually verified?

validated by trace evidence
claimed · unverified

this is where silent failures hide inside your pass rate

sample report · illustrative

Where it fits

Where Triana sits in your loop.

shipping your first agent
  1. it failed on your data
  2. Triana names the first broken step, with proof
  3. you fix it
  4. the eval guard comes free
  5. rerun
running agents at scale
  1. a customer escalation lands
  2. query the failures around that goal and time window
  3. see whether it's new or a known signature — what fixed it last time, and whether your latest change brought it back
Exhibit A · from our research

Your dashboard says the agent failed. Half the time it didn't.

On a public benchmark, one run harness quietly corrupted the command before the shell ever saw it. The agent typed it correctly every time — and got blamed for all 41 failures anyway.

standard scoring
agent's fault41
— that's it
read against the traces
agent-only20
harness bug19
mixed2
the harness-bug count, four ways:
llm guess → 5 · another llm → 1 · keystroke match → 0 / 80 · deterministic → 19
$ triana why run_7c1a reading 80 traces… done what the agent typed EOF ✓ correct, all 80 what the shell received EOF; tmux wait -S done ✗ terminator never seen command hangs to timeout verdict harness-injected · not the agent every number regenerates from a script

Exhibit B · SentinelBench

Two models. Same 100 tasks. Two completely different ways to fail.

A single pass-rate says one model is "better." The first-broken-link breakdown says they fail for unrelated reasons — so the fix for one does nothing for the other.

GLM-5.2100 tasks
64 passed · 36 failed
36
·
·
skipped the final step
→ one dominant failure shape
Sonnet 4.6100 tasks
56 passed · 44 failed
21
8
6
3
3
retry loops
wrong output format
malformed tool call
wrong context
skipped a step
→ five distinct failure shapes

The pass-rate hides this. One eval number ranks the models and moves on. The first observable broken link says why each one failed — and that the two need different fixes.

Ask this about your own agent: swap the model, keep the memory — see which failures follow the model and which belong to your harness.

source: whitepaper §5.2 · SentinelBench 100 tasks × 2 models · every number regenerates from a script

Proven across real agents

One method. Every kind of agent.

The same evidence chain, run against terminal agents, browser agents, coding benchmarks, and live production sessions.

terminal
80
Terminal-Bench tasks
median 33 steps / task
browser
100×2
SentinelBench, two models
two failure fingerprints
coding bench
200
SWE-bench trajectories
two submissions
live sessions
1,758
Claude Code transcripts
+ 52 Codex CLI sessions

Built on coding-agent sessions first — Claude Code and Codex. Your coding agent can run triana itself.

Manifesto

Agents fail twice. Once mechanically — the loops, the errors, the cost. And once quietly, when a run looks successful but the job didn't happen. The quiet one reaches you through your customers, not your engineers. And the more autonomous the agent, the less anyone is watching.

Triana reads the traces, names where the run broke and why the goal wasn't reached, and leaves eval guards behind so the same failure doesn't come back.

A diagnosis you can't re-run is an opinion.

Research

We publish what we measure.

The method, the benchmarks, and the failure findings — released one at a time, each with the script that regenerates every number.

publishing gradually

The first papers and findings are on the way.

Want them as they land? Early access includes the research drops.

Get early access →

Early access

Running agents in production? Let's read your traces together.

Your traces and outcome labels in, an attribution report and eval-guard list back in 48 hours — and a say in what Triana becomes.

email required · one optional line about your setup · report in 48h