JSPM

ai-recall

0.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q38425F
  • License MIT

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

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ai-recall) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    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