The Docker image is how you run Company Agents on a server. The image bundles the orchestrator, the MCP server, the dashboard, and a PGlite fallback in a single process. Mount the data directory as a volume and the image is stateless.

The official image

ghcr.io/company-agents/company-agents-local:latest
Tags:
  • latest — the most recent stable release
  • 0.1.0, 0.1.1, etc. — pinned versions
  • canary — the current main branch build (not recommended for real use)
The image is multi-arch (linux/amd64, linux/arm64).

Quickstart

docker run -d \
  --name company-agents \
  -p 3101:3101 \
  -p 4200:4200 \
  -v ~/.company-agents:/data \
  -e COMPANY_AGENTS_HOME=/data/instances/default \
  -e MASTER_KEY_PATH=/data/instances/default/secrets/master.key \
  ghcr.io/company-agents/company-agents-local:latest
Open http://localhost:3101. Done. The port mapping exposes:
  • 3101 — the dashboard and API
  • 4200 — the MCP server (used by agents running outside the container, see below)
The volume mapping gives the container persistent storage for the database, the secrets, and any runs that are retained past their workspace lifetime.

Docker Compose

For a permanent setup, compose is easier:
services:
  company-agents:
    image: ghcr.io/company-agents/company-agents-local:latest
    container_name: company-agents
    restart: unless-stopped
    ports:
      - "3101:3101"
      - "4200:4200"
    volumes:
      - ./data:/data
    environment:
      COMPANY_AGENTS_HOME: /data/instances/default
      MASTER_KEY_PATH: /data/instances/default/secrets/master.key
      DATABASE_URL: postgres://company-agents:company-agents@postgres:5432/company-agents
      LLM_PROVIDER: deepseek
      DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY}
    depends_on:
      - postgres

  postgres:
    image: postgres:16
    container_name: company-agents-pg
    restart: unless-stopped
    volumes:
      - ./pg:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: company-agents
      POSTGRES_PASSWORD: company-agents
      POSTGRES_DB: company-agents
docker compose up -d and you have a fully persistent installation.

Volume layout

Inside the container, /data is the root of everything:
/data/
├── instances/
│   └── default/
│       ├── db/              # PGlite (if using PGlite)
│       ├── data/
│       │   ├── storage/     # user-uploaded assets
│       │   └── backups/
│       ├── secrets/
│       │   └── master.key
│       ├── runs/            # retained workspaces
│       └── config.json
└── runtime-services/
    ├── <run-id>/
    └── shared/
You should mount this as a single volume. Mounting each sub-directory separately is a recipe for inconsistent state.

Running agents that need their own binaries

The Company Agents container does not include the CLIs for Claude Code, Codex, Gemini, etc. Agents that need those CLIs run on the host, not inside the container, and talk to the MCP server at <host>:4200. Typical setup:
  1. Container runs the orchestrator, database, and dashboard
  2. Host runs the adapter for each CLI (Claude Code, Codex, Gemini, whatever)
  3. Adapters are configured with MCP_SERVER_URL=http://localhost:4200
Adapters are lightweight; they spawn the agent binary, forward stdio, and relay tool calls to the MCP server. There is no harm in running many adapter processes on the same host. If you want a single “everything in one container” experience, the desktop installer (Electron app) is a better fit. The Docker image is for server deployments where agents-as-binaries are managed outside.

Health and logs

# Check the container is healthy
curl http://localhost:3101/healthz

# Follow logs
docker logs -f company-agents

# Shell into the container for debugging
docker exec -it company-agents sh
The image has no shell by default (it is built on distroless). Use the -debug tag if you need one:
ghcr.io/company-agents/company-agents-local:0.1.0-debug

Upgrading

docker compose pull
docker compose up -d
The schema migrator runs on container start. Migrations are backward-compatible within a minor version. Major-version upgrades require a one-time migration step documented in the release notes. Always back up your data volume before a major upgrade:
docker compose down
tar -czf company-agents-backup-$(date +%F).tar.gz ./data ./pg
docker compose up -d

Resource requirements

Minimum:
  • 2 vCPUs
  • 4 GB RAM
  • 20 GB disk (more if you retain workspaces)
Recommended for a small team:
  • 4 vCPUs
  • 8 GB RAM
  • 50 GB disk
The orchestrator itself is cheap. What uses RAM is PGlite (a few hundred MB) and any agents running inline. If agents run on the host (as they should for most setups), the container footprint is small.

Next