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 →
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.
Bring your traces
OTel spans, transcripts, whatever you have. triana analyze ./traces
Read the verdicts
One per failed run: the first broken link, the proof, whether it's been seen before.
Adopt the eval guards
Each failure proposes the check that would have caught it. triana evals
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?
Where it fits
Where Triana sits in your loop.
- it failed on your data
- Triana names the first broken step, with proof
- you fix it
- the eval guard comes free
- rerun
- a customer escalation lands
- query the failures around that goal and time window
- see whether it's new or a known signature — what fixed it last time, and whether your latest change brought it back
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.
llm guess → 5 · another llm → 1 · keystroke match → 0 / 80 · deterministic → 19
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.
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.
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.
The first papers and findings are on the way.
Want them as they land? Early access includes the research drops.
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