Skip to content

v2.6.0 — Inferred-project chip + filter + group-by view

Choose a tag to compare

@sorlen008 sorlen008 released this 11 May 11:00
· 36 commits to main since this release

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-projects returns 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, and cd targets from Bash/PowerShell commands.
  • 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 as system. 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.json keyed 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 cwd field 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 --noEmit clean, 2098/2098 tests pass, production build clean

Full Changelog: v2.5.3...v2.6.0