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 type | Typical origin |
|---|---|
TEXT | Written by you (default for the REST API) |
INTERACTION | Written by an assistant over MCP (default for eam_write) |
SPEECH | Audio transcription |
SCREEN_EVENT | Screen/clipboard/web captures and imports. Gated: chrome and noise are rejected, near-duplicates reinforce an existing memory instead of adding a new one |
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 (sortnewestoroldest), withsince/untilin 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. Passinclude_recentto 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,clipboardare kept when you edit tags, so a memory never moves between sources. GET /api/v1/tagslists your user tags with counts. Machine tags (tier:*,dream:*,dreamkey:*,window:*, anything starting with_) are never offered.- Use
project:<name>andperson:<name>so recall can filter by project or person.
Edit, pin, delete, restore
| Action | How | Notes |
|---|---|---|
| Edit text | PATCH /api/v1/memories/{id} with content | Creates a new memory that supersedes the old one; the salience gate is skipped. Max 100,000 characters. |
| Edit tags | PATCH /api/v1/memories/{id} with tags | In place; replaces user tags. |
| Pin | POST /api/v1/pin or MCP eam_pin | Pinned memories cannot be deleted and are immune to all cleanup levels. |
| Delete | DELETE /api/v1/memories/{id} | Soft delete (status SOFT_DELETE). Pinned memories are refused (409). |
| Restore | POST /api/v1/memories/{id}/restore | Undo a soft delete. |
| Delete permanently | POST /api/v1/memories/purge | Only already-soft-deleted, unpinned memories of yours. Irreversible. Up to 500 ids; supports dry_run. |
| Delete a version chain | POST /api/v1/delete-chain | Soft-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.
| State | Amplification | Bubble | Starts when |
|---|---|---|---|
| PROBE | 0.3 | 10 blocks | 2 similar queries within 15 minutes |
| ACTIVE | 0.8 | 50 blocks | 3rd similar query |
| DEEP | 1.5 | 200 blocks | 4+ similar queries |
| SUSPENDED / RESOLVED | 0 | preserved / cleared | dissimilar 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.