Docs
Safety
How ResumerAgent refuses unsafe actions, re-checks every request on the server, and keeps your session data on your machine.
ResumerAgent’s source code isn’t public yet. These pages describe how it works once it is.
Fail-closed by design
ResumerAgent can resume, attach to, pause, close and purge sessions. When it can’t confirm a session’s state, it refuses the action instead of guessing.
- Unknown liveness blocks everything. If ResumerAgent can’t tell whether a session is live (
liveUnknown), it refuses every action on it. The browser disables the buttons, and the server refuses the request on its own (canSafelyAct()inserver.mjs). Each layer enforces the rule independently, so a bug in one doesn’t weaken the other. - The server never trusts the click. Every resume, purge, pause and close request carries only a session ID. The server looks the session up again and re-derives its state before doing anything.
- Superseded sessions can’t be resumed. When you give a new session the same name as an old one, the old one is marked “moved to a newer session”. Resuming it would grow a transcript you’re trying to retire, so ResumerAgent refuses.
- Pause only touches background jobs. Pause requires a live, confirmed background session (started with
claude --bg) with a real ID. It runs Claude Code’s ownclaude stop <id>, soclaude attach <id>andclaude --resumeboth work again afterwards. - Close checks the process right before acting. Close requires a live, confirmed interactive session with a real process ID. Just before ending it, ResumerAgent confirms that the process ID still belongs to a
claudeprocess. That guards against process ID reuse, since ending the wrong process has no undo. - Destructive actions take two clicks. Purge, Pause and Close each ask for confirmation.
Purge still does what you tell it. Fail-closed stops ResumerAgent from acting on sessions it can’t verify. It can’t stop you purging a session you didn’t mean to.
What it can’t do
The expiry badge warns you when a session is within 5 days of Claude Code’s cleanupPeriodDays cutoff (30 days by default). It is a warning only. Claude Code runs its own cleanup at claude startup, outside ResumerAgent’s process, and ResumerAgent can’t stop or delay it.
Your data stays local
- The dashboard server binds to
127.0.0.1only. - It has zero runtime dependencies: only Node’s built-in
node:http,node:fsandnode:child_process. - Everything it reads comes from your own
SESSIONS_ROOT, and it sends nothing anywhere.
Testing changes safely
If you work on ResumerAgent itself, never test resume, purge, pause or close against real sessions you care about. Use synthetic .jsonl fixtures, a disposable claude --bg job, or a disposable interactive session you don’t mind ending.