From 62019d5916864c94ba1e892117b19c90aa07dc3f Mon Sep 17 00:00:00 2001 From: Soham Dasgupta Date: Tue, 13 Jan 2026 14:14:56 +0530 Subject: [PATCH 1/3] feat: add OpenCode CLI support in Docker - Install OpenCode CLI in Dockerfile alongside Claude and Cursor - Add automaker-opencode-config volume for persisting auth - Add OpenCode directory setup in docker-entrypoint.sh - Update docker-isolation.md with OpenCode documentation - Add OpenCode bind mount example to docker-compose.override.yml.example --- Dockerfile | 6 ++++++ docker-compose.override.yml.example | 4 ++++ docker-compose.yml | 9 +++++++++ docker-entrypoint.sh | 15 +++++++++++++++ docs/docker-isolation.md | 12 ++++++++++++ 5 files changed, 46 insertions(+) diff --git a/Dockerfile b/Dockerfile index c32b1764..b31ffd09 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,6 +95,12 @@ RUN curl https://cursor.com/install -fsS | bash && \ ls -la /home/automaker/.local/bin/ && \ echo "=== PATH is: $PATH ===" && \ (which cursor-agent && cursor-agent --version) || echo "cursor-agent installed (may need auth setup)" + +# Install OpenCode CLI (for multi-provider AI model access) +RUN curl -fsSL https://opencode.ai/install | bash && \ + echo "=== Checking OpenCode CLI installation ===" && \ + ls -la /home/automaker/.local/bin/ && \ + (which opencode && opencode --version) || echo "opencode installed (may need auth setup)" USER root # Add PATH to profile so it's available in all interactive shells (for login shells) diff --git a/docker-compose.override.yml.example b/docker-compose.override.yml.example index b4ef6c47..f7f63cc8 100644 --- a/docker-compose.override.yml.example +++ b/docker-compose.override.yml.example @@ -16,6 +16,10 @@ services: # This shares your 'cursor-agent login' OAuth session with the container # - ~/.cursor:/home/automaker/.cursor + # OpenCode CLI - mount your ~/.local/share/opencode directory + # This shares your 'opencode auth login' session with the container + # - ~/.local/share/opencode:/home/automaker/.local/share/opencode + environment: # Set root directory for all projects and file operations # Users can only create/open projects within this directory diff --git a/docker-compose.yml b/docker-compose.yml index 227450ad..69d2ddd2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -78,6 +78,10 @@ services: # This allows 'cursor-agent login' authentication to persist between restarts - automaker-cursor-config:/home/automaker/.cursor + # Persist OpenCode CLI configuration and authentication across container restarts + # This allows 'opencode auth login' authentication to persist between restarts + - automaker-opencode-config:/home/automaker/.local/share/opencode + # NO host directory mounts - container cannot access your laptop files # If you need to work on a project, create it INSIDE the container # or use a separate docker-compose override file @@ -101,3 +105,8 @@ volumes: name: automaker-cursor-config # Named volume for Cursor CLI configuration and authentication # Persists cursor-agent login authentication across container restarts + + automaker-opencode-config: + name: automaker-opencode-config + # Named volume for OpenCode CLI configuration and authentication + # Persists opencode auth login authentication across container restarts diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 017213dc..9321ce37 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -25,6 +25,21 @@ fi chown -R automaker:automaker /home/automaker/.cursor chmod -R 700 /home/automaker/.cursor +# Ensure OpenCode CLI config directory exists with correct permissions +# OpenCode stores config and auth in ~/.local/share/opencode/ +if [ ! -d "/home/automaker/.local/share/opencode" ]; then + mkdir -p /home/automaker/.local/share/opencode +fi +chown -R automaker:automaker /home/automaker/.local/share/opencode +chmod -R 700 /home/automaker/.local/share/opencode + +# OpenCode also uses ~/.config/opencode for configuration +if [ ! -d "/home/automaker/.config/opencode" ]; then + mkdir -p /home/automaker/.config/opencode +fi +chown -R automaker:automaker /home/automaker/.config/opencode +chmod -R 700 /home/automaker/.config/opencode + # If CURSOR_AUTH_TOKEN is set, write it to the cursor auth file # On Linux, cursor-agent uses ~/.config/cursor/auth.json for file-based credential storage # The env var CURSOR_AUTH_TOKEN is also checked directly by cursor-agent diff --git a/docs/docker-isolation.md b/docs/docker-isolation.md index eb8fe7e1..0f486f5f 100644 --- a/docs/docker-isolation.md +++ b/docs/docker-isolation.md @@ -80,6 +80,16 @@ echo "CURSOR_AUTH_TOKEN=$(./scripts/get-cursor-token.sh)" >> .env - **macOS**: Tokens are stored in Keychain (service: `cursor-access-token`) - **Linux**: Tokens are stored in `~/.config/cursor/auth.json` (not `~/.cursor`) +### OpenCode CLI + +OpenCode stores its configuration and auth at `~/.local/share/opencode/`. To share your host authentication with the container: + +```yaml +# In docker-compose.override.yml +volumes: + - ~/.local/share/opencode:/home/automaker/.local/share/opencode +``` + ### Apply to container ```bash @@ -107,6 +117,7 @@ echo "CURSOR_AUTH_TOKEN=$(jq -r '.accessToken' ~/.config/cursor/auth.json)" >> . volumes: - ~/.claude:/home/automaker/.claude - ~/.config/cursor:/home/automaker/.config/cursor + - ~/.local/share/opencode:/home/automaker/.local/share/opencode ``` ## Troubleshooting @@ -117,3 +128,4 @@ volumes: | Can't access web UI | Verify container is running with `docker ps \| grep automaker` | | Need a fresh start | Run `docker-compose down && docker volume rm automaker-data && docker-compose up -d --build` | | Cursor auth fails | Re-extract token with `./scripts/get-cursor-token.sh` - tokens expire periodically. Make sure you've run `cursor-agent login` on your host first. | +| OpenCode not detected | Mount `~/.local/share/opencode` to `/home/automaker/.local/share/opencode`. Make sure you've run `opencode auth login` on your host first. | From 67f18021c3d3f3e5b61b7afcda44ee343385d4c9 Mon Sep 17 00:00:00 2001 From: Soham Dasgupta Date: Tue, 13 Jan 2026 19:50:54 +0530 Subject: [PATCH 2/3] feat: add OpenCode CLI config path to Docker example --- docker-compose.override.yml.example | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.override.yml.example b/docker-compose.override.yml.example index f7f63cc8..dfd74bd4 100644 --- a/docker-compose.override.yml.example +++ b/docker-compose.override.yml.example @@ -19,6 +19,7 @@ services: # OpenCode CLI - mount your ~/.local/share/opencode directory # This shares your 'opencode auth login' session with the container # - ~/.local/share/opencode:/home/automaker/.local/share/opencode + # - ~/.config/opencode:/home/automaker/.config/opencode environment: # Set root directory for all projects and file operations From 33ae860059995bbd823147089ce9c8d34967c161 Mon Sep 17 00:00:00 2001 From: Soham Dasgupta Date: Tue, 13 Jan 2026 20:01:22 +0530 Subject: [PATCH 3/3] feat: update Docker volumes for OpenCode CLI data and user configuration --- docker-compose.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 69d2ddd2..97526b5f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -80,7 +80,10 @@ services: # Persist OpenCode CLI configuration and authentication across container restarts # This allows 'opencode auth login' authentication to persist between restarts - - automaker-opencode-config:/home/automaker/.local/share/opencode + - automaker-opencode-data:/home/automaker/.local/share/opencode + + # Persist OpenCode user configuration across container restarts + - automaker-opencode-config:/home/automaker/.config/opencode # NO host directory mounts - container cannot access your laptop files # If you need to work on a project, create it INSIDE the container @@ -106,7 +109,12 @@ volumes: # Named volume for Cursor CLI configuration and authentication # Persists cursor-agent login authentication across container restarts + automaker-opencode-data: + name: automaker-opencode-data + # Named volume for OpenCode CLI data and authentication (~/.local/share/opencode) + # Persists opencode auth login authentication across container restarts + automaker-opencode-config: name: automaker-opencode-config - # Named volume for OpenCode CLI configuration and authentication - # Persists opencode auth login authentication across container restarts + # Named volume for OpenCode user configuration (~/.config/opencode) + # Persists user configuration across container restarts