Repository navigation
Remote Ingest
Experimental: this works and is tested, but may change and gets less hardening than the stable core.
An agent on another machine (a CI runner, a batch worker, a framework running elsewhere) talks to a v2 signer over its
HTTPS transport: each call is one POST /v2/rpc, authenticated again on every request. The signer signs, chains and
checkpoints as it does for a local caller; the client holds no key.
signer.yaml, the http section (see tracekit/transport/http.py):
http:
listen: 0.0.0.0:8443
cert: tls/fullchain.pem
key: tls/privkey.pem
authenticators: [token] # also k8s_sa, mtls
tokens: tokens.json # named tokens, managed below
authorize: # + approval_list for the TypeScript OpenAI Agents and Vercel AI adapters
"token:*": [register_run, decide, approval_consume, complete, close_run, model_event, approval_request, approval_wait,
state_write, status, read, observe, constraint_add] # observe, constraint_add: the coding-agent hooks
tenants:
"token:build-agent": acme # or give the token a tenant with --tenanttracekit signer token add build-agent --ttl 30d --config signer.yaml # prints the token once
tracekit signer token list --config signer.yaml # names, tenants, created, expires, revoked
tracekit signer token revoke build-agent --config signer.yaml
tracekit signer serve --config signer.yaml- A token is the identity
token:<name>. Names are 1-64 ofa-z 0-9 _ -(never:, neverdevorhttp); a name is never reused, so a new token always gets a new name. - The tokens file keeps a salted hash of each token with its created and expiry times, never the token. Every token
expires (
--ttl, default 30 days); an expired or revoked token is refused from its next request. The signer reads the file on every request: adding, revoking or rotating a token needs no restart. - What a token may call comes from
authorize; its tenant fromtenants, else the token's--tenant, elsetenant. - Failed authentications are limited per source address and in total. Past an address's limit its requests are refused
before their credential is looked at; past the total limit failures are refused as over it, but a valid credential
still gets in.
tracekit_signer_auth_failures_totalon the metrics port counts them. A refusal carries the error only: no sequence number, hash or run id.
echo "$TOKEN" > /etc/tracekit/token
tracekit init --remote https://tracekit.example:8443 --v2 --token-file /etc/tracekit/token --ca signer-ca.pemThis wires the v2 Claude Code hooks to the remote signer and prints the environment SDK clients need:
TRACEKIT_SIGNER (the URL), TRACEKIT_SIGNER_TOKEN_FILE (read on every call: rotate by rewriting the file) and
TRACEKIT_SIGNER_CA (the CA the signer's certificate must chain to). The hooks record each prompt (observe) and send
the live constraints it states (constraint_add): without both grants the hook reports an error at each prompt,
records none and holds no constraint.
| Property | Local caller | Remote caller |
|---|---|---|
| Signed, chained, checkpointed by the signer | yes | yes |
Identity in run.registered
|
uid:<n> |
token:<name> (or k8s_sa:, mtls:) |
signer_isolation |
same-user / separate-user
|
remote, set by the signer from the transport |
| Run access | the run's capability token | the same: a run token is bound to the identity that registered the run, so one remote client cannot write another's runs |
| Trust in the content | what the agent chose to send | the same |
A compromised remote agent can lie in the calls it sends and nothing proves it sent all of them; it cannot write another identity's runs, forge signer records (gaps, tamper, checkpoints, approvals) or read records outside its scope.
tracekit ingest (the v1 ingest gateway) is deprecated and is removed in tracekit 0.5; it prints a warning when run.
| v1 | v2 |
|---|---|
tracekit ingest token NAME --home H |
tracekit signer token add NAME --config signer.yaml |
| tokens never expire |
--ttl, default 30 days; token revoke
|
tracekit ingest serve ... |
the signer's http section; no separate gateway |
tracekit init --remote URL --token-file F |
the same with --v2 (and --ca) |
runs remote:<client>:<run>, source sdk
|
runs registered by the identity token:<name>, isolation remote
|
POST /v1/rpc, /v1/traces
|
POST /v2/rpc; OTLP on /v1/traces with otlp configured (docs/otel.md) |
Steps: add the http section and one token per client to the signer, run tracekit init --remote ... --v2 on each
client machine, move SDK code to tracekit.sdk.client (the v2 client), then stop tracekit ingest serve. Bundles of
runs already ingested by the v1 gateway keep verifying.
Generated from docs/ at v1.4.1. Edit the docs in the repository, not here.
Get started
- Quickstart: the v2 signer
- Quickstarts
- Quickstart: Claude Agent SDK
- Quickstart: a custom agent
- Quickstart: LangChain and LangGraph
- Quickstart: MCP client
- Quickstart: OpenAI Agents SDK
- Coding agents other than Claude Code
- tracekit doctor
- Walkthrough: Tracekit end to end
How it works
- How Tracekit works
- Overview
- The life of a tool call
- The evidence format
- Verification and assurance
- Witnesses and monitoring
- Policy
- Approvals
- Detection and containment
- Capture and completeness
- Custody
- Provenance and tracekit why
- Deployment and isolation
- Storage, durability and performance
- Integrations
- Security model
- Architecture
- tracekit why: architecture
Integrations
- Integrations
- Adapters
- OpenTelemetry
- Remote clients
- Kubernetes agent-sandbox
- agentgateway
- agentsh and Tracekit
- Browser Use
- Claude Agent SDK
- Claude Code's sandbox
- Codex's sandbox
- CrewAI
- Docker MCP Gateway
- E2B
- Falco
- Gemini CLI's sandbox
- Google ADK
- Haystack
- LangChain v1
- LiteLLM
- LlamaIndex
- MCP client
- microsandbox
- Microsoft Agent Framework
- OpenAI Agents SDK
- NVIDIA OpenShell
- Pydantic AI
- sandbox-runtime's proxy on its own
- Strands Agents
- Tetragon
- Vercel AI SDK
- Wassette
Policy and approvals
- Policy reference
- Approvals
- Findings
- Reading the model's reasoning
- Incidents and containment
- Webhooks
Deploy and operate
- Deploying the signer
- The signer as a container
- The signer on Kubernetes
- The compose stack
- Identity
- Tool executor
- MCP gateway
- LLM gateway
- Egress observation
- Witnesses
- Log monitor
- Record-key issuer
- Signer observability
- Viewer
- tracekit why: causal investigation and replay
- Migrating
- Platforms
Verify the evidence
- Reading a v2 verify report
- Evidence format v2
- Auditor guide
- Sample evidence bundle
- Signing
- What Tracekit guarantees
Security and privacy
- Threat model: the v2 signer
- Threat model: the v1 laptop signer
- HTTP security checklist
- Threat-model review packet
- Privacy
- Known limits and trade-offs
- What's stable
Compliance
- Compliance mapping
- EU AI Act
- ISO/IEC 42001
- NIST AI RMF and the Generative AI Profile
- OWASP Top 10 lists for LLM and agentic applications
Evaluation
Demos
- Demos
- Agent approvers within bounds
- Completeness and tamper evidence
- Detection and containment
- Network coverage: an egress observer
- Guardrails: allow, deny, or ask a person
- MCP tools, gated and recorded
- Prompt injection held by provenance
- Why: which input caused the action
Help