Hermes quickstart: install your agent, then let it hire a developer
The end state of this guide: a chat window on your phone where you can ask "what is my engineer working on?" and get a real answer. In between: one terminal session to prepare a machine, one message to your agent, and one browser tap. That's the whole guide. Everything else is the machines talking to each other.
Hermes is Nous Research's open-source personal agent — MIT-licensed, lives in Telegram, Discord, Slack, WhatsApp, Signal, email, or your terminal. Kairos is our autonomous developer. Hermes is the one you talk to; Kairos is the one that ships. We wrote about why they pair well; this post is just the how.
What you need
One machine that will host the engineer (your dev box, a VPS, a Mac mini in a closet). The bootstrap checks for these; it does not install them:
- macOS or Linux, with
gitandcurl - Node.js 20+ (
npxon PATH) - Docker installed and running
- GitHub CLI authenticated (
gh auth statusexits 0) - Claude Code installed and signed in
- A clone of the repo you want Kairos to work on
Plus two accounts: a Nous Research account for Hermes (there is a free tier) and a free backant.io account for Kairos. Kairos itself is free; the Claude Code usage it drives stays on your own Claude plan.
Install Hermes
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
hermes setup --portal
Setup walks you through connecting a chat surface. Pick whichever app is already in your pocket — the rest of this guide reads the same on all of them. (There are also desktop installers for macOS and Windows on the Hermes site, if you'd rather not curl-pipe-bash. We get it.)
Say hello. Ask it what it can do. This is your agent now; the next step is giving it a colleague.
The one message
Send your Hermes this, with your real repo path:
Run this in ~/code/your-repo and follow its instructions until Kairos is running:
curl -fsSL https://backant.io/hermes.sh | bash
(If that URL is unreachable, the direct form is npx --yes backant-kairos@latest hermes bootstrap.)
Hermes fetches the bootstrap and runs it. Ten steps, streamed live: install, prerequisites, memory store, login, repo analysis, daemon start, skill registration. Every step checks whether it is already done, so a failed run continues instead of starting over. When a step fails, the error is a single JSON line with a hint field containing a runnable command — Hermes reads the hint, applies it, and re-runs. You watch this happen in chat. It is more satisfying than it has any right to be.
The one tap
During the login step, Hermes will relay something like:
Kairos needs a one-time login — open https://backant.io/device and enter code KZT-42Q.
Open it in your own browser, enter the code, approve. That is the only moment in this entire setup that requires your hands. A few messages later Hermes confirms the daemon is running.
Your first conversation with the engineer
Three things to try, straight from our own release checklist:
Ask what and why.
You: what is kairos working on and why? Hermes: Daemon running. Last decision 14 min ago: "fix flaky retry test in auth.spec.ts — CI red for 2 cycles." 0 pending directives, 1 open gate.
The answer comes from Kairos's recorded state, not from the model's imagination — Hermes runs backant ctl status --json and backant ctl explain --json and reads the envelopes back to you.
Steer it.
You: have it focus on the flaky tests this week Hermes: Directive #3 queued: focus "flaky tests". Kairos absorbs it on its next cycle and will resolve it with a recorded reason.
Answer a gate.
You: anything blocked on me? Hermes: Gate #7: git_push — "push retry-test fix to main". Approve? You: yes Hermes: Approved, reason logged. Executing on next cycle.
Gated actions wait for you; everything else keeps moving. If the repo changed while the gate was open, your approval is refused and Kairos re-proposes against the current state — a yes given to an old reality never applies to a new one.
When something breaks
Re-send the bootstrap message. Every step is idempotent, every failure carries its fix as a runnable hint, and Hermes applies hints without being asked. The failure modes we know about — Docker not running, gh not authenticated, Node too old — each produce their exact fix in the error itself.
This flow is our release gate. Before a Kairos version ships, a human sets up a fresh machine through a real Hermes with zero keyboard time on that machine beyond the device tap. If the run needs a human shell command, the release doesn't go out.
Set it up tonight. Ask it why tomorrow.