{"id":47885643,"url":"https://github.com/nonatofabio/claude-sessions","last_synced_at":"2026-04-04T02:15:37.292Z","repository":{"id":346913406,"uuid":"1180341376","full_name":"nonatofabio/claude-sessions","owner":"nonatofabio","description":"Terminal UI for browsing, searching, and resuming Claude Code sessions","archived":false,"fork":false,"pushed_at":"2026-03-26T16:26:17.000Z","size":10674,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T21:56:07.369Z","etag":null,"topics":["claude","claude-code","python","session-management","terminal","textual","tui"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nonatofabio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-13T00:13:43.000Z","updated_at":"2026-03-26T16:25:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nonatofabio/claude-sessions","commit_stats":null,"previous_names":["nonatofabio/claude-sessions"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nonatofabio/claude-sessions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonatofabio%2Fclaude-sessions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonatofabio%2Fclaude-sessions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonatofabio%2Fclaude-sessions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonatofabio%2Fclaude-sessions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nonatofabio","download_url":"https://codeload.github.com/nonatofabio/claude-sessions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nonatofabio%2Fclaude-sessions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31384924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T01:22:39.193Z","status":"online","status_checked_at":"2026-04-04T02:00:07.569Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","python","session-management","terminal","textual","tui"],"created_at":"2026-04-04T02:15:36.682Z","updated_at":"2026-04-04T02:15:37.246Z","avatar_url":"https://github.com/nonatofabio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" width=\"128\" alt=\"claude-sessions logo\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eclaude-sessions\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA terminal UI for browsing, searching, and resuming your Claude Code sessions.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#install\"\u003eInstall\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#controls\"\u003eControls\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e \u0026middot;\n  \u003ca href=\"LICENSE\"\u003eMIT License\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/demo.gif\" alt=\"claude-sessions demo\" width=\"100%\"/\u003e\n\u003c/p\u003e\n\n---\n\nEver wonder what you worked on three days ago? Or want to pick up exactly where you left off in a session from last week?\n\n**claude-sessions** scans all your Claude Code transcripts and gives you a fast, keyboard-driven terminal UI to browse, search, and jump back into any session.\n\n## Install\n\n```bash\n# With uv (recommended)\nuv tool install claude-sessions\n\n# With semantic search (lightweight 29MB model, finds \"auth\" when you search \"login\")\nuv tool install \"claude-sessions[semantic]\"\n\n# With pip\npip install claude-sessions            # basic\npip install \"claude-sessions[semantic]\" # + semantic search\n\n# From source\ngit clone https://github.com/nonatofabio/claude-sessions.git\ncd claude-sessions\nuv tool install -e \".[semantic]\"\n```\n\nThen just:\n\n```bash\nclaude-sessions\n```\n\n## Usage\n\n```\nclaude-sessions            # launch the TUI\nclaude-sessions --refresh  # force re-scan all sessions (rebuilds cache)\nclaude-sessions --no-active  # skip active session detection\nclaude-sessions --help     # show all options\n```\n\nOn first run, it scans `~/.claude/projects/` and builds a JSON cache. First scan takes ~1s depending on how many sessions you have. Subsequent launches load from cache in ~30ms.\n\n## Controls\n\nLeft hand on **WASD**, right hand on **arrow keys**. Like a game.\n\n| Key | Action |\n|-----|--------|\n| **W / S** | Navigate up/down in the session list |\n| **A / D** | Collapse/expand group sections |\n| **Arrow keys** | Scroll the detail pane |\n| **o** or **Enter** | Open session in a new terminal (`claude --resume`) |\n| **/** | Search — type to filter, **Enter** to commit, **Esc** to clear |\n| **1 – 5** | Group by: Project / Topic / Domain / Date / Branch |\n| **r** | Refresh (re-scan sessions + detect active) |\n| **q** | Quit |\n\n## Features\n\n### Multi-dimensional grouping\n\nSwitch how sessions are organized with a single keypress:\n\n- **1 — Project**: Group by working directory (e.g., `dev/myapp`, `docs/specs`)\n- **2 — Topic**: Auto-tagged from content (e.g., `agents`, `trust-verification`, `experimentation`)\n- **3 — Domain**: What kind of work (e.g., `coding`, `research`, `writing`, `ops`)\n- **4 — Date**: By calendar day\n- **5 — Branch**: By git branch active during the session\n\n### Session detail pane\n\nEach session shows:\n- **Auto-generated name** from the first prompt\n- **Metadata**: project, git branch, model, duration, Claude Code version, permission mode, working directory\n- **Stats**: prompt count, tool calls, entries, subagent count, token usage\n- **Trust signals**: approvals (green) vs. corrections (red) vs. neutral — see at a glance how collaborative a session was\n- **Tags**: topics, domains, and top tools used\n- **Full prompt history** with color-coded borders (green = approval, red = correction)\n\n### Cross-platform support\n\nWorks on **macOS**, **Linux**, and **Windows**:\n\n| | macOS | Linux | Windows |\n|---|---|---|---|\n| **Browse \u0026 search** | Yes | Yes | Yes |\n| **Open session** | Terminal.app (AppleScript) | Auto-detects: gnome-terminal, konsole, alacritty, kitty, wezterm, xterm (or `$TERMINAL`) | Windows Terminal or cmd.exe |\n| **Active detection** | IDE locks + `pgrep` | IDE locks + `pgrep` | IDE locks + `tasklist` |\n\n### Active session detection\n\nSessions currently running (in Terminal or IDE) show a green dot. Detection works via:\n- IDE lock files (`~/.claude/ide/*.lock`)\n- Process inspection (`pgrep` on macOS/Linux, `tasklist` on Windows)\n\n### Hybrid search (BM25 + semantic)\n\nPress `/` and type — results are **ranked by relevance**, not just filtered.\n\n- **BM25 keyword ranking** (always on): handles partial matches, multi-word queries, term importance weighting\n- **Semantic search** (with `[semantic]` extra): uses a tiny 29MB embedding model ([model2vec/potion-base-8M](https://huggingface.co/minishlab/potion-base-8M)) to understand meaning. Search \"auth problems\" and find sessions about \"JWT refactoring\" — no keyword overlap needed\n\nSemantic embeddings are pre-computed in the background on startup. First run downloads the model (~29MB), then it's cached locally. Search queries take \u003c1ms.\n\nPress **Enter** to lock in the filter and navigate results, **Esc** to reset.\n\n### Resume any session\n\nPress **`o`** on any session to open a new terminal window that runs `claude --resume \u003csession_id\u003e` in the correct working directory. Pick up right where you left off.\n\n### Fast startup\n\nAn incremental JSON cache tracks file sizes and modification times. Only changed or new sessions are re-parsed on launch. Typical cached startup: **~30ms**.\n\n## How it works\n\nClaude Code stores conversation transcripts as JSONL files in `~/.claude/projects/`. Each line is a timestamped message (user, assistant, or tool result) with metadata like model, git branch, working directory, and token usage.\n\n**claude-sessions** parses these transcripts and extracts:\n- Human prompts (filtering out system messages and tool results)\n- Tool usage profiles\n- Topic and domain classification via regex pattern matching\n- Trust signals (corrections vs. approvals) from prompt language\n- File types touched during the session\n\nAll extracted metadata is cached in `~/.claude/sessions_tui_cache.json` for fast subsequent loads.\n\n## Requirements\n\n- Python 3.11+\n- Claude Code (with sessions in `~/.claude/projects/`)\n- macOS, Linux, or Windows\n\n## Tech stack\n\n- [Textual](https://textual.textualize.io/) — terminal UI framework\n- [Rich](https://rich.readthedocs.io/) — text formatting (bundled with Textual)\n- Standard library only for parsing (json, re, pathlib, dataclasses)\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnonatofabio%2Fclaude-sessions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnonatofabio%2Fclaude-sessions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnonatofabio%2Fclaude-sessions/lists"}