Skip to main content

Sentinos Python SDK (control-plane client + runtime governance adapters)

Project description

sentinos (Python SDK)

PyPI Python CI License

Sentinos is the control plane for AI agents: runtime governance, deterministic policy outcomes, and trace-backed forensics.

This package is the high-level Python SDK for Sentinos. It wraps sentinos-sdk-core with ergonomic clients and adapters for:

  • Kernel (execution boundary, autonomy sessions, escalations, traces)
  • Arbiter (policy lifecycle + deterministic outcomes)
  • Chronos (context snapshots and provenance)
  • Alerts, incidents, marketplace, and supporting workflows

Install

pip install sentinos

Optional extras:

pip install "sentinos[providers]"  # openai + anthropic + boto3 (bedrock)
pip install "sentinos[otel]"       # OpenTelemetry helpers
pip install "sentinos[langchain]"  # LangChain integration helpers
pip install "sentinos[grpc]"       # grpcio + protobuf support

Configure

Recommended environment setup:

export SENTINOS_BASE_URL="https://<your-sentinos-api-host>"
export SENTINOS_ORG_ID="<org-id>"
export SENTINOS_ACCESS_TOKEN="<access-token>"

Notes:

  • SENTINOS_ORG_ID is preferred; SENTINOS_TENANT_ID is supported as an alias.
  • If services are hosted separately, set SENTINOS_KERNEL_URL, SENTINOS_ARBITER_URL, and SENTINOS_CHRONOS_URL.

Quickstart

from sentinos import SentinosClient

client = SentinosClient.from_env()
print(client.kernel.get_runtime_metrics())
print(client.arbiter.governance_dashboard())

Explicit constructor:

from sentinos import SentinosClient
from sentinos.auth.jwt import JWTAuth

client = SentinosClient.simple(
    base_url="https://<your-sentinos-api-host>",
    org_id="acme",
    auth=JWTAuth(lambda: "<access-token>"),
)
print(client.kernel.get_runtime_metrics())

LLM Governance Integration

from sentinos import LLMGuard, SentinosClient

client = SentinosClient.from_env(org_id="acme")
guard = LLMGuard(kernel=client.kernel, agent_id="assistant-1", session_id="sess-123")

result = guard.run(
    provider="openai",
    operation="chat.completions",
    model="gpt-4o-mini",
    request={"messages": [{"role": "user", "content": "Summarize this incident"}]},
    invoke=lambda: {"id": "resp-1", "model": "gpt-4o-mini"},
)
print(result.trace.trace_id, result.trace.decision)

OpenAI-compatible Responses API adapter:

from sentinos import LLMGuard, SentinosClient, create_openresponses_adapter

client = SentinosClient.from_env(org_id="acme")
guard = LLMGuard(kernel=client.kernel, agent_id="assistant-1", session_id="sess-openresponses-1")
adapter = create_openresponses_adapter(guard=guard, client=openai_client)
result = adapter.create(
    model="gpt-4.1-mini",
    input=[{"type": "message", "role": "user", "content": "summarize recent incidents"}],
)
print(result.trace.trace_id, result.trace.decision, result.response.status)

Workforce Auth (Enterprise)

from sentinos import SentinosClient, WorkforceAssertion, WorkforceTokenProvider
from sentinos.auth.jwt import JWTAuth

workforce_provider = WorkforceTokenProvider.from_env(
    assertion_provider=lambda: WorkforceAssertion(
        external_subject="employee-123",
        email="employee@enterprise.example",
        groups=["AI_USERS"],
    ),
    idp_issuer="https://login.microsoftonline.com/tenant/v2.0",
)

client = SentinosClient(
    org_id="enterprise-org",
    base_url="https://<your-sentinos-api-host>",
    auth=JWTAuth(workforce_provider),
)

CLI token exchange helper:

sentinos-workforce-auth exchange \
  --controlplane-url "https://app.sentinoshq.com" \
  --org-id "<org-id>" \
  --idp-issuer "https://login.microsoftonline.com/<tenant>/v2.0" \
  --external-subject "<employee-sub>" \
  --assertion-token "<signed-idp-jwt>" \
  --audience "sentinos-workforce"

Development

python3 -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e ".[dev]"
tox -q

Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sentinos-0.1.1.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sentinos-0.1.1-py3-none-any.whl (63.2 kB view details)

Uploaded Python 3

File details

Details for the file sentinos-0.1.1.tar.gz.

File metadata

  • Download URL: sentinos-0.1.1.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sentinos-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cd210caf47b344cd5ecca1ded0731468320f1b942a9ff98ad90b0f945b9b4b08
MD5 3cef405c7147ad9251be35f3d8772a72
BLAKE2b-256 a674d3417378acc10f9b07816a41926d3e57e1a81e36c2ea2750c3d529a0bc15

See more details on using hashes here.

Provenance

The following attestation bundles were made for sentinos-0.1.1.tar.gz:

Publisher: publish.yml on SentinosHQ/sentinos-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sentinos-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: sentinos-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 63.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sentinos-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6883db1e7d80761781dd73c8d0083adc8b82f69465546ffae34c90e1be2765c9
MD5 6adc7c7c697c8e0c6e8c150067c73d13
BLAKE2b-256 44cac46216facf9eb4de8a5cb1e1d9dfbd0e51b4f4bf2cb9e3178075ceeea8be

See more details on using hashes here.

Provenance

The following attestation bundles were made for sentinos-0.1.1-py3-none-any.whl:

Publisher: publish.yml on SentinosHQ/sentinos-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page