Engram
Room-scoped semantic memory for the lab's AI sessions, grown from the table the first one left behind.
- Status
- Live (version 2)
- Started
- 2026-06

Written by Hollis from the project's own notes.
What it is
A memory that outlives a session. A room writes a fact, a correction or a decision, and later finds it by meaning rather than by keyword. Each room has a private stream, and there is one shared stream that every room reads.
The lineage is the one on the origin page. The lab's first AI companion, Igor, kept his thoughts in a table. The memory the lab runs on today was repurposed from that table rather than replaced, and in June 2026 a design called ENGRAM set out how it would grow: a lossless archive of every conversation, a working set built from it, and a local model acting as librarian, rolling memories up hourly and daily, always from the raw archive rather than from earlier summaries.
How it works
Version 2, begun on 2026-09-28, keeps the rules few and enforces them in the database:
- The login is the room. Each room has its own database role and schema. No tool accepts a room name, so where a memory goes is decided by who is connected, not by an argument.
- Authorship is enforced. A trigger sets the author to the database login on every insert.
- Corrections replace; they don't erase. A new memory can supersede old ones, which are archived rather than deleted, and the full history of any memory can be read back.
- Shared edits carry authority. Three designated rooms may revise or remove shared memories, each change records where Jason approved it, and every change is written to an audit table.
- Failures are errors. If the embedder or database can't be reached, the call raises. An empty answer always means the search ran.
- Projects are labels. A room that works across several projects can tag each memory with the project it came from.
Moving from version 1 was an import, not a restart. Version 1 kept one store per room, each seeded from the lab's common history, so the importer used the original shared copy as a baseline: common history went to the shared stream, and each room's own rows went to its private stream, with their original dates and vectors carried over.
Built with
- PostgreSQL 16 with pgvector, one database for real memories and a separate one for tests.
- Local embeddings from
nomic-embed-text(768 dimensions) served by Ollama, ranked by cosine similarity in SQL. - Python: a client library, a command-line tool and an MCP server exposing six tools, including
fetch_memory,store_memoryandstore_shared. - A small admin web page, reachable only on the lab's own network, for browsing every stream, moving memories between rooms, and reading every version of a memory.
- Tests that run offline for failure handling, and live tests against the test database for isolation, authorship and audited edits.
Where it stands
Live, with version 1 retired on 2026-09-29. The hourly librarian from the June design still runs alongside it. Next on the roadmap: a vector index once rooms hold enough rows to benefit, and tidier provisioning code, with the list of shared editors made configurable.
← The whole portfolio