Memories

A memory is an immutable block of text with a header (source, tags, relevance, pinned, links to older versions).

Writing

Web app, POST /api/v1/write, the macOS app and the MCP tool eam_write all go through the same write pipeline: secret guard and PII shield, embedding (when available), a salience gate, chain detection, then storage.

Source typeTypical origin
TEXTWritten by you (default for the REST API)
INTERACTIONWritten by an assistant over MCP (default for eam_write)
SPEECHAudio transcription
SCREEN_EVENTScreen/clipboard/web captures and imports. Gated: chrome and noise are rejected, near-duplicates reinforce an existing memory instead of adding a new one
Bodies are immutable

A memory's text never changes in place. Editing creates a new memory that supersedes the old one; the old one becomes SUPERSEDED.

Searching

  • Semantic mode — a non-empty query is ranked by hybrid keyword and semantic scoring. Below the relevance floor the result list is empty.
  • Browse mode — an empty query or * lists ACTIVE memories by date (sort newest or oldest), with since/until in epoch ms.
  • ID lookup — a query that is a memory UUID returns that memory.
  • RECENT tier — raw captures and imports (tag tier:recent) are hidden until DREAM consolidates them. Pass include_recent to include them.

The memory browser in the web app uses GET /api/v1/memories (keyset pagination, filters by source, tags, app, date and text). See the API reference.

Tags

  • Up to 32 tags per memory, each up to 64 characters, no commas.
  • Source tags screen, web, audio, clipboard are kept when you edit tags, so a memory never moves between sources.
  • GET /api/v1/tags lists your user tags with counts. Machine tags (tier:*, dream:*, dreamkey:*, window:*, anything starting with _) are never offered.
  • Use project:<name> and person:<name> so recall can filter by project or person.

Edit, pin, delete, restore

ActionHowNotes
Edit textPATCH /api/v1/memories/{id} with contentCreates a new memory that supersedes the old one; the salience gate is skipped. Max 100,000 characters.
Edit tagsPATCH /api/v1/memories/{id} with tagsIn place; replaces user tags.
PinPOST /api/v1/pin or MCP eam_pinPinned memories cannot be deleted and are immune to all cleanup levels.
DeleteDELETE /api/v1/memories/{id}Soft delete (status SOFT_DELETE). Pinned memories are refused (409).
RestorePOST /api/v1/memories/{id}/restoreUndo a soft delete.
Delete permanentlyPOST /api/v1/memories/purgeOnly already-soft-deleted, unpinned memories of yours. Irreversible. Up to 500 ids; supports dry_run.
Delete a version chainPOST /api/v1/delete-chainSoft-deletes a memory and its whole supersede chain, skipping pinned blocks.

Context and HyperFocus

POST /api/v1/context (MCP eam_context) loads memories for a task and activates HyperFocus, a dynamic focus bubble that boosts memories related to the task.

StateAmplificationBubbleStarts when
PROBE0.310 blocks2 similar queries within 15 minutes
ACTIVE0.850 blocks3rd similar query
DEEP1.5200 blocks4+ similar queries
SUSPENDED / RESOLVED0preserved / cleareddissimilar queries / explicit resolve

Resolve a task with POST /api/v1/resolve or eam_hyperfocus_resolve. The 3D map shows the active HyperFocus session.

Brain Fingerprint

The Brain Fingerprint is a personalized semantic index (cluster-weighted retrieval). GET /api/v1/health reports it under components.brain_fingerprint (active or none). The Pro plan lists it as a feature.

Store health

GET /api/v1/health returns score, state, total_blocks, block_limit_state and component status (embedder, qdrant, s3_vault, brain_fingerprint). Without an embedder, search falls back to keyword only. Infrastructure load never triggers deletion of your memories.