Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The sidebar: browse, search, star

The sidebar is the session browser. It lists every Claude session TermHerd found by walking ~/.claude/projects, grouped by project — together with the repositories you added by hand, which need no session to appear. It refreshes live as the filesystem changes, so a session started elsewhere shows up without a restart.

Toggle it with Cmd/Ctrl+B.

┌──────────────────────────┐
│ ◀ Hide          + Add a repo │  ← add a folder the scan cannot know about
│ Search…                  │  ← Cmd/Ctrl+F focuses this
│ ☐ Titles only            │
│ ☐ Show archived          │
├──────────────────────────┤
│ ★ Favorites              │
│   my-app · fix the race  │
├──────────────────────────┤
│   new-repo     $  🤖  ✕  │  ← added by hand, no sessions yet
│     No sessions yet …    │
│ ▾ my-app          $  🤖  │  ← launch a shell / a fresh Claude session
│     fix the race  ★ ⊟ ✎  │
│     add the cache ★ ⊟ ✎  │
│     … 3 more             │
│ ▸ other-repo      $  🤖  │
├──────────────────────────┤
│ Plans & memory           │
│   CLAUDE.md (global)     │
│   my-app/CLAUDE.md       │
│   plan-2026-08-01.md     │
└──────────────────────────┘

Opening a session

Click a project to expand it, then a session to resume it in a new tab.

Beside each project row are two launch buttons: $ opens a plain shell in that project’s directory, 🤖 starts a fresh Claude session there. The same two actions are on the keyboard as Cmd/Ctrl+T and Cmd/Ctrl+Alt+T, which use the focused session’s directory instead.

Adding a repository

A project only appears once it has a Claude session, so a repository you have never opened Claude in is invisible — including the one you are about to start work in. + Add a repo puts it there anyway: pick a folder, or drop one on the window. Both do the same thing.

Drop a folder, not a file: a dropped file is ignored, so dragging one onto a terminal never quietly adds its directory.

The row that appears carries the same $ and 🤖 buttons as any other, and says No sessions yet until it has one. When it does, it becomes an ordinary project row — there is no second entry.

An added repository sorts to the top of the list until its first session, then takes its place by recency like everything else. A ✕ on its row removes it; the button only appears on rows you added, since a discovered project has no declaration to drop. Removing a repository that has since gained sessions drops only the addition — the project stays, because the scan still finds it.

What you pick is not always what is stored, but it is filed by exactly the rule the scan uses for a session’s working directory — that agreement is what keeps one repository on one row. A git worktree collapses onto its main checkout; a file becomes the folder holding it; everything else is stored as given, symlinks and all.

One consequence is worth knowing: a subdirectory is not climbed. Add ~/dev/app/crates/core and you get a row for that subdirectory, not for ~/dev/app — because a Claude session started there is filed the same way. Add the directory you actually want the row for.

Additions live in ~/.termherd/metadata.json, beside stars and renames. Nothing is written under ~/.claude.

Hovering a session shows a card with its fuller description — relative last activity and message count (3h ago · 214 messages). The same card is what a tab shows on hover.

Cmd/Ctrl+F focuses the search box. Search runs in memory over the scan’s digests — titles, slugs, first prompts and indexed transcript text.

  • A content hit renders the matched line in muted text under the session row, windowed around the match and clipped to the sidebar width, so you can tell why a row matched.
  • Titles only narrows the search to titles and slugs.
  • Show archived brings archived sessions back into the results.

Search is in-memory by design at this stage: the SQLite + FTS5 digest cache (F-store-cache) is an optimisation on the roadmap, not shipped. On a very large ~/.claude history the first scan is the slow part, not the query.

Stars, renames, archives

Three buttons on each session row:

ButtonDoes
★star / unstar — starred sessions collect under ★ Favorites at the top
⊟archive (with a confirmation) — hidden unless Show archived is on
✎rename — an inline field; Escape abandons the edit

All three are an overlay: they are written to ~/.termherd/metadata.json, never under ~/.claude. Nothing you do in the sidebar changes what the Claude CLI sees.

Density

Long projects fold: past sidebar.session_limit sessions (default 5) the tail collapses behind a … N more expander, and show less folds it back. Set the limit to 0 to always show every session — settings.json.

Plans & memory

The bottom section lists Claude’s plan files (~/.claude/plans/*.md) and the memory files: the global ~/.claude/CLAUDE.md and each project’s CLAUDE.md. Clicking one loads it off-thread and opens it in the main pane, replacing the terminal view until you close it.

The doc pane can edit — 💾 save, with a • modified marker while there are unsaved changes and saved after a write. Two ways out, and they behave identically: the ✕ close button, or Escape. Both discard unsaved edits without asking — a known rough edge, tracked as #248.

When nothing is open

With no session open, the main pane shows a welcome card: how many sessions in how many projects were found, and the two ways to start — the $ / 🤖 buttons beside a project, or a click on a session to resume it.