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

ai-recall

v0.1.0

Published

Find any AI coding session you've ever had. Across Claude Code, Cursor, Codex CLI, and Gemini.

Readme

ai-recall

Find any AI coding session you've ever had. Across Claude Code, Cursor, Codex CLI, and Gemini.

npm i -g ai-recall · github.com/skibidiskib/ai-recall


The pain

Yesterday you spent two hours teaching an AI to fix a tricky migration. Today you need that chat back.

claude --resume gives you a list of timestamps. Cursor's history is buried inside the editor. Codex CLI is separate again. Gemini is separate again. None of them share memory. Your AI conversations are scattered across four tools and you can't find a thing.

What it is

A daily-refreshed index of every AI coding session on your laptop, with search that ranks by topic depth — not just substring matches. Type ai-recall ai-codex and you get the chats that were actually about ai-codex, newest first. Hit enter — it resumes in the right tool, in the right project directory.

No daemon. No telemetry. No cloud. One JSON file on your disk.

The 5-second demo

ai-recall preview pane — title, status, outcome, tools, commits, topics, files edited

ai-recall demo gif

$ ai-recall

  ── webapp (5) ───────────────────────────────────────
    1m    Drizzle ORM Migration from Prisma
    25m   Stripe Webhook Signature Validation Fix
    2h    Auth Refactor with Lucia + OAuth
    5h    Transactional Emails with React Email
    1d    Daily Digest Cron Job
  ── serverless-api (2) ───────────────────────────────
    2d    Lambda Cold Start Optimization
    3d    DynamoDB Pagination Cursor Bug
  ── marketing-site (1) ───────────────────────────────
    4d    Tailwind v4 Migration

┌──────────────────────────────────────────────────────┐
│ Drizzle ORM Migration from Prisma                    │
│   ✓ completed · 1h 47m · 18 prompts · ~/webapp       │
│                                                      │
│ First prompt                                         │
│   Migrate the database layer from Prisma to Drizzle  │
│   without losing type safety. Drop-in compatibility  │
│   not required — willing to update call sites.       │
│                                                      │
│ Outcome                                              │
│   Migration complete. All 47 query call sites        │
│   ported, schema introspection green, type inference │
│   verified end-to-end. Pushed 3 commits...           │
│                                                      │
│ Tools  Read ×64  Bash ×38  Edit ×27  Grep ×19        │
│ Commits                                              │
│   • feat(db): add Drizzle schema with full inference │
│   • refactor(api): port queries to Drizzle           │
│   • chore: remove Prisma client + migrations dir     │
│ Topics  drizzle · schema · migration · prisma        │
│                                                      │
│ Files edited (10)                                    │
│   src/db/schema.ts                                   │
│   src/db/client.ts                                   │
│   src/api/users/route.ts                             │
│   ...and 7 more                                      │
└──────────────────────────────────────────────────────┘

Every row is an AI-generated title (one Haiku call per session at index time, ~$0.0002 each — not the first 70 chars of "propose improvements to ai-codex..."). The preview pane reconstructs the session at a glance: what shipped (commits parsed from git commit -m calls in your Bash history), how much work it was (tool counts), how it ended (the last substantive assistant turn — not the trailing "OK!"), and which files moved.

Why it's different

| | claude-history | JSONL viewers | ccusage | ai-recall | |---|---|---|---|---| | Multi-tool (Claude / Cursor / Codex / Gemini) | no | no | partial | yes | | AI-generated titles (not raw first prompt) | no | no | n/a | yes | | "Substantially about" topic filter, then by date | no | no | n/a | yes | | Rolling 30-day window + daily rebuild | no | no | n/a | yes | | Resume in correct cwd | yes | no | n/a | yes | | Extracted decisions / file edits / TODOs | no | no | no | v0.3 |

The three things in bold-yes are the product moments. Everything else is table stakes.

How it works

  1. A launchd (macOS) / cron (Linux) job runs daily and walks ~/.claude/projects/, ~/.cursor/projects/, ~/.codex/sessions/, ~/.gemini/tmp/ for sessions touched in the rolling window (default 30d).
  2. For each session, it extracts: first/last user prompt, files edited (from Edit/Write/MultiEdit tool calls), per-term frequency, and a one-line AI title.
  3. Output: a single ~/.ai-recall/index.json (~1 MB for 100 sessions).
  4. The picker is an fzf-style TUI that runs BM25 over the index, applies a "topic depth" floor, and re-sorts the survivors by recency.

Search ranking, in detail:

  • BM25 over each session-as-document gives you term-frequency × inverse-document-frequency for free. A session with 223 mentions of codex-cli outranks one with 1.
  • A relevance floor drops anything below a threshold, so passing mentions don't pollute the list.
  • Survivors are re-sorted by recency, matching how memory actually works ("most recent chat about X, then the next one").
  • Matches in user prompts and edited file paths weight higher than matches in long assistant replies.

Install

npm i -g ai-recall
ai-recall init      # builds initial index, registers daily refresh
ai-recall           # opens the picker
ai-recall <query>   # picker pre-filtered by topic
ai-recall --all     # ignore the rolling window (slow ripgrep)

Zero new auth. AI titles use your locally-installed claude CLI — it shells out to claude --print for each session, so no Anthropic API key is required. Fallback chain: claude CLI → ANTHROPIC_API_KEY env var → Ollama (if installed) → raw first-prompt.

Picker requires fzf (brew install fzf / apt install fzf). If missing, falls back to a numbered list.

Roadmap

  • v0.1 — Claude Code only. BM25 + AI titles + daily refresh + resume in correct cwd. Ship this in a weekend.
  • v0.2 — Cursor + Codex CLI + Gemini transcript ingestion. Same index format, four sources.
  • v0.3 — Knowledge layer: decisions, file edits, and open TODOs extracted into a queryable second index. Now ai-recall answers "what did I decide about X?" not just "where was the chat?"
  • v0.4 — Auto-context: when you start a new session, surface the 1–3 most relevant past sessions and offer to inject their summaries into the opening prompt.

Why this could break out

ccusage hit 13.3k stars by answering one universal question ("how much am I spending?") with instant payoff. ai-recall answers another universal question that nobody currently answers well: "where was the thing I figured out last Tuesday?"

The pain is daily and getting worse — every AI tool you add multiplies it. The viral demo is a 15-second gif: type a topic, watch AI-titled rows land in 30ms, hit enter, you're back in the right session in the right tool. That's the moment.

The thing that prevents virality is positioning it as "better claude-resume." Positioned as "unified memory across every AI coding tool you use", it's a different product with a much bigger ceiling.


Decisions locked

  • Nameai-recall. npm + github.com/skibidiskib/ai-recall slots claimed.
  • Title backend — Default to local claude --print (no new auth, uses subscription). Fallback chain: ANTHROPIC_API_KEY env var → Ollama (llama-3.2:3b) → raw first-prompt.
  • Pickerfzf shell-out for v0.1, --no-fzf numbered-list fallback if missing. Custom TUI (Ink) deferred to v0.3.
  • Launch — Coordinated event, not a series of posts. X demo gif (hero) + blog post (anchor) + Show HN + Discord/Reddit, all within 30 min on Tue/Wed at 9 AM ET. Pre-launch DMs to @simonw, @ryoppippi, @alexalbert__ as a courtesy heads-up.

Launch checklist

  • [ ] v0.1 implementation finished + tested on a real account
  • [ ] npm publish under ai-recall
  • [ ] gh repo create skibidiskib/ai-recall --public, push code
  • [ ] 15-second demo gif (asciinema → terminalizer): the search-then-resume moment, no install footage
  • [ ] Blog post draft: technical deep-dive on BM25, topic-floor search, the claude --print trick
  • [ ] Pre-launch DMs (T-2 days, no ask, just share)
  • [ ] Show HN post drafted: "Show HN: ai-recall – fzf-style search across all your AI coding sessions"
  • [ ] r/ClaudeAI + r/LocalLLaMA + r/cursor posts drafted (native, not link-only)
  • [ ] Anthropic + Cursor Discord posts drafted
  • [ ] X post scheduled for Tue/Wed 9 AM ET, gif as hero, blog link in reply