explaingit

liliu-z/stashbase

17TypeScriptAudience · vibe coderComplexity · 3/5ActiveLicenseSetup · moderate

TLDR

Local knowledge base app that continuously indexes folders of notes and PDFs and exposes them to Claude, ChatGPT, Cursor, and other MCP-aware AI clients.

Mindmap

mindmap
  root((stashbase))
    Inputs
      Markdown notes
      HTML notes
      PDF files
      Git repos
    Outputs
      MCP search results
      HTML notes from PDFs
      Mirrored skill files
    Use Cases
      Personal research library
      AI chat with notes
      Agent workspace
    Tech Stack
      Electron
      TypeScript
      Milvus Lite
      MCP

Things people build with this

USE CASE 1

Index a folder of research papers and query them from Claude via @stashbase

USE CASE 2

Run Claude Code inside a notes space and have new files auto-indexed

USE CASE 3

Convert dropped PDFs into searchable HTML notes

USE CASE 4

Share one set of agent skills across Claude Code and Codex

Tech stack

ElectronTypeScriptNodeMilvusMCPPython

Getting it running

Difficulty · moderate Time to first run · 30min

Prebuilt cask is macOS only and asks for an OpenAI key on first launch unless you pick the local bge-m3 model.

Apache 2.0, a permissive license that lets you use, modify, and redistribute the code commercially with attribution.

In plain English

StashBase is a desktop app that keeps a personal library of notes, research papers, and other reference material on your own computer, then makes that library searchable from AI chat tools. It runs on macOS through a Homebrew install, with a build-from-source path for Intel Mac and Windows users. The project is in early alpha and the source is licensed Apache 2.0. The pitch is that most AI tools treat your reading material as temporary context: you upload a file, paste a note, or share a chat link, and then it is gone. StashBase aims to be a long-lived layer instead, watching folders of files on disk and keeping them indexed continuously. New notes become searchable straight away, and the index is exposed through the Model Context Protocol, so Claude, ChatGPT, Codex, Cursor, and other MCP-aware clients can ask for relevant snippets when you mention @stashbase in a chat. A folder you point it at is called a space. Each space gets its own local index built with two open libraries called mfs and Milvus Lite, combining meaning-based search with plain keyword search. The first time a space is indexed you choose an embedding model: OpenAI's text-embedding-3-small for about two cents per million tokens, or a built-in offline model called bge-m3 that needs no API key. StashBase ships with a built-in terminal that has Claude Code and Codex pre-wired. Anything those agents write to disk is picked up by the index without a manual refresh. Reusable agent instructions placed in a space's skills folder are mirrored into the formats both CLIs expect. Renaming a note triggers a confirmation dialog that rewrites links pointing at the old path, and dropping in a PDF runs a pipeline that turns it into a readable HTML note. The author argues that HTML is a better long-term note format than Markdown once a language model is doing most of the writing, because HTML carries richer structure such as semantic sections, anchors, tables, and embedded media. Markdown stays supported for drafts alongside HTML.

Copy-paste prompts

Prompt 1
Install stashbase via the Homebrew cask and walk me through pointing it at my ~/Documents/papers folder
Prompt 2
Set up stashbase with the offline bge-m3 embedding model so I do not need an OpenAI key
Prompt 3
Write a skills/SKILL.md file for stashbase that summarizes new notes whenever Claude Code adds them
Prompt 4
Build stashbase from source on an Intel Mac using pnpm and the dist:mac target
Prompt 5
Configure stashbase MCP so Cursor can query @stashbase against my indexed notes
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.