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.18.1.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.18.1-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agentkernel_sdk-0.18.1.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.18.1.tar.gz
Algorithm Hash digest
SHA256 1a3c8ed48e439585061ba4a3aa083aaacd7a3698b1f3fd1aa5831f18b28f8c76
MD5 31c981dd99bb11ce4d4dc0e7525d49e8
BLAKE2b-256 26fd97b4f2bab9cf5b0fce473ccb56dfa620c07cb91447a5f3cde3a75516685d

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentkernel_sdk-0.18.1.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.18.1-py3-none-any.whl.

File metadata

File hashes

Hashes for agentkernel_sdk-0.18.1-py3-none-any.whl
Algorithm Hash digest
SHA256 da6108e176732a0fb95d3db6e5f692a70b58d1621d13b997a75a1f8dcf37ad3f
MD5 5cd8e4e9153509ed85cdf1e7abf901d8
BLAKE2b-256 06f57b6ae151e4a54097996bd0342948e32ee5bf1ee4865e05e343a4f53f72eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentkernel_sdk-0.18.1-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