Deployment
Agent One is a single Go binary. It runs anywhere Go runs — your laptop, a VPS, EC2, or a container. Docker is optional, never required.
Self-Hosted (Recommended)
Section titled “Self-Hosted (Recommended)”Build and Run
Section titled “Build and Run”# Build a static binarygo build -o agent-one ./cmd/agent
# Run with config in current directory./agent-one
# Or specify a config path./agent-one --config /etc/agent-one/config.yamlCross-Platform Builds
Section titled “Cross-Platform Builds”Use GoReleaser for reproducible cross-platform builds:
# Local test buildgoreleaser release --snapshot --clean
# Full release (creates GitHub release + binaries)goreleaser releaseSupported targets:
| OS | Architecture |
|---|---|
| Linux | amd64, arm64 |
| macOS | amd64, arm64 |
| Windows | amd64 |
All builds use CGO_ENABLED=0 for fully static binaries with no external dependencies.
Systemd Service
Section titled “Systemd Service”For always-on deployment on Linux:
[Unit]Description=Agent OneAfter=network.target
[Service]Type=simpleUser=agentoneWorkingDirectory=/opt/agent-oneExecStart=/opt/agent-one/agent-one --config /opt/agent-one/config.yamlRestart=alwaysRestartSec=5Environment=LITELLM_API_KEY=your-keyEnvironment=GITHUB_TOKEN=your-token
[Install]WantedBy=multi-user.targetsudo systemctl enable agent-onesudo systemctl start agent-oneDocker
Section titled “Docker”Docker is optional but convenient for running Agent One alongside LiteLLM.
Dockerfile
Section titled “Dockerfile”FROM golang:1.22-alpine AS builderWORKDIR /appCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 go build -o agent-one ./cmd/agent
FROM alpine:3.19RUN apk add --no-cache ca-certificatesCOPY --from=builder /app/agent-one /usr/local/bin/COPY config.yaml /etc/agent-one/CMD ["agent-one", "--config", "/etc/agent-one/config.yaml"]Docker Compose
Section titled “Docker Compose”Run Agent One + LiteLLM together:
version: "3.8"services: litellm: image: ghcr.io/berriai/litellm:main-latest ports: - "4000:4000" volumes: - ./litellm_config.yaml:/app/config.yaml command: ["--config", "/app/config.yaml"]
agent-one: build: . depends_on: - litellm volumes: - ./config.yaml:/etc/agent-one/config.yaml - ./data:/data environment: - LITELLM_API_KEY=${LITELLM_API_KEY} - GITHUB_TOKEN=${GITHUB_TOKEN} ports: - "9090:9090" # Webhooks - "4200:4200" # Web portalDeployment Modes
Section titled “Deployment Modes”The same binary supports three modes, differentiated by config:
Personal (Default)
Section titled “Personal (Default)”Single user, single config, single SQLite database. No authentication needed — you own the binary.
agent: name: "My Assistant"One owner + team members. RBAC with 4 roles.
safety: rbac: true| Role | Chat | Config | Hands | Approve Plans | Audit | Manage Members |
|---|---|---|---|---|---|---|
| owner | yes | yes | yes | yes | yes | yes |
| admin | yes | no | yes | yes | yes | no |
| member | yes | no | no | no | no | no |
| guest | no | no | no | no | no | no |
Multi-Tenant
Section titled “Multi-Tenant”Multiple isolated tenants on the same binary. Each tenant gets its own config, database, channels, and budget.
tenants: - id: "Esteban" config: "tenants/Esteban/config.yaml" db_path: "tenants/Esteban/agent.db" channels: ["cli", "whatsapp"] - id: "cronoss" config: "tenants/cronoss/config.yaml" db_path: "tenants/cronoss/agent.db" channels: ["whatsapp-cronoss", "telegram-cronoss"]No shared state between tenants. Budget tracked independently. Tenant resolution by channel.
Web Portal
Section titled “Web Portal”The web portal runs on a configurable port (default 4200):
portal: enabled: true port: 4200Access it at http://localhost:4200. In production, put it behind a reverse proxy (nginx, Caddy) with TLS.
Performance Targets
Section titled “Performance Targets”| Metric | Target |
|---|---|
| Binary size | < 30 MB |
| Startup time | < 2 seconds |
| Idle memory | < 50 MB |
| Average response latency | < 3 seconds (cheap model) |
| Go module dependencies | < 15 |
Health Monitoring
Section titled “Health Monitoring”Agent One exposes health endpoints and supports observability via:
- slog structured logging to stderr
- OpenTelemetry tracing on critical paths (agent loop, LLM calls, tool execution)
- Metrics — message count, latency, token usage, cost, queue depth
doctorcommand — diagnose configuration and connectivity issues
./agent-one doctor # Check LiteLLM connection, MCP servers, channel configs