Handoff: where Remem stands and how to pick it up

Last verified against the code: 2026-11-13 (0.9.0)

Written at the end of 2026-10-25 so that the owner, or any agent, can pick up exactly here. Read this first, then ROADMAP.md (north star, milestones) and GOALS.md (goals A1–A10). The one command that says where things stand is remem goals; it reads the evidence, not this page.

State in one paragraph

Remem is memory for AI agents that learns from surprises (corrections, failed calls) and delivers each lesson at the moment it applies. 0.8.1 is released (deployed to remem.acific.com; scripts/release-check.py passes): 0.8.0's experiments, re-run on the final reminder, and 0.8.1's adapters at 7B on the GPU. 4 of 10 goals are met (A1, A2, A3, A10), A8 is not met, A5–A7 are collecting evidence, and A4 and A9 wait on the owner.

What 0.8.0 found (paper §7.4; every run in results/runs/)

  1. Why memory up front hurts: one line. Pooled over Llama 3.2 3B, Gemma 3 4B, Qwen3-30B-A3B and Mistral 7B, the delegation tally ("the agent offered to act instead of acting 17 times…") raised hand-backs from 20% to 34% of replies (p < 0.0001), as much as the whole memory; length, position, the header, unrelated lessons and the person's words did not. Agents no longer see the tally (render.py); the owner still does, in morning.md.
  2. The Stop reminder was making agents reckless. Where asking is right, models asked 42% of the time with no memory and 16% after 0.7.0's reminder (they published a post legal was reviewing, force-pushed before being told to). Fixed and installed on the owner's machine the same day: a gate (transcripts.needs_person: no reminder when the person's message says only they have what is needed) and the boundary in the reminder's words (prime.reminder, the one wording used by the hook, the proxy and the experiments). Re-run: 39% → 37% (A10 met), and it still cuts hand-backs where acting is right: 31% → 12% (p < 10⁻¹², four families; A1 met). The lesson in the reminder adds nothing over a bare nudge (12% vs 11%): memory's job is deciding whether and when to intervene.
  3. It holds with tools. In agent loops (simulated shell and editor), the reminder cut final hand-backs from 32% to 14% (p = 0.001, three families; A2 met).
  4. Memory in the weights compiles a disposition, not a judgement. A LoRA adapter trained on reminder pairs (scripts/adapter.py, Qwen2.5-1.5B, CPU) handed back 5% with no reminder (base 37%), but stopped asking where asking was right (0 of 18). Adding boundary pairs made it ask more everywhere (63%); a 30% share gave 47% / 8 of 18. At 7B on the GPU (0.8.1), a 30% share gave 26 → 20 of 100 with asking kept (13 → 14 of 30), one short of the target; more "act" pairs tipped it to 0 of 100 and 2 of 30. Training moves how readily the model asks, not when. A8 is not met.
  5. A stated preference up front helps ("the user prefers that you act": 12%, p < 0.001), but rewordings are model-dependent; nothing about delegation goes up front now.

Re-running the evidence

Every number above can be re-made on this machine (10–40 minutes per command; results land in ~/.remem/experiments/, and remem goals reads them):

export REMEM_LLM_URL=http://localhost:11434/v1
for m in llama3.2:3b gemma3:4b hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M mistral:7b; do
  for kind in behaviour mechanism boundary; do REMEM_LLM_MODEL=$m remem experiment $kind -n 3; done
done
for m in llama3.2:3b hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q4_K_M mistral:7b; do
  REMEM_LLM_MODEL=$m remem experiment loop -n 2
done
remem experiment pairs && python scripts/adapter.py --model Qwen/Qwen2.5-7B-Instruct --n 5 --boundary-share 0.3   # in the GPU venv
cp ~/.remem/experiments/*.json results/runs/                               # keep them in the repo

Next, in order

# What Goal Who How
1 Frontier models A4 owner: an API key; agent: the runs REMEM_LLM_URL=https://api.anthropic.com/v1 REMEM_LLM_MODEL=<model> REMEM_LLM_KEY=<key> remem experiment (then loop, boundary, mechanism); the most important missing evidence
2 Transfer between machines A9 owner: one paste remem share invite in the owner's own terminal on the Linux box (it prints a token), the line pasted on the Mac
3 Memory in the weights: teach when, not how often A8 agent the GPU path works (0.8.1, 7B in 20–30 min); next: contrast pairs that hold the situation fixed and vary only whether the person has what is needed, a judge of asking better than a question mark (asks phrased as statements are missed), and real pairs from ~/.remem/pairs.jsonl
4 Real use A5, A6 owner: daily work; agent: weekly remem measure and remem goals weekly; 20 reminders in each arm
5 More repeated corrections for the comparison A7 time remem compare -k 20; needs 10 cases

Owner decisions still open

Where things are

Thing Where
Code remem/ (stdlib only); new in 0.8.0: goals.py, experiments in experiment.py, needs_person in transcripts.py, reminder and last_prompt in prime.py
Adapter training scripts/adapter.py; needs a venv with torch, transformers, peft, trl. On the GPU (Radeon 8060S, gfx1151) take AMD's build, as the stock ROCm wheels crash: uv venv -p 3.12; uv pip install --index-strategy unsafe-best-match --index-url https://rocm.nightlies.amd.com/v2/gfx1151/ --extra-index-url https://pypi.org/simple "torch==2.12.0a0+rocm7.13.0a20260411"; uv pip install transformers==5.20.2 peft==0.21.2 trl==1.16.0 datasets accelerate. On CPU: torch from https://download.pytorch.org/whl/cpu
Every run results/runs/ (copied from ~/.remem/experiments/), results/adapters/*/result.json, results/pairs-2026-10-25.jsonl
The owner's store ~/.remem/ on the Linux box (memory.db, primed.jsonl, experiments/, adapters/)
Hooks ~/.claude/settings.json (SessionEnd, UserPromptSubmit, Stop, PreToolUse), wired by remem setup; backup settings.json.before-remem
Release rules AGENTS.md (rule 17: scripts/release-check.py must pass before anything is called released)
Lab log ~/Strange/handbook/LOG.md

Notes for whoever picks this up