You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Later / not A1–A8. Do not plan this before structured messages (#549), notes (#550), budget (#551), and compaction (#552) exist. Extracting today’s 3.5M crumb would freeze a lobotomy.
Why this is a separate issue
#548 already forbids a fifth identity issue. This is a different product:
Mixing them is the Codex/OMP failure mode: compaction wipes a cat from the live prompt while the handbook never contained those bytes; or learn mutates the current prefix and busts the KV cache (#558).
This does not fix “each send feels like the first turn.” That is still #549. Ship A1 first.
Problem
After A1–A4, Continue of this session can be a coherent agent. New session still starts as a stranger with personas + skill catalog only. Operators who did a week of work in one repo then hit New/Clear lose every landmine, preference, and “we already tried X.”
Peer split (2026-08-19 source notes):
Harness
Cross-session memory
Codex
First-class ~/.codex/memories/ two-phase pipeline (default on). Idle ≥ 6h, then Phase 1 extract + Phase 2 consolidator → MEMORY.md + v1memory_summary.md. Live agent reads; it does not write mid-turn.
Oh My Pi
First-class memory.backend = off (default) | local (Codex port, idle 12h) | hindsight | mnemopi. /memory CLI. learn writes learned.md for the next session only.
OpenCode
Not in core. Plugins (Mem0, Supermemory, Hindsight) + Beast markdown convention. Issue #16077 still open.
DeepSeek Harness
Not in core. Plugin territory. Invariant is the session log.
Invincible is a cloud harness (Redis envelope + Blob transcript + Functions). We do not grow a ~/.codex on the operator laptop. If we ever ship this, it is tenant/user-scoped cloud state, default off (OMP, not Codex-on-by-default).
Goal (directional — lock in a later create-plan)
An opt-in handbook, same user, same tenant, not the live transcript:
Do not write on the hot path. The live /api/agent turn never rewrites MEMORY.md. Extract after idle (session not continued for N hours, or explicit /memory enqueue), on a root session (not a subagent, if we ever have one).
Phase 1 — extract. Bounded idle rollouts → structured raw_memory + short synopsis. Empty / no-op is a valid result (Codex: “Will a future agent plausibly act better because of what I write here?”). Drop one-off queries, live metrics, secrets. Stricter filter than the transcript (no developer scaffolding, no CoT).
Phase 2 — consolidate. One leased job writes a small MEMORY.md + memory_summary.md (prompt-loaded, ~5k token cap shared with any learned list). Dirtiness (did Phase 1 change anything?) decides whether the consolidator runs — Codex uses git baseline; we can use an object etag / hash, not a repo in the tenant bucket.
Recalled memory is heuristic context, not instructions. Repo state, the user, and the persona snapshot win conflicts.
Success: a New session in the same project can answer “what did we burn ourselves on last week?” from the handbook without loading the old Blob, and a session that was only “what’s 2+2” produces no handbook junk.
Cloud shape (steal the invariant, not the homedir)
Codex / OMP local
Ours (directional)
~/.codex/memories/ / ~/.omp/agent/memories/<cwd>/
tenant+user (+ optional sandbox/project key) objects — Blob or Postgres, not the Redis envelope (size)
JSONL rollout scan
Blob transcript + envelope updatedAt idle clock
git dirty bit
content hash / etag of the handbook object
memory:// reads
ordinary tools + a readable pointer (signed read URL or small GET); no new Wasm chat
default on (Codex) / default off (OMP)
default off
Idle / age knobs are a Caps table later (OMP 12h / 30d / 64 per startup is the conservative peer; Codex 6h / 10d / 2 per startup is aggressive). Functions must not extract 8 MiB inline — Phase 1 reads a truncated model-facing history (post-A1/A4), not the display Blob.
Constraints (lock)
Blocked by A1–A4. No extract of formatPromptWithHistory crumbs.
Not the first-turn fix. Do not retitle this as identity.
Leave on the #548 board as Later. Revisit after A1–A4 have a week of honest Continue. Then create-plan with Caps (idle hours, age, extract concurrency, inject tokens, store).
Parent
#548 (agent session architecture)
Type
Later / not A1–A8. Do not plan this before structured messages (#549), notes (#550), budget (#551), and compaction (#552) exist. Extracting today’s 3.5M crumb would freeze a lobotomy.
Why this is a separate issue
#548 already forbids a fifth identity issue. This is a different product:
Mixing them is the Codex/OMP failure mode: compaction wipes a
catfrom the live prompt while the handbook never contained those bytes; orlearnmutates the current prefix and busts the KV cache (#558).This does not fix “each send feels like the first turn.” That is still #549. Ship A1 first.
Problem
After A1–A4, Continue of this session can be a coherent agent. New session still starts as a stranger with personas + skill catalog only. Operators who did a week of work in one repo then hit New/Clear lose every landmine, preference, and “we already tried X.”
Peer split (2026-08-19 source notes):
~/.codex/memories/two-phase pipeline (default on). Idle ≥ 6h, then Phase 1 extract + Phase 2 consolidator →MEMORY.md+v1memory_summary.md. Live agent reads; it does not write mid-turn.memory.backend=off(default) |local(Codex port, idle 12h) |hindsight|mnemopi./memoryCLI.learnwriteslearned.mdfor the next session only.Invincible is a cloud harness (Redis envelope + Blob transcript + Functions). We do not grow a
~/.codexon the operator laptop. If we ever ship this, it is tenant/user-scoped cloud state, default off (OMP, not Codex-on-by-default).Goal (directional — lock in a later
create-plan)An opt-in handbook, same user, same tenant, not the live transcript:
/api/agentturn never rewritesMEMORY.md. Extract after idle (session not continued for N hours, or explicit/memory enqueue), on a root session (not a subagent, if we ever have one).raw_memory+ short synopsis. Empty / no-op is a valid result (Codex: “Will a future agent plausibly act better because of what I write here?”). Drop one-off queries, live metrics, secrets. Stricter filter than the transcript (no developer scaffolding, no CoT).MEMORY.md+memory_summary.md(prompt-loaded, ~5k token cap shared with anylearnedlist). Dirtiness (did Phase 1 change anything?) decides whether the consolidator runs — Codex uses git baseline; we can use an object etag / hash, not a repo in the tenant bucket.learn-style writes, if any, wait for the next New session so they do not bust the live prefix cache.Success: a New session in the same project can answer “what did we burn ourselves on last week?” from the handbook without loading the old Blob, and a session that was only “what’s 2+2” produces no handbook junk.
Cloud shape (steal the invariant, not the homedir)
~/.codex/memories//~/.omp/agent/memories/<cwd>/updatedAtidle clockmemory://readsIdle / age knobs are a Caps table later (OMP 12h / 30d / 64 per startup is the conservative peer; Codex 6h / 10d / 2 per startup is aggressive). Functions must not extract 8 MiB inline — Phase 1 reads a truncated model-facing history (post-A1/A4), not the display Blob.
Constraints (lock)
formatPromptWithHistorycrumbs..envbodies.MemoryTooloff on the consolidator).Steal / skip (2026-08-19)
Steal
usage_count), not RAG scores we don’t have.learndoes not mutate this turn’s prefix (OMP).Skip
~/.codex/~/.ompas SoT (we are cloud).MEMORY.mdrewrites duringrunAgent.Non-goals
create-planSuggested next
Leave on the #548 board as Later. Revisit after A1–A4 have a week of honest Continue. Then
create-planwith Caps (idle hours, age, extract concurrency, inject tokens, store).Related