Independent verification and audit layer for AI agent decisions
Project description
DarkMatter Python SDK
Install: pip install darkmatter-sdk
PyPI: https://pypi.org/project/darkmatter-sdk/
Docs: https://darkmatterhub.ai/docs
Quickstart (L1/L2)
import darkmatter as dm
dm.configure(api_key="dm_sk_...")
ctx = dm.commit(
to_agent_id="dm_your_agent_id",
payload={"input": "approve refund?", "output": "approved"},
)
print(ctx["verify_url"])
L3 Non-repudiation (customer-signed)
L3 means DarkMatter cannot forge your records — every commit is signed with a key only you hold, before it reaches DarkMatter's servers.
One-time setup
# Generate Ed25519 keypair
openssl genpkey -algorithm ed25519 -out my-signing-key.pem
openssl pkey -in my-signing-key.pem -pubout -out my-signing-key.pub
import darkmatter as dm
dm.configure(api_key="dm_sk_...")
# Register your public key once
dm.register_signing_key(
key_id="my-signing-key",
public_key_path="my-signing-key.pub",
)
# Add to .env — then dm.commit() is identical, every commit is L3
DARKMATTER_SIGNING_MODE=customer
DARKMATTER_SIGNING_KEY_ID=my-signing-key
DARKMATTER_SIGNING_KEY_PATH=./my-signing-key.pem
Usage (unchanged after setup)
import darkmatter as dm
# SigningConfig loaded automatically from env
dm.configure(
api_key="dm_sk_...",
signing=dm.SigningConfig.from_env(), # reads DARKMATTER_SIGNING_* vars
)
# commit() is identical — L3 attestation added transparently
ctx = dm.commit(
to_agent_id="dm_your_agent_id",
payload={"input": "approve refund?", "output": "approved"},
metadata={"model": "claude-sonnet-4-6"},
)
print(ctx["assurance_level"]) # "L3"
print(ctx["verify_url"]) # shows L3 badge — signed by your key
Per-call override
cfg = dm.SigningConfig(
key_id="my-signing-key",
private_key_path="my-signing-key.pem",
)
ctx = dm.commit(
to_agent_id="dm_agent_id",
payload={...},
signing=cfg, # override for this call only
)
Key management
import darkmatter as dm
dm.configure(api_key="dm_sk_...")
# List registered keys
keys = dm.list_signing_keys()
# Revoke a key (existing records unaffected)
dm.revoke_signing_key("my-signing-key")
Verify test vectors (SDK release gate)
Before any SDK release, all 3 envelope test vectors must pass:
import darkmatter as dm
result = dm.run_envelope_test_vectors("../../test-vectors-envelope-v1.json")
assert result["passed"], result["results"]
print("All vectors passed")
Envelope spec
L3 signing implements ENVELOPE_SPEC_V1.md at the repo root.
Canonical serialization: keys sorted recursively, no whitespace, UTF-8, no escaped Unicode.
sha256(canonical_json(envelope)) → signed with Ed25519 private key
Environment variables
| Variable | Description |
|---|---|
DARKMATTER_API_KEY |
Your DarkMatter API key (dm_sk_...) |
DARKMATTER_AGENT_ID |
Your agent ID (dm_...) |
DARKMATTER_SIGNING_MODE |
customer to enable L3 |
DARKMATTER_SIGNING_KEY_ID |
Key identifier (must match registered key) |
DARKMATTER_SIGNING_KEY_PATH |
Path to Ed25519 private key PEM |
DARKMATTER_SIGNING_KEY_PEM |
Inline PEM string (alternative to path) |
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 darkmatter_sdk-1.4.0.tar.gz.
File metadata
- Download URL: darkmatter_sdk-1.4.0.tar.gz
- Upload date:
- Size: 36.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fc5dfaa8fb8fc94573f05ff507d7a04e0cb03c9394a923a3f832596b95c39eb
|
|
| MD5 |
6564a3a348a8b5a8e50eae599ffb0de9
|
|
| BLAKE2b-256 |
7479846c5db0fe79c3929898eb274a510e76abc4f069b66594c590f04a6fc31f
|
File details
Details for the file darkmatter_sdk-1.4.0-py3-none-any.whl.
File metadata
- Download URL: darkmatter_sdk-1.4.0-py3-none-any.whl
- Upload date:
- Size: 38.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f99f48cc216dff12c162f98ca66d01f172c4536bb5fddff4e583d5cc81a4b78
|
|
| MD5 |
0eab5fc2fa0bcef504d9690c5c096f26
|
|
| BLAKE2b-256 |
88ade00d9741a833cb05eb399f92f8236d1000a94a8dcef6e149a279c30a4397
|