Skip to content

Getting Started

You need a container runtime on your machine. Either Docker or Podman will work.

PlatformInstall
macOSDocker Desktop for Mac
WindowsDocker Desktop for Windows (WSL2 backend)
LinuxDocker Engine or Docker Desktop for Linux

Verify it’s working:

Terminal window
docker --version
docker compose version
ResourceMinimumRecommended
Disk5 GB10 GB+
RAM8 GB allocated to container runtime12 GB+
CPU2 cores4+ cores

Adjust resource limits in Docker Desktop → Settings → Resources.

Create a folder and download the compose file:

Terminal window
mkdir devcontainer && cd devcontainer
curl -fsSLO https://raw.githubusercontent.com/f5xc-salesdemos/devcontainer/main/docker-compose.yml

Create a .env file in the same folder to pre-configure Claude Code. Choose one of the following options:

CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-your-token-here

Option B: LiteLLM or Anthropic-compatible proxy

Section titled “Option B: LiteLLM or Anthropic-compatible proxy”

If you have a LiteLLM instance or other Anthropic-compatible proxy, set these two variables:

LITELLM_BASE_URL=https://your-litellm-endpoint.example.com
LITELLM_API_KEY=your-api-key

Set the domain only — the container derives provider-specific URL suffixes automatically (e.g. /anthropic for Claude Code, /api/v1 for OpenCode).

If you have git and gh configured on your host, you can populate most .env values automatically. Start by copying the template:

Terminal window
cp .env.example .env

Then run whichever commands match your setup:

Terminal window
# Git identity
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .env
echo "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env
# Timezone
echo "TZ=$(readlink /etc/localtime | sed 's|.*/zoneinfo/||')" >> .env
# GitHub CLI token (requires: gh auth login)
echo "GH_TOKEN=$(gh auth token)" >> .env
# SSH key (if you use SSH for git)
echo "SSH_PRIVATE_KEY=$(base64 < ~/.ssh/id_ed25519)" >> .env

Then edit .env to add your OAuth token or LiteLLM proxy settings (see options above).

Terminal window
docker compose up -d

The first run pulls the pre-built image from ghcr.io (~1 min depending on your connection). Subsequent starts use the cached image and take seconds.

Terminal window
docker compose exec dev zsh
Terminal window
# AI tools
claude --version
opencode --version
codex --version
aider --version
pi --version
# Languages
node --version
python3 --version
go version
# Cloud CLIs
aws --version
az --version
terraform --version

Test the AI connection:

Terminal window
claude -p "Say hello"
Terminal window
cd /workspace
git clone https://github.com/your-org/your-project.git
cd your-project
claude

The container includes a virtual display for watching AI agents control a browser. Open http://localhost:6080/vnc.html to connect. See Remote Display (noVNC) for details.

8. Browser Automation (Chrome DevTools MCP)

Section titled “8. Browser Automation (Chrome DevTools MCP)”

Claude Code can navigate web pages, take screenshots, and inspect the DOM using the built-in Chrome DevTools MCP server. No setup needed — it works automatically in headless mode. See Chrome DevTools MCP for details.

Terminal window
# Stop (preserves data)
docker compose down
# Start again
docker compose up -d
# Destroy everything and start fresh
docker compose down -v
docker compose up -d

Your code in /workspace and home directory persist across restarts. See Configuration — Data Persistence for details.


For local builds and Dockerfile customization, see Local Development. For VS Code integration, see VS Code. For remote display options, see Remote Display (noVNC).