Mnemomemory infrastructure

New · Memory Inbox

Everything captured, and who captured it.

The Inbox is the one place where every memory lands — typed by you, saved by the extension, extracted from a connector, written by an agent over MCP, or sent from your phone — newest first, with the author printed on the row. Triage it like mail: edit, merge, file under a person, delete, undo.

REST API: every memory record now carries createdBy { kind, id, label } stamped server-side (api_key, mcp, user, connector, inbound, system; null for rows written before this release) and dueAt. GET /v1/memories gains since, until, createdByKind, and memoryType filters (always on, no flag). POST /v1/memories/merge (memories:write and memories:delete, both) combines 2–20 memories from one container into a survivor without losing history.

Stamp, filter, merge

  • Every write is stamped — createdBy is recorded from the authenticated principal and is never client-settable.
  • The list learned to filter — source chips from real counts, a container select, and 24h · 7d · 30d, all in the URL so a filtered view is shareable.
  • Merge without losing anything — keep one memory as the survivor (into) or write the merged text; the sources are soft-deleted with mergedIntoId written on each. Same ids twice returns the same result with replayed: true. 400 MERGE_CROSS_CONTAINER, 403 MERGE_PROTECTED.

Nothing here is destructive

  • Provenance you cannot forge — a request body that says it came from a person is ignored; the key or session that sent it is what gets recorded.
  • Merge keeps the trail — the survivor records mergedFromIds, each source records mergedIntoId, the event stream keeps every original write, and an audit entry names the merge.
  • One-hour undo, always — delete from the Inbox is the same soft delete as everywhere else.
  • Protected memories stay protected — a privileged memory cannot be merged away by an ordinary key.
  • Idempotent under retries — a merge carries a mergeKey; retrying converges on the same survivor.
  • Behind a flag — the merge route and the dashboard Inbox answer 503 FEATURE_DISABLED until enabled; the list filters do not need a flag.

Explore Mnemo