Memory is the part of Runi that lasts longer than a session: a decision and its reason, a discovery, a known issue, a convention. It also carries the strictest rule in the product. Nothing reaches a teammate's brief until a named person confirms it.
The three states#
| State | What it means | Rides a brief? |
|---|---|---|
| proposed | Drafted by Runi from a session, or filed by an agent through runi_remember. Visible to its author. |
No |
| confirmed | A person read it and signed it. It is now team memory. | Yes |
| superseded | A later entry corrected it. The old version is kept behind the new one. | No. The correction rides instead. |
Where a proposed entry comes from#
Runi noticed it#
At the end of each turn, Runi reads your agent's visible reply for things worth keeping: "we decided X because Y", "that approach failed because…". Anything it finds is drafted for you, and the evidence behind it stays on your machine. This only runs when you share session detail.
Two passes do it. The first catches a decision phrased as a decision. The
second asks a model to find the same thing phrased any other way, which is
most of the time. That second pass can only quote your agent
verbatim, never write new sentences, and what it finds is marked as
lower-confidence than the first. Turn it off with
modelObservations: false in ~/.relay/config.json.
You asked for it#
Say "remember this" to an agent with Runi's MCP tools and it files the entry for you. This is the better path by a distance: Runi noticing something has to guess at the reason, whereas you saying it gets the reason stated whole.
Four rules the write enforces:
- A decision without a reason is refused. A rule nobody can revisit is worse than no rule.
- A title the workspace already holds is not recorded twice.
- Absolute paths are dropped, and an ignored path refuses the write.
- It is always proposed, never confirmed, whoever asked. An agent can be talked into calling the tool by a page it read.
Note
Memory crosses even on local-only session detail. If you keep session detail on your machine, the backing event stays there, but the memory itself is still shared. Asking your agent to remember something for the team is the same act as typing it into Memory yourself.
Confirming#
-
Open Memory#
Proposed entries from your own sessions are waiting there. They are yours to sign, and nobody else can sign them for you.
-
Read the sentence as a teammate would#
Does it say the thing, with its reason, without the context of the session it came from? If not, edit it. Editing before confirming is the expected path, not an exception.
-
Confirm the ones worth keeping, and only those#
An entry that is merely true is not worth a line in everyone's context window. Keep what would have saved you the hour.
Correcting#
When an entry turns out to be wrong, correct it instead of deleting it. The correction is what every later session receives, and the superseded version stays behind it, so the record of having changed your mind is not lost.
Being wrong should cost the team one fix, not one fix per person.
What makes a good entry#
| Kind | Good | Not worth an entry |
|---|---|---|
| Decision | "We dropped the queue rewrite because the ordering guarantee we needed is not in the client library." | "We use TypeScript." |
| Discovery | "Staging returns 502 for about a minute after every deploy. It is the health check warming up, not a bad build." | "Staging is sometimes slow." |
| Failed approach | "Retrying the parser on read did not work. The writer is not atomic, so a read can land mid-write." | "Tried some things." |
| Convention | "Migrations are forward-only and numbered. Never edit one that has shipped." | Anything already written in the repository's own docs. |
The test: would this have saved a colleague an hour they are otherwise going to spend? If not, it is noise in somebody's context window.