Skip to main content

Python SDK for Opencode — the open source AI coding agent

Project description

Opencode Python SDK

Python SDK for Opencode — the open source AI coding agent.

pip install opencode-py

Quick start

One-shot (spawns server, asks, cleans up)

from opencode import opencode

answer = opencode("What is the capital of France?")
print(answer)

Context manager (recommended)

from opencode import Opencode

with Opencode() as ai:
    answer = ai.ask("Explain dependency injection")
    print(answer)

Streaming

with Opencode() as ai:
    for chunk in ai.ask_stream("Write a Python function"):
        print(chunk, end="")

Conversations

with Opencode() as ai:
    session = ai.create_session()
    msg1 = session.prompt("Suggest a project name")
    print(f"AI: {msg1}")
    msg2 = session.prompt("Now write a tagline for it")
    print(f"AI: {msg2}")

Multi-turn (keep mode)

from opencode import opencode

# keep=True — server and session stay alive between calls
r1 = opencode("My name is Alice", keep=True)
r2 = opencode("What's my name?", keep=True)   # remembers the conversation
r3 = opencode("That's all", keep=False)        # keep=False closes the server

Auto-tools (agentic tool execution)

r = opencode("Create a file called hello.txt", auto_tools=True)

Available tools: bash, write, edit, read, glob, grep.

By default, bash asks for permission in the console, all others run without prompting.

Custom permissions via Session.ask():

from opencode import Opencode, ToolExecutor

with Opencode() as ai:
    session = ai.create_session()
    msg = session.ask(
        "Write test.py with print('hello')",
        tool_executor=ToolExecutor(permissions={"write": "allow"}),
    )

Low-level API (any endpoint)

with Opencode() as ai:
    content = ai.client.file_read("src/main.py")
    diff = ai.client.vcs_diff("HEAD~3")
    config = ai.client.config_get()
    session = ai.client.session_create()
    ai.client.v2_session_prompt(session["id"], {"text": "Hello"})

Web UI (zero dependencies)

python web/server.py
# → open http://127.0.0.1:3000

Built-in HTTP server + proxy to opencode serve — no extra dependencies.

Interactive dialog

python live.py

Multi-turn dialog with keep=True, server cleaned up on exit via atexit.

Configuration

with Opencode(
    model="claude-sonnet-4-20250514",
    directory="/path/to/project",
    port=4096,
) as ai:
    ...

Async API

import asyncio
from opencode import AsyncOpendcode

async def main():
    async with AsyncOpendcode() as ai:
        answer = await ai.ask("Explain async/await in Python")
        print(answer)

asyncio.run(main())

Async streaming

async with AsyncOpendcode() as ai:
    async for chunk in ai.ask_stream("Write a poem"):
        print(chunk, end="")

Async conversations

async with AsyncOpendcode() as ai:
    session = await ai.create_session()
    msg1 = await session.prompt("Suggest a project name")
    msg2 = await session.prompt("Now write a tagline for it")

Async low-level client

from opencode import AsyncOpendcodeClient

async with AsyncOpendcodeClient() as client:
    health = await client.health()
    print(health)

Development

# Install in editable mode
pip install -e ".[dev]"

# Run tests
pytest

# Build
python -m build --wheel

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opencode_py-0.1.0.tar.gz (39.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opencode_py-0.1.0-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file opencode_py-0.1.0.tar.gz.

File metadata

  • Download URL: opencode_py-0.1.0.tar.gz
  • Upload date:
  • Size: 39.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opencode_py-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c7cce8164a8604ad0a07942bdc1df4f8f51603d0ba9c73f2f224d13c538a9094
MD5 a87b3ac818ab6c9d1c88538b293cbdeb
BLAKE2b-256 262ce7d9c372280ca48d0d2cf31694ff59273544dd2ec1d3175cfceb4e12a832

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencode_py-0.1.0.tar.gz:

Publisher: publish.yml on skislyakow/opencode-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opencode_py-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: opencode_py-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for opencode_py-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6426970f59bba8836dcca26eeeb234b21bd428ab333418026d9663a7b0bbc64a
MD5 746b0dc79cc587684f619c25c34da131
BLAKE2b-256 811890e24bdd14287d8f85fbbbf6b926cb65b689ed598dcb9a2252ee5ae49738

See more details on using hashes here.

Provenance

The following attestation bundles were made for opencode_py-0.1.0-py3-none-any.whl:

Publisher: publish.yml on skislyakow/opencode-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page