Open-source TypeScript agent framework
Build agents you can hold to the record.
An agent framework that compares the model’s claims with what actually ran, during the run. You choose the checks and what happens next.
Scroll to see how
It sounds sure. What is it standing on?
A customer asks about a refund and gets one confident sentence. Fact, or hunch?
A careful person keeps a ledger.
Which book they opened, why, and what they found. Now anyone can check the work.
An LLM’s tools are its books. Where is its ledger?
It read two sources, and its answer tells you nothing about them.
Most frameworks log this for you.
Usually in a dashboard, for your team, after the answer has gone. Guardrails can block an answer, but connecting them to this evidence is your job.
Turn the checks on, and the answer has to stand.
You choose which checks run. Each one follows the same five steps.
- S
State the rules.
Tools mark their facts and say what they searched. You say which answer field reports which fact. All before the model sees anything.
State the rules, so the run can be held to them.T
- T
Trace the run.
FootprintJS, the engine underneath, writes a note at every step and links it to the notes behind it, so you can walk back from any answer. The model’s words go in as claims, never as evidence.
Trace the run, so there is a record the model did not write.A
- A
Assess the claims.
Code compares what the model said with what the record holds. No model judges it.
- A
Every check is this same comparison.
Invented values. The wrong time window. An action that never ran. “Not found” stretched past what was searched.
Assess each claim, so you can see where it differs from that record.N
- N
Name the standing.
One of five words, with its reason. Not a percentage.
- N
Read from the record.
Never from how sure the model sounded. The saved record gives the same standing later.
Name the standing, so nobody has to guess how far the answer stands.D
- D
Decide what happens.
Flag it, name the problem back to the model for one more turn, ask the person, or withhold it. A contradiction is never re-asked, because that would invite the model to change the claim, not the facts.
- D
Structured answers wait at the gate.
A structured answer with your check holds back until the checks finish. Streamed text still goes first, and its standing arrives right after, for your app to show.
- D
Your user can see why.
What it checked, what it did not, and who vouches for each line. Written from the record, never by a model.
Decide what happens, because the policy is yours.
The record is not the world.
A false sentence built from real values can pass. Honest, here, means a claim stays within its evidence, not that it is true.
Each step makes the next one possible.
Take one away and the answer has less to stand on.
FootprintJS keeps the notes. AgentFootprint holds the model to them.
It holds claims to the record, not to the world.