Python SDK for Wytness — audit logging for AI agents with cryptographic signing and chain integrity
Project description
Wytness Python SDK
Audit logging for AI agents. Every action your AI agent takes is cryptographically signed, hash-chained, and streamed to the Wytness platform for compliance and observability.
Installation
pip install wytness-sdk
Quick Start
from wytness import AuditClient, audit_tool
# Initialize the client
client = AuditClient(
agent_id="my-agent",
human_operator_id="user-123",
)
# Decorate any tool your agent calls
@audit_tool(client=client)
def send_email(to: str, subject: str, body: str):
# Your tool implementation
pass
# Every call is automatically logged, signed, and chained
send_email(to="team@company.com", subject="Report", body="Weekly summary")
Features
- Response capture — AI agent responses are automatically captured, truncated to 5K chars, and PII-redacted
- PII redaction — emails, SSN, TFN, credit cards, and phone numbers are automatically redacted from responses and parameter values
- Cryptographic signing — every event is signed with Ed25519
- Hash chaining — tamper-evident chain of events per agent session
- Automatic secret redaction — secrets in parameter names are automatically redacted
- HTTP transport — stream events to api.wytness.dev over HTTPS
- File fallback — events are saved locally if the API is unreachable
HTTP Emitter (Recommended)
Send events directly to the Wytness API using your API key:
client = AuditClient(
agent_id="my-agent",
human_operator_id="user-123",
http_endpoint="https://api.wytness.dev",
http_api_key="aa_live_...",
)
API
AuditClient(agent_id, **kwargs)
| Parameter | Type | Default | Description |
|---|---|---|---|
agent_id |
str |
required | Unique identifier for the agent |
agent_version |
str |
"0.1.0" |
Version of the agent |
human_operator_id |
str |
"unknown" |
ID of the human overseeing the agent |
signing_key |
str|None |
None |
Base64-encoded Ed25519 private key (for serverless) |
signing_key_path |
str |
"./keys/signing.key" |
Path to Ed25519 private key (auto-generated if missing). Ignored when signing_key is set. |
http_api_key |
str|None |
None |
API key for HTTP endpoint |
http_endpoint |
str |
"https://api.wytness.dev" |
HTTP API endpoint URL |
fallback_log_path |
str |
"./audit_fallback.jsonl" |
Local fallback file path |
@audit_tool(client, task_id="default")
Decorator that wraps a function to automatically log audit events. Works with both sync and async functions. Captures:
- Function name, parameters (with secret redaction), and return value hash
- Response text (truncated to 5K chars, PII-redacted) — the function's return value as a string
- Execution duration, success/failure status, and error codes
- Cryptographic signature and hash chain link
client.session_id
Read-only property returning the UUID for this client instance.
client.flush(timeout=5.0)
Wait for pending HTTP requests to complete. Call before process exit in serverless/short-lived environments.
hash_value(value)
SHA-256 hash of any JSON-serialisable value. Use this when recording events manually to compute inputs_hash / outputs_hash.
from wytness import hash_value
result = my_tool(data)
outputs_hash = hash_value(result)
License
MIT
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 wytness_sdk-0.5.0.tar.gz.
File metadata
- Download URL: wytness_sdk-0.5.0.tar.gz
- Upload date:
- Size: 277.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 |
6f776ea588caf67375ef8afc3841b3d1ac49b834fe76c70e8bbb797916bd94cd
|
|
| MD5 |
5353312c422d9a951bc6cc489c79a3a5
|
|
| BLAKE2b-256 |
927164dbcc4fe22d963ca077befca7e145509ecdd1713ddce4f36481c6d40a3b
|
Provenance
The following attestation bundles were made for wytness_sdk-0.5.0.tar.gz:
Publisher:
publish-python-sdk.yml on imwickkd/wytness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wytness_sdk-0.5.0.tar.gz -
Subject digest:
6f776ea588caf67375ef8afc3841b3d1ac49b834fe76c70e8bbb797916bd94cd - Sigstore transparency entry: 1312282263
- Sigstore integration time:
-
Permalink:
imwickkd/wytness@530e85b465e2241d0f03232cb34276b729a4c3c5 -
Branch / Tag:
refs/tags/python-sdk-v0.5.0 - Owner: https://github.com/imwickkd
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python-sdk.yml@530e85b465e2241d0f03232cb34276b729a4c3c5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wytness_sdk-0.5.0-py3-none-any.whl.
File metadata
- Download URL: wytness_sdk-0.5.0-py3-none-any.whl
- Upload date:
- Size: 15.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 |
3736f1b89a4bf206aa93604bc43d4bc1df6dab8be776a422c726965218f7447c
|
|
| MD5 |
c3cc6f666cc994dc9fb00a5e4db8a768
|
|
| BLAKE2b-256 |
852a0fc5b83dac352da1085a6730aae19ac61630123992c0ed2fe95c42f77d11
|
Provenance
The following attestation bundles were made for wytness_sdk-0.5.0-py3-none-any.whl:
Publisher:
publish-python-sdk.yml on imwickkd/wytness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wytness_sdk-0.5.0-py3-none-any.whl -
Subject digest:
3736f1b89a4bf206aa93604bc43d4bc1df6dab8be776a422c726965218f7447c - Sigstore transparency entry: 1312282319
- Sigstore integration time:
-
Permalink:
imwickkd/wytness@530e85b465e2241d0f03232cb34276b729a4c3c5 -
Branch / Tag:
refs/tags/python-sdk-v0.5.0 - Owner: https://github.com/imwickkd
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python-sdk.yml@530e85b465e2241d0f03232cb34276b729a4c3c5 -
Trigger Event:
push
-
Statement type: