Docker
Build the image
Section titled “Build the image”From a checkout of the release you want:
git clone https://github.com/frogg-app/frogg.git && cd frogggit checkout v0.6.19npm ciscripts/release/build-docker.sh # builds froggapp/frogg:<version> for this machine--platform linux/arm64 builds another architecture; --push builds amd64 and arm64 and
pushes (set FROGG_IMAGE_REPO to push to your own registry).
Run it
Section titled “Run it”services: frogg: image: froggapp/frogg:0.6.19 container_name: frogg-daemon restart: unless-stopped ports: - "0.0.0.0:9999:9999" environment: FROGG_PASSWORD: "change-me" # FROGG_HOSTNAMES: "frogg.example.com,.lan" volumes: - ./frogg-home:/home/frogg/.frogg # agents, config, pairing - ./workspace:/workspace # code the agents work ondocker compose up -ddocker logs -f frogg-daemonOpen http://<host>:9999/.
What the image does:
- Runs
frogg daemon start --foregroundon0.0.0.0:9999as userfrogg(uid 1000), with the web app on and JSON logs. - Fixes ownership of mounted volumes, then drops privileges.
- Health check:
GET /api/health. CLAUDE_CONFIG_DIRandCODEX_HOMEpoint inside/home/frogg, so provider logins persist in thefrogg-homevolume.- Warns in the log while the daemon is unclaimed.
Inside a container every client address looks like the Docker bridge, not your LAN.
Set a password (FROGG_PASSWORD) or pair devices; do not rely on LAN trust.
Add agent CLIs
Section titled “Add agent CLIs”The base image has no agent CLIs. Extend it:
FROM froggapp/frogg:0.6.19USER rootRUN npm install -g @anthropic-ai/claude-code @openai/codex opencode-aiLeave the user as root; the entrypoint drops to frogg for the daemon and its agents. Then
sign in inside the container:
docker exec -it -u frogg frogg-daemon claudedocker exec -it -u frogg frogg-daemon codex logindeploy/docker/Dockerfile.agents.example in the repository is the same pattern.
Install script
Section titled “Install script”install-docker.sh wraps docker run with sensible defaults and safe updates:
curl -fsSL https://frogg.app/install-docker.sh | FROGG_IMAGE=froggapp/frogg:0.6.19 FROGG_NO_PULL=1 bashFROGG_NO_PULL=1 uses the image you built locally instead of pulling from Docker Hub.
It runs container frogg-daemon with --restart unless-stopped, maps
$FROGG_BIND:$FROGG_PORT to 9999, mounts $FROGG_HOME (default ~/.frogg) and optionally
$FROGG_WORKSPACE at /workspace, and passes ANTHROPIC_API_KEY, OPENAI_API_KEY,
ANTHROPIC_BASE_URL, OPENAI_BASE_URL and FROGG_HOSTNAMES through if set. All variables are
in the environment reference.
Useful afterwards:
docker exec frogg-daemon frogg auth pairdocker exec frogg-daemon frogg auth claim-statusUpdate
Section titled “Update”curl -fsSL https://frogg.app/install-docker.sh | FROGG_IMAGE=froggapp/frogg:0.6.20 FROGG_NO_PULL=1 bash -s -- --update--update keeps the old container as frogg-daemon-previous, starts the new one, and rolls
back if it is not healthy within FROGG_HEALTH_TIMEOUT seconds (default 90). frogg update does not work inside a container.
Uninstall
Section titled “Uninstall”Run uninstall-docker.sh from the release assets. It removes only containers labelled as
this product; the state directory stays.