Save and restore Claude Code sessions across devices. Never lose your work context again.
If this plugin saved your time, consider giving it a star.
Claude Code stores session history locally in ~/.claude/sessions/. This creates two problems:
- Cross-device: When you switch computers, your context is gone
- Reliability: Even on the same device,
claude --continueand--resumedepend on local session files that can become stale, corrupted, or lost after updates — leaving you to re-explain everything from scratch
session-saver does not depend on local session history. It saves your entire work context as git-committed files and generates a project-local /resume-{folder} command that auto-pulls and restores everything.
| Command | Scope | What it does |
|---|---|---|
/session-saver:save-session |
Global (plugin) | Save context + generate /resume-{folder} + push |
/resume-{folder} |
Project-local (auto-generated) | Auto-pull + restore full context |
Note: Plugin skills are namespaced as
/plugin-name:skill-nameper Claude Code convention. The resume command is generated as a project-local skill, so it uses the short/resume-{folder}form.
Requires Claude Code v1.0.33 or later.
Paste the following prompt into Claude Code — it will automatically install the plugin while preserving your existing settings:
Add the following to ~/.claude/settings.json without removing any existing settings:
In enabledPlugins:
"session-saver@claude-session-tools": true
In extraKnownMarketplaces:
"claude-session-tools": { "source": { "source": "github", "repo": "thingineeer/claude-session-tools" } }
/plugins → Add marketplace → thingineeer/claude-session-tools → Install session-saver
Restart Claude Code after installation. That's it.
/session-saver:save-session
This will:
- Commit all pending changes (split by logical unit)
- Clean up worktrees and auto memory
- Create
docs/checkpoints/SESSION-STATE.mdwith full context - Generate
.claude/skills/resume-{folder}/SKILL.mdfor the project - Push everything to remote
/resume-{folder-name}
This will:
git fetch— if behind remote, autogit pull- Read CLAUDE.md and SESSION-STATE.md
- Read key files listed in the save point
- Print a briefing with branch, progress, and next steps
No need to manually git pull. The resume command handles it.
| Scenario | Command |
|---|---|
| Device A → Device B (immediately) | /resume-{folder} on B — auto pulls |
| Device A → days later → Device B | Same — save point doesn't expire |
| Device A → days later → Device A | Same — fetches latest, restores from git |
| Device A → restart app → Device A | Same command works |
Device A Device B
| |
|-- /session-saver:save-session |
| |-- commit changes |
| |-- write SESSION-STATE.md |
| |-- generate /resume-{folder} skill |
| |-- push |
| |
| git push ────────> |
| |
| |-- /resume-{folder}
| | |-- git fetch + auto pull
| | |-- read CLAUDE.md
| | |-- read SESSION-STATE.md
| | |-- read key files
| | |-- print briefing
| File | Purpose |
|---|---|
docs/checkpoints/SESSION-STATE.md |
Save point — branch, progress, key files, next steps |
.claude/skills/resume-{folder}/SKILL.md |
Restore skill — auto-pull + context rebuild |
- Session conversation history (stays local)
- Secrets, credentials,
.envfiles (excluded by design) - Auto-generated files (
node_modules/,Derived/,build/)
If you used v1.0.x, the resume command was generated as .claude/commands/resume-{folder}.md. Starting from v1.1.0, it is generated as .claude/skills/resume-{folder}/SKILL.md instead.
Running /session-saver:save-session on a project with an old-style command will automatically migrate it to the new skill format and delete the legacy command file.
Fork this repository and modify plugins/session-saver/skills/save-session/SKILL.md to fit your workflow:
- Change the SESSION-STATE.md template
- Add project-specific build verification steps
- Adjust commit message conventions
Contributions are welcome! Please open an issue or submit a pull request.
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit your changes using Conventional Commits
- Push to the branch and open a Pull Request