Repository navigation
Migration
Two moves: from the v1 signer (tracekitd, tracekit init --dev) to the v2 signer on the same laptop, and from a
laptop signer to one on a server. Neither rewrites evidence: every bundle you already have keeps verifying with the
key or trust config it verified with before (I8 in the threat model).
v1 (tracekit init --dev) |
v2 (tracekit init --dev --v2) |
|
|---|---|---|
| Signer |
tracekitd, home ~/.tracekit-signer
|
tracekit signer serve --dev, started by the first client (quickstart) |
| Claude Code hook |
tracekit.hook; the hook evaluates the policy |
tracekit.integrations.claude_code; the signer evaluates the policy over the raw arguments (policy) |
| Policy | tracekit/policy/default.yaml |
the coding pack, tracekit/policy2/packs/
|
| Approvals |
tracekit pending, tracekit approve
|
tracekit approvals list, tracekit approvals approve <id>, bound to the exact arguments (approvals) |
| Export | tracekit export --last -o run.tkb |
tracekit export --v2 --run <run id> -o run.tkb |
| Verify |
tracekit verify run.tkb --key signer.pub (or --witness) |
tracekit verify run.tkb --trust trust.json (verdicts) |
| Bundle | v1 .tkb: one hash chain over the whole ledger |
format v2: a per-run chain with inclusion proofs into a checkpointed Merkle tree |
Export the v1 runs you will need as bundles while tracekitd is still set up:
tracekit export --last -o last-v1-run.tkb # repeat with --run ID for each run you need
tracekit uninstall # removes the v1 hooks and stops tracekitd
tracekit down # if a v2 dev signer is running
tracekit signer bridge --v1-home ~/.tracekit-signer --dev
tracekit init --dev --v2 # the v2 Claude Code hooks
tracekit doctortracekit signer bridge continues the v1 ledger in the v2 log (format v2 §12): it
appends a format_upgrade gap and the v1 key's retirement to the v1 ledger, makes them the first record of the v2
log, and overwrites and deletes the v1 signing key (signer.pub stays). Run it as the owner of the v1 home, with no
tracekitd running on it. It must be the v2 log's first record: if the dev signer has already recorded something,
the bridge refuses, and the two logs simply stay separate.
A v2 bundle can then prove it continues that v1 ledger:
tracekit signer trust -o trust.json
tracekit export --v2 --run <run id> -o run.tkb
tracekit verify run.tkb --trust trust.json \
--v1-ledger ~/.tracekit-signer/ledger/ledger.jsonl --v1-key ~/.tracekit-signer/ledger/signer.pubThe report's format bridge line passes when the v1 chain verifies up to the bridge, ends in the retirement of the
v1 key, and has no record after it.
They don't change. Verify them as before with the frozen v1 verifier:
tracekit verify last-v1-run.tkb --key ~/.tracekit-signer/ledger/signer.pub. Keep signer.pub (and any witness
clone) with them.
A signer's log can't be moved, merged or re-signed: the server signer starts a new log with its own keys, and the laptop's log stays what it was. What moves is your agents' configuration.
-
Export what you need from the laptop signer, and keep its trust config:
tracekit signer trust -o laptop-trust.json, thentracekit export --v2 --run <id>per run (or--run-setfor a tenant's whole run-set). Its bundles keep verifying againstlaptop-trust.jsonfor good, at the assurance they had (devfor a dev signer). - Deploy the server signer in one of the modes of the deployment guide: sidecar, central or compose.
-
Keys. Let the server signer make its own. Never copy a laptop key to the server: in dev mode the agent's user
could read it, so nothing it signs later proves anything. For a central signer, put the log key in a KMS
(
log_key: {aws_kms: {key_id, region}}) and certify short-lived record keys with the issuer; a sidecar keeps file keys on its own volume (Kubernetes). -
Witnesses. Add at least one witness the operator doesn't run (
witnesses:in signer.yaml, witnesses), and forwitnessed+monitoreda monitor on a host the operator doesn't control. -
Trust configs. Write the new one with
tracekit signer trust -o server-trust.json. An auditor builds theirs from independent sources instead (auditor guide). A trust config pins a list of logs, so one file can hold both the laptop's and the server's log keys; the laptop's bundles still readAssurance: dev. -
Point the agents at it. The code doesn't change: set
TRACEKIT_SIGNERto the socket (sidecar) or the HTTPS URL (central, compose), withTRACEKIT_SIGNER_TOKEN_FILEandTRACEKIT_SIGNER_CAfor token identity. For Claude Code:tracekit init --remote https://signer.example:8443 --v2 --token-file /etc/tracekit/token --ca signer-ca.pem(remote clients). -
Check it.
tracekit doctor --config signer.yamlon the signer host (andtracekit doctor --k8sin a pod), then export and verify one run againstserver-trust.json.
| Bundle | Verify with |
|---|---|
| v1, from tracekitd |
tracekit verify run.tkb --key signer.pub (or --witness), the frozen v1 verifier |
| v2, laptop log | tracekit verify run.tkb --trust laptop-trust.json |
| v2, laptop log bridged from v1 | the same, plus --v1-ledger ledger.jsonl --v1-key signer.pub to check the bridge |
| v2, server log |
tracekit verify run.tkb --trust server-trust.json (plus --monitor-report, --revocations with an issuer) |
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