Your AI changed. Find the first difference.
Compare two runs of your pipeline. onetrace shows the first step whose output differs, what was recorded there, and every step that changed after it. Each run's record is one receipt per step, checkable by anyone.
Free and open source (Apache-2.0) · runs on your machine · no account · pip install onetrace
intake · Same
Its recorded output is the same in both runs, byte for byte.
classify · First difference
A recorded setting differs: rules 1 → 2. Same tool, keyword-rules 1.0.0; its configuration digest differs as well.
Its output class.json: "class": "billing" "technical", "matched": "charged" "app"
lookup_account · Same
Its recorded output is the same in both runs.
draft_reply · Changed after it
It read class.json, which differs. No setting of its own changed.
Its reply: "Thanks for telling us about reporting a billing technical problem. Our billing desk support team will check your account look into it and reply within one working day."
route · Changed after it
It read reply.json, which differs. No setting of its own changed.
Its output route.json: "queue": "billing-desk" "tech-support"
Recorded values from the live demo's example pipelines. A first difference narrows the investigation; it doesn't by itself say why the output changed. Open the demo
The problem
"Why did the answer change?" shouldn't take a week.
An AI pipeline is a chain of steps: retrieve, rank, build a prompt, call a model, act. Any of them can change quietly: a data refresh, a library upgrade, a new model behind the same name. When the answer moves, your team is left reading two piles of logs and hoping they line up.
Logs what your system says
- Written by the system you're investigating, in whatever shape it chose
- Hard to compare run against run
- Nobody outside your team can check them
onetrace what someone else can check
- One small receipt per step: what it read, what it produced, which tool and settings
- Two runs compared step by step, with the first difference named
- Checkable by anyone, with no network calls, by an independent verifier
What you get
Answers you can trace. Changes you can locate.
Three things your team gets on day one, without changing how your pipeline works.
Find the step that changed
Compare any two runs. Every step is marked same, first difference or changed after it, so you start at the first step that differs, not at the symptom.
Prove what ran
Each run leaves a chained record. Change, delete or reorder anything afterwards and an independent check says so. Sign it with your key if you need to.
See it all in one place
The onetrace console turns run records into pages anyone on the team can read: what was checked, what held, and what needs attention first.
Product tour
The console, on real demo runs.
Screenshots of the live demo, taken from its own pages. Open the demo to click through the same screens; nothing can be changed there.
See it on pipelines like yours: examples by industry →
Every run, and what the evidence says about it
Each pipeline with its runs, and how many of their records agree. Then the runs that need attention first, each with what its own page reads, and counts you can click through to the exact runs behind them.

A run, step by step, with its checks
A clear verdict at the top, then one question at a time: do the records agree, was it signed, is any step missing. Each answer says exactly what was and wasn't checked.

Where two runs part ways, and the text that changed
The comparison's graph marks the first step that differs and everything after it. Its text diff shows, line by line, the output text that changed, each side checked against its receipt first.

Suggested explanations
An explanation you can check.
onetrace-explain asks a model you configure where to look, then holds every claim to the record. If a claim can't be tied to it, you never see it.
- Labelled, every time. Each explanation says it is AI-generated and may be wrong, and names the model that wrote it.
- Every claim cites the record. It names the items in the comparison it rests on, linked where the page can show them. Claims that misquote the record are dropped before anyone reads them, and the page says how many.
- Checks you can run. It suggests onetrace commands, each once; on your own console, the ones it can run get a Run button and every other a Copy button. A lead is confirmed or ruled out only by what those checks report.
- It leaves a record too. Each explanation is recorded as a onetrace run of its own, and checked like any other.
- You choose what's sent. To a model you configure, only when you press Explain. Before it first sends a kind of item to an endpoint, it names those kinds and waits for Send, and "Show the packet" shows the exact bytes.
pip install onetrace-explain
Shown: the live demo's split comparison in onetrace-console 0.3.2: the short answer first, then the kept explanation, written once by claude-sonnet-4-6 and served as a file. The live demo shows four kept explanations and makes no network calls. See the split comparison's explanation on the live demo
The deterministic harness
Your model is non-deterministic. Your record of it shouldn't be.
onetrace wraps every step of an AI pipeline or agentic flow, model calls included, in a fixed, byte-exact record. The model still behaves like a model. Everything around it becomes something you can check, compare and audit.
request
pinned in
data · prompt
model · version · settings
recorded out
digest of every output
your release gate
ship only what matches, review what changed
Variation is allowed
The model can stay probabilistic.
Variation is caught
Any change shows up as a different digest.
Variation is located
The first difference, named, and checkable in your CI.
The model itself is not made deterministic. What is deterministic is the record around it.
Deterministic where it can be. Honest where it can't.
Re-run and checked
Retrieval, ranking and prompt building can be re-run from their recorded inputs, and onetrace tells you which ones reproduce.
Recorded, never faked
A model call is kept exactly as it happened and marked as not re-runnable. It's reported as "could not check", never quietly passed.
Pinned to the step
When two runs disagree, the change is pinned to the step where it happened, so you know whether the data, the prompt or only the model moved.
Auditable and governable
From evidence to a decision you can defend.
Every agentic run leaves a record an auditor can check on their own. Every change can be held against an approved baseline before it ships, with the step that changed named for the reviewer.
1 · Run
Your pipeline or agent runs. Every step writes a receipt.
2 · Verify
onetrace-verify checks the record with no network calls, trusting none of your code.
3 · Compare
onetrace diff against the approved baseline: one verdict per step.
Your coding agent can help you start.
Hand it the integration recipe. It adds onetrace to your pipeline, asks you what only you can answer, and reports back with test, verify and diff results for you to review.
Go deeper
Pick your level of detail.
The same product, explained three ways. Each page stands on the one after it.
What it does for you
The problem, the value and the product. You're here.
This page For developersAdd it and run it
Install, add two decorators, run, verify, compare, and open the console on your own runs.
Developer guide → For researchers and reviewersHow it works underneath
Receipts, the hash chain, the verifier, the five comparison verdicts and the published format.
The mechanism →New in 0.4
Read your runs where you already look.
Three new views of the same record. None of them changes a verdict.
In your tracing tools
onetrace export otel turns a run into one OpenTelemetry trace, a span per step. The trace is a view; the record stays the evidence.
Across many runs
onetrace drift lines up a series of runs and compares each with the first or the one before, with each step's time beside it.
With a suggested explanation
onetrace-explain asks a model you choose where to look, then checks every claim against the record. Labelled AI-generated, and it may be wrong.
Who it's for
Built for the people who get asked "why?"
Ship changes with confidence
Upgrade a model, a retriever or a prompt, then compare before and after, step by step.
From "something changed" to "this step changed" in one command.
Hand over a record, not a story
Give reviewers the run folder. They check it themselves, with no network calls, using a verifier that doesn't trust your code.
Evidence a third party can verify on their own.
Add it in minutes, remove it in seconds
Two decorators on the code you already have. Plain Python, LangChain, LlamaIndex and Langflow examples included.
No platform, no account, no data leaves your machine.
Honest by design
We tell you what it doesn't prove, too.
A record you can trust has to be clear about its limits. onetrace says these out loud, in the product and in the docs.
It doesn't judge truth
A pipeline that faithfully records a wrong answer still verifies. onetrace shows what ran, not whether the answer was right.
"Same" means same output
A step marked same produced identical output. If its tool or settings changed, that's flagged separately, never hidden.
Not checked is not passed
When something couldn't be checked, onetrace says so plainly. It never reports a gap as a pass.
See it on real runs in one click.
The live demo is the real console, read-only. Or install it and point it at your own pipeline.
