“Why was I refused?”
Someone affected by an adverse decision asks what it was based on, and asks for a person to look again.
One signed decision record for every order, claim, applicant or deployment your AI agents touch. Kept in custody anyone can check, and ready to hand over when a customer, an auditor or a regulator asks.
Works with what you already run
no account · no network · no trust in Stratl
independent checkson a full evidence bundle, each reported on its own
hour, at most,before records are sealed under a Merkle root and timestamped
languages, one hash.Python, TypeScript and Go agree on every record
Stratl services neededto verify a record. No account, no network
An agent refunds an order, declines an applicant or changes production in seconds. The question about it comes weeks or months afterwards, from someone who was not in the room: show me what happened.
Someone affected by an adverse decision asks what it was based on, and asks for a person to look again.
Every adverse decision in a period, which controls ran on each, who approved what, and what each person was told.
After something breaks, the account has to come from somewhere other than the agent that broke it.
A tribunal ordered an airline to honour a refund its website chatbot had described and its real policy did not offer. The airline argued the chatbot was responsible for its own words. The tribunal disagreed.
Moffatt v. Air Canada, 2024 BCCRT 149A US federal court let claims proceed against a software vendor over its automated applicant screening, on the theory that the vendor acted as an agent of the employers using it.
Mobley v. Workday, Inc., N.D. Cal., order of 12 July 2024A coding agent deleted a company's production database during a declared code freeze, then gave its operator an inaccurate account of what it had done.
Reported publicly by the affected company and acknowledged by the vendor, July 2025Capture it from the tools you already run. Keep it somewhere nobody can quietly change it. Hand it over in a form that stands on its own.
A few lines with the SDK, or forward the OpenTelemetry traces you already emit. If Stratl is unreachable the SDK spools locally, so your agent never waits on us.
with stratl.decision(agent="support-bot", subject=("order", "48213")) as d: d.model("openai", "gpt-5", prompt, response) d.policy("refunds_above_100_require_approval", version=7, result="human_required") d.approval(required=True, approver="priya@example.com", decision="approved") d.action("refunds.issue", target="order/48213", result="executed")
People ask about an order, a claim or an applicant, never a trace id. Records are found the same way.
Each workspace gets its own signing key, created inside AWS KMS. Stratl can ask for a signature. It cannot read, copy or delete the key.
Pending records are committed to one Merkle root and the root is signed, so a missing or altered record shows.
Each checkpoint is stamped by an independent RFC 3161 authority that is neither you nor Stratl.
A bundle carries its own key and proof. The verifier runs from the command line or inside your browser tab, and never calls Stratl.
Everything served is built from fields in the record, and says where each statement came from.
Each one uses a published standard, so a third party can check the result with their own tools and does not have to take our word for any of it.
The record is serialised one exact way, so it produces the same bytes in any language.
RFC 8785Those bytes are fingerprinted. Three implementations are tested to agree.
SHA-256AWS KMS signs with a key that was created inside KMS and cannot leave it.
ES256 · ECDSA P-256Each record names the hash of the one before, so a gap or reorder is visible.
per-workspace hash chainEvery hour the pending records are committed to one Merkle root, and the root is signed.
RFC 6962An authority that is neither you nor Stratl stamps the signed checkpoint.
RFC 3161A Stratl bundle carries everything needed to check it. The verifier needs no account, no network connection and no trust in Stratl.
“Signature valid” is never folded into “chain complete”. If one fails, you see which.
Prompts and payloads in the bundle are fingerprinted again and compared with the record.
Every signature is made by AWS KMS and written to AWS CloudTrail.
A system of record earns its place by being narrow. These are choices, and they will stay that way.
Your model and tool traffic never flows through Stratl. There is nothing of ours to add latency or take your agents down.
It does not block, approve or route what an agent does. It records that your policy ran, what it returned and who approved.
No latency charts, token costs or prompt playgrounds. Keep the tools you have. Stratl reads from them.
Framework coverage shows which fields a framework asks for and which a record lacks. It names gaps. It certifies nothing.
Wrap a decision in a context manager, or forward traces you already emit. Records are signed and stored after the fact, so nothing sits in the hot path.
Every adverse decision in a period, the controls that ran, the notice each person received and what is missing, in a form an outside party can verify.
Give a customer's security review a verifiable account of what your agent did on their behalf, which they can confirm without trusting you or us.
Early access is open to a small number of teams. Create a workspace, record a decision from the agent you already run, and verify it yourself in under an hour.