Governance for autonomous agents. Intercepts every action, enforces policy, writes tamper-evident receipts.
Project description
transient-trace
Governance for AI agents. Every action an agent takes — subprocess calls, tool use, network requests — is evaluated against a policy and recorded as a tamper-evident, cryptographically signed receipt before it executes.
Part of Transient, the trust infrastructure for autonomous agents.
Install
pipx install transient-trace
pipx installs into an isolated environment and puts the transient-trace binary on PATH permanently. If you don't have pipx: brew install pipx && pipx ensurepath.
Upgrade
pipx upgrade transient-trace
Quickstart
The fastest path to governed agents is the wrap command. It installs a persistent shim so every invocation of the binary goes through governance automatically, with no prefix required.
transient-trace wrap install claude --auto-rc
source ~/.zshrc
Every claude invocation is now governed with a full receipt trail.
transient-trace wrap status
transient-trace receipts list --since 30m
transient-trace receipts summary --since 1h
How it works
transient-trace sits between your agent and the operating system. Every action passes through the governance layer before it executes — including calls that use absolute binary paths or run inside nested subprocesses.
No changes to your agent framework required. Works inside Claude Code, LangChain, custom harnesses, and raw Python out of the box.
Enforce a policy
By default, transient-trace runs in audit mode — records everything, blocks nothing. To enforce a policy, switch to strict mode:
cat > my-policy.json << 'EOF'
{
"version": 1,
"defaultAction": "deny",
"rules": [
{ "id": "allow-git", "action": "allow", "actionClasses": ["read", "write_low"] },
{ "id": "allow-anthropic", "action": "allow", "actionClasses": ["network"],
"hosts": ["api.anthropic.com"] }
]
}
EOF
transient-trace run --mode strict --policy "$(cat my-policy.json)" claude -p "..."
Or set strict mode as the permanent default:
transient-trace config set mode strict
Python SDK
For direct integration into Python agents:
from transient_trace import Client
client = Client({
"agentId": "my-agent",
"mode": "permissive",
"packages": ["shell"],
})
result = client.executeActionWithReceipt(
lambda: {"ok": True},
{"target": "resource-1", "action_class": "write_low"}
)
print(result["receipt"]["receipt_id"]) # TR-...
print(result["receipt"]["signature"]["alg"]) # Ed25519
print(result["decision"]["outcome"]) # allow
If policy returns deny, raises RuntimeError: Denied: <reason_code>.
Receipts
Every governed action produces a signed receipt:
{
"receipt_id": "TR-01KPHGWX7C7A2BQYJKX93YP59Q",
"execution_status": "executed",
"event_snapshot": {
"action_class": "x.read",
"matched_rule_id": "x-read-allow",
"matched_rule_reason": "x-governance/social-listening: read allowed."
},
"signature": {
"alg": "Ed25519",
"sig": "xRVLkN4r1hNy..."
}
}
Receipts are tamper-evident. The event snapshot is hashed with SHA-256 and signed with Ed25519 before write. Signatures are cross-verifiable between the Python and TypeScript SDKs.
Governance packages
Governance packages are pre-built rule sets you can drop into any project:
client = Client({
"agentId": "my-agent",
"packages": ["shell", "filesystem", "web"],
})
Available packages map to OWASP Agentic Security Initiative threat categories:
| Package | Covers |
|---|---|
shell |
Inline interpreter execution |
filesystem |
Destructive file operations |
web |
Outbound HTTP and SSRF |
code |
Git push, package installs, supply chain |
privilege |
sudo, su, chmod escalation |
messaging |
Outbound message delivery |
Further reading
Transient — full product docs, Recall, Intelligence, receipt bus
ATP 1.0 — the open protocol specification underlying every receipt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file transient_trace-0.1.0a9.tar.gz.
File metadata
- Download URL: transient_trace-0.1.0a9.tar.gz
- Upload date:
- Size: 174.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e14b4461caeac9c6e0b9fd5b3302919c9041f577e050277ea58e11015da1d13f
|
|
| MD5 |
82ca46497e8e86479805d65250b28836
|
|
| BLAKE2b-256 |
75260a241cdc162363deda3f51bf21a6468132281e7d7d09131178e8957e60ae
|
Provenance
The following attestation bundles were made for transient_trace-0.1.0a9.tar.gz:
Publisher:
publish.yml on james-transient/transient-trace
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transient_trace-0.1.0a9.tar.gz -
Subject digest:
e14b4461caeac9c6e0b9fd5b3302919c9041f577e050277ea58e11015da1d13f - Sigstore transparency entry: 1349542753
- Sigstore integration time:
-
Permalink:
james-transient/transient-trace@994966111082c51927949ac3062931484e52ca47 -
Branch / Tag:
refs/tags/v0.1.0a9 - Owner: https://github.com/james-transient
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@994966111082c51927949ac3062931484e52ca47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file transient_trace-0.1.0a9-py3-none-any.whl.
File metadata
- Download URL: transient_trace-0.1.0a9-py3-none-any.whl
- Upload date:
- Size: 109.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6fd068665cd403e57b318792f2524b1921a60dcd6606ef0d1185f8ac019bb33
|
|
| MD5 |
b6fc032d80fe2936baafa6fcf8e4bd3e
|
|
| BLAKE2b-256 |
adb1d1665ce850281fe9434a6272b7e794d3ae7a485da78e84a9a7a5b316bd10
|
Provenance
The following attestation bundles were made for transient_trace-0.1.0a9-py3-none-any.whl:
Publisher:
publish.yml on james-transient/transient-trace
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transient_trace-0.1.0a9-py3-none-any.whl -
Subject digest:
b6fd068665cd403e57b318792f2524b1921a60dcd6606ef0d1185f8ac019bb33 - Sigstore transparency entry: 1349542870
- Sigstore integration time:
-
Permalink:
james-transient/transient-trace@994966111082c51927949ac3062931484e52ca47 -
Branch / Tag:
refs/tags/v0.1.0a9 - Owner: https://github.com/james-transient
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@994966111082c51927949ac3062931484e52ca47 -
Trigger Event:
push
-
Statement type: