ccmgr — Claude Code session manager
A terminal UI to navigate, resume, and start Claude Code sessions across all your projects from one place. ccmgr lives in the left pane of a tmux window; the right pane shows the currently-active claude. Each claude session runs as its own detached tmux session in the background, so switching between sessions preserves all in-progress work — no responses or tool calls are interrupted.
Install
pip install ccmgr
Requires Python 3.12+ and tmux on PATH.
Run
ccmgr
If you're not already inside a tmux session, ccmgr will launch one automatically (tmux new-session -A -s ccmgr). The right pane shows the currently-active claude; each claude session also exists as a detached tmux session in the background. Switching sessions in ccmgr re-attaches the right pane to a different background claude.
Keys
| Key | Action |
|---|---|
↑ / ↓ |
Move selection within the focused pane |
Tab / Shift-Tab |
Cycle focus through the Projects, Sessions, and Running panes (focused pane gets a bright cyan border) |
Enter |
Resume or start the selected session — claude opens (or re-attaches) in the right pane |
Ctrl-B then ← |
Move focus back to ccmgr from the right pane |
Ctrl-B then → |
Move focus to the claude pane |
/ |
Filter the focused pane |
i |
Popup with the focused session's details (title, project, msgs, tokens) |
? |
Full help popup |
q or Ctrl-C |
Quit (kills the right tmux pane + auto-launched tmux session) |
In the right pane, keystrokes go directly to claude — full color, full TUI. Tasks keep running even when you switch the right pane to another session, because each claude lives in its own detached tmux session. Press Ctrl-B ← to return to ccmgr on the left.
How it works
ccmgr reads ~/.claude/projects/* (Claude's per-project session history) and lists everything. Pressing Enter on a session does two things: (1) if a detached tmux session named cc-<short_id> running claude --resume <id> doesn't already exist, ccmgr creates one with tmux new-session -d; (2) ccmgr's right pane runs tmux attach -t cc-<short_id> so you see and interact with that claude. Switching sessions just respawns the right pane to attach to a different background tmux session — the detached claudes keep running with all their state intact.
Roadmap
Planned for future releases:
- Cross-session search across projects
- Cost and token-usage dashboard
- Mouse support
- Renaming and closing individual sessions from within ccmgr
Issues and pull requests welcome.
Configuration
Optional config at ~/.config/ccmgr/config.toml:
[claude]
binary = "claude"
[live]
poll_interval_ms = 1000
live_badge_seconds = 60
Metadata
Release files for ccmgr 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ccmgr-0.1.5.tar.gz | 28.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ccmgr-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.5 kB
Release files / ccmgr-0.1.5.tar.gz
| Download URL | ccmgr-0.1.5.tar.gz |
|---|---|
| Size | 28.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0dcada5a88fef5b73967beaf052f2fecaa54743b8fd2ff8879bf36d157ff89d7
|
|
BLAKE2b-256 checksum How to use checksums |
3aabde995a312ea9521b8df08dfb3ba31b884924abdece118eae730d06dd130b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 22, 2026.
Transparency logRelease files / ccmgr-0.1.5-py3-none-any.whl
| Download URL | ccmgr-0.1.5-py3-none-any.whl |
|---|---|
| Size | 29.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e355f02ca3f546c6ba88ee7e906cf6a6d769565a934e934f0c93fe5f543b1119
|
|
BLAKE2b-256 checksum How to use checksums |
8906cf51db21b075e2d587bb0fc6adf9d0d898499b459b4e33544b17f03190a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 22, 2026.
Transparency log