v2.6.0 — Inferred-project chip + filter + group-by view
v2.6.0 — Find sessions by what they actually worked on
Many Claude Code sessions are launched from a home directory but spend most of their work in a specific project subdirectory. Until now those sessions only showed up under the home bucket, which made them hard to find when you were looking for "the work I did on project X." This release adds a second project signal — inferred from each session's tool calls — without moving or rewriting any session files.
Added
- 💼 Inferred-project chip on every session card (main list + deep-search results). Color-coded distinct from the cyan cwd chip. Hover tooltip shows edit count, file count, confidence percentage, and the top-5 project breakdown. Suppressed when the inferred project matches the cwd basename (avoids visual duplication).
- "Inferred project" filter dropdown above the session list. Lists all detected projects with session counts, plus a
(uncategorized)bucket for sessions with insufficient signal. - "Group by project" toggle. Flattens the session list into collapsible sections sorted by session count. Each header shows count + cumulative size. Uncategorized always rendered last.
- New endpoint:
GET /api/sessions/inferred-projectsreturns aggregated counts per project. - New query param:
GET /api/sessions?inferredProject=<name>(or(none)for uncategorized).
How inference works
- Streams each session JSONL and extracts file paths from
Edit,Write,NotebookEdit,MultiEdit,Read, andcdtargets fromBash/PowerShellcommands. - First path segment under
$HOME= the candidate project bucket. - Per-project score:
writes × 3 + cd × 2 + reads × 1. - A project wins only when its share is ≥ 60% AND total file ops ≥ 3 (otherwise no chip — avoids false labels on borderline sessions).
.claude/*,~/.claude-command-center/*, and top-level config files (CLAUDE.md,MEMORY.md) bucket assystem. Top-level OS directories (Downloads,OneDrive,AppData,Documents,Pictures,Videos,Music,node_modules,tmp) are ignored.- Results cached on disk at
~/.claude-command-center/inferred-projects.jsonkeyed by(sessionId, fileSize). Re-scans automatically when a session grows. - First launch warms the cache for all sessions in parallel (4 workers); subsequent loads read from cache instantly.
What this is NOT
- No session files were moved or rewritten. Each session's literal
cwdfield is left exactly as Claude Code recorded it. The Resume button still opens a terminal in the historical cwd. - No "always-show" attribution. Sessions that span multiple projects or have too little signal get no chip, by design.
Stats
- 9 files changed, +707 -21 lines
- 1 new server module (
server/scanner/project-inference.ts) - 8 new tests covering scoring, thresholds, buckets, ignored dirs, caching, and write/read weighting
npx tsc --noEmitclean, 2098/2098 tests pass, production build clean
Full Changelog: v2.5.3...v2.6.0