reef

Contained AI agents on your servers.

Hermes

Give each person their own Hermes agent: one microVM apiece, a private dashboard, and nothing reachable on the network but openrouter.ai. The role pins v0.21.0 by digest; copy it into your own repo before you rely on it.

This page assumes a prepared host: reef and msb installed, KVM working.

Secret

The role spends one OpenRouter key. Put it in ~/.local/state/reef/secrets.toml, which must be chmod 600:

[hermes]
openrouter = "sk-or-..."

The value is substituted host-side against openrouter.ai. The guest only ever sees a placeholder, so a new key reaches running agents without a restart: change it here, then run reef secret rotate reef://hermes/openrouter.

OpenRouter is only what this example picks. Any provider the agent supports works: rename the key in [secrets], point its host at that provider’s API, and put the same domain in the role’s [network] egress.

Fleet

One entry per person. owner is who may open a terminal into the agent later; the env keys are the dashboard’s basic auth, which every agent must set or the dashboard fails closed:

[agents.ana-hermes]
role = "hermes"
owner = "ana"

[agents.ana-hermes.env]
HERMES_DASHBOARD_BASIC_AUTH_USERNAME = "ana"
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH = "scrypt$16384$8$1$..."
HERMES_DASHBOARD_BASIC_AUTH_SECRET = "..."

The hash is scrypt; the secret is the HMAC key that signs sessions, and without it every restart logs the agent’s users out. Rotate a password with the image’s own helper:

reef agent exec ana-hermes -- env PYTHONPATH=/opt/hermes \
  /opt/hermes/.venv/bin/python -c \
  "import plugins.dashboard_auth.basic as b; print(b.hash_password('pw'))"

For org SSO instead, set HERMES_DASHBOARD_OIDC_ISSUER and HERMES_DASHBOARD_OIDC_CLIENT_ID in the role’s [env] and leave the basic auth keys out.

Run

curl -fsSL https://reef.clawbits.ai/roles/hermes.toml -o role.toml
curl -fsSL https://reef.clawbits.ai/fleet/hermes.toml -o fleet.toml
reef role apply role.toml
reef fleet apply fleet.toml

fleet apply prints each agent’s URL as it creates it, and agent get shows it again later. Open ana’s and log in as ana. The shipped fleet file is a demo: its hashes are the password password and its session secrets are in public git, so replace both before this reaches anyone.

Re-run reef fleet apply after editing the file. An env change restarts the agent in place; only a role change recreates the VM.

Notes

Next: set up a team, for agents a team shares behind the org’s SSO.