Docker sandbox tools for Axio
Project description
axio-tools-docker
Docker sandbox tools for axio.
Run agent-generated code and commands inside isolated Docker containers. The agent gets sandbox_exec, sandbox_write, and sandbox_read tools that operate entirely within the sandbox — the host filesystem stays untouched.
Features
- Isolated execution — code runs inside a Docker container, not on the host
- Configurable image — use any Docker image as the sandbox environment
- Three sandboxed tools — execute commands, write files, read files — all inside the container
- Persistent sandbox — container is reused across tool calls within a session for faster execution
- TUI integration — configure image, memory limits, and CPU from the
axio-tuisettings screen
Requirements
Docker must be installed and running:
docker info # should succeed
Installation
pip install axio-tools-docker
Usage
from axio.agent import Agent
from axio.context import MemoryContextStore
from axio_transport_openai import OpenAITransport
from axio_tools_docker.plugin import DockerPlugin
async def main() -> None:
plugin = DockerPlugin()
await plugin.init() # uses default config (python:3.12-slim)
agent = Agent(
system=(
"You are a coding assistant. Use sandbox_exec to run code safely. "
"Never attempt to access the host filesystem directly."
),
tools=plugin.all_tools,
transport=OpenAITransport(api_key="sk-...", model="gpt-4o"),
)
ctx = MemoryContextStore()
result = await agent.run(
"Write a Python script that computes the first 20 Fibonacci numbers and run it.",
ctx,
)
print(result)
Sandbox tools
| Tool | Description |
|---|---|
sandbox_exec |
Run a shell command inside the container; returns stdout + stderr |
sandbox_write |
Write a file into the container's filesystem |
sandbox_read |
Read a file from the container's filesystem |
Container lifecycle
The sandbox container is created lazily on the first tool call (sandbox_exec,
sandbox_write, or sandbox_read) — plugin.init() itself does not start Docker.
The same container is reused for all subsequent tool calls within the session.
When await plugin.close() is called the container is stopped and removed
(docker rm -f). You should always call close() when the agent session ends
to avoid leaving containers behind:
async def run_with_cleanup(agent, ctx, plugin):
try:
result = await agent.run("...", ctx)
finally:
await plugin.close()
If Docker is not installed or the docker CLI is not on PATH, the container
creation step will raise a RuntimeError on the first tool call. You can detect
this before starting a session with SandboxManager.docker_available() (returns
True if the docker executable is found on PATH).
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
image |
str |
"python:latest" |
Docker image to use for the sandbox container |
memory |
str |
"256m" |
Memory limit passed to docker run --memory (e.g., "512m", "1g") |
cpus |
str |
"1.0" |
CPU limit passed to docker run --cpus |
network |
bool |
False |
Whether to allow network access. When False, --network none is set on the container. |
workdir |
str |
"/workspace" |
Working directory inside the container |
from axio_tools_docker.config import SandboxConfig
config = SandboxConfig(
image="python:3.12-slim",
memory="512m",
cpus="1.0",
workdir="/workspace",
)
Plugin registration
[project.entry-points."axio.tools.settings"]
docker = "axio_tools_docker.plugin:DockerPlugin"
Part of the axio ecosystem
axio · axio-tools-local · axio-tools-mcp · axio-tui
License
MIT
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 axio_tools_docker-0.6.2.tar.gz.
File metadata
- Download URL: axio_tools_docker-0.6.2.tar.gz
- Upload date:
- Size: 41.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21a761bc5f15284195ddff641502b66e21af6e001629766a2bfeb463e203dea8
|
|
| MD5 |
52b2eb9b657ea1706392bed1d257db6e
|
|
| BLAKE2b-256 |
aae96f206ec5e9793efe998610048eaa215c8c73695e74a0e520edaa5f9e97a3
|
Provenance
The following attestation bundles were made for axio_tools_docker-0.6.2.tar.gz:
Publisher:
publish.yml on axio-agent/monorepo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axio_tools_docker-0.6.2.tar.gz -
Subject digest:
21a761bc5f15284195ddff641502b66e21af6e001629766a2bfeb463e203dea8 - Sigstore transparency entry: 1368302391
- Sigstore integration time:
-
Permalink:
axio-agent/monorepo@bd9d6a3bc3cfddce8da281e710d4bf328dbcc576 -
Branch / Tag:
refs/tags/0.6.2 - Owner: https://github.com/axio-agent
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bd9d6a3bc3cfddce8da281e710d4bf328dbcc576 -
Trigger Event:
release
-
Statement type:
File details
Details for the file axio_tools_docker-0.6.2-py3-none-any.whl.
File metadata
- Download URL: axio_tools_docker-0.6.2-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9c766880cf869e9243284987188cbaad1d2850f657777d50e926c7bceb12ac1
|
|
| MD5 |
9af6ace2c09e59a7fdd1c9ab15e58566
|
|
| BLAKE2b-256 |
016a4b42a5ed574fdd1e6faec1582baf98ae8274666213a2bbd7da7c2fdfe9eb
|
Provenance
The following attestation bundles were made for axio_tools_docker-0.6.2-py3-none-any.whl:
Publisher:
publish.yml on axio-agent/monorepo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axio_tools_docker-0.6.2-py3-none-any.whl -
Subject digest:
e9c766880cf869e9243284987188cbaad1d2850f657777d50e926c7bceb12ac1 - Sigstore transparency entry: 1368302406
- Sigstore integration time:
-
Permalink:
axio-agent/monorepo@bd9d6a3bc3cfddce8da281e710d4bf328dbcc576 -
Branch / Tag:
refs/tags/0.6.2 - Owner: https://github.com/axio-agent
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bd9d6a3bc3cfddce8da281e710d4bf328dbcc576 -
Trigger Event:
release
-
Statement type: