Nous Research's self-improving agent as a mixin — the Hermes install in an overlay, with the An...
111
Nous Research's self-improving agent as a mixin — the Hermes install in an overlay, with the Anthropic, OpenAI and OpenRouter credentials, the egress policy its provider resolution needs, and the startup hook that works out which of the three is genuinely bound. Layer it onto a shell base and run `hermes`.
| Name | Required | Default | Description |
|---|---|---|---|
version | Optional | 2026.9.14 | hermes-agent release to install, without the tag's leading "v" |
[email protected]| Type | Required | Description | |
|---|---|---|---|
com.docker.sandbox/network-policy@1 | Required | — | |
com.docker.sandbox/credential@1 | Optional | Anthropic API access (API key or claude.ai OAuth) | |
com.docker.sandbox/credential@1 | Optional | OpenAI API access | |
com.docker.sandbox/credential@1 | Optional | OpenRouter API access (200+ models) | |
com.docker.sandbox/lifecycle@1 | Required | — | |
com.docker.sandbox/agent-context@1 | Required | — | |
sbx run <agent> --kit docker/sbx-kit-hermes-agent-mixin:latestRun the following command to install sbx on your machine.
brew install docker/tap/sbxwinget install Docker.sbxNote
Experimental: Sandbox Kit v3This kit uses the experimental Sandbox Kit specification, specifically v3. The format and runtime behavior may change before v3 is stable.
Nous Research's Hermes Agent
as a kind: mixin kit: an overlay you layer onto a shell workload, rather
than a sandbox image of its own. The workload form is
../hermes-agent.
sbx create --kit docker.io/dockerdev/sbx-kit-shell --kit ./hermes-agent-mixin
sbx exec <sandbox> -- sh -lc 'hermes'
The login shell (sh -lc) matters — see "Run it from a login shell" below.
hermes lands at /home/agent/.local/bin/hermes, with a shim on PATH at
/usr/local/bin/hermes.
Composing this kit and ../hermes-agent is refused: both provide
hermes-agent, and one capability name has one owner.
The Hermes virtualenv and project tree under ~/.hermes, the anthropic,
openai and openrouter credentials, the egress policy Hermes' provider
resolution needs, and the startup hook that decides which of the three
credentials is genuinely bound.
The release is pinned rather than resolved at build time. The descriptor's
version arg carries upstream's release tag without its leading v, the recipe
checks out exactly that tag with upstream's own scripts/install.sh, and the kit
publishes provides: ["hermes-agent@<version>"] plus a top-level version: from
the same arg — so a kit asking for hermes-agent >= 2026.9 can resolve against
it.
Hermes reports two numbers and only one of them is selectable. hermes --version
opens with Hermes Agent v<package version> (<release date>): the package
version (hermes_cli.__version__) moves on its own and no installer input picks
it, while the parenthesised release date is upstream's stamp for the tag. The pin
is that tag, and the build fails unless the installed CLI reports it in that
field.
To bump, take the newest stable tag and drop its v:
curl -fsSI -o /dev/null -w '%{redirect_url}\n' \
https://github.com/NousResearch/hermes-agent/releases/latest
../hermes-agent must move in the same change — both kits
provide hermes-agent, and their copies of hermes-anthropic-auth.sh are
byte-identical by hand.
The startup hook writes ~/.hermes/anthropic-auth.env and appends a source
line to ~/.profile. Only a login shell reads it. Without it, sentinel API
keys for services the host never bound stay in the environment, and Hermes'
own provider auto-detection routes to one of them with no real key behind it.
The workload form has an entrypoint that sources the file directly; a mixin
has no entrypoint, so ~/.profile is the path.
ENTRYPOINT.agent-context@1's filename is
workload-only, so this kit contributes a body and the base decides which
file the agent reads.HERMES_HOME and HERMES_DISABLE_LAZY_INSTALLS ride in
/etc/profile.d/hermes-agent-env.sh instead of ENV.files/files/home/.local/bin/hermes-anthropic-auth.sh
is a copy of the same file in ../hermes-agent/files/, not a reference to
it: a kit's build context is rooted at its own descriptor's directory and may
not escape it, so a sibling kit's assets are unreachable from this recipe. The
two copies must be changed together.
Pulls:
63
Last week