Environment: Codex Desktop on macOS, CLI 0.146.0
Summary
Chronicle was enabled while the account held a Pro plan. The account later reverted to
Plus. Chronicle remained enabled and kept generating screen-recording summaries at roughly
51 model calls per day, consuming the majority of the Plus weekly allowance before any
interactive work happened.
Feature enablement is stored client-side and is never reconciled against the server-side
entitlement:
| Location |
Key |
Value after downgrade |
~/.codex/config.toml |
[features] chronicle |
true |
~/.codex/.codex-global-state.json |
chronicle-consent-accepted |
true |
~/.codex/.codex-global-state.json |
chronicle-setup-completion-pending |
false |
Meanwhile the entitlement itself is correct server-side — decoding the id_token in
~/.codex/auth.json shows:
https://api.openai.com/auth.chatgpt_plan_type = plus
Nothing in the app surfaces the mismatch, and nothing disables the feature.
Reproduction
- On a Pro plan, enable Chronicle (Settings → Personalization).
- Let the plan revert to Plus.
- Observe
chronicle = true still present in ~/.codex/config.toml, and
chronicle-consent-accepted = true in ~/.codex/.codex-global-state.json.
- Observe new files continuing to appear in
~/.codex/memories/extensions/chronicle/resources/.
Evidence
Summary files written per day (from the retained window):
| Day |
Summaries written |
Output bytes |
| 2026-07-28 |
3 |
27,441 |
| 2026-07-29 |
49 |
377,455 |
| 2026-07-30 |
53 |
461,288 |
| 2026-07-31 |
12 |
103,413 |
| 2026-08-01 |
97 |
835,265 |
| 2026-08-02 |
40 |
273,673 |
Per skills/chronicle/SKILL.md, the 10-minute summary is "updated every minute", so the
same rolling window is re-submitted to the model roughly ten times.
Secondary observation — backlog re-processing
On 2026-08-02 two passes covered the same period:
- 09:26–10:36 — 8 summaries, windows 09:14 → 10:24, ~12 min lag (expected)
- 15:34–16:17 — 24 summaries, all covering windows 09:33 → 10:30, lag of 313–362 minutes
The afternoon pass re-summarized an hour that had already been summarized that morning, at
1-minute granularity, roughly six hours late, while also processing live windows. This
occurred with no user interaction. It looks like duplicated work.
Why it matters
Chronicle's cost scales with hours of screen-on time, not with how much Codex is used. It
is effectively a fixed daily charge. On a Pro allowance that is unnoticeable; on Plus it
consumes most of the weekly quota before the user starts working.
It is also not diagnosable from inside the product:
- Chronicle runs record no
tokens_used in state_5.sqlite's threads table
- They write no session rollout, so there is no audit trail
- The artifacts are pruned on a ~5-day rolling window, so history disappears
- Usage analytics attribute the consumption to an "Exec" bucket, which reads as
user-configured non-interactive invocation
Identifying the cause required correlating several local SQLite stores, the raw rollout
JSONL, and a decoded entitlement token against a usage chart.
Suggested fixes
- Reconcile client-side feature flags against server-side entitlement on plan change —
disable Pro-gated features on downgrade, or at minimum surface a notice.
- Record token usage for Chronicle runs so they appear in local usage accounting.
- Investigate the backlog re-processing above.
- Distinguish background platform work from user-initiated
codex exec in usage
analytics.
Privacy note
Chronicle summaries are detailed and persist indefinitely. Sampled files described
on-screen document contents, open browser tabs, desktop folder contents, and values read
out of config files. Worth considering a retention control and an obvious way to purge
them.
Environment: Codex Desktop on macOS, CLI 0.146.0
Summary
Chronicle was enabled while the account held a Pro plan. The account later reverted to
Plus. Chronicle remained enabled and kept generating screen-recording summaries at roughly
51 model calls per day, consuming the majority of the Plus weekly allowance before any
interactive work happened.
Feature enablement is stored client-side and is never reconciled against the server-side
entitlement:
~/.codex/config.toml[features] chronicletrue~/.codex/.codex-global-state.jsonchronicle-consent-acceptedtrue~/.codex/.codex-global-state.jsonchronicle-setup-completion-pendingfalseMeanwhile the entitlement itself is correct server-side — decoding the
id_tokenin~/.codex/auth.jsonshows:Nothing in the app surfaces the mismatch, and nothing disables the feature.
Reproduction
chronicle = truestill present in~/.codex/config.toml, andchronicle-consent-accepted = truein~/.codex/.codex-global-state.json.~/.codex/memories/extensions/chronicle/resources/.Evidence
Summary files written per day (from the retained window):
Per
skills/chronicle/SKILL.md, the 10-minute summary is "updated every minute", so thesame rolling window is re-submitted to the model roughly ten times.
Secondary observation — backlog re-processing
On 2026-08-02 two passes covered the same period:
The afternoon pass re-summarized an hour that had already been summarized that morning, at
1-minute granularity, roughly six hours late, while also processing live windows. This
occurred with no user interaction. It looks like duplicated work.
Why it matters
Chronicle's cost scales with hours of screen-on time, not with how much Codex is used. It
is effectively a fixed daily charge. On a Pro allowance that is unnoticeable; on Plus it
consumes most of the weekly quota before the user starts working.
It is also not diagnosable from inside the product:
tokens_usedinstate_5.sqlite'sthreadstableuser-configured non-interactive invocation
Identifying the cause required correlating several local SQLite stores, the raw rollout
JSONL, and a decoded entitlement token against a usage chart.
Suggested fixes
disable Pro-gated features on downgrade, or at minimum surface a notice.
codex execin usageanalytics.
Privacy note
Chronicle summaries are detailed and persist indefinitely. Sampled files described
on-screen document contents, open browser tabs, desktop folder contents, and values read
out of config files. Worth considering a retention control and an obvious way to purge
them.