Python SDK for programmatically driving the Otto agent binary
Project description
astronomer-otto-sdk (Python)
Python SDK for programmatically driving the otto agent binary. Mirrors the shape of the TypeScript SDK — subprocess + JSON-lines over --rpc, with an OttoClient async context manager and a query() async iterator.
Useful for building your own agents on top of otto, or as a drop-in shape for any code that already shells out to a Claude-style coding-agent SDK.
Install
pip install astronomer-otto-sdk
The import path is otto_sdk.
For local SDK development, editable installs still work:
uv pip install -e /path/to/otto/sdk-python
# or
pip install -e /path/to/otto/sdk-python
Zero runtime dependencies (stdlib only). Requires Python 3.10+.
Prerequisites
ottobinary installed. Resolution:otto_pathoption →$OTTO_PATH→~/.astro/bin/otto→shutil.which("otto").- Astro env vars in the calling process:
ASTRO_TOKEN,ASTRO_DOMAIN,ASTRO_ORGANIZATIONAIRFLOW_API_URL+ creds if the agent needs Airflow access
One-shot: query()
from otto_sdk import QueryOptions, query
async for event in query(QueryOptions(prompt="list dags", cwd="./project")):
if event["type"] == "tool_execution_start":
print(f"→ {event['toolName']}")
elif event["type"] == "message_end":
print(event["message"])
Or the batch variant:
from otto_sdk import QueryOptions, run_query
result = await run_query(QueryOptions(prompt="summarize", cwd="./project"))
print(result.final_text)
Multi-turn: OttoClient
from otto_sdk import OttoClient, OttoOptions
async with OttoClient(OttoOptions(cwd="./project", no_session=True)) as client:
await client.prompt("list the dags")
async for event in client.events():
... # stream events for this turn
await client.prompt("now describe the first one")
async for event in client.events():
...
state = await client.get_state()
print(state["messageCount"])
Events
AgentEvent is a dict with a required type key. Narrow on event["type"] (or match in 3.10+):
agent_start/agent_endturn_start/turn_endmessage_start/message_update/message_endtool_execution_start/tool_execution_update/tool_execution_end
See src/otto_sdk/protocol.py for the full TypedDict schema.
Options
@dataclass
class OttoOptions:
otto_path: str | None = None # override binary location
cwd: str | None = None # defaults to os.getcwd()
env: dict[str, str | None] | None = None
provider: str | None = None # default "astronomer"
model: str | None = None # otto's current default if None
no_session: bool = False # skip ~/.astro/otto/sessions/ persistence
session_path: str | None = None # resume an existing .jsonl session (maps to --session)
thinking_level: ThinkingLevel | None = None # "off"|"minimal"|"low"|"medium"|"high"|"xhigh"
extra_args: list[str] = []
on_stderr: Callable[[str], None] | None = None
thinking_level is applied right after start(). You can also change it mid-session with await client.set_thinking_level(level).
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 astronomer_otto_sdk-0.0.1.tar.gz.
File metadata
- Download URL: astronomer_otto_sdk-0.0.1.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a247ad3f3fe9b36106b1c71bc33402fb0851536e5e13913437a9d5f741f6e550
|
|
| MD5 |
afe936c0d81b0f9607f895c974258e2b
|
|
| BLAKE2b-256 |
1007c0fc7f28614279a079a14e2aaec5ddf1314b6db77ed20ed2b8870eab381f
|
File details
Details for the file astronomer_otto_sdk-0.0.1-py3-none-any.whl.
File metadata
- Download URL: astronomer_otto_sdk-0.0.1-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2233a9095793e666817ddac015ca1c78eac0ebf454ba9425b8ba94bb22086394
|
|
| MD5 |
ccf369426f362277bcdce3069c16d3df
|
|
| BLAKE2b-256 |
63109015d71ac8379d9dd3cf12c234dd87e69b9de0823781f48459b4c675571d
|