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
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), and SSH Key auth (select your key — not a password). Under Advanced options → Add Initialization scripts (Startup scripts), paste this — it runs as root on first boot, hardening the box and installing Hermes automatically:
🔒 Only bootstrap.sh (no secrets) belongs here — never install-agent.sh; its Bitwarden token would be exposed in the droplet's metadata. Prefer the CLI? ./create-droplet.sh --name hermes-1 --bootstrap does the same via doctl.
The startup script hardens the box (UFW, fail2ban, SSH key-only, an admin user, swap), installs Docker, and builds + starts the Hermes stack. The gateway comes up with no model or agent yet — that's steps 3–4. Watch it finish by tailing the boot log:
No startup script? Bootstrap by hand: ssh root@<ip>, then on the box run curl -fsSL …/bootstrap.sh | bash. Keep it two steps — an unquoted ssh root@<ip> 'curl … | bash' runs on your laptop, not the droplet.
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). For KB pushes, add a fine-grained GitHub PAT (Contents: Read+Write on the KB repo) to Bitwarden as KB_GITHUB_TOKEN — the agent uses it over HTTPS, nothing else on disk.
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.
One key, any model (Claude, GPT, Llama, …). Supported natively — set provider: auto with OpenRouter's base_url and store your key as the OPENROUTER_API_KEY secret.
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.