Docs

Everything Hermes does, on one page. It all runs on your machine.

$ curl -fsSL https://tryhermes.pages.dev/install | sh

Quickstart

macOS and Linux. One binary. No npm, no plugin, no account.

$curl -fsSL https://tryhermes.pages.dev/install | sh

Open a new terminal, then check what Hermes can see:

$hermes doctor

If hermes is not found, add the install folder to your PATH:

$export PATH="$HOME/.local/bin:$PATH"

Then, in the project you were editing:

$hermes handoff claude cursor -m "what you were doing"

The rule

One name is where you are going. Two names are from, then to.

CommandMeans
hermes handoff claudeGo to Claude
hermes handoff cursorGo to Cursor. Not “leave Cursor”.
hermes handoff cursor claudeFrom Cursor to Claude
hermes handoff claude cursorFrom Claude to Cursor

With one name, the source is the newest session that belongs to this folder. hermes to <agent> is the same as hermes handoff <agent>.

handoff

Packs this repo and prepares the next agent.

app · zsh
~/src/app main* ❯ hermes handoff claude cursor -m "finish upload rate limit"
packed handoff-20260927T141205
from claude id=7c21a9f0-3b1e-4c2a-9e51-0d3c1b2a7f44
to cursor
copied PROMPT.md → clipboard

next hermes resume cursor

The pack is a handoff-<timestamp>/ folder next to your project:

pack
handoff-20260927T141205/
├── PROMPT.md            the brief the next agent reads
├── SUMMARY.md
├── manifest.json
├── git/
│   ├── branch.txt
│   ├── changed-files.txt
│   ├── diff.patch
│   └── log.txt
├── sessions/claude.md   when Hermes can read the chat
├── DECISIONS.md         with --decisions
└── files/               with --include-files
Never type ./handoff-*. zsh expands the glob. Use hermes resume.

Where it lands

DestinationWhat happens
CLI agents on your PATH
claude, codex, opencode…
Starts seeded from the pack: opened claude (seeded from the pack)
Editors and GUIs
Cursor, Antigravity, Claude desktop or web, VS Code chat
PROMPT.md goes to your clipboard. Open a new chat and paste, or type @PROMPT.md.

Force either path with --open, --no-open or --copy. There is no vscode agent: for VS Code or the Claude app, use --no-open --copy and paste.

In Cursor this is a new chat, not the old composer id. Continuity is the work, not the thread id.

list and --id

Pick a specific chat instead of the newest one.

$hermes list --here
$hermes list --agent cursor --here -q keyword
$hermes handoff cursor claude --id e188
app · zsh
~/src/app main* ❯ hermes list --agent cursor --here

# cursor

 2026-09-27 14:10 e1884976-2f0c-4b7e-9a51-3d0c1b2a7f10 upload rate limit
 ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb
 2026-09-27 11:02 b03d11e2-9c4a-4e0b-8f7d-61a2c3e4f5a6 fix flaky upload test
 ~/Library/Application Support/Cursor/User/globalStorage/state.vscdb

A prefix of the id is enough. Without --id, Hermes takes the newest session for this folder. hermes list without --here shows every session Hermes can see on this machine.

Folder scope

Hermes only packs chats that belong to the folder you are in. Another project’s chat on the same machine is ignored. If nothing matches, you still get a git-only pack and a warning:

blog · zsh
~/src/blog main ❯ hermes handoff codex
packed handoff-20260927T142030
from git only
to codex
opened codex (seeded from the pack)
warn no agent session for this folder; pack is git-only (this is fine). Use --id to pick a chat from another project

next hermes resume codex

Pass --id to pick any chat that hermes list shows. For GUI chats Hermes cannot read, use --from none for a git-only pack.

resume

Reuses the latest pack. No glob.

$hermes resume
$hermes resume cursor
$hermes resume --print

--print prints PROMPT.md, the brief the next agent reads.

doctor

Shows what git sees and which agents Hermes can read on this machine. You do not need every agent installed to try Hermes.

app · zsh
~/src/app main* ❯ hermes doctor
hermes doctor

 ✓ git binary             ok
 ✓ git repo               ~/src/app (branch main, 3 changed files)
 ✓ sqlite3 (Cursor DBs)   ok
 ✓ claude                 3 session(s)
 ✓ cursor                 2 session(s)
 ✗ opencode               0 session(s)
 ✓ home                   /Users/you

Hermes never writes into Cursor/Claude databases.
You do not need every agent installed to test Hermes.

More commands

CommandDoes
hermes to <agent>Same as hermes handoff <agent>
hermes from <agent>Packs a session from one agent. The destination stays Cursor unless you name one.
hermes validate [pack]Checks a handoff pack
hermes siteServes this landing page locally
hermes versionPrints the version

Flags

FlagWhat it does
-m, --messageWhat you were doing
--fromSource agent: auto, none or an agent id
--toDestination agent (default cursor)
--idSession id from hermes list (a prefix is enough)
--sessionExplicit session file
--include-filesCopy changed files into the pack
--decisionsNotes the next agent must not redo
-o, --outputOutput directory
--zipAlso write a .zip
--copyCopy PROMPT.md to the clipboard
--openStart the destination CLI (default when it is on PATH)
--no-openDo not start the next agent; only write the pack
--printPrint PROMPT.md
--agent listFilter by agent id
-q, --query listSearch title, id, or path
--here listPrefer sessions that look like this directory

--from auto prefers a Claude session, then the newest. --from none skips every reader and packs git only.

Agents

Each one can be a source, a destination, or both. Hermes reads sessions and never writes into editor databases.

IdProductReads from
claudeClaude Code~/.claude/projects
cursorCursorstate.vscdb, read-only
codexCodex CLI~/.codex/sessions
opencodeOpenCode~/.local/share/opencode
clineCline / Roo~/.cline, editor globalStorage
kimiKimi~/.kimi-code, ~/.kimi
antigravity · agyAntigravity~/.gemini/antigravity-cli
piPi Agent~/.pi/agent
copilotCopilot CLI~/.copilot
zcodeZCode~/.zcode/cli/db, read-only
deepseek · dshDeepSeek Harness~/.dsh

Aliases also work: claude-code, codex-cli, open-code.

What it won’t do

  • Merge two agents into one native history
  • Write into Cursor or Claude databases
  • Upload anything, run an MCP server, or ask for an account
  • Restore a Cursor composer id

The work travels. The agents do not merge.