Skip to content

BenCello/claude-code-history-viewer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

732 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CCHV Logo

Claude Code History Viewer

The unified history viewer for AI coding assistants.

Browse, search, and analyze conversations from Claude Code, Codex CLI, and OpenCode — as a desktop app or headless server. 100% offline.

Version Stars License Rust Tests Last Commit Platform

Website · Download · Report Bug

Languages: English | 한국어 | 日本語 | 中文 (简体) | 中文 (繁體)


Conversation History Analytics Dashboard

Token Statistics Recent Edits

Quick Start

Desktop app — download and run:

Platform Download
macOS (Universal) .dmg
Windows (x64) .exe
Linux (x64) .AppImage

Homebrew (macOS):

brew install --cask jhlee0409/tap/claude-code-history-viewer

Headless server — access from any browser:

brew install jhlee0409/tap/cchv-server   # or: curl -fsSL https://...install-server.sh | sh
cchv-server --serve                       # → http://localhost:3727

See Server Mode for Docker, VPS, and systemd setup.


Why This Exists

AI coding assistants generate thousands of conversation messages, but none of them provide a way to look back at your history across tools. CCHV solves this.

Three assistants. One viewer. Switch between Claude Code, Codex CLI, and OpenCode sessions seamlessly — compare token usage, search across providers, and analyze your workflow in a single interface.

Provider Data Location What You Get
Claude Code ~/.claude/projects/ Full conversation history, tool use, thinking, costs
Codex CLI ~/.codex/sessions/ Session rollouts with agent responses
OpenCode ~/.local/share/opencode/ Conversation sessions and tool results

No vendor lock-in. No cloud dependency. Your local conversation files, beautifully rendered.

Table of Contents

Features

Core

Feature Description
Multi-Provider Support Unified viewer for Claude Code, Codex CLI, and OpenCode — filter by provider, compare across tools
Conversation Browser Navigate conversations by project/session with worktree grouping
Global Search Search across all conversations from all providers instantly
Analytics Dashboard Dual-mode token stats (billing vs conversation), cost breakdown, and provider distribution charts
Session Board Multi-session visual analysis with pixel view, attribute brushing, and activity timeline
Settings Manager Scope-aware Claude Code settings editor with MCP server management
Message Navigator Right-side collapsible TOC for quick conversation navigation
Real-time Monitoring Live session file watching for instant updates

New in v1.6.0

Feature Description
WebUI Server Mode Run as a headless web server with --serve — access from any browser, deploy on VPS/Docker
Screenshot Capture Long screenshot with range selection, preview modal, and multi-selection export
Archive Management Create, browse, rename, and export session archives with per-file download
Accessibility Full keyboard navigation, screen reader support, font scaling, and high contrast mode
Mobile UI Responsive 390px viewport support with bottom tab bar
External Links All links open in system browser instead of the app's WebView

More

Feature Description
Session Context Menu Copy session ID, resume command, file path; native rename with search integration
ANSI Color Rendering Terminal output displayed with original ANSI colors
Multi-language English, Korean, Japanese, Chinese (Simplified & Traditional)
Recent Edits View file modification history and restore
Auto-update Built-in updater with skip/postpone options

Installation

Homebrew (macOS)

brew tap jhlee0409/tap
brew install --cask claude-code-history-viewer

Or install directly with the full cask path:

brew install --cask jhlee0409/tap/claude-code-history-viewer

If you see No Cask with this name exists, run the full cask path command above.

To upgrade:

brew upgrade --cask claude-code-history-viewer

To uninstall:

brew uninstall --cask claude-code-history-viewer

Migrating from manual (.dmg) installation? Remove the existing app before installing via Homebrew to avoid conflicts. Choose one installation method — do not mix manual and Homebrew installs.

# Remove the manually installed app first
rm -rf "/Applications/Claude Code History Viewer.app"
# Then install via Homebrew
brew tap jhlee0409/tap
brew install --cask claude-code-history-viewer

Build from Source

git clone https://github.com/jhlee0409/claude-code-history-viewer.git
cd claude-code-history-viewer

# Option 1: Using just (recommended)
brew install just    # or: cargo install just
just setup
just dev             # Development
just tauri-build     # Production build

# Option 2: Using pnpm directly
pnpm install
pnpm tauri:dev       # Development
pnpm tauri:build     # Production build

Requirements: Node.js 18+, pnpm, Rust toolchain

Server Mode (WebUI)

Run the viewer as a headless HTTP server — no desktop environment required. Ideal for VPS, remote servers, or Docker. The server binary embeds the frontend — a single file is all you need.

New to server deployment? See the full Server Mode Guide (한국어) for step-by-step instructions covering local testing, VPS setup, Docker, and more.

Quick Install

# Homebrew (macOS / Linux)
brew install jhlee0409/tap/cchv-server

# Or one-line script
curl -fsSL https://raw.githubusercontent.com/jhlee0409/claude-code-history-viewer/main/install-server.sh | sh

Both methods install cchv-server to your PATH.

Start the Server

cchv-server --serve

Output:

🔑 Auth token: b77f41d4-ec24-4102-8f7a-8a942d6dd4a0
   Open in browser: http://192.168.1.10:3727?token=b77f41d4-ec24-4102-8f7a-8a942d6dd4a0
👁 File watcher active: /home/user/.claude/projects
🚀 WebUI server running at http://0.0.0.0:3727

Open the URL in your browser — the token is saved automatically.

Pre-built Binaries

Platform Asset
Linux x64 cchv-server-linux-x64.tar.gz
Linux ARM64 cchv-server-linux-arm64.tar.gz
macOS ARM cchv-server-macos-arm64.tar.gz
macOS x64 cchv-server-macos-x64.tar.gz

Download from Releases.

CLI options:

Flag Default Description
--serve Required. Starts the HTTP server instead of the desktop app
--port <number> 3727 Server port
--host <address> 0.0.0.0 Bind address (127.0.0.1 for local only)
--token <value> auto (uuid v4) Custom authentication token
--no-auth Disable authentication (not recommended for public networks)
--dist <path> embedded Override built-in frontend with external dist/ directory

Authentication

All /api/* endpoints are protected by Bearer token authentication. The token is auto-generated on each server start and printed to stderr.

  • Browser access: Use the ?token=... URL printed at startup. The token is saved to localStorage automatically.
  • API access: Include Authorization: Bearer <token> header.
  • Custom token: --token my-secret-token to set your own.
  • Environment variable: CCHV_TOKEN=your-token cchv-server --serve (useful for systemd/Docker).
  • Disable: --no-auth to skip authentication entirely (only use on trusted networks).

Real-time Updates

The server watches ~/.claude/projects/ for file changes and pushes updates to the browser via Server-Sent Events (SSE). When you use Claude Code in another terminal, the viewer updates automatically — no manual refresh needed.

Docker

docker compose up -d

Check the token after startup:

docker compose logs webui
# 🔑 Auth token: ... ← paste this URL in your browser

The docker-compose.yml mounts ~/.claude, ~/.codex, and ~/.local/share/opencode as read-only volumes.

systemd Service

For persistent server on Linux, use the provided systemd template:

sudo cp contrib/cchv.service /etc/systemd/system/
sudo systemctl edit --full cchv.service   # Set User= to your username
sudo systemctl enable --now cchv.service

Build from Source (Server Only)

just serve-build           # Build frontend + embed into server binary
just serve-build-run       # Build and run (embedded assets)

# Or run in development (external dist/):
just serve-dev             # Build frontend + run server with --dist

Health Check

GET /health
→ { "status": "ok" }

Usage

  1. Launch the app
  2. It automatically scans for conversation data from all supported providers (Claude Code, Codex CLI, OpenCode)
  3. Browse projects in the left sidebar — filter by provider using the tab bar
  4. Click a session to view messages
  5. Use tabs to switch between Messages, Analytics, Token Stats, Recent Edits, and Session Board

Accessibility

The app includes accessibility features for keyboard-only, low-vision, and screen-reader users.

  • Keyboard-first navigation:
    • Skip links for Project Explorer, Main Content, Message Navigator, and Settings
    • Project tree navigation with ArrowUp/ArrowDown/Home/End, type-ahead search, and * to expand sibling groups
    • Message navigator navigation with ArrowUp/ArrowDown/Home/End and Enter to open the focused message
  • Visual accessibility:
    • Persistent global font size scaling (90%, 100%, 110%, 120%, 130%)
    • High contrast mode toggle in settings
  • Screen reader support:
    • Landmark and tree/list semantics (navigation, tree, treeitem, group, listbox, option)
    • Live announcements for status/loading and project tree navigation/selection changes
    • Inline keyboard-help descriptions via aria-describedby

Tech Stack

Layer Technology
Backend Rust Tauri
Frontend React TypeScript Tailwind
State Zustand
Build Vite
i18n i18next 5 languages

Data Privacy

100% offline. No conversation data is sent to any server. No analytics, no tracking, no telemetry.

Your data stays on your machine.

Troubleshooting

Problem Solution
"No Claude data found" Make sure ~/.claude exists with conversation history
Performance issues Large histories may be slow initially — the app uses virtual scrolling
Update problems If auto-updater fails, download manually from Releases

Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feat/my-feature)
  3. Run checks before committing:
    pnpm tsc --build .        # TypeScript
    pnpm vitest run            # Tests
    pnpm lint                  # Lint
  4. Commit your changes (git commit -m 'feat: add my feature')
  5. Push to the branch (git push origin feat/my-feature)
  6. Open a Pull Request

See Development Commands for the full list of available commands.

License

MIT — free for personal and commercial use.


If this project helps you, consider giving it a star!

Star History Chart

About

desktop app to browse and analyze your Claude Code conversation history

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 74.1%
  • Rust 23.0%
  • CSS 1.5%
  • JavaScript 1.2%
  • Shell 0.1%
  • Just 0.1%