Exalto Capture
Section
Docs
Page
Trace packages
For agents
/docs/trace-packages.md
Log
006 / 007
DocsTrace packages

Seal and verify.

Turn one encrypted capture into a portable evidence package, inspect its canonical OpenTelemetry trace, and verify the entire package offline.

Seal one interaction#

Select a Captured Trace in the native app, local dashboard, command line or administration API. The service atomically commits trace-packages/<trace-id>.llmtrace, records that exact package in Trace metadata, and retains the encrypted source capture.

capture traces seal trc-example --wait
POST /v1/traces/{trace_id}/notarizations

Sealing is asynchronous. Without --wait, the response carries an op-… operation identifier; poll GET /v1/operations/{operation_id} until its state is succeeded, failed or interrupted.

  1. Select a compatible notary

    Hosted use refreshes the Exalto Seal Registry, selects a worker compatible with the capture, and checks the resulting evidence against locally pinned key history. For local or self-hosted use, set notary.endpoint and notary.public_key together in config.toml.

  2. Open a fresh session

    The original provider stream and proxy no longer need to be running. A new notary session using the compatible signing identity can finish the work from the encrypted local capture.

  3. Commit the package

    The service writes the package atomically, records its exact identity, and keeps the private capture so the operation remains retryable.

Follow the evidence boundary#

Trace anatomy

What changes when a Trace is sealed?

01Provider interaction
02Local encrypted capture
03Ready to seal

Private retry state on this device. Nothing here is independently verifiable yet.

capture.llmcapturePrivate

Vault-encrypted request, response, and deferred TLS state

Authenticated HTTPPending

Created only when this Trace is sealed

trace.otlp.jsonPending

No portable OpenTelemetry evidence yet

Portable packageNone

The Trace remains local and unshared

Captured is sensitive, private retry state. Sealed is the portable state: authenticated TLS evidence, disclosed HTTP bytes, deterministic OpenTelemetry, and a manifest that binds the archive together.

Inspect the package#

<trace-id>.llmtrace (ZIP)
├── archive-manifest.json
├── evidence.tlsn
├── manifest.json
├── request.disclosed.http
├── response.disclosed.http
└── trace.otlp.json
ArtifactResponsibility
archive-manifest.jsonDefines the deterministic archive format, ordered entry sizes and hashes, and package digest.
evidence.tlsnCarries the cryptographic TLSNotary evidence and notary signature.
request.disclosed.httpContains authenticated request bytes selected for disclosure. Header values are hidden except the structural value Transfer-Encoding: chunked; the body remains disclosed.
response.disclosed.httpContains the authenticated provider response, including streamed events. Header values follow the same default-deny rule; the body remains disclosed.
trace.otlp.jsonMaps authenticated bytes deterministically into OpenTelemetry GenAI data, including text, model-emitted tool calls, correlated tool results, model, and usage.
manifest.jsonRecords versioned source metadata and the trace hash. The cryptographic signature lives in evidence.tlsn, not in this JSON file.

The .llmtrace package carries all cryptographic evidence and can be verified independently. A shared Trace is a readable view derived from that package and retains the exact admitted bytes for export and independent verification.

Verify a portable package#

Use the local CLI to verify on your machine, or upload the package at seal.exalto.ai/verify. The hosted page checks a .llmtrace file without saving it. The CLI accepts either a Trace held by the local service or a .llmtrace file.

capture --json traces verify trc-example
capture --json traces verify ./capture.llmtrace

The result's outcome is passed, failed or unsupported, with verified_at_unix_ms, notary_key_id, trust_source and, on failure, a failure_code. Report exactly that; opening a package is not verifying it.

The same check is available without installing anything. Send the package bytes to the hosted verifier and read verified, the authenticated provider and host, authenticated_at_unix_ms, notary_key_id, trust_source and the package and content digests:

curl -fsS https://api.exalto.ai/api/verify \
  -H 'Content-Type: application/vnd.exalto.notary.trace-package+zip' \
  --data-binary @capture.llmtrace

For a Trace already held by the local service:

GET /v1/traces/{trace_id}/package.llmtrace
POST /v1/traces/{trace_id}/verify

Verification checks:

  • The notary signature and expected notary public key.
  • The authenticated provider identity and TLS evidence.
  • The disclosed HTTP bytes against the cryptographic evidence.
  • Every artifact hash named by the package manifest.
  • The deterministic, versioned OTLP mapping byte-for-byte.

Offline trust#

Verification does not contact the provider or a live notary. It uses the notary key history already cached by the service, or notary.public_key for a self-hosted endpoint. A hosted service must successfully refresh its Registry before it can trust previously unseen evidence.

Review before sharing#

A .llmtrace can include system context, tool definitions, session metadata, prompts, responses, and tool results. All HTTP header values are hidden by default, but request and response bodies remain disclosed. Inspect the package before sharing it. The encrypted .llmcapture is private retry state and must stay local.

Search the docs