Take a bare Ubuntu droplet to a running Hermes agent (Nous Research) — hardened, with a GitHub-backed knowledge base and secrets kept in Bitwarden. Your agent is pure data: a persona, a bit of memory, some skills, and a wiki. Edit files, re-run the installer, done.
A simple baseline for students · ~$12/mo droplet · ~10 minutes to first agent
See how it works ↓doctl for the scripted path.openai-codex.Create a droplet, then two scripts do the rest. Each is safe to re-run.
Spin up an Ubuntu 24.04 droplet, 2 GB RAM (the floor — the image build OOMs on 1 GB), SSH-key auth. Prefer the CLI? create-droplet.sh does the same with doctl.
Hardens the box — UFW (SSH only), fail2ban, SSH key-only, an admin user, swap — then installs Docker and brings up the Hermes stack (gateway + dashboard).
Deploys one agent from a directory (persona, memory, skills), wires the GitHub knowledge base, writes only the Bitwarden bootstrap token to disk, and restarts.
One agent per droplet, deployed as a Docker Compose stack. Five steps from a bare droplet to "say hello".
Run as root on a fresh Ubuntu 24.04 droplet. Handles hardening through to a running gateway.
hermes service userRun as the hermes user. Deploys any agent directory in a single command.
SOUL.md; seeds memory onceconfig.yamlCreate → Droplets. Choose Ubuntu 24.04 (LTS), size Basic · Regular · 2 GB / 1 CPU (s-1vcpu-2gb, ~$12/mo — 2 GB is the floor, the build OOMs on 1 GB), and SSH Key auth (select your key — not a password, or hardening will lock you out). Create it, then copy the droplet's public IP.
Prefer the CLI? ./create-droplet.sh --name hermes-1 does the same via doctl — add --bootstrap to chain step 2 automatically.
SSH in as root and run bootstrap. It hardens the box (UFW, fail2ban, SSH key-only, an admin user, swap), installs Docker, and builds + starts the Hermes stack. ~5–8 min. The gateway comes up with no model or agent yet — that's steps 3–4.
Create a project, add your keys as secrets named after their env vars (ANTHROPIC_API_KEY, …), create a machine account with Read access, and generate an access token (starts with 0.). Only that token reaches the box.
Zero-key first run: skip this and set provider: openai-codex — no API key at all, just a one-time OAuth login the installer prints. Add Bitwarden when you add an API-key provider or a channel.
Seeds the agent, wires the knowledge base, and writes only the bootstrap token to ~/.hermes/.env (0600). Add the printed deploy key to your KB repo (Settings → Deploy keys, allow write), then re-run so it can push the seed.
Confirm secrets resolve from Bitwarden, then talk to the agent. The dashboard is localhost-only — reach it over an SSH tunnel (ssh -L 9119:127.0.0.1:9119 <admin>@<ip>).
config.yaml chooses how the model authenticates. Start zero-key, add a key later.
Bring an ANTHROPIC_API_KEY (stored in Bitwarden). The default provider — most capable, billed per token.
Bring an OPENAI_API_KEY (stored in Bitwarden). Standard OpenAI API access, billed per token.
Uses a ChatGPT Plus/Pro subscription via a one-time OAuth login on the droplet. The zero-key start — nothing to store before your first run.
Every agent maintains a personal wiki (the Karpathy LLM Wiki pattern): you drop sources into raw/, it compiles cross-linked articles into wiki/, and keeps INDEX.md current — all in a GitHub repo you open in Obsidian.
The wiki lives at ~/.hermes/workspace/kb/. Create an empty GitHub repo, pass it as --kb-repo, and the installer seeds it. Open the same repo in Obsidian via the obsidian-git plugin — that's your window into everything the agent has learned, and an off-box backup of its most valuable state.
Never paste keys in chat, scripts, or .env. The default backend is Hermes' native Bitwarden Secrets Manager.
Dead simple, works for everyone, and does the right thing by default.
Persona, memory, skills, and a knowledge base — plain files. Point Claude Code at the repo, describe the agent you want, and it fills in the template.
The knowledge base is just a GitHub repo of markdown. No MCP server, no database — the agent reads and writes it with normal file tools and pushes.
Bitwarden Secrets Manager by default. Only a scoped bootstrap token on disk; the installer takes no raw keys; the persona refuses credentials over chat.
UFW (SSH only), fail2ban, SSH key-only auth, a non-root admin user, and swap — all configured automatically by bootstrap.sh.
Re-run the installer anytime. Memory and the runtime-managed config are never clobbered; the persona refreshes; skills merge. Safe by construction.
Try it with openai-codex — a ChatGPT subscription and a one-time OAuth login, no API key to store. Add Bitwarden when you're ready.
Copy _template/ to a new directory and fill it in. See CLAUDE.md for the authoring contract.