Claude Recall for Codex
Codex is the one integration with nothing to wire. If a Codex sessions folder exists on this machine, Claude Recall already indexes your OpenAI Codex CLI threads: they get titles, they answer full-text search, they carry a Codex badge in the session lists, and their tokens are priced from OpenAI list rates. No config key, no MCP block, no restart.
Setup
Two commands, and neither of them mentions Codex.
# 1. Install the CLI
npm install -g @clauderecallhq/cli
# 2. Start the daemon
recall startThen list what it found. The Source flag takes claude-code, codex or all.
recall list --source codexWhat you get
- Every Codex thread indexed and titled, in the same database and the same views as your Claude Code sessions.
- A Codex badge on Codex rows. Claude Code rows stay unbadged, because they are the default and labelling them would be noise.
- A Source filter with three settings, All, Claude Code and Codex, in the web UI, in the REST query and on the CLI. The web UI keeps it in the URL, so a filtered view survives a reload.
- Token accounting priced from OpenAI list rates, keyed by exact model id, sitting next to your Claude Code spend in the same stats view.
- A Codex section in
recall doctor: where the Codex home is, whether the source is on, how many rollouts exist, and how many of them are ingested.
What Claude Recall reads, and what it does not
The Codex home holds credentials. So the read scope is exactly two patterns, and one module in the codebase is allowed to know where that home is:
~/.codex/sessions/**/rollout-*.jsonl, the thread transcripts.~/.codex/session_index.jsonl, the thread-title index.
Nothing else in that folder is opened. auth.json, config.toml, hooks.json and history.jsonl are never read. Every open is read-only and refuses to follow a symlink, and the file is re-checked after opening so a path swapped mid-read is rejected instead of ingested. Claude Recall never writes under the Codex home and changes no Codex setting.
That is a test, not a promise. A dedicated suite wraps every filesystem and subprocess entry point, then runs the real boot, a real sweep, both title scans and the doctor section against a Codex home with auth.json, config.toml and history.jsonl planted in it. Every path opened for content must be one of the two above, every directory listed must be under sessions/, no subprocess argument may carry a Codex path, and the planted files must appear in no call at all.
No new network calls
Codex support added no network destination. Reading, ingesting, pricing and correlating Codex sessions all happen on your machine, thread titles are read out of the Codex index file, and the modules that do it contain no HTTP client. The rate table used to price Codex tokens ships inside the package; it is not fetched at runtime.
Some optional actions are not local, and each treats a Codex session like any other, because none of them filters by agent. Generate title / synopsis spawns the claude CLI already on your machine with the text of that session, on your own Claude account. AI tagging sends a sample of the session to Anthropic with your own API key. Sharing a recap card uploads the card you built when you click Share. Tagging and title generation ship off and ask before their first run; tagging can also run unattended if you switch its autopilot on. The network-activity table in the README is the maintained list, and it is enforced by a test rather than kept by hand.
Claude Recall's list of permitted network calls is enforced from code by a test that fails the build when any module gains an undeclared one, and no Codex module is on it. What that test certifies is narrower than it sounds: it reads our own modules for network primitives, and it records in its own text that a spawned binary such as the claude CLI is outside what it can see. That is why the button above is named here rather than left to the scanner to catch.
Terminal tabs, on macOS and Linux
A Codex thread keeps its rollout file open for the life of the conversation, so lsof names the writing process outright and Claude Recall can bind a live Codex terminal to the conversation it is holding, with no timing heuristic. Two conditions: lsof has to exist on the machine, which rules out Windows, and the VS Code setting claude-recall.autoAlias has to be on, because that setting is what registers your terminal tabs with the daemon. It ships off.
When either condition is missing the branch stays off, says so once in the daemon log, and reports itself in recall doctor. Indexing, titles, search, pricing and the Source filter are unaffected either way.
Turning it off
The switch is sources.codex.enabled in the Claude Recall config file, and it has a CLI verb so nobody has to hand-edit JSON:
recall codex status # what is in force right now
recall codex off # stop opening Codex files
recall codex on # start againWhile it is off, Recall opens no file under the Codex home: nothing is ingested, indexed, titled or scanned. Two surfaces still look, and neither opens a file. recall doctor lists the sessions folder and reads file dates, never file contents, so it can report that the source is off and how many rollouts it is skipping. On macOS and Linux the terminal correlator still asks lsof which rollouts a running codex process holds open, which it can only match against rows already in your index. Codex rows already in the database stay there; nothing is deleted. A running daemon picks the change up on its next sweep, within about a minute.
FAQ
Do I have to configure anything to index Codex sessions?
No. The Codex source is on by default and needs no key in any config file. The daemon checks two things on each sweep: that the source is enabled, and that a Codex sessions folder exists. A fresh install with a Codex CLI on it indexes Codex threads without you touching anything.
What exactly does Claude Recall read inside the Codex home?
Two paths and nothing else: the rollout transcripts at ~/.codex/sessions/**/rollout-*.jsonl, and the thread-title index at ~/.codex/session_index.jsonl. auth.json, config.toml, hooks.json, history.jsonl and everything else under the Codex home are never opened. Symlinked files and directories are refused rather than followed.
Does Claude Recall write anything to the Codex home?
No. Every file is opened read-only, with the flag that refuses to follow a symlink. Claude Recall never creates, edits, moves or deletes anything under the Codex home, and it changes no Codex setting. Your Codex install cannot tell that Recall is there.
Does indexing Codex sessions send anything to OpenAI or anywhere else?
Nothing goes to OpenAI, and Codex support added no network destination. Reading, indexing, pricing and correlating Codex sessions happen on your machine, thread titles are read out of the Codex index file, and the modules that do all of it contain no HTTP client at all. Pricing is applied from a rate table shipped inside the package, not fetched. Some optional actions are not local, and each treats a Codex session like any other, because none of them filters by agent. Generate title / synopsis spawns the claude CLI already on your machine with the text of that session, on your own Claude account. AI tagging sends a sample of the session to Anthropic with your own API key. Sharing a recap card uploads the card you built when you click Share. Tagging and title generation ship off and ask before their first run; tagging can also run unattended if you switch its autopilot on. The network-activity table in the README is the maintained list, and it is enforced by a test rather than kept by hand.
How are Codex tokens priced?
From OpenAI published list rates, keyed by the exact model id, the same way Claude Code sessions are priced from Anthropic list rates. An id is never priced as its family: gpt-5.2-codex is never billed to you as gpt-5.2. The two Codex ids OpenAI publishes no rate for anywhere are estimated at the GPT-5.3-Codex rate and labelled "(est.)", and an id absent from the table is counted in tokens only and shown as unpriced, never as $0.00. These are list-price estimates; actual billing may differ, and a ChatGPT plan is the same situation there as a Claude Max plan.
Can Claude Recall tell which terminal tab a live Codex session is in?
On macOS and Linux, yes. A Codex thread holds its rollout file open, so lsof names the writing process deterministically and no timing guess is needed. This needs lsof on the machine, which rules out Windows, and it needs the VS Code setting claude-recall.autoAlias, which ships off, because that setting is what registers your terminal tabs with the daemon. Indexing, titles, search, pricing and the Source filter do not depend on either.
How do I turn Codex indexing off?
Set sources.codex.enabled to false in the Claude Recall config file, or run: recall codex off. While it is off, Recall opens no file under the Codex home: nothing is ingested, indexed, titled or scanned. Two surfaces still look, and neither opens a file. recall doctor lists the sessions folder and reads file dates, never file contents, so it can report that the source is off and how many rollouts it is skipping. On macOS and Linux the terminal correlator still asks lsof which rollouts a running codex process holds open, which it can only match against rows already in your index. Codex rows already in the database stay there; nothing is deleted. A running daemon picks the change up on its next sweep, within about a minute.
Last updated September 2026