opencode/packages/sdk/python
2025-11-20 14:01:02 -06:00
..
docs big format 2025-11-06 13:03:12 -05:00
examples ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
scripts ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
src/opencode_ai change default child session cycle keybind to <leader>right, and <leader>left 2025-11-20 14:01:02 -06:00
templates ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
tests ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
.gitignore ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
mkdocs.yml big format 2025-11-06 13:03:12 -05:00
openapi-python-client.yaml ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
pyproject.toml ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00
README.md big format 2025-11-06 13:03:12 -05:00
sst.pyi zen: rate limit 2025-11-08 10:18:21 -05:00
uv.lock ignore: python sdk (#2779) 2025-10-28 18:32:45 -05:00

Opencode Python SDK

This package provides a Python SDK for the Opencode API. It is generated using openapi-python-client (not Stainless).

Documentation

  • Full docs: see mkdocs site under packages/sdk/python/docs/
  • Preview locally:
uv run --project packages/sdk/python mkdocs serve -f packages/sdk/python/mkdocs.yml

Badges

Requirements

Install uv

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

Set up the environment (from this directory)

uv sync --dev

Generate client code (from CLI-generated spec)

# From repository root OR from this directory
uv run python packages/sdk/python/scripts/generate.py --source cli

Alternatively, fetch spec from a running server

uv run python packages/sdk/python/scripts/generate.py --source server --server-url http://localhost:4096/doc

This will:

  1. Produce an OpenAPI spec from the local CLI or a running server
  2. Run openapi-python-client (via uvx) to generate client code
  3. Copy the generated Python package into src/opencode_ai

Usage (after generation)

from opencode_ai import OpenCodeClient

client = OpenCodeClient(base_url="http://localhost:4096")
print(client.get_config())

# See examples/basic_usage.py for more details

# Streaming events (sync)
for event in client.subscribe_events():
    print(event)
    break

# Error handling and retries
# Set retries>0 to enable exponential backoff for transient errors like 429/5xx
client = OpenCodeClient(retries=2, backoff_factor=0.1)

# Async usage example
# uv run --project packages/sdk/python python - <<'PY'
# import asyncio
# from opencode_ai import OpenCodeClient
# async def main():
#     client = OpenCodeClient()
#     async for event in client.subscribe_events_async():
#         print(event)
#         break
# asyncio.run(main())
# PY

Notes

  • We intentionally do not use Stainless for the Python SDK.
  • The generator targets OpenAPI 3.1 emitted by the opencode server at /doc.
  • See scripts/generate.py for details and customization points.