osgrep
用自然语言搜索本地代码库,为 AI 编程助手提供语义级代码理解能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言搜索本地代码库,为 AI 编程助手提供语义级代码理解能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
osgrep 是一款完全本地运行的语义搜索工具,用自然语言替代 grep 精确查找代码库中的概念、调用链和架构模式,专为 AI 编程助手(Claude Code、OpenCode)打造。
传统的代码搜索依赖关键词匹配——你必须知道你要找的变量叫什么名字,才能用 grep 把它找出来。但现实开发中,程序员更常遇到的问题是:"我想找处理认证的逻辑在哪里,但我不知道具体函数名"。这类模糊查询,用 grep 几乎无法处理。
更深层的问题是:当你面对一个陌生的代码库时,你甚至不知道自己该找什么——你需要的是理解代码结构,而不只是搜索字符串。
osgrep 的诞生正是为了解决这个问题。作者 Ryandonofrio 在开发 AI 编程助手插件的过程中发现,现有的语义搜索工具要么依赖云服务(有隐私风险),要么速度太慢,无法集成到日常开发流程中。于是他决定自己造一个。
osgrep 的核心能力是语义向量检索。当你输入 osgrep "where do we handle authentication?" 时,它会:
与传统 grep 的本质区别:你不需要知道具体变量名,只需要描述你想做什么。
# grep(传统)
grep -r "auth" src/ # 你必须知道"auth"这个关键词
# osgrep(语义)
osgrep "where do we handle authentication?" # 自然语言描述意图
osgrep trace 命令是另一个杀手级功能。当你想了解一个函数的调用链时:
osgrep trace "processPayment"
它会告诉你:
这对于理解遗留代码、进行影响分析(Impact Analysis)非常有价值。对于 AI Agent 来说,理解调用链意味着它不会盲目修改一个被多处引用的核心函数。
osgrep 的索引过程会自动对代码块进行角色分类:
这个分类结果会直接影响搜索排序,让 AI Agent 优先看到关键的编排逻辑,而不是被海量的类型定义淹没。
osgrep 不仅仅是一个独立 CLI 工具,它还提供了三大 AI 编程助手的原生插件:
| 插件 | 支持的AI工具 | 功能 |
|---|---|---|
| Claude Code Plugin | Claude Code | 自动在后台启动 osgrep serve,搜索结果自动注入对话 |
| OpenCode Plugin | OpenCode | 同上 |
| MCP Server | 通用 MCP 客户端 | 标准 Model Context Protocol 接口 |
这意味着 AI 编程助手在回答"这个代码库是如何处理 X 的"这类问题时,可以直接调用 osgrep 的搜索结果,而不只是靠训练数据记忆。
osgrep skeleton 可以为一个文件生成只含签名的"骨架视图":
// 输入:osgrep skeleton src/lib/auth.ts
// 输出:
class AuthService {
validate(token: string): boolean {
// → jwt.verify, checkScope, .. | C:5 | ORCH
}
}
这对于快速了解一个大文件的结构特别有用,比逐行阅读效率高得多。
osgrep 的架构设计处处体现"本地优先"的理念:
| 组件 | 技术选型 | 说明 |
|---|---|---|
| Embedding 模型 | granite-embedding-30m-english (ONNX) | 384维向量,~150MB,下载到本地 |
| ColBERT 重排序 | mxbai-edge-colbert-v1 (ONNX, int8) | 48维向量,速度快 |
| 向量数据库 | LanceDB(本地 SQLite 底层) | 每个仓库独立索引,存储在 .osgrep/ |
| Arrow 格式 | apache-arrow | 列式存储,加速向量查询 |
使用 web-tree-sitter 对代码进行语法解析,智能切分代码块:
Embedding 和重排序计算运行在独立子进程池中(而非 Node.js Worker Threads):
"We use a custom Child Process pool instead of Worker Threads to ensure the ONNX Runtime segfaults do not crash the main process."
这是非常务实的工程决策——ONNX Runtime 偶尔会崩溃,独立进程可以隔离故障,不影响主 CLI 体验。
README 宣称:
背后优化手段包括:
osgrep 的安装极其简单:
# 1. 安装(npm 全局包)
npm install -g osgrep
# 2. 可选:预下载模型(~150MB,不预下载首次使用时自动下载)
osgrep setup
# 3. 进入你的代码库,自动索引
cd my-project
osgrep "how is the database connection pooled?"
第一个搜索命令会自动触发索引过程,后续搜索通过 osgrep serve(后台守护进程)实现 <50ms 响应。
适用人群:
局限性:
osgrep 仓库当前(2026年6月):
值得关注的是,osgrep 的定位与 GitHub Copilot、Cursor 等 IDE 集成工具不同——它不依赖 IDE,也不需要云端 API,是一个完全独立运行的 CLI 工具。这种设计让它可以被任何 AI 系统通过标准化接口(MCP Server)调用。
| 维度 | 评分 | 说明 |
|---|---|---|
| 功能创新 | ★★★★☆ | 语义搜索+调用链追踪+角色检测,差异化明确 |
| 工程质量 | ★★★★☆ | TypeScript 完整类型提示,vitest 测试,biome 格式 |
| 文档质量 | ★★★★☆ | README 详细,命令选项说明完整 |
| 部署体验 | ★★★★★ | npm 一键安装,零配置,跨平台 |
| 隐私安全 | ★★★★★ | 100% 本地运行,无云端依赖 |
| 生态扩展 | ★★★☆☆ | 已有 Claude Code/OpenCode/MCP 插件,生态初期 |
一句话评价:osgrep 是 AI 编程助手的"本地知识检索引擎",用 150MB 的模型换取精确的代码库理解和显著的 token 节省,是一个工程务实、功能聚焦的开源工具。