$ docker compose -f infra/docker-compose.yml up --build Bootstrap
Run the platform on a host you control
Start the Ax stack with Docker Compose, Caddy, and a runner token tied to your platform domain.
Ax
Ax turns a uv Python project into a running service on a host you control. Login to the runner, initialize the app, and deploy from the project directory.
Problem
Teams often get a useful Python agent, worker API, or internal service running before they have a simple place to host it. The next step becomes tickets, platform glue, routing, auth, and container boilerplate.
Ax gives that first deploy layer a narrow shape: one runner, one reverse proxy, one CLI, and a base hostname or IP you own.
Workflow
$ docker compose -f infra/docker-compose.yml up --build Bootstrap
Start the Ax stack with Docker Compose, Caddy, and a runner token tied to your platform domain.
$ ax login apps.example.com Login
Use the same base domain on the server and your laptop, then authenticate once with the runner token.
$ ax init && ax deploy Deploy
Initialize app metadata, push the project to the runner, build it, and start it as a container.
What It Handles
Login once, run ax init, then deploy from the project directory.
The runner builds Python projects with uv sync --frozen and starts them with uv.
Caddy routes platform health checks, runner API calls, and app traffic from your hostname or IP.
Inspect processes, read logs, restart apps, stop services, and remove deployments from the same CLI.
Stack
Deploy Targets
Install
Run the platform, install the editable CLI with uv tool install -e ./cli, then login and deploy from your app directory.