Problem
The Recent Sessions table shows only the session ID (first 8 chars of the UUID), project name, and usage stats. When reviewing usage, it's hard to identify what each session was about without a meaningful label.
Proposal
Add a Topic column to the Recent Sessions table, derived from Claude Code's existing session title records in the JSONL transcripts.
Title priority
custom-title — user-set conversation label (highest priority)
ai-title — AI-generated conversation summary
- First user message — fallback when no title record exists, truncated to 100 chars, skipping IDE context blocks (
<ide_opened_file>, <ide_selection>)
Implementation details
- scanner.py: Parse
custom-title and ai-title record types (currently skipped by the rtype not in ("assistant", "user") filter). Fall back to extracting the first real user prompt text.
- DB schema: Add a
topic TEXT column to the sessions table, with a migration via _ensure_column().
- dashboard.py: Add a Topic column to the sessions table HTML, the
renderSessionsTable() JS function, and the CSV export.
Example
| Session |
Topic |
Project |
... |
a1b2c3d4… |
PROJ-123 |
my-org/my-app |
... |
e5f6g7h8… |
Debug custom event not appearing |
my-org/my-app |
... |
f9a0b1c2… |
Add dark mode toggle to settings… |
my-org/my-app |
... |
PR: linked below.
Problem
The Recent Sessions table shows only the session ID (first 8 chars of the UUID), project name, and usage stats. When reviewing usage, it's hard to identify what each session was about without a meaningful label.
Proposal
Add a Topic column to the Recent Sessions table, derived from Claude Code's existing session title records in the JSONL transcripts.
Title priority
custom-title— user-set conversation label (highest priority)ai-title— AI-generated conversation summary<ide_opened_file>,<ide_selection>)Implementation details
custom-titleandai-titlerecord types (currently skipped by thertype not in ("assistant", "user")filter). Fall back to extracting the first real user prompt text.topic TEXTcolumn to thesessionstable, with a migration via_ensure_column().renderSessionsTable()JS function, and the CSV export.Example
a1b2c3d4…e5f6g7h8…f9a0b1c2…PR: linked below.