Skip to content
claudemods

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

Install inside Claude Code:

/plugin install session-saver --marketplace hamzafer/claude-code-mods
All install options ↓

What 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-mods and renames the session through the separate unpause tool, so unpause list shows 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. 1.One line, inside Claude Code

    /plugin install session-saver --marketplace hamzafer/claude-code-mods

    Paste into a running session (v2.1.275+). Claude Code asks to add the marketplace first.

  2. 2.From your shell

    claude plugin marketplace add hamzafer/claude-code-mods
    claude plugin install session-saver@claude-code-mods

    Then run /reload-plugins in any session that is already open.

  3. 3.Try it without installing

    git clone https://github.com/hamzafer/claude-code-mods
    claude --plugin-dir ./claude-code-mods/mods/session-saver

    Loads 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.complete to Haiku, with the conversation excerpts described in the FAQ.
  • Processes: $.process.run only for unpause list --json and unpause rename <id> <name>, as argv arrays with a 20-second timeout. The name is lowercased and reduced to a-z0-9- first. unpause is 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 reads CLAUDE_CONFIG_DIR and HOME, and reads the band order file if it exists. It does not touch settings.json, shell files or LaunchAgents.
  • Daemons, secrets, telemetry: none.
  • Prompt influence: it injects nothing into prompts or tool results. The /park summary 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.submit and classic.SessionStart always call next. validate notes 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 unpause is 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 /park in the earlier session, and the session must be resumed with the same id.
  • /park says "no AI summary": the model call was not answered, and the reason is shown in brackets. The fallback "you asked: …" line is saved instead.
  • /park command 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).
Context Bar running in Claude CodeFeatured

Context 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

Done Toast running in Claude CodeFeatured

Done 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.