From 57618a000e424dae24721590b8697ae6ce440510 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 2 May 2026 14:07:28 -0400 Subject: [PATCH] chore(docker): drop stale local Dockerfiles, simplify dev overlay (#237) Removes `docker/agent/Dockerfile` and `docker/workspace/Dockerfile`: - `docker/agent/Dockerfile` cloned the wrong repo (`outsourc-e/hermes-agent` is the workspace fork, not the agent) and ran the old `claude` binary name. It would not build successfully. - `docker/workspace/Dockerfile` was a dev-mode (`pnpm dev`) variant that duplicated the production root `Dockerfile` for no benefit; the dev overlay now reuses the root Dockerfile with hot-build instead. Updates `docker-compose.dev.yml` to build only the workspace from local source via the canonical root Dockerfile. The Hermes Agent service stays on the canonical `nousresearch/hermes-agent:latest` upstream image (~750k pulls), with a clear note in the overlay header explaining how to override if a custom agent image is genuinely needed. Adds a quick-start path table at the top of README pointing 'compose gig' users straight at the Docker section, and rewrites the dev-overlay section to match the simpler reality. This addresses the recurring 'can we get a docker image so I can set up a compose gig instead of building from source' community ask. The image already exists at `ghcr.io/outsourc-e/hermes-workspace:latest`, the compose file just works \u2014 the stale local Dockerfiles were the only thing making the dev overlay confusing. Co-authored-by: Aurora release bot --- README.md | 21 +++++++++++++++++---- docker-compose.dev.yml | 25 ++++++++++++++----------- docker/agent/Dockerfile | 15 --------------- docker/workspace/Dockerfile | 17 ----------------- 4 files changed, 31 insertions(+), 47 deletions(-) delete mode 100644 docker/agent/Dockerfile delete mode 100644 docker/workspace/Dockerfile diff --git a/README.md b/README.md index eadd1fbe..fffebb52 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,15 @@ Start here: [docs/swarm/](./docs/swarm/) ## 🚀 Quick Start -### One-line install (recommended) +Three paths — pick the one that matches you: + +| Path | Best for | Time | +|---|---|---| +| **🐳 [Docker Compose](#-docker-quickstart)** | Self-hosters, home labs, "give me a compose gig" | ~2 min | +| **🌐 One-line install** | Local dev on macOS/Linux | ~3 min | +| **🔌 Attach to existing `hermes-agent`** | You already run Hermes Agent | ~1 min | + +### One-line install ```bash curl -fsSL https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/install.sh | bash @@ -372,14 +380,19 @@ Open `http://localhost:3000` and complete the onboarding. ### Building from source -Want to hack on the workspace or the bundled agent Dockerfile? Use the dev overlay: +Want to hack on the workspace and have local changes hot-built into the +container? Use the dev overlay: ```bash docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build ``` -The base `docker-compose.yml` stays untouched — the overlay adds `build:` blocks -that take priority over `image:`, so both services compile from local source. +The base `docker-compose.yml` stays untouched — the overlay adds a `build:` +block for the `hermes-workspace` service so the local repo is compiled +instead of pulled. The Hermes Agent service still uses the canonical +`nousresearch/hermes-agent:latest` image; if you need a custom agent +build, tag it locally and override `image:` in your own +`compose.override.yml`. ### Using a Pre-Built Image (Coolify / Easypanel / Dokploy / Unraid) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index fc134e5b..77d881f2 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,23 +1,26 @@ -# Hermes Workspace + Agent — Development Overlay +# Hermes Workspace — Development Overlay # -# Builds both services from source instead of pulling pre-built images. -# Use when modifying the workspace or the bundled agent Dockerfile. +# Builds the Workspace image from local source instead of pulling the +# pre-built GHCR image. Use when iterating on Workspace code (server, +# routes, UI) and you want changes to land in the container without +# publishing a release first. +# +# The Hermes Agent service still uses the canonical upstream image +# (nousresearch/hermes-agent:latest, ~750k pulls) — there is no need to +# rebuild that locally, and doing so just couples the compose stack to +# whatever vendored Python the workspace happens to ship. If you really +# need a custom agent image, build/tag it separately and override the +# `image:` field in your own .override.yml. # # Usage: # docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build # # The base docker-compose.yml stays untouched for a regular install-and-run. # When this overlay is merged in, `build:` takes priority over `image:` for -# each service, so source code is compiled locally and tagged with the -# upstream image name. +# the workspace service so local source is compiled instead of pulled. services: - hermes-agent: - build: - context: . - dockerfile: docker/agent/Dockerfile - hermes-workspace: build: context: . - dockerfile: docker/workspace/Dockerfile + dockerfile: ./Dockerfile diff --git a/docker/agent/Dockerfile b/docker/agent/Dockerfile deleted file mode 100644 index ce0b3ea2..00000000 --- a/docker/agent/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.11-slim - -RUN apt-get update \ - && apt-get install -y --no-install-recommends curl git \ - && rm -rf /var/lib/apt/lists/* - -RUN git clone https://github.com/outsourc-e/hermes-agent.git /app - -WORKDIR /app - -RUN pip install --no-cache-dir -e . - -EXPOSE 8642 - -CMD ["claude", "gateway", "run"] diff --git a/docker/workspace/Dockerfile b/docker/workspace/Dockerfile deleted file mode 100644 index 6cbc4072..00000000 --- a/docker/workspace/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM node:22-slim - -RUN npm install -g pnpm - -WORKDIR /app - -COPY package.json pnpm-lock.yaml* ./ - -RUN pnpm install --no-frozen-lockfile - -COPY . . - -ENV HERMES_API_URL=http://hermes-agent:8642 - -EXPOSE 3000 - -CMD ["pnpm", "dev", "--host", "0.0.0.0", "--port", "3000"]