Skip to main content

creed-sdk

Official Python SDK for Creed Space - governance infrastructure for AI agents.

Installation

pip install creed-sdk
# or
poetry add creed-sdk
# or
uv add creed-sdk

Quick Start

from creed_sdk import create_client

client = create_client(api_key="crd_live_...")

# Get a governance decision for a tool call
result = await client.decide(
    tool_name="send_email",
    arguments={
        "to": "user@example.com",
        "subject": "Hello",
    },
    on_allow=lambda d: print(f"Authorized: {d.decision_token}"),
    on_deny=lambda d: print(f"Denied: {d.reasons}"),
)

# Don't forget to close the client
await client.close()
async with create_client(api_key="crd_live_...") as client:
    result = await client.decide(
        tool_name="send_email",
        arguments={"to": "user@example.com"},
    )

Features

  • Governance Decisions - Get ALLOW/DENY decisions for tool calls
  • Cryptographic Tokens - Signed JWT tokens for authorization proof
  • Callback Flow Control - on_allow, on_deny, on_require_human callbacks
  • Audit Trail - Query tamper-evident hash-chain audit logs
  • Async Native - Built on httpx for async/await support
  • Type Hints - Full type annotations for IDE support

API Reference

create_client(api_key, base_url, timeout_ms)

Create a new Creed Space client.

client = create_client(
    api_key="crd_live_...",  # Required: Your API key
    base_url="https://api.creed.space",  # Optional: Custom API URL
    timeout_ms=30000,  # Optional: Request timeout (default: 30s)
)

client.decide(...)

Get a governance decision for a tool call.

result = await client.decide(
    tool_name="send_email",
    arguments={"to": "user@example.com"},
    constitution_id="default",  # Optional
    context={  # Optional
        "tenant_id": "...",
        "user_id": "...",
    },
    on_allow=handle_allow,  # Optional callback
    on_deny=handle_deny,  # Optional callback
    on_require_human=handle_human,  # Optional callback (planned feature)
)

# Async callbacks supported
async def handle_allow(decision):
    await execute_tool(decision.decision_token)

client.authorize(...)

Verify a decision token before execution.

auth = await client.authorize(
    decision_token=result.decision_token,
    tool_name="send_email",  # Optional: verify tool name matches
)

if auth.authorized:
    print(f"Token valid until: {auth.claims.expires_at}")

client.audit(...)

Query the audit trail for a run.

audit = await client.audit(
    run_id="run_123",
    action_id=None,  # Optional: specific action
    limit=50,
)

print(f"Events: {audit.events}")
print(f"Integrity verified: {audit.integrity.verified}")

client.status()

Get service status and feature availability.

status = await client.status()
print(f"Service: {status.service}")
print(f"Features: {status.features}")

Utilities

compute_args_hash(args)

Compute SHA-256 hash of arguments for verification.

from creed_sdk import compute_args_hash

hash_value = compute_args_hash({"to": "user@example.com"})
# 'sha256:...'

is_token_expired(token)

Check if a decision token is expired.

from creed_sdk import is_token_expired

if is_token_expired(token):
    # Request a new decision
    pass

Error Handling

from creed_sdk import create_client
from creed_sdk.errors import (
    CreedError,
    AuthenticationError,
    RateLimitError,
    TimeoutError,
)

try:
    result = await client.decide(...)
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited, retry after {e.retry_after}s")
except TimeoutError:
    print("Request timed out")
except CreedError as e:
    print(f"Error: {e.code} - {e.message}")

Decision Types

Decision Status Description
ALLOW Active Tool execution authorized
DENY Active Tool execution blocked
REQUIRE_HUMAN Planned Human review required
REQUIRE_STEPUP Planned Step-up authentication required

Type Definitions

from creed_sdk.types import (
    AllowDecision,
    DenyDecision,
    RequireHumanDecision,
    AuthorizeResult,
    AuditResult,
    StatusResult,
)

Requirements

  • Python 3.10+
  • httpx 0.25+

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Type check
mypy creed_sdk

# Lint
ruff check creed_sdk

License

MIT

Metadata

Release files for creed-sdk 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for creed-sdk 1.0.0
File Size Uploaded Provenance
creed_sdk-1.0.0.tar.gz 12.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for creed-sdk 1.0.0
File Interpreter ABI Platform
creed_sdk-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 22.3 kB

Release files / creed_sdk-1.0.0.tar.gz

Download URL creed_sdk-1.0.0.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d99acf0ac80102580d88e1ace65c987db5ee4dc0c53f83e8221324c2253fb2f6
BLAKE2b-256 checksum
How to use checksums
c220a5b7d61b48a8101b75c64a151918be9a0f80689c90315b37eddae9fa91e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / creed_sdk-1.0.0-py3-none-any.whl

Download URL creed_sdk-1.0.0-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ad71308a6b829ac950f79b53212ee460fc53193600e029f3721df46c473c8c66
BLAKE2b-256 checksum
How to use checksums
47f029c0a0c0eb2e506683af9fd06e3353a1152d591d545f8a59114aec1291da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Security for creed-sdk 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page