Current behavior
In the codex-app GUI harness, LT (herdr_space) cycles projects ordered by last-activity recency, derived from ~/.codex/state_5.sqlite (recency_at_ms). This works, but is not ideal:
- The cycle order does not match the sidebar's visual top-to-bottom project order.
- Projects with unarchived chats that the user removed from the sidebar's project list still appear in the cycle.
- Recency reshuffles over time, so the ring order isn't fully predictable.
Why it's this way
The app's sidebar project list is account-synced (sidebarElectron.addRemoteProject/removeRemoteProject) and not persisted anywhere readable locally — exhaustively checked: leveldb Local/Session Storage, NSUserDefaults, HTTP caches, logs_2.sqlite, codex-dev.db, ipc.sock, AX tree (web content not exposed). So there is no local ground truth for "projects currently shown in the sidebar". Recency ordering over visible (non-archived, non-subagent) threads was the best config-free approximation. See PR #58.
Possible future directions
- A future app version may persist the sidebar project list locally or expose an RPC (
project/list doesn't exist as of 0.145.0-alpha.18).
- A deep-link route for projects (
codex://projects/...) would let us skip the "open newest thread" indirection.
- Revisit when the app's app-server RPC surface grows.
Marked as a ponytail: ceiling in src/harness/codex-app.ts (cycleProject).
Current behavior
In the
codex-appGUI harness, LT (herdr_space) cycles projects ordered by last-activity recency, derived from~/.codex/state_5.sqlite(recency_at_ms). This works, but is not ideal:Why it's this way
The app's sidebar project list is account-synced (
sidebarElectron.addRemoteProject/removeRemoteProject) and not persisted anywhere readable locally — exhaustively checked: leveldb Local/Session Storage, NSUserDefaults, HTTP caches,logs_2.sqlite,codex-dev.db,ipc.sock, AX tree (web content not exposed). So there is no local ground truth for "projects currently shown in the sidebar". Recency ordering over visible (non-archived, non-subagent) threads was the best config-free approximation. See PR #58.Possible future directions
project/listdoesn't exist as of 0.145.0-alpha.18).codex://projects/...) would let us skip the "open newest thread" indirection.Marked as a
ponytail:ceiling insrc/harness/codex-app.ts(cycleProject).