services: ai-cli: build: context: . dockerfile: Dockerfile args: USERNAME: ${CONTAINER_USER:-dev} USER_UID: ${USER_UID:-1001} USER_GID: ${USER_GID:-1001} INSTALL_CODEX_CLI: ${INSTALL_CODEX_CLI:-true} INSTALL_CLAUDE_CODE: ${INSTALL_CLAUDE_CODE:-true} INSTALL_GROK_BUILD: ${INSTALL_GROK_BUILD:-true} CODEX_CLI_VERSION: ${CODEX_CLI_VERSION:-latest} CLAUDE_CODE_VERSION: ${CLAUDE_CODE_VERSION:-latest} image: ai-cli-workspace:local init: true tty: true stdin_open: true working_dir: /workspace volumes: - type: bind source: ${WORKSPACE_DIR:-./workspace} target: /workspace # Container user's home directory (where Grok Build stores ~/.grok, login tokens, config, etc.) # By default it uses an internal Docker volume. To have it in a visible host folder, # set AI_CLI_HOME_DIR in .env to a local path (e.g. ./ai-cli-home). - ${AI_CLI_HOME_DIR:-ai_cli_home}:/home/${CONTAINER_USER:-dev} - ai_cli_npm_cache:/home/${CONTAINER_USER:-dev}/.npm - ai_cli_pip_cache:/home/${CONTAINER_USER:-dev}/.cache/pip environment: APP_HOST: 0.0.0.0 APP_PORT: ${APP_PORT:-8000} WEB_PORT: ${WEB_PORT:-3000} VITE_PORT: ${VITE_PORT:-5173} OPENAI_API_KEY: ${OPENAI_API_KEY:-} ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} XAI_API_KEY: ${XAI_API_KEY:-} ports: - "${BIND_ADDRESS:-127.0.0.1}:${APP_PORT:-8000}:${APP_PORT:-8000}" - "${BIND_ADDRESS:-127.0.0.1}:${WEB_PORT:-3000}:${WEB_PORT:-3000}" - "${BIND_ADDRESS:-127.0.0.1}:${VITE_PORT:-5173}:${VITE_PORT:-5173}" cap_drop: - ALL security_opt: - no-new-privileges:true volumes: ai_cli_home: ai_cli_npm_cache: ai_cli_pip_cache: