Skip to main content

Python SDK for agentkernel — run AI coding agents in secure, isolated microVMs

Project description

agentkernel

Python SDK for agentkernel — run AI coding agents in secure, isolated microVMs.

Install

pip install agentkernel-sdk

Requires Python 3.10+.

Quick Start

from agentkernel import AgentKernel

with AgentKernel() as client:
    result = client.run(["echo", "hello"])
    print(result.output)  # "hello\n"

Async

from agentkernel import AsyncAgentKernel

async with AsyncAgentKernel() as client:
    result = await client.run(["echo", "hello"])
    print(result.output)

Sandbox Sessions

with AgentKernel() as client:
    with client.sandbox("test", image="python:3.12-alpine") as sb:
        sb.run(["pip", "install", "numpy"])
        result = sb.run(["python3", "-c", "import numpy; print(numpy.__version__)"])
        print(result.output)
    # sandbox auto-removed

Exec Options

Run commands with a working directory, environment variables, or as root:

with AgentKernel() as client:
    result = client.exec_in_sandbox(
        "my-sandbox",
        ["npm", "start"],
        workdir="/app",
        env=["NODE_ENV=production"],
        sudo=True,
    )

Works on sandbox sessions too:

with client.sandbox("dev") as sb:
    sb.run(["pip", "install", "-r", "requirements.txt"], workdir="/app", sudo=True)

Git Source Cloning

Clone a git repo into the sandbox at creation time:

with AgentKernel() as client:
    client.create_sandbox(
        "my-project",
        image="node:20-alpine",
        source_url="https://github.com/user/repo.git",
        source_ref="main",
    )

Persistent Volumes

Mount volumes that persist across sandbox restarts:

# First create volumes via CLI: agentkernel volume create mydata

with AgentKernel() as client:
    client.create_sandbox(
        "my-project",
        image="python:3.12-alpine",
        volumes=["mydata:/data", "cache:/tmp/cache:ro"],
    )

    # Data in /data persists across sandbox restarts
    client.exec_in_sandbox("my-project", ["sh", "-c", "echo hello > /data/test.txt"])

File Operations

Read, write, and delete files in a sandbox:

with AgentKernel() as client:
    # Write a file
    client.write_file("my-sandbox", "app/main.py", "print('hello')")

    # Read a file
    file = client.read_file("my-sandbox", "app/main.py")
    print(file.content)

    # Delete a file
    client.delete_file("my-sandbox", "app/main.py")

    # Batch write multiple files at once
    client.write_files("my-sandbox", {
        "/app/index.js": "console.log('hi')",
        "/app/package.json": '{"name":"app"}',
    })

Detached Commands

Run long-lived processes in the background and retrieve their output later:

with AgentKernel() as client:
    # Start a background process
    cmd = client.exec_detached("my-sandbox", ["python3", "train.py"])
    print(f"Started: {cmd.id} (pid {cmd.pid})")

    # Check status
    status = client.detached_status("my-sandbox", cmd.id)
    print(status.status)  # "running" | "completed" | "failed"

    # Get logs
    logs = client.detached_logs("my-sandbox", cmd.id)
    print(logs.stdout)

    # Get stderr only
    stderr = client.detached_logs("my-sandbox", cmd.id, stream="stderr")

    # List all detached commands
    all_cmds = client.detached_list("my-sandbox")

    # Kill a running command
    client.detached_kill("my-sandbox", cmd.id)

Async version:

async with AsyncAgentKernel() as client:
    cmd = await client.exec_detached("my-sandbox", ["python3", "train.py"])
    logs = await client.detached_logs("my-sandbox", cmd.id)

Streaming

for event in client.run_stream(["python3", "script.py"]):
    if event.type == "output":
        print(event.data["data"], end="")

Configuration

client = AgentKernel(
    base_url="http://localhost:18888",  # default
    api_key="sk-...",                  # optional
    timeout=30.0,                      # default
)

Or use environment variables:

export AGENTKERNEL_BASE_URL=http://localhost:18888
export AGENTKERNEL_API_KEY=sk-...

License

MIT

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

agentkernel_sdk-0.15.0.tar.gz (57.3 kB view details)

Uploaded Source

Built Distribution

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

agentkernel_sdk-0.15.0-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file agentkernel_sdk-0.15.0.tar.gz.

File metadata

  • Download URL: agentkernel_sdk-0.15.0.tar.gz
  • Upload date:
  • Size: 57.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for agentkernel_sdk-0.15.0.tar.gz
Algorithm Hash digest
SHA256 e11510eaf552c39a4afc06035ae52b2c6cb07818f20a2492daed43a780580b34
MD5 1a7bb5a8fa998958365fe9bf502be59f
BLAKE2b-256 916cab600c11dd7842a7dd9b24df916d09201d9c452d0b2f1ae2bfd9a3b1a8a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentkernel_sdk-0.15.0.tar.gz:

Publisher: sdk-publish.yml on thrashr888/agentkernel

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

File details

Details for the file agentkernel_sdk-0.15.0-py3-none-any.whl.

File metadata

File hashes

Hashes for agentkernel_sdk-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f48976ed06a6b8205ddcb1e954b7e9eed40144281c1ebf1f240f947c50c52aab
MD5 33991126194de3c62865aaf5a401060d
BLAKE2b-256 4df9fc28db2b0013f4fd844c025f697ac081ac76a0876461baf34da0f92877a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentkernel_sdk-0.15.0-py3-none-any.whl:

Publisher: sdk-publish.yml on thrashr888/agentkernel

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