Skip to main content

Find and resume Claude Code conversations using smart hybrid extraction and JIT indexing

Project description

Conversation Search

Find and resume past Claude Code conversations using smart hybrid extraction and JIT indexing. Get session IDs and project paths to easily jump back into previous work.

Features

  • Session Resumption: Get exact commands to resume past conversations
  • Unified CLI: Single cc-conversation-search command with intuitive subcommands
  • Smart Extraction: Hybrid indexing (full user content + smart assistant extraction)
  • JIT Indexing: Instant indexing before search (no AI calls, no delays)
  • Progressive Exploration: Simple search → broader search → manual exploration
  • Conversation Context: Expand context incrementally around any message
  • Claude Code Skill: Integrated Skill that outputs session resumption commands
  • Multi-Project Support: Works across all your Claude Code projects

Quick Start

Installation via Claude Code Plugin (Recommended)

Install the complete plugin (skill + CLI tool instructions) directly in Claude Code:

# Add this repo's marketplace
/plugin marketplace add akatz-ai/cc-conversation-search

# Install the plugin
/plugin install conversation-search

Then follow the installation instructions shown by Claude to:

  1. Install the CLI tool: uv tool install cc-conversation-search
  2. Initialize the database: cc-conversation-search init

Manual Installation

1. Install CLI Tool

# Using uv (recommended)
uv tool install cc-conversation-search

# Or using pip
pip install cc-conversation-search

2. Initialize Database

cc-conversation-search init

This creates the database and indexes your last 7 days of conversations.

3. Install Skill (Optional)

mkdir -p ~/.claude/skills/conversation-search
cp skills/conversation-search/* ~/.claude/skills/conversation-search/

Basic Usage

# Search for conversations (shows session ID and resume commands)
cc-conversation-search search "authentication bug"

# Search with time filter
cc-conversation-search search "react hooks" --days 30

# Get resume commands for a specific message
cc-conversation-search resume <MESSAGE_UUID>

# Use with uvx (no install needed)
uvx cc-conversation-search search "query"

Using with Claude Code Skill

Once installed, ask Claude:

  • "Find that conversation where we discussed authentication"
  • "Locate the conversation about React hooks"
  • "What did we talk about regarding the database?"

Auto-Installation: If the CLI tool isn't installed, the skill will automatically attempt to install it via uv or pip, then initialize the database. In most cases, everything "just works" after installing the plugin!

Claude will show you the session ID, project path, and exact commands to resume the conversation.

Command Reference

cc-conversation-search init

Initialize database and perform initial indexing

cc-conversation-search init [--days 7] [--no-extract] [--force]

cc-conversation-search index

JIT index conversations (instant, no AI calls)

cc-conversation-search index [--days N] [--all] [--no-extract]

IMPORTANT: The skill always runs index before search for fresh data.

cc-conversation-search search

Search conversations

cc-conversation-search search "query" [--days N] [--project PATH] [--content] [--json]

cc-conversation-search context

Get context around a specific message

cc-conversation-search context MESSAGE_UUID [--depth 5] [--content] [--json]

cc-conversation-search list

List recent conversations

cc-conversation-search list [--days 7] [--limit 20] [--json]

cc-conversation-search tree

View conversation tree structure

cc-conversation-search tree SESSION_ID [--json]

Architecture

~/.claude/
├── projects/           # Claude Code conversation files (JSONL)
│   └── {project}/
│       └── {session}.jsonl
└── skills/
    └── conversation-search/  # Optional Skill

~/.conversation-search/
└── index.db           # SQLite database with indexed conversations

Key Purpose: Find session IDs and project paths to resume past conversations.

Database Schema

  • messages: Individual messages with summaries, tree structure (parent_uuid), timestamps
  • conversations: Session metadata with conversation summaries
  • message_summaries_fts: FTS5 full-text search index
  • index_queue: Processing queue for batch operations

How It Works

  1. Indexer: Scans ~/.claude/projects/ for JSONL conversation files, parses tree structure
  2. Smart Extraction: Hybrid approach - full user content + first 500/last 200 chars for assistant
  3. Search: FTS5 full-text search over extracted content with conversation tree traversal
  4. JIT Indexing: Skill runs index before search for fresh data (instant, no AI calls)

Claude Code Skill

The included Skill allows Claude to search your conversation history automatically.

Example usage:

User: "Find that conversation where we started implementing the API"
Claude: [Activates conversation-search Skill]
        [Runs Level 0: cc-conversation-search index --days 7]  (instant JIT index)
        [Runs Level 1: cc-conversation-search search "implementing API" --days 14 --json]
        [Finds match]
        [Displays session ID, project path, and resume commands]

        Output:
        Session: abc-123-session-id
        Project: /home/user/projects/myproject
        Time: 2025-11-13 22:50

        To resume:
          cd /home/user/projects/myproject
          claude --resume abc-123-session-id

See skills/conversation-search/SKILL.md for progressive search workflow and complete documentation.

Advanced Usage

JSON Output for Scripting

All commands support --json flag:

# Export search results
cc-conversation-search search "authentication" --json > auth_convs.json

# Programmatic processing
cc-conversation-search list --days 30 --json | jq '.[] | .conversation_summary'

Programmatic Use

from conversation_search.core.search import ConversationSearch
from conversation_search.core.indexer import ConversationIndexer

# Search for messages
search = ConversationSearch()
results = search.search_conversations("authentication", days_back=7)
for r in results:
    print(f"{r['message_uuid']}: {r['summary']}")  # UUID for branching

# Index conversations
indexer = ConversationIndexer()
indexer.index_all(days_back=7)
indexer.close()

Configuration

Database location: ~/.conversation-search/index.db

No configuration file needed - all settings via command-line flags.

Performance

  • Smart Extraction: Instant (no AI calls), deterministic
  • Indexing Speed: ~1000+ messages/second (no API latency)
  • Storage: ~1-2KB per message (extracted text + metadata)
  • Search Speed: SQLite FTS5 is very fast, even with 100K+ messages
  • Cost: $0 (no AI API calls during indexing)

Development

Setup

git clone https://github.com/akatz-ai/cc-conversation-search
cd cc-conversation-search
uv tool install -e .

Run Tests

pytest tests/

Project Structure

conversation-search/
├── src/
│   └── conversation_search/
│       ├── __init__.py
│       ├── cli.py              # Unified CLI
│       ├── core/
│       │   ├── indexer.py      # Conversation indexing
│       │   ├── search.py       # Search functionality
│       │   └── summarization.py # Smart hybrid extraction
│       └── data/
│           └── schema.sql      # Database schema
├── skills/
│   └── conversation-search/
│       ├── SKILL.md           # Claude Code Skill with progressive workflow
│       └── REFERENCE.md       # Complete command reference
├── pyproject.toml
└── README.md

Troubleshooting

"Database not found" error:

cc-conversation-search init

"No conversations found":

  • Verify ~/.claude/projects/ exists and contains JSONL files
  • Use Claude Code to create some conversations first

Want to skip extraction and use raw content only:

# Store only raw content (even faster, but less optimized for search)
cc-conversation-search init --no-extract

Skill not activating:

  • Check Skill location: ls ~/.claude/skills/conversation-search/SKILL.md
  • Verify YAML frontmatter format
  • Restart Claude Code
  • Try explicit trigger: "Search my conversations for X"

Import errors:

uv tool uninstall cc-conversation-search
uv tool install cc-conversation-search

Contributing

PRs welcome! This is an experimental tool to improve Claude Code workflow.

Areas for Contribution

  • Vector embeddings for semantic similarity search
  • Web UI for conversation tree visualization
  • Export conversation branches as markdown
  • Conversation analytics (topics, frequency, etc.)
  • Additional Claude Code Skills using the search API

License

MIT

Acknowledgments

Built for the Claude Code ecosystem. Uses smart hybrid extraction for instant, cost-free indexing.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cc_conversation_search-0.4.4.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cc_conversation_search-0.4.4-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file cc_conversation_search-0.4.4.tar.gz.

File metadata

  • Download URL: cc_conversation_search-0.4.4.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cc_conversation_search-0.4.4.tar.gz
Algorithm Hash digest
SHA256 ce79231adbb6fbcb1744a9ebce3ff6b3a9ac29076a8c474a8a83e2cc7c783e8c
MD5 9ff94bebb83b75bd27dea9cecdc456a5
BLAKE2b-256 33bed0abc49585f18f91c361d559cfb8eb623c67f5ba492930a1646fbba2de6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_conversation_search-0.4.4.tar.gz:

Publisher: publish.yml on akatz-ai/cc-conversation-search

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_conversation_search-0.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for cc_conversation_search-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 286710efc3ff7170ca683383d445c29ceafefba5f3f0e9c4c3e1ce7ba1d53dd7
MD5 6dfbe6dcf25194f93d07a43a7d128234
BLAKE2b-256 293fb56fe90f9f8c5d2f9181a820d65eb5dc2f74f80ca6f40d884573a12d86fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_conversation_search-0.4.4-py3-none-any.whl:

Publisher: publish.yml on akatz-ai/cc-conversation-search

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page