A deterministic install of the local (laptop) shape, written for a coding agent operating a shell on the target machine. Humans are welcome too — the narrative version is docs/full-local.md, and remote shapes are covered by deploy/README.md.
Rules: run the steps in order; after each step run its verification exactly; if a verification fails, stop and report the failing step with its command output — do not improvise a fix or continue.
docker info --format '{{.ServerVersion}}'
docker compose versionVerification: both commands succeed. If either fails, stop — Docker with the Compose plugin is the one prerequisite, and installing it is the operator's call, not yours.
curl -fsSL https://druks.ai/install.sh | bashVerification: the command exits 0 and ends with docker compose up -d
output followed by a message that the stack is up. ~/druks now contains
druks.toml, .env, and compose.yaml.
cd ~/druks
docker compose ps
curl -fsS http://127.0.0.1:8001/healthVerification: web, postgres, redis, and drukbox are running
(none restarting), and the health endpoint returns {"status":"ok"}.
cd ~/druks
docker compose exec web druks doctorVerification: druks doctor exits 0. Every genuine-health check passes; the
Claude, Codex, and GitHub checks show as pending (○) — the operator clears
those in the browser, which no shell step can do, so they never fail the
command. A non-zero exit means a genuine fault: stop and report it.
Report that druks is installed and tell the operator to finish in the
dashboard at http://127.0.0.1:8001: Settings → Harnesses connects
Claude and Codex (agent runs refuse to start on an unconnected harness) and
the GitHub App druks acts as. Then docker compose exec web druks doctor --sandbox proves the full sandbox path with a real container.
Put host-local Docker Compose changes in ~/druks/compose.override.yaml. Add
local services, service overrides, and named volumes there. install.sh creates
this file once and never changes it. Your changes survive every install and
upgrade.
install.sh refreshes the repo compose files on each run. Do not edit
compose.yaml or compose.docker-sbx.yaml. The next install overwrites
these files.
Example — bake locally-installed apps into the web image:
services:
web:
image: druks-with-apps
build: ./appimageApply a change with docker compose up -d from ~/druks.