Requirements

System requirements and support for self-hosting Future AGI

In this page

Check four things before you install:

  • A host that meets the sizing for your usage
  • The required software: Docker and Git
  • A platform that allows privileged containers
  • Host ports that are free, or remapped

Get these right and the Installation run works on the first try.

📝
TL;DR

For a local trial: 4 CPU cores, 8 GB RAM, 20 GB disk, Docker Engine 24+, Docker Compose v2.24+, and Git. The host must allow privileged containers, which rules out Fargate, Cloud Run, and most managed container platforms.

Hardware tiers

Pick the row that matches how you’ll use the instance. The stack runs on the Evaluation tier, but ClickHouse and the Temporal worker are the resource drivers. Under-provisioning RAM is the most common cause of a failed first boot.

TierUse caseCPURAMDisk
EvaluationLocal trial, single user4 cores8 GB20 GB
Team1-20 users, regular eval runs8 cores16 GB50 GB
Production20+ users, high throughput16+ cores32+ GB200 GB+ SSD

ClickHouse and the Temporal worker each hold ~1 GB RAM at steady state. ClickHouse grows with trace volume over time; Postgres stays small. Pulling the images takes a few GB of disk on the first run.

Tip

Docker Desktop only. On Mac, raise the limits in Settings → Resources: RAM ≥ 8 GB, disk ≥ 64 GB. That disk number is the whole Docker VM, not the 20 GB this stack uses, so it has to cover every image and volume on the machine. The defaults (2-4 GB RAM) will OOM-kill ClickHouse or the backend before the stack finishes booting. On Windows those sliders don’t apply, so set the limit in .wslconfig as shown in the Windows tab below.

Software

RequirementMinimumVerify
Docker Engine24.0+docker --version
Docker Composev2.24+docker compose version
Git2.0+git --version

Compose v2.24 is a hard floor, not a recommendation: docker-compose.yml declares its env files with the long path / required form, which older Compose can’t parse. On v2.23 or below the stack fails at parse time, before a single image is pulled.

Install the tools with Homebrew, then start Colima:

brew install docker docker-compose colima git
colima start --cpu 4 --memory 8 --disk 64

Install the tools with apt, then enable the Docker daemon:

sudo apt-get install -y docker.io docker-compose-v2 git
sudo systemctl enable --now docker
sudo usermod -aG docker $USER   # log out and back in

Install Docker Desktop for Windows with the WSL 2 backend, then set the memory limit in WSL, not Docker’s UI (the Settings → Resources sliders apply only to the Hyper-V backend):

# add to %UserProfile%\.wslconfig
[wsl2]
memory=8GB
# then apply:
wsl --shutdown

Platform compatibility

Future AGI runs on any host that allows privileged containers. The code-executor service needs privileged: true to sandbox the user code it runs for evaluations, so platforms that block privileged mode lose that one service: the rest of the stack still runs, but code-based eval features are unavailable.

PlatformSupportedNotes
Linux bare metal / EC2 / GCE / Azure VMYesFull support
GKE / EKS nodes with privileged enabledYesCompose on a node, not Kubernetes manifests. Needs a Pod Security Admission exception
ECS FargateNoprivileged: true not supported
Google Cloud RunNoSame
Render / Railway / Fly.ioNoManaged platforms block privileged mode

There are no Helm charts or Kubernetes manifests: that support is on the roadmap, and Docker Compose is the only supported path today. The GKE/EKS row above means the host is capable, so you’d run Compose on a node rather than deploy the stack as Kubernetes workloads.

Network ports

Make sure these host ports are free before you install, or remap any that collide. Every published port reads from .env with a built-in default (for example ${FRONTEND_PORT:-3000}), so you can change one without touching the Compose file.

ServiceDefaultBind.env key
Frontend30000.0.0.0FRONTEND_PORT
Backend API80000.0.0.0BACKEND_PORT
Gateway80900.0.0.0AGENTCC_GATEWAY_PORT
Model serving80800.0.0.0SERVING_PORT
Code executor80600.0.0.0CODE_EXECUTOR_PORT
Collector OTLP gRPC4317127.0.0.1FI_COLLECTOR_OTLP_PORT
Collector OTLP HTTP4318127.0.0.1FI_COLLECTOR_OTLP_HTTP_PORT
Collector admin9464127.0.0.1FI_COLLECTOR_ADMIN_PORT
Postgres5432127.0.0.1PG_PORT
ClickHouse HTTP8123127.0.0.1CH_HTTP_PORT
ClickHouse TCP9000127.0.0.1CH_PORT
Redis6379127.0.0.1REDIS_PORT
MinIO API9005127.0.0.1MINIO_API_PORT
MinIO console9006127.0.0.1MINIO_CONSOLE_PORT
Temporal7233127.0.0.1TEMPORAL_PORT
Temporal UI (observability)80850.0.0.0TEMPORAL_UI_PORT
PeerDB server (full)9900127.0.0.1PEERDB_PORT
PeerDB UI (full)30010.0.0.0PEERDB_UI_PORT

Anything on 127.0.0.1 is reachable from the host but not from the network, which covers the data stores and the collector’s three ports. The user-facing services bind to 0.0.0.0.

Watch 4317 in particular: it’s the default OTLP port, so it collides with any other OpenTelemetry collector already on the host, and it’s where the SDK sends your traces.

The three rows tagged with a profile name only run under that profile and are free otherwise.

To find a collision before you install, check the ports you care about:

lsof -i :3000 -i :8000 -i :4317    # anything listed is already taken

If one is busy, compose fails at startup with a bind error naming the port. Remap it in .env, which the installer creates for you from .env.example.

Dive deeper

Was this page helpful?

Questions & Discussion