Codex Desktop recents timestamp appears to use thread creation time instead of last active time

Open 💬 3 comments Opened May 9, 2026 by TyronSamaroo
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

Codex Desktop appears to show a stale relative timestamp for an active/resumed thread. The visible recents/corner timestamp can read like the session was last run several days ago even while the thread is actively being used.

Observed behavior

  • A Codex Desktop thread created several days earlier was resumed and actively used today.
  • The local session storage for the thread was modified/accessed today.
  • The UI still displayed a relative timestamp such as 3 days ago, which appears to match the thread creation age rather than last activity.

Expected behavior

The visible recents/corner timestamp should represent the thread's last active / last run time, not the original creation time.

If creation time is useful, it should be shown separately from activity time.

Possible fix

Use a last-activity field for the visible timestamp, for example:

displayAge = timeAgo(thread.lastActiveAt ?? thread.updatedAt ?? thread.createdAt)

Suggested UI wording:

  • Created: <date>
  • Last active: <relative time>

Why this matters

When a resumed thread is actively being used but still says something like 3 days ago, it makes the session look stale or inactive even though work is happening in it.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 3 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #20479

Powered by Codex Action

100yenadmin · 2 months ago

This older Desktop recents symptom looks related to a concrete thread/read metadata bug that was reproduced on current main: when thread/read includeTurns=false replaces the SQLite-backed thread row with a rollout-derived preview, it can lose SQLite updated_at and fall back to rollout creation/summary metadata.

Patch branch: https://github.com/openai/codex/compare/main...100yenadmin:codex/thread-read-updated-at?expand=1
Tracked in: #28870

The patch preserves SQLite authoritative updated_at/recency_at/archived_at during no-history preview merging and uses rollout file mtime as the direct-rollout fallback when no summary updated_at exists. I could not open an upstream PR directly because GitHub returned GraphQL: 100yenadmin does not have the correct permissions to execute CreatePullRequest, but the compare branch is published.

100yenadmin · 2 months ago

@tibo-openai