hermes-persistent / Dockerfile
zk-Armor's picture
Upload folder using huggingface_hub
3cb49fd verified
Raw
History Blame Contribute Delete
2.54 kB
# Persistent Hermes Agent (Nous Research) on a Hugging Face Space.
# Connected to OpenRouter with subagent spawning (delegate_task / orchestration).
#
# Layout:
# - Runtime (hermes venv + launcher) baked INTO the image at build time.
# - HERMES data (~/.hermes: config, .env, memories, skills, sessions, cron)
# lives on the /data volume (private bucket) → persistent across restarts.
# - Entrypoint swaps ~/.hermes → /data and seeds the volume on first boot.
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
HOME=/root
# System prerequisites + enable 'universe' so ripgrep / ffmpeg are available.
RUN . /etc/os-release \
&& printf 'deb http://archive.ubuntu.com/ubuntu %s universe\ndeb http://archive.ubuntu.com/ubuntu %s-updates universe\n' "$VERSION_CODENAME" "$VERSION_CODENAME" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
git \
curl \
ca-certificates \
build-essential \
pkg-config \
libssl-dev \
libffi-dev \
python3-dev \
ripgrep \
ffmpeg \
tzdata \
&& rm -rf /var/lib/apt/lists/*
# Install Hermes Agent at BUILD time (root FHS layout):
# code+venv -> /usr/local/lib/hermes-agent
# launcher -> /usr/local/bin/hermes
# node/uv/etc -> /root/.hermes (moved to a seed dir below)
RUN curl -fsSL https://hermes-agent.nousresearch.com/install.sh \
| bash -s -- \
--non-interactive \
--skip-setup
# Pre-build the web dashboard UI so the runtime never needs npm (--skip-build).
# The installer keeps its managed Node under ~/.hermes/node/bin.
# Only runs if the package shipped a `web/` source dir (dev installs may skip it).
RUN if [ -d /usr/local/lib/hermes-agent/web ]; then \
export PATH="/root/.hermes/node/bin:$PATH"; \
cd /usr/local/lib/hermes-agent/web \
&& npm install --no-audit --no-fund \
&& npm run build; \
fi
# Preserve the build-time ~/.hermes (managed node, uv, bundled skills) as a seed
# the runtime entrypoint copies into the persistent volume on first boot.
RUN rm -rf /hermes-seed && mkdir -p /hermes-seed \
&& mv /root/.hermes/* /hermes-seed/ 2>/dev/null || true \
&& ls -la /hermes-seed | head -40
ENV PATH=/usr/local/bin:/usr/bin:/bin
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
WORKDIR /root
EXPOSE 7860
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]