{"id":50940815,"url":"https://github.com/yotsuda/ccpick","last_synced_at":"2026-06-17T14:05:43.399Z","repository":{"id":365000749,"uuid":"1269862477","full_name":"yotsuda/ccpick","owner":"yotsuda","description":"Tiny fzf-based session picker for Claude Code: fuzzy-filter recent sessions and claude --resume the one you pick","archived":false,"fork":false,"pushed_at":"2026-06-15T11:37:11.000Z","size":61,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-15T13:17:05.760Z","etag":null,"topics":["claude-code","cli","dotnet-tool","fzf","session-manager"],"latest_commit_sha":null,"homepage":null,"language":"C#","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/yotsuda.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-06-15T07:01:18.000Z","updated_at":"2026-06-15T11:37:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yotsuda/ccpick","commit_stats":null,"previous_names":["yotsuda/ccpick"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/yotsuda/ccpick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yotsuda%2Fccpick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yotsuda%2Fccpick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yotsuda%2Fccpick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yotsuda%2Fccpick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yotsuda","download_url":"https://codeload.github.com/yotsuda/ccpick/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yotsuda%2Fccpick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34451426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"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-code","cli","dotnet-tool","fzf","session-manager"],"created_at":"2026-06-17T14:05:42.655Z","updated_at":"2026-06-17T14:05:43.390Z","avatar_url":"https://github.com/yotsuda.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ccpick\n\nA tiny, fast **session picker for [Claude Code](https://github.com/anthropics/claude-code)** built around [`fzf`](https://github.com/junegunn/fzf). Launch it, fuzzy-filter your recent sessions by their summaries, hit Enter — it runs `claude --resume \u003cid\u003e` for you. (The project is `ccpick`; it installs the **`ccp`** command.)\n\n```\nccp\n```\n\nNo more copying `claude --resume \u003cguid\u003e` out of a notes file, and no more scrolling the built-in picker: just type a few letters of what the session was about.\n\n## Why\n\nWhen Claude Code exits it prints something like:\n\n```\nclaude --resume 863e7427-5223-455a-8b91-05fccb405d1f\n```\n\nThose GUIDs are already on disk as `~/.claude/projects/\u003cslug\u003e/\u003cguid\u003e.jsonl` transcripts — there is nothing to \"save\". `ccpick` indexes those transcripts, derives a human-readable title from each (the first user prompt, or a session summary if present), and hands the list to `fzf` for instant fuzzy filtering.\n\n## How it works\n\n```\nccp list   →   fzf  (real-time fuzzy filter + preview)   →   claude --resume \u003cchosen id\u003e\n```\n\n- **Reads** `~/.claude/projects/\u003cslug\u003e/\u003cguid\u003e.jsonl` (top-level files only; `subagents/` internal logs are skipped).\n- **Titles** come from the first real user prompt or a `summary` line — heuristic, fully local, nothing is sent anywhere.\n- **Caches** results in `~/.claude/ccp-cache.json` keyed by file mtime, so only changed sessions are re-scanned. Cold scan of ~100 sessions ≈ 2 s; warm launches ≈ 0.2 s.\n- **Preview** of the focused session is shown live by re-invoking `ccp show \u003cid\u003e` (a ~0.2 s spawn — cheap because the tool starts fast).\n\nIt is *not* an `fzf` plugin — `fzf` has no plugin system. `ccpick` is a small wrapper that uses `fzf` as the interactive filter, like `forgit` or `fzf-git.sh`.\n\n## Requirements\n\n- **.NET 8+ runtime** (the tool is a [.NET global tool](https://learn.microsoft.com/dotnet/core/tools/global-tools))\n- **fzf** — `winget install fzf` / `brew install fzf` / `apt install fzf`\n- **claude** on `PATH`\n\n## Install\n\n```sh\nwinget install fzf                  # or: brew install fzf / apt install fzf\ndotnet tool install --global ccpick\n```\n\nThe same one `dotnet tool` package runs on **Windows, macOS, and Linux**, and the **`ccp`** command lands on your `PATH` automatically.\n\n\u003e Not yet published to NuGet. Until then, install from a local build:\n\u003e ```sh\n\u003e git clone https://github.com/yotsuda/ccpick \u0026\u0026 cd ccpick\n\u003e dotnet pack -c Release\n\u003e dotnet tool install --global --add-source ./bin/Release ccpick\n\u003e ```\n\n## Usage\n\n| Command | What it does |\n|---|---|\n| `ccp` | Open the fzf picker; type to filter, **Ctrl-E** to rename, Enter to resume |\n| `ccp list` | Print one row per session: `date  [folder]  title` |\n| `ccp show [\u003cid\u003e]` | Print a session's id / cwd / name (the most recent session if no id) |\n| `ccp name \u003ctext\u003e` | Name the most recent session — the one you just exited |\n| `ccp name \u003cid\u003e \u003ctext\u003e` | Name a specific session by id (omit `\u003ctext\u003e` to type it interactively) |\n| `ccp name \u003cid\u003e --clear` | Reset to the auto-generated title |\n| `ccp -h`, `--help`, `help` | Show usage |\n\n## Custom titles\n\nAuto-titles are handy but generic. Press **Ctrl-E** on any row in the picker to give that session a memorable name, or use `ccp name`. Overrides are stored in `~/.claude/ccp-titles.json`, **separate from the mtime cache**, so a name you set sticks even as the session keeps growing.\n\n**Name a session right after exiting it.** When Claude Code prints `claude --resume \u003cguid\u003e` on exit, you don't even need the GUID — just run:\n\n```sh\nccp name \"what this session was about\"\n```\n\n`name` labels the most recently active session, so you can tag it on the spot.\n\n## Notes\n\n- **UTF-8 everywhere.** The pipe to/from `fzf` is forced to UTF-8 so non-ASCII titles (Japanese, etc.) survive the round trip.\n- The folder column appears only when your sessions span more than one working directory; the home dir shows as `~`.\n- Auto-titles are heuristic; slash-command sessions (e.g. `/clear`) read a little oddly — rename them.\n- A **legacy PowerShell version** (no .NET build needed, but pulls in `pwsh` and has no live preview) lives in [`pwsh/`](pwsh/).\n\n## Related tools\n\nSeveral Claude Code session browsers exist. `ccpick`'s niche is **fzf-powered fuzzy search + tiny footprint + one cross-platform `dotnet tool`**:\n\n- [sasazame/ccresume](https://github.com/sasazame/ccresume) — Node/Ink custom TUI, keyboard navigation (no fuzzy search), cross-platform.\n- [josephyaduvanshi/claude-history-manager](https://github.com/JosephYaduvanshi/claude-history-manager) — native macOS app with pin/tag/search.\n- [davidpp/claude-session-browser](https://github.com/davidpp/claude-session-browser) — TUI that copies the resume command to the clipboard.\n\n## Disclaimer\n\nUnofficial, community-built. Not affiliated with, endorsed by, or supported by Anthropic. Use at your own risk.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyotsuda%2Fccpick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyotsuda%2Fccpick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyotsuda%2Fccpick/lists"}