Repository navigation
v0.11.0
Sleep: consolidate a crowded graph
A graph that is used grows piles: the same subject restated across versions,
an investigation captured as a dozen findings, a decision and its
paraphrases. Each pile costs twice. Search hands your assistant several
near-identical notes where one would do, and nobody can review thousands of
notes by hand. 0.11.0 measures the piles and gives your assistant a way to
consolidate them, without adding any structure to the graph.
- Crowding. For every note, Engram counts how many others sit unusually
close to it: inside the cosine that only this graph's top 1% of note pairs
reach. It works from the vectors the graph already stores, runs no model,
and changes nothing about search ranking. - Subjects. What gets reviewed is a subject: notes joined by chains of
close pairs, at least 2% of the graph's notes (never fewer than 5). Close
subjects touch and chain together at the band, so an oversized group is
re-cut at a stricter cosine until its pieces fit. On Engram's own
562-note graph that turns one 409-note blob into six real subjects of
12 to 45 notes. - Subjects have names, picked without a model: the two or three terms
from titles and tags that most of a subject's notes share and the rest of
the graph rarely uses (class TF-IDF) — retrieval · oblique recall · NLI,
TepinDB · multi-project · hub, tombstone · write path · decay. The
review queue and Checkup show them. - The review queue ranks subjects by how much they are worth
consolidating: big, spread over many releases, and settled (old notes from
past versions) comes first; a pile of this cycle's notes is live work and
ranks low. Over MCP there is no new tool:list_nodestakes
view: "review"(one subject per page: its worth, shared tags and
anchors, the central members with snippet, edges, version and trust, the
rest as titles, and the closest pairs),around: <id>(a note's nearest notes and the
notes sharing its anchors, tags or code refs, with no search cut-off) and
sort: "crowded". - History written before version stamping still counts. A note with no
version stamp takes the version that was current when it was written, read
from the graph'sset_versionhistory; notes older than that history count
as one version together ("<0.7.0"). A subject that ran from 0.6 to 0.8 no
longer looks like a single release. - Conflicts and islands are sleep queues too.
list_nodes
view: "conflicts"lists standingconflicts-withedges (with which side
is newer) beside pending suspects;view: "islands"lists notes no edge
and no tag reaches, each with its three nearest notes, so tying one back
in needs no extra search. A sleep settles conflicts first, then subjects,
then islands. HTTP:GET /review/conflicts,GET /review/islands. - Reviewed marks.
update_node/update_nodestakereviewed: true.
A subject counts as reviewed while more than half its notes are, so a worked
subject stays hidden when it re-forms around its state-of note and comes back
once new or changed notes outnumber the reviewed ones; an island is hidden
until it changes. It never moves trust, and an older binary simply ignores it. - The
engram-sleepskill (/engram-sleep [subject];/engram:sleepin the plugin) loads only when
asked; the capture skills suggest it when one subject is
restated all over or the user finds memory noisy. It explains the problem, hands each subject to a fresh subagent,
writes one state-of note for settled history (linkedbuilds-onwhat
stays,replacesonly what it fully covers), merges restatements (the
victims stay archived behindreplaces), links
what superseded or answered what, marks the rest reviewed, and reports
with a one-click undo: the Audit panel's "Undo session".setupinstalls
it beside the other skills, and the first refresh after upgrading from an
older release adds it once. - In the pane. A flame button in the graph's controls lights crowded
cards with a soft glow and a tinted surface, yellow through orange to red,
readable from the zoomed-out view; resting on any control explains it.
Checkup gains a Crowded subjects section listing the queue, where a
subject you have looked at can be kept (marked reviewed); its reachability
islands come from the core and can be kept the same way. The Review panel
tags suspects, conflicts and provisional notes with their subject's name
and groups provisional notes by subject, with Approve all per subject. - A link settles the suspect between its two notes. Linking two notes
with a pending conflict suspect between them now settles it:replacesor
conflicts-withconfirms it, any other verb dismisses it. A state-of note
raises suspects against the notes it summarises as soon as it is written;
itsbuilds-onlinks now clear them. - Edge labels draw sharp from the first frame. A verb new to the graph
rebuilt the label atlas mid-pass, and the edges handled before it sampled
a squashed slice of two labels until the next zoom; the label font now
also counts as a card font, so its late load repaints the atlas.
Engram stops assuming Claude (issue #18)
- Notes an agent writes say
source: "agent", not"claude". The value
always meant "written by an agent over MCP", whichever agent it was —
Windsurf, Codex, Cursor or Claude Code. Graphs and exports from earlier
versions keep their"claude"notes and read them asagent; nothing is
migrated. The pane, the HTTP API andexportwriteagentfrom now on. doctorno longer nags about assistants a repo doesn't use. An
assistant installed on the machine but not wired in this repo is a quiet
note when another one is wired here (a Windsurf repo on a machine that also
has Claude Code), and a warning only when nothing is.setup --cli windsurffills in an emptymcp_config.json. A fresh
Windsurf plugin leaves the file empty; setup used to call it invalid JSON
and ask for a manual edit.
Full Changelog: v0.10.4...v0.11.0