deja-claude
A keyboard-driven TUI for browsing, previewing, and managing Claude Code conversation sessions.
Claude Code stores every conversation as JSONL files in ~/.claude/projects/. With hundreds of sessions, there's no good way to browse, search, preview, or manage them. deja-claude gives you a lazydocker-style interface to navigate your session history.
Installation
With pipx (recommended):
pipx install deja-claude
With pip:
pip install deja-claude
From source:
git clone https://github.com/alpamayo-solutions/deja-claude.git
cd deja-claude
pip install -e ".[dev]"
Usage
deja-claude # browse all sessions
deja-claude /path/to/project # filter to sessions from that folder
The optional path argument filters sessions to only those whose working directory matches the given folder. Without it, the default_folder from settings is used (defaults to ~, which shows everything).
The interface has three panels:
- Left: Project tree with session counts -- navigate to filter instantly
- Center: Session list -- searchable, shows last message from each session
- Right: Conversation preview with styled text
Keyboard Shortcuts
Navigation
| Key | Action |
|---|---|
Left / Right |
Move focus between panels |
Tab |
Cycle focus between panels |
1 2 3 |
Focus panel directly |
Up / Down |
Navigate within a panel |
Actions
| Key | Action |
|---|---|
o / Enter |
Open session in Claude Code (resumes in the original directory) |
d |
Delete session (with confirmation) |
e |
Export session as Markdown |
r |
Rename session (persisted across restarts) |
/ |
Search / filter sessions |
Escape |
Clear search / close dialog |
Display
| Key | Action |
|---|---|
t |
Toggle tool calls in preview |
w |
Toggle thinking blocks in preview |
R |
Refresh (rescan sessions) |
? |
Help |
q |
Quit |
Configuration
Settings are stored in ~/.config/deja-claude/settings.json:
{
"default_folder": "~",
"show_tool_messages": false,
"show_thinking": false,
"sort_by": "date",
"sort_descending": true,
"export_dir": "~/Desktop"
}
| Setting | Description |
|---|---|
default_folder |
Default project folder to filter sessions (overridden by CLI argument) |
show_tool_messages |
Show tool calls in preview by default |
show_thinking |
Show thinking blocks in preview by default |
export_dir |
Directory for exported Markdown files |
Session names (set with r) are stored in ~/.config/deja-claude/metadata.json and persist across restarts.
How It Works
Index scan (~100ms at startup):
- Walks
~/.claude/projects/*/for JSONL files - Reads head + tail of each file to extract metadata and last message
- Cross-references with
~/.claude/history.jsonlfor fallback display text
Preview (on session select):
- Reads the last 512KB of the file (handles 40MB+ sessions without lag)
- Renders the last 40 turns as styled text in a single widget
- Debounced to stay responsive during rapid scrolling
Open in terminal:
cds into the session's original working directory- Runs
claude -r {session_id}via Textual'sapp.suspend() - When the Claude session ends, deja-claude resumes automatically
Requirements
- Python 3.10+
- Textual (installed automatically)
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT
Release files for deja-claude 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| deja_claude-1.0.1.tar.gz | 25.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| deja_claude-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.9 kB
Release files / deja_claude-1.0.1.tar.gz
| Download URL | deja_claude-1.0.1.tar.gz |
|---|---|
| Size | 25.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e70a2ca31f165a300958e2d96fa4d04aaf85f7296184ea511dbbbec2056aa5d
|
|
BLAKE2b-256 checksum How to use checksums |
41213022e2d6968d03527e020f75e695ba2269e22c27de45bbce2338066eafaf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 16, 2026.
Transparency logRelease files / deja_claude-1.0.1-py3-none-any.whl
| Download URL | deja_claude-1.0.1-py3-none-any.whl |
|---|---|
| Size | 24.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
10dc4d7fef9254e5746662c9d75494329f303999261482677fe42ce5464411fe
|
|
BLAKE2b-256 checksum How to use checksums |
9485f49c7356e68190d9aeb485d3d2176399dfa14d092ae5bf3963f54164e978
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Mar 16, 2026.
Transparency log