mm_record
Record what this session learned into a spec’s ## Recorded block — the durable, append-only substrate under write-back. phase selects the operation: append (write typed, provenance-stamped lines onto a spec), dismiss (record a rejected proposal as a transcript system line so it does not come back next session), read (read the block back with transcript anchors resolved). This is the ONLY path that writes recorded lines: never edit the ## Recorded section directly, because an edit — as opposed to an append — silently turns two machines recording at once from a union into a conflict. Provenance (session_id, agent, model, timestamp, mm-turn:// anchor) is mandatory; a line without it is rejected, not written. Calling append with no spec returns a stated null case rather than dropping the write.
At a Glance
Section titled “At a Glance”- Category: Core
- Source: Built-in
- Availability: Listed by default
- Required parameters: 2
- Total parameters: 11
Parameters
Section titled “Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
phase | string (enum: append, dismiss, read) | Yes | append | dismiss | read. There is deliberately no edit/reorder/remove phase — recorded lines are append-only. |
project_path | string | Yes | Absolute path to the project root (the directory containing .mm/). |
spec_folder | string | No | append/read: spec folder name, e.g. ‘2026-08-01-write-back-record-format’. Omit when the session has no spec — the call answers with the stated null case. |
lines | array of object | No | append: the lines to write. Each is { kind: decision|finding|constraint|ruled-out, text, provenance: { session_id, agent, model, timestamp, anchor } }. Provenance is mandatory on every line. |
session_id | string | No | dismiss: MM session id whose transcript records the dismissal. |
kind | string | No | dismiss: the dismissed proposal’s kind. |
text | string | No | dismiss: the dismissed proposal’s text, verbatim. |
reason | string | No | dismiss: why it was rejected (optional — a rejected finding is still information). |
anchor | string | No | dismiss: the proposal’s mm-turn:// anchor, when it had one. |
resolve_anchors | boolean | No | read: resolve each line’s transcript anchor (default true). A compacted turn degrades to a stated result rather than dangling. |
requesting_owner | string | No | read: owner identity for the transcript owner gate when resolving anchors. |
Example
Section titled “Example”{ "tool": "mm_record", "arguments": { "phase": "append", "project_path": "/Users/you/projects/my-app", "spec_folder": "example-spec_folder", "lines": [ "example-line" ] }}Related Tools
Section titled “Related Tools”mm_search- Full-text search across all entity types (specs, features, issues, notes, ide…mm_configure_integration- Configure an external service integration (github, trello, grain, gmail, noti…mm_sync_notion- Bidirectional sync between a Notion database and .mm/specs/ or .mm/notes/. Pu…mm_daily_brief- Generate a structured morning summary with active tasks, blockers, recently c…mm_revert_spec_completion- Revert a spec’s completion status in its parent feature. Tasks stay [x] but t…