Repository navigation
Portability
| Linux | macOS | Windows | |
|---|---|---|---|
tracekit verify, export, replay, observer |
supported | supported | supported |
Dev mode (init --dev, same-user signer) |
supported | supported | supported (TCP + token) |
| System mode (signer as a separate OS user) | supported | experimental | not available |
| Caller attestation (who connected to the signer) | SO_PEERCRED |
LOCAL_PEERCRED + LOCAL_PEERPID
|
none: events are labelled unattested |
| Process-tree check for approvals | /proc |
ps(1) |
none: approvals are refused |
Harness binding (init --harness) |
system mode | not available | not available |
| Managed Claude Code settings | /etc/claude-code/ |
/Library/Application Support/ClaudeCode/ |
not wired up |
| Hooks via the Claude Code plugin | supported | supported | no (the wrapper is POSIX shell) |
The CI workflow runs the whole suite on Linux, macOS and Windows (Python 3.9, 3.12, 3.13). The macOS and Windows
jobs are continue-on-error, so a failure there is visible but does not block a merge. Two more Linux jobs block
merges: the root-only tests, and E8 (insider attacks against a real system-mode signer, docs/evaluation.md).
Tested locally:
- Linux, Python 3.11 to 3.13: the full suite, plus a real separate-user signer.
- macOS 26 on Apple silicon, Python 3.9.6: the full suite (174 passed, 5 skipped for Linux-only cases), the demo,
and a real
LOCAL_PEERCRED/LOCAL_PEERPIDlookup on a Unix socket.
Not tested on real hardware: macOS system mode (launchd, dscl user creation, which is unit-tested with mocks and
is why it needs --experimental-macos), Windows, and the Claude Code plugin loading inside a live Claude Code.
sudo tracekit init --experimental-macos --user "$USER"It creates a hidden _tracekit account (a free id in 200-399, shell /usr/bin/false), generates the signing key as
that account, writes /Library/LaunchDaemons/dev.tracekit.tracekitd.plist and loads it with launchctl bootstrap.
Things to check on first use, because they depend on the machine:
- The Python interpreter and the
tracekitpackage must be readable by_tracekit. A Python under your home directory is not, and the daemon will fail to start; look at/var/lib/tracekit/tracekitd.log. -
tracekit statusshould showsigner_isolation: separate-userand the ledger owned by_tracekit. - A quick isolation test:
echo x >> /var/lib/tracekit/ledger/ledger.jsonlas your own user must fail.
If any of that is wrong, please open an issue with the output. Until it has been validated on hardware the documentation treats macOS system mode as unproven.
Dev mode only. The signer listens on 127.0.0.1 with a random port and a token kept in the client config, since
Windows has no peer-credential call that Python exposes. Because the signer shares the agent's user, a Windows
deployment's evidence is only as strong as its witness: point --witness at a repository or share the agent's user
cannot rewrite (docs/witnesses.md).
3.9 to 3.13 are declared, and CI runs 3.9, 3.12 and 3.13. The LangChain adapter's tests need Python 3.10 or newer (LangChain's own requirement) and are skipped on 3.9.
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