_desktopdocs
guide

The Computer Image

What's inside the Docker image — desktop, tools, resources, and configuration.

The computer is a Docker image (computer-desktop, built from the repo's Dockerfile): a real Debian 13 (trixie) desktop, small enough to boot in seconds and capped at 2 CPU / 3 GB RAM.

The desktop stack

The entrypoint (entrypoint.sh) starts the pieces in order:

text
Xvfb :99  →  XFCE session  →  x11vnc :5900  →  websockify/noVNC :6080  →  daemon :8095
PieceRole
Xvfb on :99Virtual X server — no display hardware needed
XFCELightweight, fully normal desktop environment
x11vncExposes the X display over VNC (container-internal)
websockify + noVNCStreams it to your browser at http://localhost:6080/vnc.html
daemonHTTP control plane on :8095 — see Daemon API

Preinstalled toolchain

Everything an agent needs to do real work:

CategoryTools
LanguagesPython 3
Editor / shellnano, bash (terminal app: xterm)
VCSgit
Networkcurl, ca-certificates
Searchripgrep
ImagesImageMagick — import (screenshots), convert
X11 controlxdotool, xvfb, x11vnc
Clipboardxclip
BrowserChromium (Chrome-for-Testing build) at /opt/chrome/chrome, aliased as chromium

Build tools are not preinstalled (kept out for size). Install on demand:

bash
apt-get install -y --no-install-recommends build-essential

No node/npm either. If a task needs them:

bash
docker exec -d linux-desktop bash -c 'apt-get update && apt-get install -y --no-install-recommends nodejs npm'

Files and persistence

  • /workspace inside the container is mounted from ./workspace on your host.
  • Screenshots written to /workspace land directly on your host disk.
  • SDK worker logs live under /workspace/.workers/<title>/console.log.
  • Everything outside /workspace is ephemeral — reset with docker compose down && docker compose up -d.

Configuration

Set these in docker-compose.yml (or your shell env):

VariableDefaultPurpose
RESOLUTION1600x900Virtual display geometry
DISPLAY:99X display used by everything GUI
API_PORT8095Daemon port inside the container
GH_TOKEN / GITHUB_TOKENemptyGit auth + GitHub API calls from inside
GIT_AUTHOR_NAME / GIT_AUTHOR_EMAILeve-agent / eve@agent.localCommit identity for agent-made commits
GIT_COMMITTER_NAME / GIT_COMMITTER_EMAILsame as authorSame

Resources and health

yaml
mem_limit: 3g        # Chromium is the memory hog — raise if needed
cpus: 2
restart: unless-stopped
healthcheck:         # probes BOTH the viewer page and /api/health,
  interval: 30s      # so a dead desktop fails instead of faking healthy

Check health yourself:

bash
curl -sf http://localhost:8095/api/health   # {"ok": true} only when the X display answers
docker exec linux-desktop pgrep -f xfce4-session   # desktop process alive

More operational detail in Docker setup.