Quick start¶
Install Agentix, call a namespace inside a sandbox, then write your own — in five minutes.
Tip
Looking for a deeper tour? See the Plugin authors guide for every extension axis, or Architecture for how the runtime dispatches calls.
Prerequisites¶
- Python 3.11 or newer
- Docker (for the
localdeployment used below)
Install¶
agentix is the framework; agentix-bash and agentix-files are
namespaces — independently versioned wheels that contribute the
remote-callable Bash and Files classes. Every namespace, deployment, or
trace sink follows the same pattern: one wheel, one entry-point block.
Verify the install¶
agentix.namespace
bash → agentix.bash:Bash [agentix-bash@0.1.0] ok
files → agentix.files:Files [agentix-files@0.1.0] ok
agentix.deployment
local → agentix.deployment.docker:DockerDeployment [agentix@0.1.0] ok
daytona → …
e2b → …
agentix plugins lists every installed extension across all six axes —
namespaces, deployments, trace sinks, spec resolvers, wire patterns, and
CLI subcommands. Add --verbose to see load tracebacks for anything that
failed to import.
Call a namespace¶
import asyncio
from agentix import RuntimeClient, SandboxConfig
from agentix.deployment.base import session
from agentix.deployment.docker import DockerDeployment
from agentix.bash import Bash # (1)!
async def main():
deployment = DockerDeployment() # (2)!
config = SandboxConfig(
image="ubuntu:24.04",
runtime="agentix/runtime:latest",
closures=["agentix/bash:0.1.0"], # (3)!
)
async with session(deployment, config) as sandbox: # (4)!
async with RuntimeClient(sandbox.runtime_url) as c:
result = await c.remote(Bash.run, command="echo hi") # (5)!
print(result.stdout) # → "hi\n"
asyncio.run(main())
- The typed surface —
pip install agentix-bashmakes this import resolve. Methods carry the real implementation; you call them viac.remote(...), which executes them inside the sandbox. DockerDeploymentis the built-inlocaldeployment. Swap in another backend withload_deployment("daytona")orload_deployment("e2b").- One closure image per namespace, pre-built by
agentix build. session(...)is a free function — composition over inheritance. It creates the sandbox on entry and tears it down on exit.c.remotereadsBash.run.__module__(="agentix.bash") as the routing key. Unary calls go overPOST /_remote; methods returningAsyncIterator[T]auto-upgrade to Socket.IO.
Run it:
The first run pulls the runtime and namespace images (≈ 30 s). Subsequent sandboxes start in about 100 ms.
Write your own namespace¶
A namespace is a normal Python project — whatever uv init --lib produces —
plus one entry-point block.
Composition over inheritance
MyAgent subclasses Namespace purely for the discovery hook —
its methods are @staticmethod with no self and no instance state.
Do not create a separate MyAgentImpl that inherits from MyAgent.
If you split an impl from a stub, compose them with
Dispatcher.bind_namespace instead.
Build, bundle, deploy:
agentix build ./my-namespace # → agentix/myagent:0.1.0
agentix install bash myagent -o my-bundle:0.1.0 # bundle several namespaces
agentix deploy local --image my-bundle:0.1.0 # run a sandbox
pip install agentix-myagent is everything your users need. The framework
discovers the entry point, and from agentix.myagent import MyAgent
resolves natively in their code.
Next¶
-
Deployments, trace sinks, spec resolvers, wire patterns, CLI subcommands — all six axes share this same entry-point pattern.
-
How the dispatcher, runtime, and wire patterns fit together inside the sandbox.
-
Every
agentix <subcommand>documented:build,install,deploy,check,plugins. -
The wire-format contract between caller and sandbox — useful when porting the client to another language.