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

@rodabuilds/sift

v0.2.1

Published

Local-first CLI to index and search Claude Code, Codex, and Cursor chat history.

Readme

sift

Local-first CLI to index and search your Claude Code, Codex, and Cursor chat history from one place.

MIT License Node >=20 npm Local-first Zero network

The Problem

Claude Code, Codex, and Cursor all store useful coding-assistant history locally, but their built-in search is limited and separated by tool. sift builds one local full-text index so you can search across those histories from a single terminal command.

Features

  • Indexes Claude Code JSONL logs under ~/.claude/projects.
  • Indexes Codex JSONL logs under ~/.codex/sessions and ~/.codex/archived_sessions.
  • Indexes Cursor SQLite state.vscdb databases from Cursor user storage, best-effort and read-only.
  • Ranked full-text search with highlighted snippets and local result times.
  • Filters with --tool claude|codex|cursor and --limit N.
  • 100% local, read-only for source logs/databases, zero network, zero telemetry.
  • No cloud dependencies.

Install

Install from npm:

npm install -g @rodabuilds/sift
sift index
sift "your query"

Or install from source:

git clone https://github.com/Nova1390/sift.git
cd sift
npm install
npm link

Then run:

sift --help

Without linking:

node ./bin/sift.js --help

Usage

Build or rebuild the local index:

sift index

Force a full rebuild when parser behavior changes:

sift index --full

Search everything:

sift "recipe import bug"

Filter by tool:

sift "approval policy" --tool codex
sift "italiano" --tool cursor

List recent sessions:

sift list

Example output:

[cursor · 2026-06-20 11:53] Traced the Cursor composer storage path and confirmed the message payload shape.
/Users/you/Library/Application Support/Cursor/User/globalStorage/state.vscdb#db6394d1-a474-45ae-87b1-1d7c210585e2

[codex · 2026-06-20 10:44] Shipped the local-first Node CLI for searching AI coding-assistant logs...
/Users/you/.codex/sessions/2026/06/20/rollout-2026-06-20T08-46-33-019ee3c7.jsonl

Agent Integrations

This repo includes lightweight local instructions for coding agents:

  • Agent Skills-compatible clients: .agents/skills/sift-memory/SKILL.md
  • Cursor: .cursor/rules/sift-memory.mdc
  • Claude Code fallback/project notes: CLAUDE.md

They teach agents to run sift index, sift "<query>", and sift list as local shell commands. They do not add network access, telemetry, sync, or writes to source logs.

How It Works

sift index scans the known local storage locations for Claude Code, Codex, and Cursor. Missing directories are skipped gracefully. Repeated runs are incremental: unchanged Claude and Codex files are reused from the local file cache, while Cursor SQLite databases are re-read each time because their WAL files can change without updating the main database timestamp.

Claude Code and Codex JSONL files are parsed line by line. Malformed lines are skipped instead of failing the whole index run. Cursor databases are opened read-only with better-sqlite3; locked databases, missing schemas, or unsupported Cursor versions produce warnings and are skipped without breaking Claude/Codex indexing.

Human-readable user and assistant messages are normalized to:

{ id, tool, session, project, role, ts, text }

The normalized records are indexed with MiniSearch. The serialized search index and per-file record cache are written to:

~/.sift/index.json

sift search loads that local index, runs ranked full-text search with prefix and light fuzzy matching, and prints the best matches with highlighted snippets, local date/time, and the source path.

Privacy

Privacy is the main constraint.

  • Only reads from ~/.claude, ~/.codex, and Cursor's local storage.
  • Never writes to source logs or Cursor databases.
  • Writes only its own index under ~/.sift/.
  • Makes zero network requests.
  • Has no telemetry, sync, accounts, or remote services.

Roadmap

  • v2: optional semantic search, still local.

License

MIT