Skip to content

Organizing memory

Projects, tags, pages, and links — what each is for.

Ocean Labs

Four organizers keep memory navigable. They overlap in feel but not in job — keeping them distinct is what stops memory from turning to mush.

OrganizerWhat it isPer memory
project_idthe one home scope — what an entry is aboutone
tagsmany cross-cutting labels for recallmany
pagethe durable synthesis on a subject
linkan explicit typed relationship between two rows

Projects — the folder

A project is a topical scope inside one workspace (Health, the Acme launch). An entry has one home project; a page can belong to several via page_projects. A project’s description is a routing index — it lets an agent choose which project to open before spending tokens reading it, so keep it accurate.

insert into projects (workspace_id, name, description)
values (my_personal_workspace(), 'Health', 'Symptoms, labs, providers, meds.')
returning id;

Create one only when a coherent theme has formed and the user agrees. Retire one by setting status = 'archived'; its entries simply fall back to unfiled.

Tags — the labels

Tags are the emergent, cross-cutting vocabulary. Apply them with apply_tags; fold duplicates with merge_tags, which repoints the labels and archives the loser (no row is ever deleted). The same tag can span many projects — which is exactly what project_id alone can’t give you.

Pages are the consolidated wiki; links are the typed graph between them. Your agent reads both but writes neither — consolidating entries into pages and drawing links is the Dreamer’s job. At capture time you insert entries only.

When you read, start at the pages (they’re already synthesized and cited), then follow derived_from links down to the source entries for provenance, and relates or part_of links across to neighboring topics.