# hermes-box-lite configuration. Sourced by ./box. Edit freely.# Base OCI image each instance is built from. `ubuntu:24.04` is multi-arch — on# Apple Silicon smolvm pulls the native arm64 variant (no emulation).BASE_IMAGE="ubuntu:24.04"# VM sizing. Values are validated before smolvm is called. STORAGE_GIB is optional;# the 64 GiB overlay leaves room for a large Hermes database and backup staging.BOX_CPUS="4"BOX_MEM_MIB="8192"BOX_OVERLAY_GIB="64"BOX_STORAGE_GIB=""# Tool major line selected during provisioning.NODE_MAJOR="22" # NodeSource major line; claude-code, codex, executor run on Node# Pin exact npm package versions so `box new`/`box repair` are reproducible# instead of always installing whatever is currently `latest`. Empty (the# default) keeps the old latest-on-install behavior.CLAUDE_CODE_VERSION="" # e.g. "2.1.197" — see `npm view @anthropic-ai/claude-code versions`CODEX_VERSION="" # e.g. "0.142.4" — see `npm view @openai/codex versions`EXECUTOR_VERSION="" # e.g. "1.5.26" — the github.com/RhysSullivan/executor npm # package; "executor" is a generic name, so double-check # `npm view executor repository.url` if pinning a version# --- Hermes Agent (Nous Research) -------------------------------------------# Installed headless via the official script. Code -> /usr/local/lib (root-mode# FHS layout); state -> $HERMES_HOME on /data.INSTALL_HERMES=1HERMES_INSTALL_ARGS="--skip-browser" # headless box: skip Playwright/Chromium depsHERMES_REPO_URL="https://github.com/NousResearch/hermes-agent.git"HERMES_GIT_SHA="244a6f2ceb7f58c16b3cb2186584c39524e37874"# SHA-256 of https://hermes-agent.nousresearch.com/install.sh, verified before# the installer is ever executed as root. Update intentionally with upstream;# last verified against upstream 2026-06-30. Run `make check-hermes-pin` to# check this pin against the live installer without committing a new one.HERMES_INSTALLER_SHA256="a93c65b01ea392e179cf872e182bd01a2b65c0c15f17833e9f9569033ef10e07"# Optional repository-relative, self-contained Git bundle. Keep private/custom# bundles under artifacts/ (ignored by Git). The commit and all of its required# objects must be present; incremental bundles with external prerequisites fail.HERMES_GIT_BUNDLE=""HERMES_API_PORT="8642"EXPOSE_HERMES_API=0HERMES_API_PORT_LO=8650HERMES_API_PORT_HI=8850# Applied only to active imported config/env/cron/hook/script files. Empty by# default — this is operator/machine-specific (e.g. your old macOS username),# not something to commit. Set it here for your own deployment, or pass# --map OLD=NEW per invocation (see docs/nexus-operations.md's migration# runbook for a worked example); import-hermes applies both if both are set.HERMES_IMPORT_PATH_MAP=""# --- Executor (github.com/RhysSullivan/executor) ----------------------------# npm global; daemon + web UI + MCP. Data lives under $HOME (=/data) via XDG.INSTALL_EXECUTOR=1EXECUTOR_PORT="4788" # executor's port INSIDE the box (always 4788)EXPOSE_EXECUTOR_WEB=1 # forward each box's executor UI to a unique host portEXECUTOR_PORT_LO=4790 # host-port range; `box new` picks a free random port inEXECUTOR_PORT_HI=4999 # [LO,HI] per box, so many boxes don't collideWIRE_EXECUTOR_MCP=1 # register daemon's authenticated HTTP MCP for claude + codex
# hermes-box-lite configuration. Sourced by ./box. Edit freely.
# Base OCI image each instance is built from. `ubuntu:24.04` is multi-arch — on
# Apple Silicon smolvm pulls the native arm64 variant (no emulation).
BASE_IMAGE="ubuntu:24.04"
# VM sizing. Values are validated before smolvm is called. STORAGE_GIB is optional;
# the 64 GiB overlay leaves room for a large Hermes database and backup staging.
BOX_CPUS="4"
BOX_MEM_MIB="8192"
BOX_OVERLAY_GIB="64"
BOX_STORAGE_GIB=""
# Tool major line selected during provisioning.
NODE_MAJOR="22" # NodeSource major line; claude-code, codex, executor run on Node
# Pin exact npm package versions so `box new`/`box repair` are reproducible
# instead of always installing whatever is currently `latest`. Empty (the
# default) keeps the old latest-on-install behavior.
CLAUDE_CODE_VERSION="" # e.g. "2.1.197" — see `npm view @anthropic-ai/claude-code versions`
CODEX_VERSION="" # e.g. "0.142.4" — see `npm view @openai/codex versions`
EXECUTOR_VERSION="" # e.g. "1.5.26" — the github.com/RhysSullivan/executor npm
# package; "executor" is a generic name, so double-check
# `npm view executor repository.url` if pinning a version
# --- Hermes Agent (Nous Research) -------------------------------------------
# Installed headless via the official script. Code -> /usr/local/lib (root-mode
# FHS layout); state -> $HERMES_HOME on /data.
INSTALL_HERMES=1
HERMES_INSTALL_ARGS="--skip-browser" # headless box: skip Playwright/Chromium deps
HERMES_REPO_URL="https://github.com/NousResearch/hermes-agent.git"
HERMES_GIT_SHA="244a6f2ceb7f58c16b3cb2186584c39524e37874"
# SHA-256 of https://hermes-agent.nousresearch.com/install.sh, verified before
# the installer is ever executed as root. Update intentionally with upstream;
# last verified against upstream 2026-06-30. Run `make check-hermes-pin` to
# check this pin against the live installer without committing a new one.
HERMES_INSTALLER_SHA256="a93c65b01ea392e179cf872e182bd01a2b65c0c15f17833e9f9569033ef10e07"
# Optional repository-relative, self-contained Git bundle. Keep private/custom
# bundles under artifacts/ (ignored by Git). The commit and all of its required
# objects must be present; incremental bundles with external prerequisites fail.
HERMES_GIT_BUNDLE=""
HERMES_API_PORT="8642"
EXPOSE_HERMES_API=0
HERMES_API_PORT_LO=8650
HERMES_API_PORT_HI=8850
# Applied only to active imported config/env/cron/hook/script files. Empty by
# default — this is operator/machine-specific (e.g. your old macOS username),
# not something to commit. Set it here for your own deployment, or pass
# --map OLD=NEW per invocation (see docs/nexus-operations.md's migration
# runbook for a worked example); import-hermes applies both if both are set.
HERMES_IMPORT_PATH_MAP=""
# --- Executor (github.com/RhysSullivan/executor) ----------------------------
# npm global; daemon + web UI + MCP. Data lives under $HOME (=/data) via XDG.
INSTALL_EXECUTOR=1
EXECUTOR_PORT="4788" # executor's port INSIDE the box (always 4788)
EXPOSE_EXECUTOR_WEB=1 # forward each box's executor UI to a unique host port
EXECUTOR_PORT_LO=4790 # host-port range; `box new` picks a free random port in
EXECUTOR_PORT_HI=4999 # [LO,HI] per box, so many boxes don't collide
WIRE_EXECUTOR_MCP=1 # register daemon's authenticated HTTP MCP for claude + codex