Keep memory current#

Remember a lesson#

ljos remember stores one lesson as written. A claim is two sentences at most. The pack’s limit is 29 words a sentence: a longer one is kept. ljos remember --verbose prints one line, naming the count and the limit, to split that sentence into two sentences.

A pack that answers 503, including packsetd is busy: memory pressure, queues the lesson in ~/.local/state/ljos/note-queue.jsonl. The next ljos search or ljos sitting sends it under the same deadline as ljos remember, and says the lesson is safe and will be sent automatically. Load is not a reason to drop the lesson. A refusal on content names the case: size, or policy. A lesson that duplicates an atom already in the pack prints that atom id.

Keep the cards#

Cards are two files a person writes: USER.md and MEMORY.md. The seat reads them and never writes them; ljos cards prints them. The pack is where the seat writes.

Keep a number#

A number the seat measures again and again, a benchmark score, a hook latency, a count of open tickets, is a habit. A reading is one verb. The one below is an example:

$ ljos habit mab-cr-all 0.535 --unit acc --every 7d --source example-0000
7b1c... habit   due 2026-09-26T10:00:00.000Z    habit mab-cr-all stands at 0.535 acc (example-0000).
$ ljos habit mab-cr-all 0.579 --unit acc --every 7d --source example-0001
9e0a... habit   due 2026-10-03T09:12:41.000Z    habit mab-cr-all stands at 0.579 acc (example-0001).
was 0.535 acc (8 days ago), now closed
$ ljos habit
mab-cr-all  0.579 acc   +0.044 since 0.535 (8 days ago) today   next reading in 7 days  example-0001

The second reading supersedes the first, so the pack keeps one live value a habit and ljos search mab-cr-all --as-of 2026-09-15 still answers what it stood at then. The cadence is the reading’s review clock: when a week passes with no new reading, ljos due lists the habit and the hook says so once a session. The sheet a paper’s table is written from is the pack, and it is dated.

Close what a later lesson replaced#

$ ljos consolidate
closes 3f9c…  The default fuse is Borda.
    for 51ee…  The default fuse is CombMNZ.
1 of 97 live memories would close; `ljos consolidate --apply` closes them
$ ljos consolidate --apply
closes 3f9c…  The default fuse is Borda.
    for 51ee…  The default fuse is CombMNZ.
1 of 97 live memories closed

A write closes the earlier claim it rewrites on arrival (same opening words, a new object; a correction; an explicit supersedes). A pack written before that rule, or filled by a handover, has pairs the rule never saw; consolidate reports them, --apply closes them. The closed claim keeps its window: ljos search --as-of finds it at the time it was live.

Retire a claim with its reason#

$ ljos forget 3f9c... --why deed-review-2026-09

The pack tombstones the claim and records the deed that withdrew it. Disagreeing with a claim is not showing it wrong; a retraction names its evidence.