The issue, as reported
On the Codex issue tracker, an open report from 14 September describes what happens after a usage limit cuts off a long task. When the task is resumed, Codex spends a large part of the new allowance rebuilding what it already knew: re-reading repository files, rerunning checks and tests, and working out again which steps are finished. The developer now writes handoff summaries by hand so that Codex doesn't redo completed work.
Claude Code users describe the same thing. At the end of August, a developer on r/ClaudeAI who runs eight Claude Code sessions, restarted each night by a scheduled job, said the agents started every morning with no idea what they had been doing, and had to be re-briefed from a phone. Their fix was a handoff file and a start-up hook, which is where the free fix below comes from.
The harder loss is what was learned along the way. A feature request on the Claude Code tracker, opened in August and still drawing replies in late September (21 so far), points out that after an agent spends a long time debugging a problem, what was tried, what failed and why it worked is hard to carry into the next session. Developers keep it by hand in CLAUDE.md, or explain it again.
Built-in memory helps, but heavy users hit its edges. One open request describes a project with around 500 memory files where Claude Code's index limit has become a constant ceiling. On the Codex side, a report from 26 September says that archiving a finished chat before Codex gets round to it means the work in it never becomes a memory at all.
Reported in
Why it happens
The model keeps nothing between sessions. Anthropic's documentation says it directly: each Claude Code session begins with a fresh context window. What the agent knows at the start comes from files loaded at launch, plus whatever it reads as it works.

Two kinds of file are loaded:
- Instructions you write. Claude Code loads CLAUDE.md, and can read AGENTS.md; Codex reads AGENTS.md before doing any work.
- Notes the tool writes. Claude Code's auto memory is on by default and loads only the first 200 lines or 25KB of its
MEMORY.mdindex. It is machine-local, and it skips anything it can derive from the code, "such as architecture, file paths, or debugging fixes". Codex's local memories are off by default; once on, Codex skips active or short-lived chats and waits until a chat has been idle before summarising it. OpenAI's advice is to treat them as "a helpful recall layer, not as the only source for rules that must always apply".
The full conversations, which hold the reasons and the failed attempts, are saved on disk (Claude Code keeps them as JSONL files), but a new session doesn't read them. You can reopen one conversation at a time. So a fresh session gets the rules you wrote plus a short, capped summary for one tool on one machine, and that is the gap the reports above describe.
How to fix it today
These steps need nothing beyond the tools themselves, and follow their current official docs.
- Put what's settled in AGENTS.md
Claude Code v2.1.277 and later reads
AGENTS.mdtoo, when the project has noCLAUDE.md. If you have both, put@AGENTS.mdon the first line ofCLAUDE.mdso one file serves both tools. Keep it under 200 lines: the Claude Code docs say longer files use more context and are followed less reliably. Put in build and test commands, what not to touch, and one line per settled decision with its reason. In Claude Code, run/contextand check Memory files to confirm it loaded. - Keep a handoff file
One small file in the project root, rewritten at each milestone. Ask the agent to update it before you stop:
NOW auth refactor, step 3 of 5 NEXT move token refresh into middleware DECIDED Postgres, not SQLite (reporting joins) FAILED retry wrapper: made timeouts worse DON'T touch /migrations - Load it automatically in Claude Code
A SessionStart hook runs when a session starts, resumes, is cleared or is compacted, and Claude Code adds its plain output to the context. Add the snippet below to
.claude/settings.json. Theargsform is what the docs recommend when a hook uses a path placeholder (this one assumes macOS or Linux). Keep the file in place, even empty, so the hook always has something to read. In Codex, add a line toAGENTS.mdasking it to readHANDOFF.mdfirst.{ "hooks": { "SessionStart": [ { "matcher": "startup|resume|clear|compact", "hooks": [ { "type": "command", "command": "cat", "args": ["${CLAUDE_PROJECT_DIR}/HANDOFF.md"] } ] } ] } } - Turn on Codex memories
Local memories are off by default. Turn them on in the ChatGPT desktop app under Settings > Personalization > Enable memories, or add this to
config.toml:[features] memories = true - Resume when you're continuing the same task
claude --continuereopens the last conversation in the directory,claude --resumeopens a picker, andcodex resumereopens a recent chat. When you resume a long session that has been idle for about an hour, Claude Code may offer to resume from a summary. Choose the full session when the details matter: the docs note that whatever the summary leaves out is no longer in context.
What the fix doesn't cover
Someone has to keep it current. If the agent forgets to rewrite the handoff file, the next session reads a stale plan and nothing warns you. Files hold conclusions, not reasons. The debugging behind a fix, and the approaches that failed and why, stay in the conversation. That is the gap the Claude Code feature request above describes. Built-in memory is a summary by design. It is capped, chosen by the model, specific to one tool and, in Claude Code, one machine. Codex writes memories only after a chat goes idle, and the open report above says archived chats are skipped. Nothing crosses between tools except the AGENTS.md you write yourself. It is context, not enforcement. The Claude Code docs describe these files as context, not enforced configuration.
How Axiom Lift solves it
Axiom Lift works from the full conversations rather than a summary you have to maintain.
The free fix
- You keep it by hand. A handoff file rewritten at each milestone; if it goes stale, nothing warns you.
- Files hold conclusions. The debugging behind a fix, and what failed and why, stay in the conversation.
- A capped summary. Built-in memory is chosen by the model, for one tool and, in Claude Code, one machine.
- One tool at a time. Nothing crosses between tools except the
AGENTS.mdyou write yourself.
With Axiom
- Captures as you work. A small helper on your computer reads the sessions Claude Code, Codex and OpenCode already save, never edits them, and captures again at the moment of compaction. Requirements, decisions and corrections are picked out automatically: nothing to tag, nothing to write up.
- Hands back what is true now. The AI asks Axiom over a read-only MCP connection and gets the few lines that are true now, not the whole history. Before each prompt, Axiom adds a few lines about what is already decided on that subject.
- Keeps the change of mind. The old decision is struck through, not erased, and linked to the moment it was said.
- Crosses tools. What you settled in Claude Code is there when you open Codex or OpenCode.

What it doesn't do: it doesn't replace AGENTS.md or CLAUDE.md for rules that must always apply, and it can't make a model follow anything. It doesn't cover Cursor, or ChatGPT and Claude in a browser. On the free plan, your AI can reach the last six months of history.
Install is one command in a desktop terminal (Mac; Linux and Windows in beta; needs Python 3). It shows you what it found before anything is sent, it's free, and axiom uninstall removes it.
One command in the terminal where you use Claude Code, Codex or OpenCode. Free, no card.
Try it free →Claude, Codex and OpenCode are trademarks of their owners; Axiom works alongside them and is not affiliated.
