Session Saver Claude Code mod: Claude Code session resume notes with /park
Names untitled sessions through unpause, saves where you left off with /park, and shows that note when you resume.
Permissions
- Reads filesCan read files and list directories on your machine ($.fs.read / list / stat / exists).
- Runs commandsCan run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
- Calls the model (uses your quota)Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
- Reads your promptsCan see what you type and the conversation transcript (prompt.* / session.append / session.messages).
- Changes the UIDraws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
- Adds commands/toolsRegisters new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
- Stores dataKeeps data between sessions in the plugin's private store ($.store.*).
- tested with
- v2.1.307
- last tested
- requires
- Claude Code ≥ 2.1.287
- surfaces
- above-prompt, toast
- source
- Hamza Zafar (hamzafer) (MIT)
Install inside Claude Code:
/plugin install session-saver --marketplace hamzafer/claude-code-modsWhat does this mod do?
Session Saver is a community mod by Hamza Zafar (hamzafer), part of his claude-code-mods collection. It handles the Claude Code session resume problem: you come back to a session and no longer remember where it stood. The mod does three things:
- Names untitled sessions. After your second turn, if the session has no custom title, it asks Haiku for a two-to-four word name such as
ship-modsand renames the session through the separate unpause tool, sounpause listshows a name instead of a bare id. /park [note]saves where you left off and the next step, plus any note you type.- Shows the note on resume. A resumed session gets a green
↩ Last time (2h ago): …line above the prompt and an 8-second toast. The line goes away when you type.
Install
The install block above adds the author's marketplace and installs the plugin from it. Automatic naming needs the unpause tool from the author's other repository; everything else works without it. Restart Claude Code or run /reload-plugins afterwards.
$ install session-saver
Requires Claude Code ≥ 2.1.287
Installs from the author's own marketplace: hamzafer/claude-code-mods
1.One line, inside Claude Code
/plugin install session-saver --marketplace hamzafer/claude-code-modsPaste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.
2.From your shell
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install session-saver@claude-code-modsThen run /reload-plugins in any session that is already open.
3.Try it without installing
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/session-saverLoads the mod for one session only. Nothing is added to your settings.
How it works
The plugin is one function-hooks module, hooks/register.tsx, plus hooks/bands.ts, a shared helper that lets several band mods stack above the prompt. On turn.complete it counts turns and starts naming once. This is from register.tsx:
if ((await $.session.turns()) >= NAME_AFTER_TURNS && !(await $.store.get(`named:${id}`))) {
await $.store.set(`named:${id}`, true) // one try per session, whatever happens
void autoname($, id).catch(() => {})
}autoname runs unpause list --json, leaves the session alone if it already has a custom_title, and otherwise renames it. /park and the last-asked fallback are stored per session id in the plugin's store (park:<id> and last:<id>). On session.start, and on classic.SessionStart with the resume source, the mod loads the note, toasts it and renders it in the AbovePrompt slot. The prompt.submit hook only reads your text; it ignores engine-wrapped prompts such as task notifications and returns the prompt unchanged.
Customize it
There are no settings. The summary model (haiku) and the number of turns before naming (2) are constants at the top of register.tsx, so changing them means forking the plugin. The line above the prompt follows the band order file at <config dir>/claude-code-mods/bands.json if you use the author's checklist CLI; without that file it simply draws above other mods. The order is read once per session.
Permissions & safety
We read every file the plugin loads: plugin.json, hooks/hooks.json, hooks/register.tsx, hooks/bands.ts, the types file and the tests. There is no package.json, no bundled or minified code and no binaries. Findings:
- Network: none in the plugin code. The only model traffic is
$.model.completeto Haiku, with the conversation excerpts described in the FAQ. - Processes:
$.process.runonly forunpause list --jsonandunpause rename <id> <name>, as argv arrays with a 20-second timeout. The name is lowercased and reduced toa-z0-9-first.unpauseis not bundled and we did not audit it. - File writes: none directly. Notes live in the plugin store (
$.store) and Claude Code state atoms. It readsCLAUDE_CONFIG_DIRandHOME, and reads the band order file if it exists. It does not touchsettings.json, shell files or LaunchAgents. - Daemons, secrets, telemetry: none.
- Prompt influence: it injects nothing into prompts or tool results. The
/parksummary prompt wraps the transcript in tags and asks for JSON only; the reply is parsed and trimmed to 80 and 60 characters before being shown. - Gating hooks:
prompt.submitandclassic.SessionStartalways callnext.validatenotes that neither has a.catch. - License: MIT, with a LICENSE file at the repository root.
claude plugin validate reported no errors and one non-blocking warning (no plugin icon). claude plugin test ran the author's 8 tests on 2.1.307: 8 pass, 0 fail.
- Reads files
- Can read files and list directories on your machine ($.fs.read / list / stat / exists).
- Runs commands
- Can run shell programs on your machine ($.process.run / spawn). Check the source for exactly which ones.
- Calls the model (uses your quota)
- Can send its own requests to Claude, which count against your plan's usage ($.model.* / $.agent.spawn).
- Reads your prompts
- Can see what you type and the conversation transcript (prompt.* / session.append / session.messages).
- Changes the UI
- Draws into the Claude Code interface: bands, panes, status text, toasts (ui.render / $.ui.*).
- Adds commands/tools
- Registers new slash commands or tools that you or Claude can invoke ($.command.register / $.tool.register).
- Stores data
- Keeps data between sessions in the plugin's private store ($.store.*).
Compatibility & troubleshooting
We tested commit 5c925b0 on Claude Code 2.1.307. If nothing seems to happen:
- No session name: check that
unpauseis on your PATH. Naming is tried once per session and failures are silent. - No note on resume: you need to have typed something or run
/parkin the earlier session, and the session must be resumed with the same id. /parksays "no AI summary": the model call was not answered, and the reason is shown in brackets. The fallback "you asked: …" line is saved instead./parkcommand missing: if Claude Code already has a command with that name, registration is refused and the mod starts without it.
FAQ
- Do I need unpause to use this Claude Code session resume mod?
- Only for automatic naming. The naming step runs `unpause list --json` and `unpause rename`, so without the unpause binary on your PATH that step does nothing. /park, the resume note above the prompt and the resume toast do not call unpause.
- What does /park do?
- It asks the Haiku model for a one-line "left off" and "next step" summary of the last twelve messages that contain text, stores it with your optional note, and prints it. When you resume the session, the note is shown above the prompt and as a toast.
- What is shown if I never ran /park?
- After each of your turns the mod saves "you asked:" plus the start of your last typed prompt. A resumed session shows that instead, so there is still something to pick up from.
- When does the note disappear?
- As soon as you type and submit a prompt yourself. Task notifications, messages from other sessions and scheduled prompts do not count, so they do not hide it.
- Does it send my conversation anywhere?
- The mod has no network code of its own. It does pass parts of the conversation to Haiku through Claude Code's model call, for naming (first three user messages, 500 characters each) and for /park (last twelve messages, 600 characters each).
# Related mods
FeaturedContext Bar
Your Claude Code context window as one stacked bar above the prompt, a color per category, with token counts.
- above-prompt
- Changes the UI
- Adds commands/tools
- Stores data
tested with v2.1.291
FeaturedDone Toast
A "Done in 2m 14s" toast and a short chime when a long Claude turn finishes, plus an optional desktop notification.
- toast
- Runs commands
- Changes the UI
- Plays sound
tested with v2.1.310
More in Timers, todos, standups, Slash commands.