Python SDK
Sync and async clients. Requires Python 3.9+. Uses httpx under the hood.
Installation
bash
pip install getstackQuick Start
python
from getstack import Stack
stack = Stack(api_key="sk_live_...")
# Register an agent
agent = stack.agents.register("my-agent")
# Issue a passport with mission context
with stack.passports.mission(
agent_id=agent.id,
intent="Process invoices",
services=["slack", "stripe"],
) as mission:
mission.log("slack", "read_channel", "#invoices")
cred = stack.credentials.get("slack")
mission.log("stripe", "create_invoice")Services
stack.agents
python
stack.agents.register("name", description="optional")
stack.agents.list()
stack.agents.get("agt_...")
stack.agents.update("agt_...", status="suspended")
stack.agents.delete("agt_...")stack.skills
python
# Publishing
stack.skills.publish(
name="my-skill",
description="...",
input_schema={...},
output_schema={...},
execution_mode="sealed",
)
# Browsing
skills = stack.skills.browse(query="financial analysis", tags="finance")
# Invoking
result = stack.skills.invoke(
"skl_...",
agent_id="agt_...",
input={"data": "..."},
)
# Polling
completed = stack.skills.poll(result.id, timeout_seconds=60)
# Requests
stack.skills.post_request(description="I need...", tags=["finance"])
stack.skills.suggest_composition("sreq_...")stack.identity
python
providers = stack.identity.list_providers()
session = stack.identity.initiate_verification("persona")
stack.identity.complete_verification("persona", session.session_ref)
claims = stack.identity.list_claims()
stack.identity.revoke_claim("clm_...")Authentication Methods
python
# API key (default)
stack = Stack(api_key="sk_live_...")
# Session JWT
stack = Stack.from_session("eyJ...")
# OAuth
stack = Stack.from_oauth(
client_id="...",
client_secret="...",
access_token="...",
refresh_token="...",
)Error Handling
python
from getstack import Stack, NotFoundError, ForbiddenError
try:
agent = stack.agents.get("agt_nonexistent")
except NotFoundError:
print("Agent not found")
except ForbiddenError:
print("Access denied")