Sandboxed rollouts you call like typed Python (import as `agentix`)
Project description
Agentix
Sandboxed rollouts you call like typed Python.
Turn agents, tools, and scorers into Python callables. Package their dependencies into runtime images. Call them from evaluators, trainers, and orchestration code without writing a new runner for every pairing.
The 10-Second Model
Agentix has two primitives:
- Remote calls:
client.remote(fn, *args, **kwargs)runs a Python callable inside a sandbox worker. The callable is serialized with stdlib pickle, Python's native callable reference mechanism. - Bundles:
agentix build [path]packages a Python project and its declared dependencies into a deploy-ready runtime image.
from agentix import RuntimeClient
from app import run
async with RuntimeClient(sandbox.runtime_url) as client:
result = await client.remote(run, input="hello")
The unit of composition is not a bespoke benchmark runner or agent adapter. It is a Python callable.
Why Agentix Exists
Agent experiments sprawl quickly. One agent needs a CLI wrapper. Another needs a Python harness. A benchmark needs repo setup, grading scripts, and logs. A training loop needs the same pieces batched across many sandboxes.
Agentix collapses that matrix into one execution contract: if Python can serialize the callable and the sandbox has its dependencies, the host can call it.
| You have | You expose | You call |
|---|---|---|
| Claude Code, Codex, Aider, OpenHands, or an internal agent | async def run(...) -> RunResult |
await client.remote(run, ...) |
| Shell, files, repo setup, or local tools | async def run(command: str) -> BashResult |
await client.remote(bash_run, ...) |
| SWE-bench, MLE-Bench, or an internal evaluator | async def score(...) -> Score |
await client.remote(score, ...) |
| Streaming or interactive workflows | async def stream(...) -> AsyncIterator[Event] |
async for event in client.remote(stream, ...) |
What Ships
- Typed remote calls across the host-to-sandbox boundary.
- Unary, streaming, and bidirectional call shapes inferred from callable signatures.
- One runtime worker process today behind an internal worker backend boundary, so future pools or per-call isolation can stay API-compatible.
- Bundle builds from normal Python projects and
pyproject.tomldependencies. - Optional Nix system dependencies when a project includes
default.nix. - Deployment backend plugins through the
agentix.deploymententry point group.
Quickstart
Install the host framework and a deployment backend:
pip install agentixx agentix-deployment-docker
Create a remote callable:
# src/hello_agentix/__init__.py
async def run(input: str) -> str:
return f"sandbox saw: {input}"
Build a bundle:
agentix build ./hello-agentix -o hello-agentix:0.1.0
Deploy it and call the callable:
import asyncio
from agentix import RuntimeClient
from agentix.deployment.base import SandboxConfig, session
from agentix.deployment.docker import DockerDeployment
from hello_agentix import run
async def main() -> None:
deployment = DockerDeployment()
config = SandboxConfig(image="hello-agentix:0.1.0")
async with session(deployment, config) as sandbox:
async with RuntimeClient(sandbox.runtime_url) as client:
print(await client.remote(run, input="hello"))
asyncio.run(main())
Read the full quickstart for the package layout and runtime-image prerequisites.
Architecture
Host process
RuntimeClient.remote(fn, ...)
serializes callable with pickle
detects unary / stream / bidi
encodes args and kwargs
|
v
Sandbox
agentix-server
|
v
worker subprocess
unpickles callable
validates args
calls fn(*args, **kwargs)
Remote calls use Socket.IO events for unary, streaming, and bidirectional
shapes. HTTP is kept only for /health. Errors stay in-band.
Repository Map
Agentix-Runtime-Basic: sandbox primitives such asbashand file operations.Agentix-Deployment-Docker: local Docker deployment backend.Agentix-Deployment-DaytonaandAgentix-Deployment-E2B: hosted sandbox backend packages.agentix-cookbook: working integration recipes for agents and benchmarks.abridge: rollout-to-RL-buffer bridge.
Development
git clone https://github.com/Agentiix/Agentix
cd Agentix
pip install -e '.[dev]'
pytest
ruff check agentix/ tests/
Pair this repo with sibling backend/runtime repos checked out next to it when testing full sandbox rollouts.
Links
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 agentixx-0.1.2.tar.gz.
File metadata
- Download URL: agentixx-0.1.2.tar.gz
- Upload date:
- Size: 172.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"TencentOS Server","version":"4.4","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3354ef7e1c41e80517e822246d4432937e6885c8773e284b614770b4efcaf1f
|
|
| MD5 |
6092cfbee9ad1d915777e6c8ce07c7dd
|
|
| BLAKE2b-256 |
8306b44bec9ae44567335f0c08f51a2592b08616b98f4db9427484d98c253403
|
File details
Details for the file agentixx-0.1.2-py3-none-any.whl.
File metadata
- Download URL: agentixx-0.1.2-py3-none-any.whl
- Upload date:
- Size: 51.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.4 {"installer":{"name":"uv","version":"0.11.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"TencentOS Server","version":"4.4","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1b7d0f2629166c2064ce893dab653d43e7a25e1a5112380c1a958951b1f14b8
|
|
| MD5 |
1e52f0d02ad341517b8b334fd3193035
|
|
| BLAKE2b-256 |
9ff34654eedbd0ea692659b7b275b43b8e7ad83bcd37b8d904b859a70a449106
|