ccsessions
A fast terminal UI for browsing, previewing, resuming and managing Claude Code terminal sessions.
Features
-
Project & session browser — every Claude Code project on your machine, newest first, with live-session indicators (●), message counts and token usage (input / output / cache read / cache write)
-
Conversation preview — the tail of any session rendered with roles, Markdown (for Claude's replies), tool calls (⚙) and slash commands (⌘), without opening Claude Code
-
One-key resume —
rreplaces the TUI withclaude --resume <id>in the session's working directory;ccopies a readycd <dir> && claude --resume <id>command to the clipboard (OSC 52) -
Archive & delete — move sessions out of
claude --resume(reversibly) or delete them for good, per session or per project, with confirmation dialogs; sessions whose transcript lives on another synced machine are detected and marked (✕) -
Responsive layout — wide terminals get a side-by-side layout with a full-height conversation pane; narrow (half-screen) terminals get a stacked layout with a full-width conversation pane:
-
Export — write a whole session to Markdown (YAML front matter with session metadata, then the conversation — ready for Quarto/Pandoc) or copy the raw JSONL transcript verbatim; existing files are never overwritten
-
Live document —
wkeeps_session_<id>.mdin the project directory in sync with a running session, so an external renderer (quarto preview, VS Code, Marked, Obsidian) can display the conversation with LaTeX rendered while you work in the terminal. Only appended bytes are read, so following a 300 MB transcript costs nothing -
Fast — token stats are cached per transcript (invalidated by mtime + size), scanning runs off the UI thread, and conversation previews read only the tail of multi-megabyte files
Requirements
- Python ≥ 3.10
- Claude Code installed (
claudeon PATH — needed only for resuming) - macOS or Linux (Windows untested)
Installation
pipx install ccsessions-tui # or: uv tool install ccsessions-tui
Both install the ccsessions command.
Or from a clone:
git clone https://github.com/miskiewiczm/ccsessions
pip install -e ccsessions
Usage
ccsessions
| Key | Action |
|---|---|
j / k / arrows |
Move within the focused pane |
Tab / Shift+Tab |
Switch panes |
r |
Resume the selected session (in place) |
c |
Copy the resume command to the clipboard |
a |
Archive ↔ restore session · archive ↔ restore project |
d |
Delete session / project (with confirmation) |
n |
Rename project (set a display alias) |
e |
Export the session (Markdown or raw JSONL) |
w |
Follow the session in a live Markdown document |
/ |
Filter the focused list (projects or sessions) |
Ctrl+R |
Rescan ~/.claude now (a rescan also runs automatically) |
q |
Quit |
a and d act on the session when the Sessions pane is focused and on
the whole project when the Projects pane is focused.
Live documents
w toggles a live Markdown document for the selected session, written to
_session_<session-id>.md in that session's project directory and updated
every couple of seconds while ccsessions runs. Point any live-reloading
Markdown renderer at it — quarto preview _session_<id>.md renders LaTeX
with KaTeX, which is the point: formulas Claude writes in the terminal
become readable.
If the project is itself a Quarto project,
quarto previewserves the project's output directory and cannot reach a document sitting next to it (you get a 404 and a/../in the URL). SetCCSESSIONS_LIVE_DIRto a plain directory — e.g.export CCSESSIONS_LIVE_DIR=~/live— and live documents are written there instead.
The eye column shows the state: ◉ green — following a running session,
◉ yellow — following, but the session is not running, ◌ grey — the
file exists but nothing is updating it (from an earlier run or another
machine). With a Nerd Font in your terminal, set CCSESSIONS_NERD_FONT=1
for a proper eye glyph (or set CCSESSIONS_EYE / CCSESSIONS_EYE_OFF to
any characters you like). Quitting ccsessions stops all updates and leaves the files in
place; there are no background processes to track down. Add
_session_*.md to .gitignore in git repositories.
Project names default to the last component of the project's working
directory. n sets a purely cosmetic alias (stored in
~/.config/ccsessions/aliases.json — nothing under ~/.claude is touched);
submitting an empty alias removes the entry and restores the default name.
Configuration
- Theme — switch at runtime with Ctrl+P → "Change theme"; the choice is
remembered across runs (
~/.config/ccsessions/settings.json). TheCCSESSIONS_THEMEenv var overrides it. The defaultansi-darkfollows your terminal's palette and keeps terminal transparency; RGB themes (nord,gruvbox,tokyo-night,dracula, …) paint opaque backgrounds. - Code blocks — fenced code follows the app theme with a matching
pygments style. Set
CCSESSIONS_CODE_THEMEto pin a specific one (any name frompygments.styles.get_all_styles()). CCSESSIONS_LIVE_DIR— where live documents (w) are written; defaults to the session's own project directory. Point it at a plain directory when your projects are Quarto projects.CCSESSIONS_REFRESH_SECONDS— auto-refresh interval (default10,0disables it). Rescans keep your selection and never scroll the conversation pane; they pause while a dialog or the filter bar is open.~/.config/ccsessions/aliases.json— project display aliases, managed with thenkey.
How it works
ccsessions reads the data Claude Code already keeps on disk:
~/.claude/projects/<encoded-path>/*.jsonl— session transcripts~/.claude/projects/<encoded-path>/sessions-index.json— session metadata (summaries, first prompts, message counts)~/.claude/sessions/*.json— live-session records (PID liveness is checked with signal 0)
Archiving a session moves its transcript into an archived/ subdirectory of
the project folder (invisible to claude --resume, fully restorable).
Archiving a project moves the whole folder to ~/.claude/projects-archive/;
archived projects stay listed (dimmed, ▪) after the active ones and can be
restored with a. Deleting removes the transcript and its index entry.
Token-stats caching lives in ~/.cache/ccsessions/.
Note: Claude Code automatically deletes transcripts older than its
cleanupPeriodDayssetting (30 days by default). If you rely on your session history, raise that value in~/.claude/settings.json.
Privacy
Everything happens locally: ccsessions only reads files under ~/.claude/
and writes its cache under ~/.cache/ccsessions/. It makes no network
requests and sends nothing anywhere.
Development
pip install -e . --group dev
pytest
License
Metadata
Release files for ccsessions-tui 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ccsessions_tui-0.4.0.tar.gz | 3.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ccsessions_tui-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.0 MB
Release files / ccsessions_tui-0.4.0.tar.gz
| Download URL | ccsessions_tui-0.4.0.tar.gz |
|---|---|
| Size | 3.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9b943d3f8b6a11d5bfb85fe54f17cc2935464749dc20d3519356a0c0db8396d
|
|
BLAKE2b-256 checksum How to use checksums |
e987dc4a1833a90121812a2aa8f4e5926bb29339f1d9b2d656edcb203bc8407c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 5, 2026.
Transparency logRelease files / ccsessions_tui-0.4.0-py3-none-any.whl
| Download URL | ccsessions_tui-0.4.0-py3-none-any.whl |
|---|---|
| Size | 35.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
faa084ad0d1380bc574a83750a8a6e70dd3043fe3e77311a163185f3745887ab
|
|
BLAKE2b-256 checksum How to use checksums |
22f39148843689cd93d827c9b81c602f987603b37353936c7f2faa1bbdab9e3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 5, 2026.
Transparency log