本地内容搜索引擎

Trove是一个本地运行的跨平台内容搜索引擎,可索引和搜索GitHub、Notion、本地文件夹、Obsidian、Slack、Figma等多个来源的内容,支持AI代理高效查询。

  • by antoinebecker10-afk
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 antoinebecker10-afk/Trove

使用说明

Trove

Search everything you've ever made. Locally.


这是什么?

我一直在浪费时间在GitHub、Notion、本地文件夹、Obsidian、Slack、Figma上寻找东西。…到处都是。因此,我构建了Trove,以便在一个地方对所有内容进行索引,并使其可搜索。

npx trove-os setup
npx trove-os search "that API design doc from last week"

它在你的机器上运行。没有云,没有帐户,没有订阅。


为什么它对AI代理很重要

我没想到的部分是最有用的:Trove船只和 MCP服务器。它查询预构建的索引,并在一次调用中获取所需内容,而不是Claude Code(或任何代理)逐个文件扫描文件系统文件——燃烧数千个令牌。

claude mcp add trove -- npx trove-os mcp

然后正常地问: “在登录页面上找到我的Figma模型” --克劳德命中了指数,而不是15 glob + grep 电话。

在实践中,这已经从每次文件搜索约10000-50000个令牌下降到200-500个。您的里程数将根据项目规模而有所不同。


它与什么有关

Trove有一个插件系统——每个源代码都是一个“连接器”(一个TypeScript文件,约100-200行)。

目前工作:

来源 什么被编入索引
📁 本地文件 代码、文档、图像、视频——你机器上的任何东西
⬡ GitHub 仓库、自述文件、元数据
📝 Notion 页面、数据库、内容为Markdown
💎 黑曜石 保险库笔记、封面、维基链接、标签
📊 谷歌云端硬盘 文档、表格、幻灯片
💬 Slack 消息、书签、帖子
🎮 Discord 消息、图钉
🎨 Figma 文件、组件、页面
📐 线性 问题、文档、项目
🤖 OpenClaw 对话、记忆、技能
🧠 克劳德代码 对话,项目记忆
📘 Confluence、Airtable、Dropbox、Raindrop 各种

所有连接器都使用原始 fetch --零SDK依赖。内置寻呼、速率限制和中止信号。

想添加一个吗? 看 编写连接器 --这真的不是很多代码。


入门

# Setup wizard — walks you through connecting sources + installing local AI
npx trove-os setup

该向导处理一切:源代码选择、API令牌、Ollama模型安装、第一个索引。

如果你更喜欢手工制作:

npx trove-os init            # Creates .trove.yml + .env
# Edit them, then:
npx trove-os index
npx trove-os search "query"

与MCP代理一起使用

适用于Claude Code、OpenClaw、Cursor、Windsurf、Cline——任何讲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

桌面应用程序

trove-os desktop

带有搜索、源代码管理、文件浏览器(双窗格,拖放)、键盘快捷键的电子应用程序。连接到与CLI和MCP服务器相同的索引。


搜索是如何工作的

  1. 嵌入 --Trove为您的所有内容计算向量嵌入。支持Ollama(推荐,免费)、Transformers.js(本地)、TF-IDF(零dep回退)或Anthropic(云)。
  2. 语义搜索 --查询是按意义匹配的,而不仅仅是关键字。“登录页面设计”可以找到您的Figma身份验证模型,即使标题中没有“登录”。
  3. AI答案 --可选RAG通过Mistral(Ollama)。问一个问题,得到一个基于你实际内容的答案。
  4. 后备链 --Ollama不在吗?回到Transformers.js。这也失败了吗?TF-IDF。总是工作。

基本使用不需要API密钥。


配置

.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令牌进入 .env (被忽视,从未承诺):

GITHUB_TOKEN=ghp_...
NOTION_TOKEN=secret_...
FIGMA_TOKEN=figd_...
SLACK_TOKEN=xoxb-...
# etc — only add the ones you use

Ollama(推荐)

ollama pull nomic-embed-text
# That's it. Trove auto-detects Ollama on localhost:11434.

命令行界面

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

安全

您的索引可能包含银行对账单、SSH密钥、加密钱包的路径。Trove对此很偏执:

  • 40+文件模式被阻止 从索引(.env, .pem, .key, .wallet, id_rsa等等)
  • 秘密编辑 在索引内容中-API密钥、密码、信用卡被替换为 [REDACTED]
  • 可选加密 静止时(AES-256-GCM)
  • 身份验证令牌 在每个API请求上,CORS锁定到本地主机,DNS重新绑定保护
  • MCP工具 拒绝读取敏感文件
  • 任何地方都没有shell命令-- execFile() 仅

建筑

TypeScript单仓库,pnpm+Turborepo,18个包。

Sources → Connectors → TroveEngine → CLI / Web / MCP / API

该引擎处理索引、嵌入、存储(JSON或SQLite)和搜索。连接器是产生 ContentItem 物体。接口消耗引擎。


编写连接器

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;

发布为 trove-connector-{name} 在npm上。看 packages/connectors/ 举个真实的例子。


开发设置(从源代码运行)

如果你克隆了仓库,并想在本地运行Trove而不发布到npm:

git clone https://github.com/antoinebecker10-afk/trove.git
cd trove
pnpm install
pnpm build
cd packages/cli && pnpm link --global && cd ../..

现在 trove-os 在您的机器上的任何地方都可以工作:

trove-os setup
trove-os search "query"
trove-os desktop

贡献

PR欢迎。最简单的切入点是编写一个连接器——从“即将推出”列表中选择一个源,或者自带一个。

马上就来: Canva、YouTube、Reddit、Twitter/X、浏览器书签、Jira、谷歌文档、Gamma


关于

我使用Claude Code作为开发工具——就像你使用Copilot或Cursor一样。架构、决策和审查都是我的。这个工具帮助我移动得更快。我不认为这是隐藏的东西,但我也不认为它定义了项目。

如果你发现bug,打开一个问题。如果你想改进一些东西,打开一个公关。这才是最重要的。

许可证

麻省理工学院