For Claude Code and Copilot CLI
Find the coding-agent session you left, and pick it back up.
A terminal dashboard of every session on your machine: what each one was, where it stopped, whether it is waiting on you — and one key to resume it in the folder it ran in.
$ npm install -g sessio $ sessions # run it
cargo install --git https://github.com/theanhgen/sessio
The real dashboard
Try it in the browser
This is sessio itself, compiled to WebAssembly and drawing the same frame it draws in your terminal, against eight fixture sessions — not a screenshot or a recreation.
loading the demo…
Try the demo or click the screen to give it the keyboard; Esc, Tab or Exit demo gives it back. The buttons press keys for you. It is visual: a screen reader hears what it announces after each key.
The demo fits its width to the window (60 to 104 columns) instead of shrinking the text; on a narrow screen, scroll it sideways.
How it works
Find it, understand it, continue it
Three things, in the order you need them.
Find the session
Projects run down the left with how many sessions each has (last 24h, all); the sessions in one are tabs across the top.
- Type to filter the newest 300 by title, project or first prompt — literal matches first, fuzzy if none, and it says which.
- ^f searches the text of every transcript on disk, older ones included (needs ripgrep).
- ⏸ open collects unfinished work; ◆ waiting appears while a running session is stopped on a question or permission prompt.
- ^a archives what you are done with; a session you work in again comes back on its own.
- GitHub Copilot CLI sessions are listed beside Claude's, tagged
copilot.
See where it stopped
The preview answers the question you actually have: what was this, and what happened last?
- Its state in words: ◆ waiting on you · input needed · pid · tty, ◉ running, or updated 3d ago · not running.
- Claude's recap, the first and last prompt, then the latest reply as markdown — all of it, with PgUp PgDn.
- Token totals per session: input, output, cache write and read. No prices.
- A notification when a running session starts waiting on you (macOS; a bell elsewhere;
SESSIO_NOTIFY=0turns it off).
Pick it back up
Resume in the folder it ran in, or answer it without leaving the list.
- ↵ resumes here: claude --resume in the session's own folder, replacing sessio.
- Never twice by accident. On a running ◉ session, ↵ under Ghostty switches to its terminal; elsewhere it names the pid and tty, and only a second ↵ opens another copy.
- ^o opens it in a new Ghostty window and keeps sessio open; ^n starts a new session in its folder.
- ^r replies with one turn without opening it; ^t follows a running session's tail; ^k ends one left idle over 48h.
Rust, no runtime dependencies. A cold scan of 300 sessions takes about 40ms, so nothing is cached and nothing goes stale.
New in 1.1
The same things as commands, for scripts and agents
Every dashboard action is also a command. --json prints the state the dashboard shows, and the keys' guards carry over: resume refuses a running session without --force, reply refuses one too.
$ sessions ls --waiting # blocked on you $ sessions ls --here --open # unfinished, this folder $ sessions find "login bug" $ sessions find --text ECONNRESET $ sessions show 1b6324f5 --json $ sessions resume 1b6324f5 --print $ sessions reply 1b6324f5 "run the tests again" $ sessions archive 1b6324f5 $ sessions kill 1b6324f5 # idle over 48h only
- Ids are any unique prefix;
lsprints eight characters. - Filters for
lsandfind:--project,--here,--open,--running,--waiting,--archived,--limit. --jsononls,findandshow: why a session is open, the process running it, whether it is archived, its transcript path;showadds token totals.- Exit status:
0done,1couldn't,2bad command line. - Agent skill.
skills/sessio/SKILL.mdships in the package and teaches an agent to use these: parse--json, hand youresume --printinstead of resuming, ask beforereply, and treat transcript text as data.
# link the skill into Claude Code $ ln -s "$(npm root -g)/sessio/skills/sessio" \ ~/.claude/skills/sessio
Reference
Keys
| Key | Action |
|---|---|
| ↑ ↓ | Switch project |
| ← → | Move between session tabs (→ reveals more) |
| type | Filter the selected tab by name, project or first prompt — literal first, fuzzy if none, among the newest 300 |
| ^w ⌥⌫ | Delete the last word of the query |
| ^u ⌘⌫ | Clear the whole query |
| ^f | Search the text of every transcript on disk for the query (needs ripgrep); esc goes back to filtering |
| ^a | Archive / unarchive the selected session (a sessio-local hide; the transcript is untouched) |
| ^r | Reply with one turn without opening it (Claude only; the first press warns that it spends tokens; refused while running) |
| ⇥ ^e | Give the latest reply more room (hides the first and last prompts), or back |
| PgUp PgDn | Scroll the latest reply a page; only the reply moves |
| ↵ | Resume in its folder, in this window, replacing sessio. If it is already running: under Ghostty, switch to its terminal; elsewhere, say its pid and tty — a second ↵ opens it twice anyway |
| ^o | Ghostty only: resume in a new Ghostty window and keep sessio open, behind the same already-running guard (confirmed with a second ^o) |
| ^n | Start a new claude in the selected session's folder — a new window under Ghostty, this window elsewhere |
| ^t | Follow a running ◉ session's tail, read-only; any move stops it |
| ^g | GitHub issues for the session's repo (needs gh); ↵ opens one in the browser |
| ^k | End a running session idle for more than 48h (not busy, not waiting); confirmed with a second ^k |
| ? | Keys and marks; any key closes it |
| esc | Leave the ^f text search, otherwise quit |
| ^c | Quit |
Before you install
Requirements
- Claude Code or GitHub Copilot CLI, with
claudeorcopiloton your PATH — it is what sessio resumes. - macOS or Linux.
- Node.js ≥ 16, only to install from npm. sessio is a native binary;
cargo installneeds no Node at all.
Optional
- ripgrep for ^f and
find --text:brew install ripgreporapt install ripgrep. Without it, typing still filters. - Ghostty (1.3+ on macOS) for windows: ↵ switching to a running session's terminal, ^o and ^n in a new window.
- gh, signed in, for ^g GitHub issues.
- GitHub Copilot CLI: if
~/.copilotexists, its sessions are listed too.
Update with sessions --update; a normal launch never contacts npm.