rem-source-codex ยท diff
git:20261010.f3bc74b to git:20261025.c6024c9
9 added, 0 removed. Audit A to A.
---
name: rem-source-codex
description: Where the user's own words are inside Codex CLI sessions, how that store is laid out, and what this source has already taught us. Loaded alongside whichever stage Skill is running when the material comes from Codex.
---
# Codex CLI as a source
Read with the stage Skill that loaded it (`rem-extract`, `rem-maintain` or
`rem-investigate`): that one says what to produce, this one what is true of
this source.
## Where the user's words are
`~/.codex/sessions/YYYY/MM/DD/rollout-<ISO>-<uuid>.jsonl`, one JSONL file per
session. The importer recognizes native CLI and Desktop user-input shapes;
harness context, imported history, subagents and scheduled automation prompts
are excluded. An `input_scope` may identify an older Desktop turn without client
content kinds, or an explicit voice transcription with the mixed transcript
omitted. Preserve those limits: transcribed wording can contain recognition
errors. `timestamp_scope` marks legacy session-start dates. A session folder
is context, not proof of the product's identity.
## The store
- Directories are dated, oldest first. `cwd` in the session header is the
project, but the notebook's page title wins over the directory name.
- A gap in the timeline means a machine change, not expired history.
- Sessions can be hundreds of MB; never assume one fits.
## Rules
- **A session records intent, not repository state.** Write "decided to X
because Y", never git SHAs, CI run counts, PR numbers or screenshot paths.
- **One session is one sitting, not one project.** Same-day sessions usually
continue one thread; do not open a page per session.
- **Sources: keep the few ids that carry the claim**, not every id seen.
- **Pasted material is not the user's words.** Summarise why a trace, log or
file was pasted; do not quote it back.
- **A question is not a decision.** Keep the mood ("should we use X?" vs "we're
using X").
- **A bare `/skill args` message records that the user ran something**, not a
belief. Note it only when running it is itself the fact.
+ ## Message IDs
+
+ Keep supplied IDs verbatim: `codex:<session>:<offset>-<h8>`. The suffix is the
+ first eight hex characters of SHA-256 of the parsed text, before redaction or
+ truncation. Copied messages share an ID; divergent rollout messages at the
+ same offset have different IDs. Old `codex:<session>:<offset>` citations stay
+ valid; do not rewrite them or migrate stored data. Claude Code keeps
+ `claude-code:<session>:<offset>`.
+
## What a Codex note looks like
```
## Decisions
- Decided co rem runner keeps Codex isolated by giving it a temporary
CODEX_HOME containing only auth.json, after finding that `-c mcp_servers={}`
leaves inherited servers enabled. โ user, 2026-09-07, codex:s1:412
## Projects
- connectonion: spent the week on co rem feature; the open question at the
end of the batch is whether background maintenance ships on launchd or a
worker of our own. โ user, 2026-09-07, codex:s1:88, codex:s1:640
## Agenda
- Promised to check the extraction prompt against a real 60-day mailbox before
raising the batch size again. โ user, 2026-09-08, codex:s2:210
```