How it works

From an agent's decision to evidence, in four stages.

Each stage is built on a published standard, and none of them sits in the path of your agents. This page describes what runs today. What is still missing is on the early access page.

One decision, end to endorder / 48213
  1. Capture

    From an SDK, OpenTelemetry, Langfuse or the Anthropic Compliance API.

    model_call · tool_call orders.read · approval priya@example.com
  2. Record

    One decision record per business subject.

    DEC-01J8ZK3Q… · order/48213 · 7 events · observed
  3. Custody

    Hashed, signed in AWS KMS, chained, sealed, timestamped.

    sha256:4a030b51… · ES256 · chain #1 · checkpoint #1
  4. Serve

    Bundles, notices, coverage and period packs.

    DEC-01J8ZK3Q….stratl.zip · Record integrity: VALID
01 · Capture

Start from what you already emit.

Stratl collects from capture points you already have. There is no gateway to deploy and nothing to put in front of your models.

import stratl

with stratl.decision(
    agent="support-bot",
    subject=("order", "48213"),
    agent_version="2026.09.1",
) as d:
    d.input(ticket)
    d.model("openai", "gpt-5", prompt, response)
    d.tool("orders.read", {"order_id": "48213"}, order)
    d.policy("refunds_above_100_require_approval", version=7, result="human_required")
    d.approval(required=True, approver="priya@example.com", authority="support_lead",
               decision="approved", identity_provider="okta")
    d.action("refunds.issue", target="order/48213", result="executed")
    d.outcome(adverse=False, category="refund")

Whatever you pass in is fingerprinted on your side. The record carries the fingerprints; the originals are uploaded to the custody bucket so they can be re-hashed later. If Stratl cannot be reached, the record is spooled to disk and sent on the next run.

Capture pointRecorded as
  • Python SDK

    Context manager. Spools to disk offline.

    observed
  • TypeScript SDK

    Async function wrapper.

    observed
  • OpenTelemetry

    GenAI traces, OTLP with JSON encoding.

    observed
  • Langfuse

    Pulled on a schedule.

    observed
  • Anthropic Compliance API

    Pulled on a schedule.

    observed
  • Stratl's own workflow

    Approving a notice, a reconsideration.

    enforced
Your agentModels and tools
The request path. Stratl is not on it, so it cannot slow your agent down or take it offline.
Your agentStratl
After the decision. The SDK submits the record, and spools it locally if Stratl cannot be reached.
02 · The record

Eight kinds of event. Click through one decision.

The Stratl Record Format is small on purpose. It holds what a reviewer needs to reconstruct a decision, in the order it happened.

What came ininput

The request that started the decision, kept as a fingerprint. The original goes to the custody bucket if you send it.

{
  "seq": 1,
  "type": "input",
  "at": "2026-09-17T14:31:02.000Z",
  "hash": "sha256:5e884898da28047151d0e56f8dc62927…"
}

Lets a reviewer confirm which request led to this decision without Stratl indexing its content.

Try it: this is what Stratl keeps instead of your contentruns in your browser
sha256:…

Change one character and the whole fingerprint changes. The text cannot be recovered from it.

Observed

Stratl received these events. The application could, in principle, have bypassed its own instrumentation.

SDKs · OpenTelemetry · pulled traces

Attested

The source signed or sealed its own log before Stratl received it.

signed or sealed source logs

Enforced

The action could not have happened without passing the control point that recorded it.

Stratl's notice and reconsideration workflow

Stratl never raises a level. A record captured as observed stays observed, however it is stored afterwards. Being exact about this is the point.

03 · Integrity

Six steps between an event and evidence.

Each step 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.

Canonicalise

Serialised one exact way, so the same record gives the same bytes in any language.

RFC 8785

Hash

Those bytes are fingerprinted. Python, TypeScript and Go are tested to agree.

SHA-256

Sign

AWS KMS signs with your workspace's key. Every signature is checked before anything is written.

ES256 · RFC 7638

Chain

Each record names the hash of the one before it, so a gap or reorder shows.

per-workspace chain

Checkpoint

Every hour, or every thousand records, one signed Merkle root commits them all.

RFC 6962

Timestamp

An authority that is neither you nor Stratl stamps the checkpoint. Failures are retried.

RFC 3161
04 · Custody

Where everything lives, and what Stratl cannot do.

You choose a custody region when you create a workspace. Your signing key is created there and your records are stored there, and neither one moves afterwards.

AWS KMS · your region

Signing keys

One per workspace, created inside KMS and not exportable. Every signature is logged by AWS CloudTrail.

Amazon S3 · your region

Records and checkpoints

One prefix per workspace. Every version of every object is kept. A retention lock can make versions undeletable for a set period.

Amazon S3 · your region

Original content

Prompts, responses and payloads you choose to send, stored under their own fingerprint so they can be re-hashed against the record.

PostgreSQL · one location

Search index

Fingerprints and metadata only: subjects, agent names, outcomes, timestamps. It is shared infrastructure and is not in your custody region.

Stratl's service can

  • Ask KMS to sign with your workspace's key, and read the public key.
  • Write records, checkpoints and content under your workspace's prefix.
  • Read them back to build the bundles and reports you ask for.

Stratl's service cannot

  • Export, copy or read any signing key.
  • Delete or disable a key, or change its policy.
  • Delete a stored object. Writing again keeps the earlier version.
  • Put raw content into the search index.

Or take custody: your own bucket and your own key, on AWS, Google Cloud or Azure, from the Custody page. Stratl proves it can sign, write and not delete before anything moves, and the hand-over is a statement signed by both keys.

05 · Serve

Hand it over in a form that stands on its own.

The reason to keep records is to give them to someone. Everything Stratl serves is built from fields in the record and says where each statement came from.

Affected-person notice · exampledraft, awaiting approval

About your refund request for order 48044

Your request was declined.outcome.category

An automated system assessed it, and a member of our support team reviewed the result before it was final.events[5].approver

The main reason was that the item was returned after our 14-day period for a change of mind.events[4].rule

You can ask for a person to look at this again, and you can ask what information was used.pack: colorado_admt

Every sentence cites the field it came fromA person approves it before it is sent

Evidence bundle

The signed record, the key that signed it, the checkpoint with its timestamp, the originals and a manifest, in one archive that verifies offline.

Reconsideration

When a person reviews a decision again, the review, its reviewer and its result become their own record, linked to the original.

Framework coverage

Which fields the Colorado AI Act, the EU AI Act, ISO/IEC 42001, NIST AI RMF, the NAIC model bulletin and ECOA Regulation B ask for, and which are missing. Coverage, not certification.

Period pack

Everything for a date range in one archive with a signed manifest, for an audit or a regulator's request.

Questions

What engineers ask first.

What happens to my agent if Stratl is down?

Nothing. Stratl is never in the request path. The SDK submits after the decision is made, and if it cannot reach Stratl it writes the record to a local spool and sends it on a later run.

Do I have to send prompts and outputs?

No. The record only needs their fingerprints, which the SDK computes on your side. Sending the originals is optional. If you do, they are stored in the custody bucket under their fingerprint so they can be re-hashed later, and they never enter the search index.

What does "observed" mean for the weight of my evidence?

It means the events came from instrumentation inside your application, which could in principle have been bypassed. That is an honest description of most SDK and tracing data. The record says so, the verifier reports it, and Stratl never raises the level afterwards.

How is a record found months later?

By the business subject it was about: the order, claim, applicant or service. Every record carries a subject, and everything about that subject is listed together, including notices and reconsiderations.

Can I verify a record without installing anything?

Yes. The verifier is also compiled to WebAssembly and runs inside your browser tab on the Verify page. It performs the same checks as the command-line verifier, and neither one calls Stratl.

What if a signing key is rotated?

Each record and checkpoint carries the id of the key that signed it, and Stratl keeps every public key that has ever signed for a workspace. A record is always checked against its own key, so earlier records keep verifying.

Private early access · not generally available

See it on your own agent.

The fastest way to judge this is to record one real decision and verify it yourself. It takes a few lines of code and no sales call.