Python SDK for zag — a unified CLI for AI coding agents
Project description
Zag Python Binding
Python binding for zag — a unified CLI for AI coding agents.
Prerequisites
- Python 3.10+
- The
zagCLI binary installed and on yourPATH(or set viaZAG_BINenv var)
Installation
pip install zag-agent
For development from source:
cd bindings/python
pip install -e .
Quick start
from zag import ZagBuilder
output = await ZagBuilder() \
.provider("claude") \
.model("sonnet") \
.auto_approve() \
.exec("write a hello world program")
print(output.result)
Streaming
from zag import ZagBuilder
async for event in await ZagBuilder().provider("claude").stream("analyze code"):
print(event.type, event)
Builder methods
| Method | Description |
|---|---|
.provider(name) |
Set provider: "claude", "codex", "gemini", "copilot", "ollama" |
.model(name) |
Set model name or size alias ("small", "medium", "large") |
.system_prompt(text) |
Set a system prompt |
.root(path) |
Set the working directory |
.auto_approve() |
Skip permission prompts |
.add_dir(path) |
Add an additional directory (chainable) |
.file(path) |
Attach a file to the prompt (chainable) |
.env(key, value) |
Add an environment variable for the agent subprocess (chainable) |
.json_mode() |
Request JSON output |
.json_schema(schema) |
Validate output against a JSON schema (implies .json_mode()) |
.json_stream() |
Enable streaming NDJSON output |
.worktree(name=None) |
Run in an isolated git worktree |
.sandbox(name=None) |
Run in a Docker sandbox |
.session_id(uuid) |
Use a specific session ID |
.output_format(fmt) |
Set output format ("text", "json", "json-pretty", "stream-json") |
.input_format(fmt) |
Set input format ("text", "stream-json" — Claude only) |
.replay_user_messages() |
Re-emit user messages on stdout (Claude only) |
.include_partial_messages() |
Include partial message chunks (Claude only) |
.max_turns(n) |
Set the maximum number of agentic turns |
.timeout(duration) |
Set a timeout duration (e.g., "30s", "5m", "1h"). Kills the agent if exceeded. |
.mcp_config(config) |
MCP server config: JSON string or file path (Claude only) |
.show_usage() |
Show token usage statistics (JSON output mode) |
.size(size) |
Set Ollama model parameter size (e.g., "2b", "9b", "35b") |
.verbose() |
Enable verbose output |
.quiet() |
Suppress non-essential output |
.debug() |
Enable debug logging |
.bin(path) |
Override the zag binary path |
Terminal methods
| Method | Returns | Description |
|---|---|---|
.exec(prompt) |
AgentOutput |
Run non-interactively, return structured output |
.stream(prompt) |
AsyncGenerator[Event] |
Stream NDJSON events |
.exec_streaming(prompt) |
StreamingSession |
Bidirectional streaming (Claude only) |
.run(prompt=None) |
None |
Start an interactive session (inherits stdio) |
.resume(session_id) |
None |
Resume a previous session by ID |
.continue_last() |
None |
Resume the most recent session |
.exec_resume(session_id, prompt) |
AgentOutput |
Resume a session non-interactively with a follow-up prompt |
.exec_continue(prompt) |
AgentOutput |
Resume the most recent session non-interactively |
.stream_resume(session_id, prompt) |
AsyncGenerator[Event] |
Resume a session in streaming mode |
.stream_continue(prompt) |
AsyncGenerator[Event] |
Resume the most recent session in streaming mode |
Version checking
The SDK automatically checks the installed zag CLI version before running commands. If you use a builder method that requires a newer CLI version than what's installed, a clear error is raised:
env() requires zag CLI >= 0.6.0, but the installed version is 0.5.0.
Please update the zag binary.
The version is detected once (by running zag --version) and cached for the lifetime of the process.
| Method | Minimum CLI version |
|---|---|
.env() |
0.6.0 |
.mcp_config() |
0.6.0 |
All other methods are available since the initial release (0.2.3).
Discovery
Standalone async functions for discovering available providers, models, and capabilities:
from zag import list_providers, get_capability, get_all_capabilities, resolve_model
providers = await list_providers()
cap = await get_capability("claude")
all_caps = await get_all_capabilities()
resolved = await resolve_model("claude", "small") # ResolvedModel(input="small", resolved="haiku", is_alias=True)
| Function | Description |
|---|---|
list_providers(bin=None) |
List available provider names |
get_capability(provider, bin=None) |
Get capabilities for a provider |
get_all_capabilities(bin=None) |
Get capabilities for all providers |
resolve_model(provider, model, bin=None) |
Resolve a model alias |
How it works
The SDK spawns the zag CLI as a subprocess (zag exec -o json or -o stream-json) and parses the JSON/NDJSON output into typed dataclasses. Zero external dependencies — only the Python standard library.
Testing
pip install pytest pytest-asyncio
pytest
See also
License
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 zag_agent-0.9.0.tar.gz.
File metadata
- Download URL: zag_agent-0.9.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b20663933c73190253ba77df28c984df4ac8733ab9aacd9ae495fb14b5f9562
|
|
| MD5 |
10fec163a1f8fa28ba8ae0b59c619b05
|
|
| BLAKE2b-256 |
85a5589359c7279cdc08ee30901e11f4552003e937be20132fe805b1119bf59f
|
File details
Details for the file zag_agent-0.9.0-py3-none-any.whl.
File metadata
- Download URL: zag_agent-0.9.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f02ef8e9eb6101dc0cf3e4fc14a22267e0c19cd156aa2be0e4d5c64020c0c72
|
|
| MD5 |
f998710d25c1334421b2662a0c4af361
|
|
| BLAKE2b-256 |
26bd752fa03f80259c630a418c28cb38548b8cd7e034dbbe0241ad393cac0f42
|