Sessionboxer

Sessions

Snapshots and forks: save the box, branch a session, hand off to another agent

Sessionboxer snapshots the whole container after each turn. Fork a new session from any snapshot, continue the conversation, start fresh or hand off to a different agent.

Feature page: Snapshots, forks, handoffs β€” screenshots, things you can do with it and how other products compare.

Every time the agent finishes a turn, Sessionboxer takes a snapshot of the box (a docker commit): files, installed packages, browser state, the agent's own memory of the conversation. Snapshots appear in the chat as πŸ“· Snapshot #n markers with their size, and the sidebar shows under each session the total disk it uses (the box's changes on top of its image plus its snapshots). Snapshot in the header takes one by hand.

Fork from here on a marker (or Fork… in the header) starts a new session with its own box from that snapshot: same files, same tools. Under Agent pick who runs the fork β€” the origin's agent or another one (Claude Code, Devin, Codex, Cursor; it needs its token in Global settings) β€” and under Conversation what happens to the chat:

  • Continue it (the default): the chat up to the snapshot is copied and the agent remembers it all. Only with the origin's agent β€” an agent's memory cannot be loaded into another one, so the option is greyed out as soon as you pick a different agent.
  • Start a new one: empty chat, the agent starts fresh on those files. Handy when the context is rotting, when you want to try a different approach without the old reasoning, or to put another agent on the same machine.
  • Hand off: the origin's agent β€” the one that has the whole conversation in its head β€” writes a handoff first (goal, state of the work, decisions, open items, files and places, how to run and test, gotchas; no secret values), in a hidden turn shown in its chat as Writing a handoff for a fork…; the fork then starts a new conversation with that document as its first message, folded in its chat under Handoff from the origin's Agent so you can read what the new agent was told. Works towards another agent (Claude Code β†’ Devin) or the same one (a fresh Claude Code session that knows what happened without the 400k tokens of how). The origin has to be idle and running for this; while it writes, the fork shows as creating, and if it cannot write (session limit hit, stopped meanwhile) the fork ends in error saying why β€” delete it and fork again.

Then pick what the fork should do first: nothing, one of the messages that were in the Queue when the snapshot was taken (or is queued now), or a new prompt (after a handoff, this is your message added after the document; with nothing, the new agent reads the handoff, checks the workspace against it and carries on with the open items), and optionally copy the rest of the queue over (it plays after that first message). A fork with another agent starts from that agent's default model and options; Settings in the dialog changes them. The original session, its box and its queue are not touched, so you can try two approaches side by side.

Click the size under a session in the sidebar to open its Snapshots popup: the machine/snapshots breakdown, a switch to turn automatic snapshots on or off for that session only, the list of its snapshots with their sizes and Fork / Delete buttons, Delete all, and Snapshot now. Sessions with automatic snapshots off show πŸ“·Γ— in the sidebar.

In Settings you set the default for automatic snapshots (off on a fresh install; a config that already has the setting keeps it) and how many to keep per session (default 10; older automatic ones are removed, manual snapshots and snapshots a fork was started from are kept). A snapshot's βœ• in the chat deletes it too; snapshots that a fork was started from cannot be deleted while that fork exists. Tokens are never stored in snapshot images.

If snapshots start failing with the Sandbox's image is missing sha256:… from Docker's content store, Docker lost part of the image the box was created from (typically after a disk failure or an over-eager docker image prune); the box itself still runs, but docker commit needs the whole chain. Rebuild Sandbox in the Snapshots popup fixes it: the box is stopped, its whole filesystem is exported into a fresh single-layer image (recorded as a rebuild snapshot, the size of the full box), and a new box starts from it with the same session, files and conversation; the old box is removed only once the new one runs. Terminals and the Code pane reconnect afterwards. That snapshot cannot be deleted while the box runs on it. When an automatic snapshot fails, the error is shown once instead of failing silently after each turn.

This chapter is generated from docs/GUIDE.md in the Sessionboxer repository. Found a mistake? Open an issue.