ati-client
Python SDK for ATI (Agent Tools Interface) — orchestrator provisioning and JWT token utilities.
Install
pip install ati-client
Quick Start
Orchestrator Provisioning
from ati import AtiOrchestrator
orch = AtiOrchestrator(
proxy_url="https://ati-proxy.example.com",
secret="17332cf135d362f79a2ed700b13e1215978be1d6ae6e133d25b6b3f21fa10299",
)
# Generate env vars to inject into a sandboxed agent
env_vars = orch.provision_sandbox(
agent_id=f"sandbox:{sandbox_id}",
tools=["finnhub_quote", "web_search", "github:*"],
skills=["financial-analysis"],
ttl_seconds=7200,
rate={"tool:github:*": "10/hour"},
)
# env_vars = {
# "ATI_PROXY_URL": "https://ati-proxy.example.com",
# "ATI_SESSION_TOKEN": "eyJ...",
# }
Token Utilities
from ati import issue_token, validate_token, inspect_token
# Issue a token
token = issue_token(
secret="17332cf135d362f79a...",
sub="agent-7",
scope="tool:web_search tool:finnhub_quote",
ttl_seconds=3600,
)
# Validate (checks signature, expiry, audience)
claims = validate_token(token, secret="17332cf135d362f79a...")
print(claims.sub) # "agent-7"
print(claims.scopes()) # ["tool:web_search", "tool:finnhub_quote"]
# Inspect without validation (debugging)
claims = inspect_token(token)
Scope Utilities
from ati import build_scope_string, check_scope, matches_wildcard
# Build scope strings
scope = build_scope_string(
tools=["web_search", "github:*"],
skills=["research-*"],
extra=["help"],
)
# "tool:web_search tool:github:* skill:research-* help"
# Check if a tool is allowed
check_scope("tool:github:search_repos", ["tool:github:*"]) # True
check_scope("tool:secret_api", ["tool:web_search"]) # False
# Wildcard matching
matches_wildcard("tool:github:search", "tool:github:*") # True
matches_wildcard("anything", "*") # True
JWT Format
Tokens are HS256-signed JWTs compatible with the ATI Rust proxy. The secret must be a hex-encoded 32-byte key (64 hex characters).
Claims payload:
{
"sub": "agent-7",
"aud": "ati-proxy",
"iat": 1700000000,
"exp": 1700003600,
"jti": "550e8400-e29b-41d4-a716-446655440000",
"iss": "ati-orchestrator",
"scope": "tool:web_search tool:github:*",
"ati": {
"v": 1,
"rate": {
"tool:github:*": "10/hour"
}
}
}
Development
cd ati-client
pip install -e ".[dev]"
pytest
Metadata
Release files for ati-client 0.7.15
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ati_client-0.7.15.tar.gz | 17.5 kB | With provenance | Details for ati_client-0.7.15.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ati_client-0.7.15-py3-none-any.whl | Python 3 | none | any | Details for ati_client-0.7.15-py3-none-any.whl |
Total release size: 30.7 kB
Release files / ati_client-0.7.15.tar.gz
| Download URL | ati_client-0.7.15.tar.gz |
|---|---|
| Size | 17.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
463a3cf012d03d37ffe623c373396f6f2384c5fcd0c7fe70c2b8a1c1af873469
|
|
BLAKE2b-256 checksum How to use checksums |
96ff5ba429791edc0b1ef1edcb6abc4fb42d65007cc4551685c23d3459d2b2a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 5, 2026.
Transparency logRelease files / ati_client-0.7.15-py3-none-any.whl
| Download URL | ati_client-0.7.15-py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2c40567fe8302fbd950aae0a7c5d552f1c353e811976418cc08a5b9ea6a2fe57
|
|
BLAKE2b-256 checksum How to use checksums |
242301c57b6aaea92c6f2dac45f2ebd8a2e31bd3585250685c0f10f6213fecc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 5, 2026.
Transparency logSecurity for ati-client 0.7.15
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ati_client-0.7.15.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 5, 2026.
Transparency logA 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.