Problem
Claude Code keeps prompt history in ~/.claude/history.jsonl even after resumable transcript files under ~/.claude/projects/<project>/<session-id>.jsonl have been cleaned by retention. Today aps only shows transcript-backed Claude sessions, so users can see fewer Claude sessions than Claude prompt history suggests.
A concrete observed case: history.jsonl contains Claude sessions for ~/workspace/coffee-beans, but the corresponding transcript JSONL files are gone, so claude -r <session-id> returns No conversation found with session ID: ....
Desired behavior
Show history-only / cleaned Claude sessions in the picker and list output as visibly non-resumable entries:
- Load Claude history-only sessions from
~/.claude/history.jsonl when no matching transcript JSONL exists.
- Render those rows dimmed / greyed so they are visually distinct from resumable sessions.
- Do not attempt to launch
claude --resume for those rows.
- When the user presses Enter on a history-only row, show a concise message that the session is not resumable because the transcript was cleaned or missing.
- Keep transcript-backed Claude sessions as the authoritative resumable source and avoid duplicate rows when both history and transcript exist.
Acceptance criteria
- History-only rows include session ID, project path, latest timestamp, title derived from history display text, and prompt count.
- Transcript-backed rows remain unchanged and continue to launch normally.
- Disabled/non-resumable rows are dimmed in interactive mode and list mode.
- Enter on a disabled row stays in the picker and reports the not-resumable reason instead of exiting or launching Claude.
- Tests cover deduplication between
history.jsonl and transcript JSONL, row rendering state, and disabled selection behavior.
Notes
history.jsonl is not a full transcript. It should not be treated as sufficient for claude --resume; it is only useful for surfacing cleaned/orphaned session history.
Executor should create a plan file after deciding the data model for resumability state and how picker status/error messaging should handle disabled rows.
Problem
Claude Code keeps prompt history in
~/.claude/history.jsonleven after resumable transcript files under~/.claude/projects/<project>/<session-id>.jsonlhave been cleaned by retention. Today aps only shows transcript-backed Claude sessions, so users can see fewer Claude sessions than Claude prompt history suggests.A concrete observed case:
history.jsonlcontains Claude sessions for~/workspace/coffee-beans, but the corresponding transcript JSONL files are gone, soclaude -r <session-id>returnsNo conversation found with session ID: ....Desired behavior
Show history-only / cleaned Claude sessions in the picker and list output as visibly non-resumable entries:
~/.claude/history.jsonlwhen no matching transcript JSONL exists.claude --resumefor those rows.Acceptance criteria
history.jsonland transcript JSONL, row rendering state, and disabled selection behavior.Notes
history.jsonlis not a full transcript. It should not be treated as sufficient forclaude --resume; it is only useful for surfacing cleaned/orphaned session history.Executor should create a plan file after deciding the data model for resumability state and how picker status/error messaging should handle disabled rows.