# Friendlier path than `docker run` — mount ./agentx-data, bring up daemon + # dashboard together, pick up secrets from ./.env. # # Quick start: # 1. cp .env.example .env (optional API keys) # 2. docker compose up --build -d # 3. open http://127.0.0.1:4202 # # The daemon and the dashboard run in two separate containers so you can # upgrade / restart them independently. They share the ./agentx-data volume # so config, sessions, and task history are visible to both. services: init: build: context: . args: # Set to 1 if you want Claude Code baked into the image. INSTALL_CLAUDE: "0" image: agentx:${AGENTX_IMAGE_TAG:-latest} volumes: - ${AGENTX_DATA_DIR:-./agentx-data}:/data entrypoint: ["node", "/opt/agentx-docker/init.mjs"] daemon: image: agentx:${AGENTX_IMAGE_TAG:-latest} depends_on: init: condition: service_completed_successfully restart: unless-stopped ports: - "127.0.0.1:${AGENTX_DAEMON_PORT:-18800}:18800" volumes: - ${AGENTX_DATA_DIR:-./agentx-data}:/data env_file: - ${AGENTX_ENV_FILE:-.env} command: ["daemon", "start"] dashboard: image: agentx:${AGENTX_IMAGE_TAG:-latest} depends_on: init: condition: service_completed_successfully restart: unless-stopped ports: - "127.0.0.1:${AGENTX_DASHBOARD_PORT:-4202}:4202" volumes: - ${AGENTX_DATA_DIR:-./agentx-data}:/data env_file: - ${AGENTX_ENV_FILE:-.env} command: ["board", "serve", "--bind", "0.0.0.0"]