npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cc-chats

v0.5.0

Published

Browse and search your Claude Code chat history

Readme

Claude Code Chats

A web app for browsing and searching your local Claude Code chat history.

Features

  • Project Browser — View all your Claude Code projects with search, filter, and sorting (recent, name, messages, sessions)
  • Session History — Browse chat sessions for each project with timestamps and message counts
  • Message Viewer — Expand full conversation threads including tool use and results
  • Full-Text Search — Search across all messages with optional project-scoped filtering, powered by SQLite FTS5
  • Session Management — Resume, duplicate, or delete sessions
  • AI Summaries — Generate summaries for sessions and projects via the Claude CLI
  • Project Memory — View project memory files when available
  • Database Sync — One-click sync to index your chat history into a local SQLite database

Quick Start

npx cc-chats

This downloads, builds, and starts the app on http://localhost:3000.

To use a different port:

npx cc-chats --port 4000

Multiple Claude profiles

By default cc-chats reads ~/.claude, honouring CLAUDE_CONFIG_DIR if Claude Code is configured to live elsewhere. If you keep separate profiles, point each instance at its own config directory:

cc-chats --config-dir ~/.claude-work     --port 3001
cc-chats --config-dir ~/.claude-personal --port 3002

Each profile keeps its own sessions, archive, search index and settings, so the two never mix.

Every instance shows which profile it is serving: a name badge in the header, a colour accent derived from the config directory (so two windows are distinguishable at a glance), and the profile name in the browser tab title. The name is derived from the directory — ~/.claude-ee becomes ee — or set it explicitly:

cc-chats --config-dir ~/.claude-ee --profile-name "Equal Experts" --port 3001

Reclaiming space from image-heavy sessions

Sessions that pass screenshots or pictures to Claude store them as base64 inside the JSONL, which can dominate the size of a project. strip-images replaces those payloads with a placeholder noting the media type and original size, leaving every message, timestamp and tool call intact:

cc-chats strip-images                              # dry run over ~/.claude
cc-chats strip-images --config-dir ~/.claude-work  # dry run over another profile
cc-chats strip-images --project comics-manager     # limit to matching project dirs
cc-chats strip-images --write                      # apply

The app surfaces the same thing: sessions carrying more than 2 MB of images get a badge, and any project holding images offers a Strip images action (styled as a warning once it passes 50 MB), behind a confirmation that spells out the irreversibility.

The CLI streams each file, rewrites atomically, preserves file mtimes (which retention and archive mirroring depend on), and is idempotent. It is not reversible — the images are gone once written.

Prerequisites

  • Node.js 18+
  • Claude Code installed locally (reads from ~/.claude/projects, or $CLAUDE_CONFIG_DIR/projects)

Install Globally

npm install -g cc-chats
cc-chats

Development

git clone https://github.com/psousa50/claude-code-chats.git
cd claude-code-chats
npm install
npm run dev

How It Works

The app reads Claude Code's local JSONL files at ~/.claude/projects to display your chat history. Clicking Sync indexes all conversations into a SQLite database at ~/.claude/chat-search.db for fast full-text search.

AI Summaries

Summaries are generated by invoking claude -p under the hood. This requires Claude Code to be installed and authenticated on your machine.

If running the app as a background service (e.g. via launchctl on macOS or systemd on Linux), the claude binary may not be on the service's PATH. Set the CLAUDE_PATH environment variable to the absolute path of the binary.

macOS .plist:

<key>EnvironmentVariables</key>
<dict>
  <key>CLAUDE_PATH</key>
  <string>/Users/yourname/.local/bin/claude</string>
</dict>

Linux systemd unit:

[Service]
Environment=CLAUDE_PATH=/home/yourname/.local/bin/claude

Alternatively, adding the directory containing claude to the service's PATH also works — though CLAUDE_PATH is preferred as it grants access to only the one binary needed.

Tech Stack

Disclaimer

This project was created in vibe coding mode, using Claude Code.

Licence

MIT