For heavy Claude Code users
Your Claude Code sessions didn’t die. They sank.
A local dashboard that finds every Claude Code session, including the dead ones claude agents can’t show, and resumes any of them in one click.
- Runs on 127.0.0.1
- Zero runtime dependencies
- Source code coming soon
Day 30: deleted at next claude startup
- api-refactor
- docs-sync
- billing-migration
- No Name
- test-harness
- research-notes⚠ expires in 4 d26 d · deeper ↓
The problem
Why sessions sink
claude agents only lists live sessions, and Claude Code quietly deletes old transcripts. Between the two, a session you meant to come back to can vanish.
- Live
The session is running and
claude agentslists it. - Terminal closed
It drops off that list. Its transcript is still on disk, and it can still resume.
- Day 25
Five days before the cutoff, ResumerAgent shows an expiry warning.
- After day 30
The next
claudestartup deletes the transcript. No warning, no trash, no recovery.
Days count from the transcript’s last activity, against Claude Code’s default cleanupPeriodDays of 30.
Reported upstream in anthropics/claude-code: #62959, #59248, #62476, #64999
How it works
One ping, three sources
ResumerAgent reads what Claude Code already keeps on your machine, merges it, and shows one list.
- Decides what is live
claude agents --json --allClaude Code’s own view of live sessions: the source of truth for whether a session is running.
- Finds everything
projects/**/*.jsonlEvery transcript on disk, live or dead, with its title, last message, cost and context used.
- Cross-check only
sessions/<pid>.jsonThe per-session registry. It is deleted on a clean exit, so it never decides liveness.
lib/mergeSessions.mjsOne list of live and dead sessions, each tagged liveUnknown, superseded or safe, and every action passes the fail-closed gate.
Features
What comes back up
Find
- Live and dead, one list
- Live sessions and every dead one found on disk, side by side, newest first by default.
- Know which one it was
- Each row shows the last thing you typed, or the recap Claude Code wrote. Unnamed sessions show as “No Name”, not a blank row.
- Retired duplicates
- Rename a new session to an old one’s name and the old row is marked “moved to a newer session”, with Resume disabled so its transcript stops growing.
Bring back
- One-click Resume
- Opens a real terminal where Claude Code picks the conversation back up.
- Copy the resume command
- For SSH, tmux or a terminal ResumerAgent can’t drive: put the command on your clipboard instead.
Stay ahead
- Expiry warning
- Sessions within 5 days of Claude Code’s cleanup cutoff get an “expires in N d” badge. It is a warning only: it can’t stop the cleanup.
- Activity at a glance
- Cost so far and context used on every row. Rate limits too, if you add your own optional statusline sidecar.
Stay in control
- Pause and Close
- Pause a background job started with
claude --bg, through Claude Code’s ownclaude stop. Close ends a live interactive session’s process tree, verified on Windows and unit-tested on macOS and Linux. - Purge, with a second click
- Pause, Close and Purge each ask for a two-click confirm.
- Parent and child jobs
- A session that parks a background job shows it nested underneath, with the child’s own working Attach button.
Demo
Watch a resume
A real recording: one click on Resume, and Claude Code picks the conversation back up in a new terminal.

The dashboard
- Four headline stats: sessions tracked, live now, total cost and average context used.
- Live and resumable sessions in one list, each with its last message.
- Cost and context used on every row, and an expiry warning on the session about to be cleaned up.

Safety
Fail-closed by design
When ResumerAgent can’t confirm a session’s state, it refuses to act instead of guessing.
Read the safety model →Unknown means no
A session whose liveness can’t be determined is refused for every action, by the page and by the server, each on its own.
The server checks again
Every resume, purge, pause and close request carries only a session ID. The server looks the session up again before it does anything.
Retired stays retired
A superseded session can’t be resumed, so a transcript you are retiring doesn’t grow again.
No recycled PIDs
Right before Close ends a process, the server checks that the PID still belongs to a real claude process.
- 127.0.0.1
- The only address the dashboard listens on
- 0
- Runtime dependencies
- Your disk
- Where everything it reads comes from
Install
Coming soon
ResumerAgent’s source code isn’t public yet. Once it is, you need Node 18 or newer and Claude Code. Nothing else.
Supports Windows, macOS and Linux (CI-tested). Only Windows has run on real hardware so far.
What does it do that claude agents doesn’t?
claude agents only shows live sessions. ResumerAgent adds every dead one, found by scanning transcript .jsonl files, in the same list, with a one-click Resume.
Does it stop Claude Code from deleting old sessions?
No. The expiry badge is a warning only. Claude Code’s own cleanup runs at claude startup, outside ResumerAgent.
Does it send my data anywhere?
No. It serves a local dashboard on 127.0.0.1 with zero runtime dependencies, and everything it reads comes from your own session folder.
Day 25: expiry warning starts
Day 30: deleted at next claude startup
Bring your sessions back up.
ResumerAgent’s source code is coming soon.