How to keep sessions and resume them
This guide shows how to make mm save every conversation of a project and get one back later, in the terminal and from an editor. It assumes mm runs with a configuration file you can edit.
Steps
-
Turn the feature on in the YAML file:
sessions: enabled: true dir: .mm/sessionsdiris relative to the project: the directory you startmmfrom in the terminal, the project the editor opened in ACP mode. Add.mm/to the project's.gitignore: a session file holds every command output the model read. -
Start
mmfrom the project directory. The banner now ends with asessions:line:sessions: saved under /work/project/.mm/sessions · 2 earlier — /resume to continue the latest, /sessions to listThis run is a new session. Its file appears with the first question and is rewritten after every turn, after
/compactand after/new. -
List the project's sessions when you need one back:
> /sessions 3 session(s) in /work/project/.mm/sessions — /resume <id> to continue one, /resume for the latest * 20260916-101530-4f2a9c1e 2026-09-16 10:15 2 turn(s) add a /new command 20260916-093012-77be01d3 2026-09-16 09:41 5 turn(s) fix the skills loader 20260915-181200-0a1b2c3d 2026-09-15 18:20 1 turn(s) list the filesThe
*marks the current session. Ids sort by creation time. -
Continue one:
> /resume ↩️ resumed 20260916-093012-77be01d3 — 14 message(s), started with "fix the skills loader"A bare
/resumetakes the most recently updated conversation other than the current one, skipping empty ones;/resume <id>names one. From there, the model sees the resumed history — under the current system prompt — and every new turn is saved to that session's file. Nothing is replayed on screen: the one line says what came back.
From an editor (ACP)
-
Keep
sessions.enabled: truein the fileAGENT_CONFIGpoints at. Each thread the editor opens is a session, saved under<project>/.mm/sessions/<id>.jsonfrom its creation. -
Use the editor's Reload Agent (Zed) when the agent restarted or you changed its configuration. The editor sends
session/loadwith the thread's id;mmreads the file back and replays the whole conversation — your questions, the answers, every tool call with the input it was given and the output it returned at the time. Nothing runs again. The thread then continues as before. -
/newin a thread keeps the thread (the editor's session id) but the conversation so far is kept on disk under a new id, and the thread's own file starts over empty./sessionsand/resumedo not exist over ACP: the editor is the one listing threads.
Variants
- One store for every project. Give
diran absolute path. Sessions of different projects then share one directory; each file records itscwd. - A project you cannot write to. The banner or the
[acp]log saysnot savedwith the reason; the conversation goes on unpersisted. - Compression. A
/compactor an automatic compression rewrites the file with the shortened history; a resumed or reloaded session starts from the summary, like the live one did. - Starting fresh on purpose. Nothing to do: every start is a new session. The old ones only come back on
/resumeor on an editor reload.
See also
- Configuration reference — the
sessionskeys - Slash commands reference —
/sessions,/resume,/new - ACP reference —
session/loadand what it replays - Why sessions work this way
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|