Resumer is a tiny terminal picker for getting back into recent Codex and Claude Code sessions without spelunking through hidden state directories, copying opaque IDs, or guessing which project a conversation belonged to.
It gives your agent history the thing it has been missing: a fast, readable resume screen.
Agent work tends to sprawl across projects, worktrees, laptops, tmux panes, and late-night "what was I doing?" sessions. Codex and Claude Code both keep enough local state to resume, but the raw files are not meant to be browsed by humans.
Resumer normalizes that state into one practical list:
- session titles first, because that is how you remember the work
- compact project names instead of repeated full paths
- relative ages like
6m,1h, and2d - Codex and Claude Code in one picker
- details on demand when you need the exact ID, source file, or resume command
- mobile-friendly rendering for narrow terminals, including Moshi on iPhone
go install github.com/pejmanjohn/resumer/cmd/resumer@latestResumer requires Go 1.26 or newer. go install writes binaries to GOBIN, or to $(go env GOPATH)/bin when GOBIN is not set. Make sure that directory is on your PATH:
export PATH="$(go env GOPATH)/bin:$PATH"For zsh, add it permanently:
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc
exec zshVerify the installed binary directly if your shell still cannot find it:
"$(go env GOPATH)/bin/resumer" --helpresumer # pick from Codex and Claude Code sessions
resumer codex # Codex sessions only
resumer claude # Claude Code sessions only
resumer --cwd # prefer sessions under the current directory
resumer --tmux # resume inside a stable tmux session
resumer --print # print the selected resume command
resumer list --json # scriptable JSON outputInside the picker:
up/down or j/k move
enter resume
d show details
c copy resume command
q or esc quit
By default, Resumer reads the local session stores used by Codex and Claude Code:
~/.codex/session_index.jsonl
~/.codex/sessions
~/.claude/projects
It enriches index entries with transcript metadata when available, then hides internal/noisy rows by default. Use --all when you want to inspect everything, including sidechain, subagent, or index-only sessions.
resumer --tmux launches the selected resume command in a stable, project-aware tmux session:
tmux new-session -A -s <resumer-session-name> <resume-command>That pairs well with remote mobile terminals. On narrow screens, Resumer switches to a compact two-line layout so titles stay readable and metadata stays close by instead of stretching across a desktop-width table.
For scripts and other tools:
resumer list --jsonExample shape:
{
"sessions": [
{
"harness": "codex",
"id": "019dd26c-0f78-7dc1-91f8-f8c2a8f4c515",
"title": "Prepare production launch",
"project_path": "/Users/you/code/app",
"updated_at": "2026-04-28T04:49:55Z",
"command": "codex resume 019dd26c-0f78-7dc1-91f8-f8c2a8f4c515 --cd /Users/you/code/app"
}
]
}Diagnostics and human-readable errors go to stderr, so JSON stdout stays clean.
Override discovery paths with environment variables:
RESUMER_CODEX_INDEX_PATH=/path/to/session_index.jsonl
RESUMER_CODEX_SESSIONS_PATH=/path/to/codex/sessions
RESUMER_CLAUDE_PROJECTS_PATH=/path/to/claude/projectsResumer is read-only with respect to Codex and Claude Code session storage. It discovers local session files, ranks normalized session cards in memory, and then runs, prints, or copies the harness resume command.
It does not mutate transcripts, rewrite harness state, or maintain its own session database.
go test ./...
go run ./cmd/resumer --helpMIT
