hermes chat -c: Continue Your Own Session per Terminal, or Create It on the Fly


You keep two tmux panes open: the left one debugging a Redis incident in production, the right one sketching a new API design. You step away mid-flow, come back, and type hermes chat -c to pick up where you left off — except both panes get dragged into the same conversation: Redis errors on one side, interface signatures on the other. Total chaos.

That was the pre-v0.20.2 behavior of -c: it always resumed the globally most recent session, with no idea which terminal you were actually in. That just changed — Hermes now keeps a little ledger for every terminal.

Terminal breadcrumbs: every pane has its own session memory

v0.20.2 introduces terminal breadcrumbs (PR #87346): the CLI records “which session did I last chat in, in THIS terminal” per terminal — real tty, tmux pane, kitty window, wezterm pane, Zellij pane, or Windows Terminal session.

Breadcrumbs live in $HERMES_HOME/terminal-sessions/, one JSON file per terminal holding the session ID, working directory, and timestamp. Writes are atomic (temp file + os.replace), best-effort, never raise; records older than 30 days are ignored on read and pruned opportunistically on write. Terminal identity is derived in priority order: real tty path → ZELLIJ_PANE_IDTMUX_PANEKITTY_WINDOW_IDWEZTERM_PANETERM_SESSION_IDWT_SESSION — and if none is available, breadcrumbs are skipped entirely.

So now:

# in pane 1
hermes chat -c        # resumes pane 1's own last session (the Redis one)

# in pane 2
hermes chat -c        # resumes pane 2's own last session (the API one)

Each pane goes home to its own conversation. To resume by name, just name it:

hermes chat -c "redis debug"

Name lookup fails loudly now

With a name, -c matches by title or session ID. Before v0.20.2, a miss was a silent no-op — in a script it looked like a successful resume, but you were actually in a fresh conversation with none of your context.

Now (PR #87706) a failed match prints an error to stderr immediately and exits with code 1, plus a pointer:

No session found matching 'redis debug'.
Use 'hermes sessions list' to see available sessions, or pass
--create-if-missing to start a new session with that title.

For script authors this is huge: silent failure becomes detectable failure. CI jobs and cron tasks finally get explicit feedback when the target session doesn’t exist.

–create-if-missing: make it if it’s missing

With the new --create-if-missing flag, “resume by name” upgrades to “resume by name, creating it if needed”:

hermes chat -c "redis debug" --create-if-missing

When nothing matches, the CLI creates a brand-new session titled “redis debug” and drops you in. The session ID uses the standard timestamp_UUID-short shape, and the title is recorded with user provenance — the auto-titler won’t overwrite your manually-chosen name.

This combo is especially valuable for programmatic callers: a plugin or script that wants “send to this named thread, making it if needed” finally has a one-line, deterministic primitive. Note that --create-if-missing only makes sense with a named -c; a bare -c has nothing to create, and the CLI tells you to provide a name.

From the desktop too

The v0.20.2 desktop app’s session menu can also “resume in your own terminal” — pick any session and bring it back into a real terminal (#86338, merged 8/14). Combined with hermes sessions list, the workflow is smooth:

hermes sessions list           # find the target session
hermes chat -c "target title"  # resume it
hermes chat -c "new title" --create-if-missing   # or just create one

Summary

  • Breadcrumbs: each terminal remembers its own last session; -c no longer mixes panes into one conversation;
  • Loud failure: named lookups that miss print to stderr and exit 1 — script-detectable;
  • Auto-create: --create-if-missing makes “send to a named thread, making it if needed” a one-liner;
  • Pair it up: the desktop can hand a session back to your terminal, and hermes sessions list is the entry point for finding one.

To get more out of your sessions, see the /save session export guide and multi-profile multi-instance; the full -c flag table is in the hermes chat command reference. All of this is available by default after hermes update to v0.20.2.