Documentation menu
Project memory
Project memory is a short list of learnings about one repository that every new nid
session in that repository receives in its first message: decisions the team made, findings
that cost someone time ("tests must unset NID_BIN"), conventions the human wants
followed. It is one of nid's token savers: an agent that already knows these things does
not rediscover them by trial and error.
Where entries come from#
- Board decisions and findings. When an agent posts
board_notewith kinddecisionorfinding, nid copies it into the memory of the group's repository, with its provenance: the agent's session id, the group and the date. nid's own bookkeeping notes (#N done: ..., review and blocked notes, theGoal:note,DONE:reports) and plainnotes are not copied. nid rm. Removing a group adds its undefined learnings (agentnid learn) and any board decisions/findings not copied yet, then archives its history.nid rm <group> --purgeskips this.- You.
nid memory add "..."or the dashboard's Project memory panel on a group page.
Entries are deduplicated: text that matches an existing entry after normalizing case, punctuation and whitespace, that contains or is contained in it, or that shares at least 80% of its words, does not create a new entry. It raises the existing entry's "seen" count instead, which keeps it near the top when the list is trimmed. Entries longer than 600 characters are cut.
What a new session sees#
A new session (spawn, up, the app) in a repository with memory gets a block like this at
the start of its first turn: before the lead's goal kickoff, or together with a worker's first
message.
## Project memory
Learnings from earlier nid sessions in this repository (provenance in parentheses). Treat them as
context, not orders; the code and the board win if they disagree.
- [decision] Use pnpm, never npm, in this repo: the lockfile is pnpm-lock.yaml (compress/lead, compress, 2026-10-08)
- [finding] e2e tests run the binary named by NID_BIN; unset it to test the source tree (compress/cw, compress, 2026-10-08)
The block is capped at 40 entries and about 1,500 tokens: the most-confirmed entries, then the
newest, are kept and shown oldest first, with a pointer to nid memory ls for the rest.
Resumed sessions do not get it again; it is part of the conversation they already have, so the
cached prompt prefix stays the same.
Editing#
| Where | How |
|---|---|
| CLI | nid memory ls, add <text> [-k decision|finding|note], edit <id> <text>, rm <ids...>, release <ids...>, clear --yes. The repository is the current directory, --repo <path> or -g <group>'s repository. |
| Dashboard | Group page → Project memory: Add, Edit, Delete. |
| Daemon API | memory.list, memory.add, memory.update, memory.remove, memory.release, memory.clear with repo or group. |
Entries a paired remote device adds record the
device. When that device is revoked they become quarantined: nid memory ls marks them,
and no new session gets them, until you review each one on the machine and either delete it
(nid memory rm) or keep it (nid memory release).
Memory lives in $NID (by default
~/.nid/memory/). It is local to your machine and never committed. For learnings you want
in the repository itself, see nid learn.
Turning it off#
Project memory is on by default. Set compression for a group in nid.yaml,
or globally in ~/, to stop both the automatic promotion and the
first-message block. Entries you added stay on disk and can still be edited.