codex-session-selector 0.1.0

TUI utilities for indexing, selecting, and replaying local Codex session JSONL files.
Documentation

Codex Session Selector

Rust TUI utilities for indexing local Codex session JSONL files and selecting one to replay.

Repository: https://github.com/widehyo1/codex-session-selector.git

Binaries

  • record-codex-session-info: scans ~/.codex/sessions/*/*/*/*.jsonl and writes a SQLite index.
  • select-codex-session: opens a ratatui selector, refreshes the SQLite index by default, and runs codex-replay-tui <jsonl-path> for the selected session.
  • codex-replay-tui: opens a ratatui replay view for one Codex session JSONL file.

Install

Install all three binaries from crates.io:

cargo install codex-session-selector

Or install from this repository:

./install-bundle.sh

By default, the script installs to ~/.local/bin. Override the destination with:

CODEX_CLI_BIN_DIR=~/.cli/bin ./install-bundle.sh

Install directly from Git with:

cargo install --git https://github.com/widehyo1/codex-session-selector.git --bins

Manual install:

cargo build --release
install -m 755 target/release/record-codex-session-info ~/.local/bin/record-codex-session-info
install -m 755 target/release/select-codex-session ~/.local/bin/select-codex-session
install -m 755 target/release/codex-replay-tui ~/.local/bin/codex-replay-tui

Usage

Refresh the SQLite index manually:

record-codex-session-info

Open the selector:

select-codex-session

By default, select-codex-session runs record-codex-session-info --output ~/codex-session-info.sqlite3 before opening the TUI. To skip refresh:

select-codex-session --no-refresh

Use a custom database or command:

select-codex-session --db /tmp/sessions.sqlite3
select-codex-session --record-command /path/to/record-codex-session-info
select-codex-session --replay-command /path/to/codex-replay-tui

TUI Controls

  • j/k or Up/Down: move selection
  • d/u or PageDown/PageUp: page selection or message scroll, depending on focus
  • g/G: first/last selection or message top/bottom, depending on focus
  • Tab: switch focus between sessions and first message
  • h/l or Left/Right: horizontal scroll in the sessions pane
  • 0: reset horizontal scroll
  • /: interactive search
  • Tab while searching: cycle search scope through all, message, cwd, branch, repo, date
  • Enter: run codex-replay-tui with the selected JSONL path, then return to the selector after replay exits
  • y: copy codex resume <session-id> to the clipboard
  • ?: help
  • q, Esc, or Ctrl-C: quit

When replay exits, the selector opens again with the previous selection and filter state intact.

SQLite Schema

The sessions table contains:

  • path
  • id
  • timestamp
  • cwd
  • repository_url
  • branch
  • first_message

Subsessions are excluded by default using session_meta.payload structure (source.subagent, thread_source == "subagent", or agent_role). Empty first messages are also excluded by default.

To include them:

record-codex-session-info --include-subsessions --include-empty-messages