你有没有这种经历:
明明记得 star 过一个很好用的工具,但真正需要用的时候却怎么都找不到。翻了半天收藏夹,全是一年前随手点的项目,名字完全对不上号。
或者更绝一点——打开 GitHub,面对密密麻麻的数千个 star,脑子一片空白。
这不是你的记性不好,而是 GitHub 的 star 功能从来就不是为“找回”设计的。
问题出在哪?
GitHub 的 star 本质上更像一个书签功能,它只能告诉你“我收藏过这个”,却没法帮你回忆“我为什么收藏它”。
官方提供的筛选能力也比较有限:按语言、按时间排序,或者手动加 List 分类。但现实是,谁会在 star 的那一刻认真做归档整理呢?
于是就很容易出现这些场景:
- 想找一个“用 Rust 写的高性能 key-value 存储”,只能靠肉眼扫描
- 想起一个项目“好像是做 React 状态管理的,但不是 Redux”,却完全没有线索
- 翻到两年前 star 的项目时,已经不记得它到底是干什么的了
我做了什么
最近我写了一个叫 starepo 的命令行工具,专门解决这个问题。
它的核心思路很简单:把你所有 star 过的仓库拉到本地做向量化,然后通过语义搜索来检索它们。
换句话说,你可以直接像问一个“记性很好”的朋友一样,用自然语言去找项目:
starepo search "用 Rust 写的高性能 key-value 存储"
starepo search "不需要服务器的 React 状态管理"
starepo search "命令行的 AI 编程助手"
它会综合语义理解和全文检索,把最相关的结果排在前面。
更重要的是,整个过程几乎零配置,也不需要任何 API Key。 不用 OpenAI Embedding API,不用额外接入某个 LLM 服务,向量模型完全本地运行,GitHub 授权完成后就能直接使用。
技术上是怎么做到的
整个方案不依赖云服务,完全在本地运行。
向量嵌入使用的是 Xenova/bge-m3,这是一个支持多语言的开源模型,1024 维,首次运行大约会下载 23MB 的模型文件,后续即可离线使用。
存储使用的是 LanceDB,这是一个专门为向量搜索设计的本地数据库。它的优点之一是无需复杂编译,直接通过 npm 安装即可使用。
搜索策略则分成三层:
- 关键词搜索(FTS):基于倒排索引,速度最快,适合精确词语匹配
- 向量搜索:把查询语句也转成向量,用余弦相似度找最接近的仓库
- 混合搜索:合并两路结果、去重,并按相关性重新排序
这样一来,无论你记得的是关键词,还是只记得一个大概用途,都能更容易把目标项目找出来。
用起来有多简单
安装只需要一行命令:
npm install -g starepo
# 或者不安装,直接用 npx
npx starepo <命令>
第一次使用主要分三步:
# 1. GitHub 授权(Device Flow,不需要手动填 Token)
starepo auth
# 2. 同步所有 star 并生成向量(一次性操作)
starepo sync
# 3. 开始搜索
starepo search "你想找的东西"
同步完成之后,后续搜索基本就是即时响应。
如何通过 Skill 集成?
如果你正在使用 Claude Code,或者其他支持 skills.sh 的 AI 编程工具,还可以一键安装 starepo skill:
npx skills add yangyang0507/starepo
安装之后,你甚至不需要自己记命令。直接告诉 AI Agent:
帮我在 star 里找一个 XXX
它就可以自动调用 starepo 帮你完成检索。整个过程不需要切窗口,也不需要手动去 GitHub 翻收藏夹。
如何通过 MCP 集成?
starepo 还实现了 MCP 服务器,可以接入 Claude Desktop、Cursor 这类 AI 工具。
配置也非常简单,几行 JSON 就够了:
{
"mcpServers": {
"starepo": {
"command": "npx",
"args": ["starepo", "serve"]
}
}
}
完成配置后,你可以直接在对话框里问 Claude:
帮我找一下我 star 过的、和 LLM 推理加速相关的项目
Claude 会调用 starepo 提供的工具,直接把结果返回给你。这样一来,GitHub star 不再只是一个静态收藏夹,而是变成了一个可搜索、可对话的知识库。
最后
数年的 star,不应该就这样沉在收藏夹里吃灰。
项目已经开源,感兴趣的话可以看看:
如果你觉得它有用,也欢迎顺手点个 star——这一次,你应该不会再忘记它放在哪了。
本文涉及的所有代码和数据均在本地运行,不会上传任何个人数据。