Skip to content

antoinebecker10-afk/Trove

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

22 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Trove banner

Trove

Search everything you've ever made. Locally.

License: MIT Node.js GitHub stars


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

Trove desktop app

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

  1. Embeddings โ€” Trove computes vector embeddings for all your content. Supports Ollama (recommended, free), Transformers.js (local), TF-IDF (zero-dep fallback), or Anthropic (cloud).
  2. 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.
  3. AI answers โ€” Optional RAG via Mistral (Ollama). Ask a question, get an answer grounded in your actual content.
  4. 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.

License

MIT

About

๐Ÿฆž Your content. All of it. Semantic search across GitHub, files, screenshots, videos โ€” one index, one search bar. MCP server for Claude Code.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages