Mnemomemory infrastructure

New · Timeline

One container, day by day.

The Timeline lays a container out in time: memories when you wrote them, reminders when they are due, documents when they arrived, events when they happened. Four lanes, one stream, a dot per type — and every item links back to where you can act on it.

REST API: GET /v1/timeline?containerTag=&from=&to=&types=&direction=&limit=&cursor= (scope timeline:read). types is a subset of memory, reminder, document, event (default memory,reminder,document — event is opt-in). Items carry a composite id <type>:<refId>, occurredAt, title, snippet, containerTag, createdBy, and a meta object; the cursor encodes { sortAt, id } so paging never skips or repeats. An unknown container returns items: [] and container: null, never a 404.

Four queries, one merge

  • Pick a container — a person, a project, your own user:<id>, a connector's inbox. Required for API keys; MCP clients are limited to the container their grant allows.
  • One bounded query per lane — memories by createdAt, open reminders by dueAt, documents by arrival (or the connector's own item time), events by occurredAt with memory_written excluded. Each lane reads limit + 1 rows from an index that already exists.
  • Merge and page — a k-way merge orders the lanes by occurredAt with the composite id as tie-break. Day grouping happens in your browser's timezone with Intl.

Bounded reads, honest times

  • Never a full scan — a page over a container with a million memories costs the same as one with ten.
  • The time that actually matters — reminders appear at their due date, connector documents at the source's own updated time when it reports one.
  • Lanes stay distinct — a reminder shows once as a memory (when written) and once as a reminder (when due), under different composite ids.
  • Scoped like every read — timeline:read is a new, opt-in scope; cross-tenant tags are simply empty.
  • Behind a flag — 503 FEATURE_DISABLED until Timeline is enabled for your workspace.

Explore Mnemo