A terminal UI for browsing, searching, filtering, and resuming Claude Code sessions across multiple projects.
After a reboot or across days of work, there's no easy way to see what Claude Code sessions existed, what they were about, or to resume them. Claude Code's --resume flag requires knowing the session ID. CC360 gives you a persistent, searchable overview of all sessions across your project directories.
Requires Claude Code installed.
brew install achton/tap/cc360curl -fsSL https://raw.githubusercontent.com/achton/cc360/main/install.sh | shInstalls the latest release to /usr/local/bin (override with CC360_INSTALL_DIR). Pin a version by passing it as an argument, e.g. ... | sh -s -- v0.3.0.
Download the package for your distro from GitHub Releases and install it:
sudo dpkg -i cc360_*_linux_amd64.deb # Debian / Ubuntu
sudo rpm -i cc360_*_linux_amd64.rpm # Fedora / RHEL / openSUSE
sudo apk add --allow-untrusted cc360_*_linux_amd64.apk # Alpinego install github.com/achton/cc360@latestDownload the latest release for your platform from GitHub Releases. Binaries are available for Linux and macOS (amd64 and arm64).
On first launch, CC360 creates a config file at ~/.config/cc360/config.toml and exits with setup instructions. Edit the config to add your project directories:
scan_paths = ["~/Code", "~/Projects"]Then run cc360 again to launch the TUI.
Config file: ~/.config/cc360/config.toml
| Setting | Default | Description |
|---|---|---|
scan_paths |
[] |
Directories containing your projects. CC360 scans ~/.claude/projects/ for sessions matching these paths. Required. |
scan_orphans |
true |
Include sessions found in .jsonl files that aren't listed in any session index. |
hide_sidechains |
true |
Hide sidechain (branched conversation) sessions. |
sort_by |
"modified" |
Default sort order. Options: modified, created, messages, project. |
| Key | Action |
|---|---|
↑/k, ↓/j |
Navigate up/down |
PgUp, PgDn |
Page up/down |
Home/g, End/G |
Jump to top/bottom |
Enter |
Resume the selected session (claude --resume) |
Tab |
Toggle detail pane (open by default) |
/ |
Open text filter (live search across all fields) |
p |
Open project picker (tree view with multi-select) |
c |
Copy resume command to clipboard (via OSC 52) |
r |
Reload config and re-scan all sessions |
Esc |
Clear text filter |
q, Ctrl+C |
Quit |
Press / to open the text filter. Type to search across project names, titles, summaries, first prompts, and git branches. Press Enter to stop typing and navigate the filtered results — the filter stays visible. Press / again to edit the filter text. Press Esc to clear.
Press p to open the project picker, which shows a collapsible tree of projects grouped by directory. Use Space to toggle selection, ←/→ to collapse/expand groups, and Enter to apply. Multiple projects can be selected at once. Sessions in root directories (not subfolders) appear as a dimmed (root) entry.
Filters stack: pick projects with p, then refine with /.
CC360 detects currently running Claude Code sessions by inspecting running claude processes — via /proc on Linux and ps + lsof on macOS. Active sessions are marked with a green ● next to the date and cannot be resumed (to prevent conflicts). Detection refreshes every 15 seconds.
CC360 reads Claude Code's own data files:
- Session index:
~/.claude/projects/{encoded-path}/sessions-index.jsoncontains metadata for each session (ID, timestamps, branch, message count, summary). - Orphan JSONL files: Some sessions exist only as
.jsonltranscript files without an index entry. CC360 parses the first 15 lines to extract metadata (cwd, branch, first prompt), then scans the full file for the last timestamp and message count.
The encoded path replaces / with - (e.g. /home/user/Code/myproject → -home-user-Code-myproject).
Session metadata is cached in a SQLite database at ~/.cache/cc360/cc360.db. On each launch, CC360 scans the disk and upserts into the cache.
CC360 automatically filters out non-interactive sessions:
- Hook/command sessions — Sessions containing "Caveat: The messages below were generated by the user while running local commands." These are created by Claude Code's hook system and contain automated output, not interactive conversations.
- Sub-agent sessions — Sessions starting with
<teammate-message>. These are spawned as background workers and aren't meaningful to resume independently.
The "Project summary" column shows (in priority order):
- Claude's own session summary from the index file
- The first user message as a fallback
The "Folder" column shows the project directory relative to the scan path (e.g. Code/myproject, Code/lib/mylib). Worktree sessions show a ⌥ indicator next to the folder name.
Columns are responsive: Branch appears at 90+ columns, message count at 100+.
main.go Entry point
internal/
config/config.go TOML config loading, first-run experience
scanner/
scanner.go Dual-source session discovery (index + orphan JSONL)
active.go Active session detection (shared matching core)
active_linux.go Process discovery via /proc (Linux)
active_darwin.go Process discovery via ps + lsof (macOS)
db/db.go SQLite cache (pure Go, no CGo)
tui/
model.go Bubbletea model, update loop, actions
table.go Custom table rendering (columns, rows, scrolling)
detail.go Togglable detail pane
filter.go Text filter input
picker.go Project picker overlay
keys.go Key bindings
styles.go Lipgloss styles
- Go 1.25+
- Bubbletea — Elm-architecture TUI framework
- Lipgloss — Terminal styling
- Bubbles — Spinner, text input components
- modernc.org/sqlite — Pure Go SQLite (no CGo)
- BurntSushi/toml — Config parsing
MIT
