M5.2, agent memory (L6.4), as discussed: the model writes and forgets without asking, corrections may be paraphrased, and a pass at an item's close records what will matter.
Code
memory.py:
one note per fact at memory/nisse-dev/<name>.md, holding a one-line description, the fact, and provenance (work item, thread, time);
an index.md that the harness rebuilds after every change;
a snapshot of the index, with a hash, for the transcript;
vault.delete, for read-write folders only.
The tools remember(name, description, fact) and forget(name, why):
for the driver (before the go-ahead too) and for conversations;
each change posts a line in the thread ("Remembered: …", "Updated: …", "Forgot: …");
plain names only, and index is reserved.
Memory is on when the vault configuration gives memory/nisse-dev read-write.
The index is shown once per item and conversation: a fact in the transcript with its path and hash (L6). The prompt says memory is a cache, to be checked against the live system and fixed when wrong.
A memory pass at close (completed or abandoned):
it runs the driver's model under a new memory role, in its own transcript, seeing the item's narration the way the toolchain step does;
its tools are the note tools, remember, forget and memory_done;
it is bounded by tuning.memory.max_turns (10);
when it fails or runs out of turns, that's recorded as a fact, and the close still stands.
Docs
L6:
the model writes and forgets on its own, each change said in the thread;
the harness keeps the index and puts it into the transcript at start;
the closing pass;
corrections are recorded faithfully with attribution, and paraphrase is fine.
The Development Plan: the M5.2 entry, and M5.3 split out as its own line.
The Tuning Guide and example YAML:memory.max_turns.
Tests
test_memory.py:
notes and their provenance;
the same name replaces a note, and the index follows;
forgetting;
names are checked;
the snapshot's hash.
test_loop_memory.py:
the model remembers and forgets without asking, with thread lines;
the index is shown once;
the pass at close writes notes in its own transcript;
a pass that fails, or hits its turn limit, never holds the close up;
a conversation can remember.
The walk: its model now remembers and forgets, both in runs and in the closing pass (18 writes and 13 forgets across 16 seeds). A new check, memory_stays_home, confirms nothing lands outside memory/nisse-dev/ and your note is never touched.
Locally: the unit tier (739 tests) and the 48-seed walk pass.
M5.2, agent memory (L6.4), as discussed: the model writes and forgets without asking, corrections may be paraphrased, and a pass at an item's close records what will matter.
## Code
- **`memory.py`:**
- one note per fact at `memory/nisse-dev/<name>.md`, holding a one-line description, the fact, and provenance (work item, thread, time);
- an `index.md` that the harness rebuilds after every change;
- a snapshot of the index, with a hash, for the transcript;
- `vault.delete`, for read-write folders only.
- **The tools `remember(name, description, fact)` and `forget(name, why)`:**
- for the driver (before the go-ahead too) and for conversations;
- each change posts a line in the thread ("Remembered: …", "Updated: …", "Forgot: …");
- plain names only, and `index` is reserved.
- Memory is on when the vault configuration gives `memory/nisse-dev` read-write.
- **The index is shown once per item and conversation:** a fact in the transcript with its path and hash (L6). The prompt says memory is a cache, to be checked against the live system and fixed when wrong.
- **A memory pass at close** (completed or abandoned):
- it runs the driver's model under a new `memory` role, in its own transcript, seeing the item's narration the way the toolchain step does;
- its tools are the note tools, `remember`, `forget` and `memory_done`;
- it is bounded by `tuning.memory.max_turns` (10);
- when it fails or runs out of turns, that's recorded as a fact, and the close still stands.
## Docs
- **L6:**
- the model writes and forgets on its own, each change said in the thread;
- the harness keeps the index and puts it into the transcript at start;
- the closing pass;
- corrections are recorded faithfully with attribution, and paraphrase is fine.
- **The Development Plan:** the M5.2 entry, and M5.3 split out as its own line.
- **The Tuning Guide and example YAML:** `memory.max_turns`.
## Tests
- `test_memory.py`:
- notes and their provenance;
- the same name replaces a note, and the index follows;
- forgetting;
- names are checked;
- the snapshot's hash.
- `test_loop_memory.py`:
- the model remembers and forgets without asking, with thread lines;
- the index is shown once;
- the pass at close writes notes in its own transcript;
- a pass that fails, or hits its turn limit, never holds the close up;
- a conversation can remember.
- **The walk:** its model now remembers and forgets, both in runs and in the closing pass (18 writes and 13 forgets across 16 seeds). A new check, `memory_stays_home`, confirms nothing lands outside `memory/nisse-dev/` and your note is never touched.
- **Locally:** the unit tier (739 tests) and the 48-seed walk pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
remember(name, description, fact) and forget(name, why): control tools for
the driver (before the go-ahead too) and conversations, writing only the
agent's own vault folder, one note per fact with its provenance. No one
agrees first; each change is a line in the thread. The harness keeps the
index and puts it into the transcript once per item, with a hash.
At an item's close, completed or abandoned, a bounded memory pass (the
driver's model, its own transcript and view) records what was decided and
learned; it never holds the close up (tuning.memory.max_turns).
With the operator: corrections may be paraphrased (L6 changed), the model
forgets on its own, and nothing limits what may prompt a note. The walk
remembers and forgets, and checks nothing lands outside the agent's folder.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
M5.2, agent memory (L6.4), as discussed: the model writes and forgets without asking, corrections may be paraphrased, and a pass at an item's close records what will matter.
Code
memory.py:memory/nisse-dev/<name>.md, holding a one-line description, the fact, and provenance (work item, thread, time);index.mdthat the harness rebuilds after every change;vault.delete, for read-write folders only.remember(name, description, fact)andforget(name, why):indexis reserved.memory/nisse-devread-write.memoryrole, in its own transcript, seeing the item's narration the way the toolchain step does;remember,forgetandmemory_done;tuning.memory.max_turns(10);Docs
memory.max_turns.Tests
test_memory.py:test_loop_memory.py:memory_stays_home, confirms nothing lands outsidememory/nisse-dev/and your note is never touched.🤖 Generated with Claude Code
https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk