Trove
๐ฆ Your content. All of it. Semantic search across GitHub, files, screenshots, videos โ one index, one search bar. MCP server for Claude Code.
Ask AI about Trove
Powered by Claude ยท Grounded in docs
I know everything about Trove. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Trove
Search everything you've ever made. Locally.
What is this?
I kept losing time looking for stuff across GitHub, Notion, local folders, Obsidian, Slack, Figma... everything scattered everywhere. So I built Trove to index all of it in one place and make it searchable.
npx trove-os setup
npx trove-os search "that API design doc from last week"
It runs on your machine. No cloud, no account, no subscriptions.
Why it matters for AI agents
The part I didn't expect to be the most useful: Trove ships an MCP server. Instead of Claude Code (or any agent) scanning your filesystem file by file โ burning thousands of tokens โ it queries a pre-built index and gets what it needs in one call.
claude mcp add trove -- npx trove-os mcp
Then just ask normally: "find my Figma mockups for the landing page" โ Claude hits the index instead of doing 15 glob + grep calls.
In practice, that's gone from ~10,000-50,000 tokens per file search down to 200-500. Your mileage will vary depending on project size.
What it connects to
Trove has a plugin system โ each source is a "connector" (a single TypeScript file, ~100-200 lines).
Currently working:
| Source | What gets indexed | |
|---|---|---|
| ๐ | Local files | Code, docs, images, videos โ anything on your machine |
| โฌก | GitHub | Repos, READMEs, metadata |
| ๐ | Notion | Pages, databases, content as Markdown |
| ๐ | Obsidian | Vault notes, frontmatter, wiki-links, tags |
| ๐ | Google Drive | Docs, Sheets, Slides |
| ๐ฌ | Slack | Messages, bookmarks, threads |
| ๐ฎ | Discord | Messages, pins |
| ๐จ | Figma | Files, components, pages |
| ๐ | Linear | Issues, docs, projects |
| ๐ค | OpenClaw | Conversations, memories, skills |
| ๐ง | Claude Code | Conversations, project memories |
| ๐ | Confluence, Airtable, Dropbox, Raindrop | Various |
All connectors use raw fetch โ zero SDK dependencies. Pagination, rate limiting, and abort signals built in.
Want to add one? See writing a connector โ it's genuinely not much code.
Getting started
# Setup wizard โ walks you through connecting sources + installing local AI
npx trove-os setup
The wizard handles everything: source selection, API tokens, Ollama model install, first index.
If you prefer doing it by hand:
npx trove-os init # Creates .trove.yml + .env
# Edit them, then:
npx trove-os index
npx trove-os search "query"
Use with MCP agents
Works with Claude Code, OpenClaw, Cursor, Windsurf, Cline โ anything that speaks MCP.
# Claude Code
claude mcp add trove -- npx trove-os mcp
# OpenClaw
openclaw config set mcpServers.trove.command "npx"
openclaw config set mcpServers.trove.args '["trove-os", "mcp"]'
# Any MCP agent
npx trove-os mcp # stdio server
Desktop app
trove-os desktop
Electron app with search, source management, file browser (dual-pane, drag & drop), keyboard shortcuts. Connects to the same index as the CLI and MCP server.
How search works
- Embeddings โ Trove computes vector embeddings for all your content. Supports Ollama (recommended, free), Transformers.js (local), TF-IDF (zero-dep fallback), or Anthropic (cloud).
- Semantic search โ Queries are matched by meaning, not just keywords. "login page design" finds your Figma auth mockup even if "login" isn't in the title.
- AI answers โ Optional RAG via Mistral (Ollama). Ask a question, get an answer grounded in your actual content.
- Fallback chain โ Ollama unavailable? Falls back to Transformers.js. That fails too? TF-IDF. Always works.
No API keys required for basic usage.
Configuration
.trove.yml:
storage: sqlite
data_dir: ~/.trove
embeddings: ollama
sources:
- connector: local
config:
paths: [~/Desktop, ~/Documents]
extensions: [".md", ".ts", ".rs", ".png", ".mp4"]
ignore: ["node_modules", ".git", "dist"]
- connector: github
config:
username: your-username
- connector: notion
config: {}
API tokens go in .env (gitignored, never committed):
GITHUB_TOKEN=ghp_...
NOTION_TOKEN=secret_...
FIGMA_TOKEN=figd_...
SLACK_TOKEN=xoxb-...
# etc โ only add the ones you use
Ollama (recommended)
ollama pull nomic-embed-text
# That's it. Trove auto-detects Ollama on localhost:11434.
CLI
trove-os setup # Interactive setup
trove-os index [source] # Index all or one source
trove-os search <query> # Search from terminal
trove-os ask <question> # AI-powered file finder
trove-os chat # Interactive AI session
trove-os watch # Live re-index on changes
trove-os status # Index stats
trove-os mcp # Start MCP server
trove-os desktop # Launch Electron app
Security
Your index might contain paths to bank statements, SSH keys, crypto wallets. Trove is paranoid about this:
- 40+ file patterns blocked from indexing (
.env,.pem,.key,.wallet,id_rsa, etc.) - Secret redaction in indexed content โ API keys, passwords, credit cards get replaced with
[REDACTED] - Optional encryption at rest (AES-256-GCM)
- Auth token on every API request, CORS locked to localhost, DNS rebinding protection
- MCP tools refuse to read sensitive files
- No shell commands anywhere โ
execFile()only
Architecture
TypeScript monorepo, pnpm + Turborepo, 18 packages.
Sources โ Connectors โ TroveEngine โ CLI / Web / MCP / API
The engine handles indexing, embedding, storage (JSON or SQLite), and search. Connectors are plugins that yield ContentItem objects. Interfaces consume the engine.
Write a connector
import type { Connector } from "@trove/shared";
import { z } from "zod";
const connector: Connector = {
manifest: {
name: "my-source",
version: "0.1.0",
description: "Index my source",
configSchema: z.object({ token_env: z.string().default("MY_TOKEN") }),
},
async validate(config) {
return process.env[config.token_env] ? { valid: true } : { valid: false, errors: ["Token not set"] };
},
async *index(config) {
yield { id: "my:1", source: "my-source", type: "document", title: "My Doc", description: "", tags: [], uri: "https://...", metadata: {}, indexedAt: new Date().toISOString() };
},
};
export default connector;
Publish as trove-connector-{name} on npm. See packages/connectors/ for real examples.
Dev setup (running from source)
If you cloned the repo and want to run Trove locally without publishing to npm:
git clone https://github.com/antoinebecker10-afk/trove.git
cd trove
pnpm install
pnpm build
cd packages/cli && pnpm link --global && cd ../..
Now trove-os works everywhere on your machine:
trove-os setup
trove-os search "query"
trove-os desktop
Contributing
PRs welcome. The easiest entry point is writing a connector โ pick a source from the "coming soon" list or bring your own.
Coming soon: Canva, YouTube, Reddit, Twitter/X, Browser Bookmarks, Jira, Google Docs, Gamma
About
I use Claude Code as a dev tool โ same way you'd use Copilot or Cursor. The architecture, decisions, and reviews are mine. The tool helped me move faster. I don't think that's something to hide, but I also don't think it defines the project.
If you find bugs, open an issue. If you want to improve something, open a PR. That's what matters.
