The Problem

Working across multiple Claude Code projects means sessions pile up fast. When you need to get back to something — yesterday’s debugging session, a task Claude flagged for follow-up, or a session you want to bookmark — finding it and resuming in the right context adds friction.

claude --resume shows a list, but the summaries are compressed and hard to read. You end up scrolling through UUIDs instead of working.

What cc-deck Does

cc-deck opens an fzf TUI for all your Claude Code sessions. Each entry shows the last thing you typed, not a summary. Type anything to filter in real time. TODOs from Claude memory and manually pinned sessions are always at the top.

Supports macOS (zsh), Linux (bash), and Windows (PowerShell).

demo

Features

Type anything in the prompt to filter sessions by last input content in real time. No need to remember when or where a session happened.

cc-deck> OOM
  2/100
  2026-05-08 08:59  /tmp/projects/infra/k8s: pod keeps OOMKilling after we scaled up

Select one — cc-deck moves to the original directory and resumes the session automatically.


2. Auto-pinned TODOs

When you ask Claude to track something for later:

add this to memory as a TODO
check back on this next week

Claude writes a memory entry:

---
name: TODO - Monitor EKS cluster after 3Gi memory limit applied
description: Watch for OOMKill recurrence over the next 2 weeks
type: project
originSessionId: a40fabf4-3d29-4014-a710-dcd444580c9d
---

cc-deck scans ~/.claude/projects/*/memory/*.md for type: project entries with TODO in the name, and pins them at the top — linked back to the originating session via originSessionId. Select one and you’re taken straight back to where the work happened.

[TODO] /tmp/projects/infra/k8s: Watch for OOMKill recurrence over the next 2 weeks

When the TODO is resolved, press Ctrl-R. cc-deck renames the memory entry from TODO - Monitor EKS ... to Monitor EKS ... (completed) and removes it from the list. The memory file itself is preserved, so Claude still has the full context.


3. Manual PIN

Bookmark any session you want to return to. Find the session and press Ctrl-K. The session’s last input is saved as the label and it stays pinned at the top.

[PIN]  /tmp/projects/api-server: memory usage keeps climbing after the last deploy

Select it and cc-deck takes you back to /tmp/projects/api-server and resumes exactly where you left off. Press Ctrl-K again on a pinned entry to remove it. Ctrl-R also removes a PIN.


4. Quick Query

For questions that don’t need a permanent session:

# One-shot: answer printed, no session saved
cc-deck -q "what does SIGTERM do?"

# Interactive: full conversation, auto-deleted after 7 days
cc-deck -q

Sessions with 2+ exchanges are preserved and appear as [Quick] in the TUI. Press Ctrl-Q inside the session browser for a quick query without leaving.

[TODO]  /tmp/projects/infra/k8s: Watch for OOMKill recurrence
[PIN]   /tmp/projects/api-server: memory usage keeps climbing
[Quick] ▶ 1 session
────────────────────────────────────────────────────────────
* 2026-05-08 09:14  /tmp/projects/api-server: ...

Also Built In

Key bindings

KeyAction
EnterResume with last saved mode
TabCycle resume mode (default → api → skip → api+skip)
Ctrl-OResume with claude
Ctrl-AResume with claude-api
Ctrl-SResume with claude --dangerously-skip-permissions
Ctrl-XResume with claude-api --dangerously-skip-permissions
Ctrl-KPin / unpin current session
Ctrl-RMark TODO done / remove PIN or Quick session
Ctrl-QQuick query (no session saved)
F1Show help
ESCQuit

The selected mode persists across runs. Set a persistent default with export CLAUDE_DECK_CMD="claude-api".

Automatic directory switch
Every selection — TODO, PIN, or regular session — runs cd to the original working directory before claude --resume. You’re always in the right directory.

Auto-update
cc-deck checks for updates in the background once every 24 hours. When an update is applied, you’ll see a notification on the next run:

[cc-deck] Updated (v0.2.0 → v1.0.0). Reload with: source ~/.zshrc

To update immediately:

cc-deck update

To disable: set CC_DECK_DISABLE_AUTOUPDATER=1.

Cache
mtime-based session cache keeps repeat runs at ~0.04s.


Installation

macOS (zsh)

git clone https://github.com/sysnet4admin/cc-deck.git ~/cc-deck
cd ~/cc-deck
./install.sh
source ~/.zshrc

Linux (bash)

git clone https://github.com/sysnet4admin/cc-deck.git ~/cc-deck
cd ~/cc-deck
./install.sh --bash
source ~/.bashrc

Windows (PowerShell)

git clone https://github.com/sysnet4admin/cc-deck.git "$HOME\cc-deck"
. "$HOME\cc-deck\install.ps1"

Requirements:

  • git (required on all platforms — Windows: winget install Git.Git)
  • python3 (required on all platforms)
  • macOS: brew install fzf
  • Linux: sudo apt install fzf or sudo dnf install fzf
  • Windows: winget install junegunn.fzf

Source

github.com/sysnet4admin/cc-deck