osgrep
osgrep 是一款专为 AI 编程助手打造的本地化语义搜索工具,旨在让开发者像使用传统 grep 命令一样高效地通过自然语言查找代码。它解决了传统关键词搜索无法理解代码逻辑和概念的痛点,能够精准定位如“事务在哪里创建”这类语义问题,而非仅仅匹配字符串。
该工具特别适合需要频繁与 AI Agent 协作的软件开发者和工程师。其核心亮点在于完全本地运行,利用 onnxruntime-node 在本地生成向量索引,确保代码数据隐私安全且无需联网。osgrep 具备独特的角色检测能力,能区分“编排逻辑”与“类型定义”,并支持调用链追踪(Call Graph Tracing),帮助开发者快速理清函数间的上下游依赖关系。此外,它能自动为每个仓库建立独立索引,无缝切换项目。通过与 Claude Code 或 Opencode 等插件集成,osgrep 可显著减少 AI 模型的 Token 消耗并提升响应速度,是提升代码理解和维护效率的得力助手。
使用场景
某后端工程师接手了一个缺乏文档的遗留微服务项目,急需理清复杂的认证逻辑以便修复一个安全漏洞。
没有 osgrep 时
- 搜索效率低下:只能使用传统
grep进行关键词匹配,若代码中用词是 "auth" 而搜索词是 "login",则完全无法定位相关逻辑,需反复尝试不同关键词。 - 上下文缺失:找到函数定义后,不清楚哪些模块调用了它,必须手动逐层向上追溯调用链,耗时且容易遗漏关键路径。
- 噪音干扰严重:搜索结果混杂了大量仅包含关键词但无关紧要的注释或变量名,难以区分核心业务逻辑(Orchestration)与基础类型定义(Definition)。
- Token 消耗巨大:为了弥补搜索不准的问题,不得不将大量无关代码文件投喂给 AI 助手,导致 LLM Token 快速耗尽且响应变慢。
使用 osgrep 后
- 语义精准定位:直接询问“哪里处理了用户认证?”,osgrep 基于语义理解而非字符串匹配,瞬间定位到即使变量名不相关的核心认证模块。
- 自动依赖追踪:使用
osgrep trace命令,一键生成完整的调用图谱,清晰展示谁调用了认证函数以及它依赖了哪些下游服务,无需人工梳理。 - 智能角色过滤:利用角色检测功能,自动区分并优先展示高层业务编排逻辑,屏蔽底层的类型定义噪音,让开发者直击要害。
- 降本提速显著:凭借本地化索引和精准检索,仅向 AI 提供高相关性代码片段,实测节省约 20% 的 Token 用量并将排查速度提升 30%。
osgrep 通过将自然语言语义搜索与调用链分析引入本地开发流,彻底改变了开发者在大型代码库中“大海捞针”的低效模式。
运行环境要求
- 未说明
- 支持 Node.js 运行的平台 (通常包括 Linux
- macOS
- Windows)
- 不需要 GPU
- 使用 onnxruntime-node 进行 100% 本地 CPU 推理
未说明 (设计为在笔记本电脑上响应灵敏,使用有界并发)

快速开始
一种像 grep 一样工作的自然语言搜索工具。快速、本地化,专为编码智能体打造。
- 语义性: 查找概念(“事务在哪里创建?”),而不仅仅是字符串。
- 调用图追踪: 使用
trace命令映射依赖关系,查看谁调用了什么。 - 角色检测: 区分
ORCHESTRATION(高层逻辑)和DEFINITION(类型/类)。 - 本地与私密: 通过
onnxruntime-node实现 100% 的本地嵌入。 - 自动隔离: 每个仓库都会自动获得自己的索引。
- 适配智能体: 原生输出包含符号、角色和调用图。
快速入门
安装
npm install -g osgrep设置(推荐)
osgrep setup会预先下载嵌入模型(约 150MB)。如果你跳过这一步,模型会在首次使用时自动下载。
搜索
cd my-repo osgrep "我们在哪里处理认证?"你的第一次搜索会自动为该仓库建立索引。 每个仓库都会自动隔离并拥有独立的索引。在不同仓库之间切换“无缝衔接”——无需手动配置。如果后台服务正在运行(
osgrep serve),搜索将通过热守护进程进行;否则会回退到按需索引。追踪(调用图)
osgrep trace "function_name"
查看哪些代码调用了某个函数(上游依赖),以及该函数又调用了哪些代码(下游依赖)。非常适合影响分析和理解代码流程。
要查找代码库中的符号:
bash osgrep symbols
在我们的公开基准测试中,osgrep 可以节省约 20% 的 LLM token,并提升 30% 的速度。
Claude Code 插件
- 运行
osgrep install-claude-code - 打开 Claude Code(
claude),并向它询问关于你代码库的问题。 - 强烈建议在使用插件前先对代码库进行索引。
- 插件的钩子会自动在后台启动
osgrep serve,并在会话结束时关闭它。Claude 会自动使用osgrep进行语义搜索,但也可以被主动引导使用。
Opencode 插件
- 运行
osgrep install-opencode - 打开 OC(
opencode),并向它询问关于你代码库的问题。 - 强烈建议在使用插件前先对代码库进行索引。
- 插件的钩子会自动在后台启动
osgrep serve,并在会话结束时关闭它。OC 会自动使用osgrep进行语义搜索,但也可以被主动引导使用。
命令
osgrep search
默认命令。使用语义含义搜索当前目录。
osgrep "数据库连接是如何池化的?"
选项:
| 标志 | 描述 | 默认值 |
|---|---|---|
-m <n> |
最多返回的结果总数。 | 25 |
--per-file <n> |
每个文件最多显示匹配结果数。 | 1 |
-c, --content |
显示完整内容块而非片段。 | false |
--scores |
显示每个结果的相关性分数(0-1)。 | false |
--min-score <n> |
过滤掉低于此分数阈值的结果。 | 0 |
--compact |
仅显示文件路径(类似 grep -l)。 |
false |
-s, --sync |
强制在搜索前重新索引已更改的文件。 | false |
-r, --reset |
重置索引并从头开始重新索引。 | false |
示例:
# 通用概念搜索
osgrep "API 速率限制逻辑"
# 深入挖掘(每个文件显示更多匹配)
osgrep "错误处理" --per-file 5
# 只给我文件
osgrep "用户验证" --compact
# 显示相关性分数并过滤低置信度匹配
osgrep "认证" --scores --min-score 0.5
osgrep index
手动为仓库建立索引。当你想预热缓存,或者在编辑器之外进行了大量更改时非常有用。
- 遵循
.gitignore和.osgrepignore文件规则(参见 配置 部分)。 - 智能索引: 只对代码和配置文件进行嵌入。跳过二进制文件、锁文件和压缩资源。
- 有限并发: 使用固定线程池,以保持系统响应能力。
- 语义分块: 对支持的语言使用 TreeSitter 语法解析器(TypeScript、JavaScript、Python、Go、Rust、C/C++、Java、C#、Ruby、PHP、JSON、YAML、Kotlin、Swift、Dart)。
选项:
| 标志 | 描述 | 默认值 |
|---|---|---|
-d, --dry-run |
查看哪些内容会被索引,而不实际进行更改。 | false |
-p, --path <dir> |
要索引的路径(默认为当前目录)。 | . |
-r, --reset |
删除现有索引并从头开始重新索引。 | false |
-v, --verbose |
显示带有文件名的详细进度。 | false |
--allow-fallback |
也索引没有 TreeSitter 语法支持的文件。 | false |
示例:
osgrep index # 索引当前目录
osgrep index --dry-run # 查看哪些内容会被索引
osgrep index --verbose # 观察详细进度(适合调试)
osgrep index --allow-fallback # 包括没有语法支持的文件
osgrep index --reset # 完全从头重新索引
osgrep serve
运行一个轻量级的 HTTP 服务器,并实时监控文件变化,使搜索结果始终驻留在内存中。
- 保持 LanceDB 和嵌入式工作进程常驻,以实现小于 50 毫秒的响应时间。
- 使用 chokidar 监控仓库,并在文件发生变化时增量地重新索引。
- 健康检查端点:
GET /health - 搜索端点:
POST /search,请求体包含{ query, limit, path, rerank } - 写锁文件:
.osgrep/server.json,记录port和pid。
选项:
| 标志 | 描述 |
|---|---|
-p, --port <port> |
监听的端口(未指定时自动递增) |
-b, --background |
在后台运行服务器并立即退出 |
端口选择优先级:
- 显式指定的
-p <port>标志 OSGREP_PORT环境变量- 自动从注册表中递增(上次使用的端口 + 1,如果没有服务器则使用 4444)
使用示例:
osgrep serve # 前台运行,端口 4444(或下一个可用端口)
osgrep serve --background # 后台模式,自动分配端口
osgrep serve -b -p 5000 # 在指定端口上后台运行
子命令:
osgrep serve status # 显示当前目录下的服务器状态
osgrep serve stop # 停止当前目录下的服务器
osgrep serve stop --all # 停止所有正在运行的 osgrep 服务器
示例工作流:
# 在多个项目中启动服务器
cd ~/project-a && osgrep serve -b # 在端口 4444 上启动
cd ~/project-b && osgrep serve -b # 在端口 4445 上启动(自动递增)
# 检查状态
osgrep serve status
# 完成后停止所有服务器
osgrep serve stop --all
Claude Code 会自动启动和停止此服务;通常情况下,您无需手动运行它。
osgrep list
列出所有已索引的仓库(存储)及其元数据。
osgrep list
显示存储名称、大小和最后修改时间。有助于查看哪些内容已被索引,并清理旧的存储。
osgrep skeleton
生成文件的压缩“骨架”,仅显示签名、类型和类结构,而省略函数体。
osgrep skeleton src/lib/auth.ts
输出:
class AuthService {
validate(token: string): boolean {
// → jwt.verify, checkScope, .. | C:5 | ORCH
}
}
模式:
osgrep skeleton <file>:对特定文件进行骨架化。osgrep skeleton <Symbol>:在索引中查找符号并对其所在文件进行骨架化。osgrep skeleton "query":搜索查询并对前几条匹配结果进行骨架化。
支持的语言: TypeScript、JavaScript、Python、Go、Rust、Java、C#、C++、C、Ruby、PHP。
osgrep doctor
检查安装健康状况、模型路径和数据库完整性。
osgrep doctor
性能与架构
osgrep 被设计为一台“好公民”式的机器:
- 有限并发: 分块和嵌入操作限制在小型线程池内(1–4 个线程),并通过限制批处理大小来确保笔记本电脑的响应能力。
- 智能分块: 使用
tree-sitter按照函数或类的边界分割代码,确保嵌入能够捕捉完整的逻辑块。 - 去重: 相同的代码块(如样板代码、许可证头)只会被嵌入一次并缓存,从而节省空间和时间。
- 语义拆分搜索: 分别查询“代码”和“文档”,以确保文档不会掩盖实现细节,然后使用 ColBERT 进行重新排序。
- 全局批处理: 生产者/消费者管道将分块与嵌入分离。文件可以并行分块,放入队列,以较大的批次进行嵌入,并批量写入 LanceDB。
- 仅锚点扫描与批量删除: 文件发现和过期清理只影响锚点行,过期或更改的路径通过单次
IN删除操作移除,以最小化 I/O 开销。 - 结构增强: 函数和类的分块会获得轻微的分数提升;测试和规范路径的权重则稍低,以便优先显示主要定义。
- 角色分类: 检测“编排”函数(复杂度高、调用多)与“定义”(类型或类)之间的区别,帮助代理程序确定阅读的重点。
配置
自动仓库隔离
osgrep 会根据以下规则自动为每个仓库创建唯一的索引:
- Git 远程 URL(例如
github.com/facebook/react→facebook-react) - 无远程的 Git 仓库 → 目录名加哈希值(例如
utils-7f8a2b3c) - 非 Git 目录 → 目录名加哈希值,以避免冲突
示例:
cd ~/work/myproject # 自动检测:owner-myproject
osgrep "API handlers"
cd ~/personal/utils # 自动检测:utils-abc12345
osgrep "helper functions"
存储会自动隔离——无需手动指定 --store 参数!
忽略文件
osgrep 在索引时会同时尊重 .gitignore 和 .osgrepignore 文件。您可以在仓库根目录下创建 .osgrepignore 文件,以排除额外的文件或模式。
.osgrepignore 语法:
- 使用与
.gitignore相同的模式语法 - 模式相对于仓库根目录
- 支持 glob 模式、否定(
!)和目录模式(/)
手动管理存储
- 查看所有存储:
osgrep list - 覆盖自动检测:
osgrep --store custom-name "query" - 清理旧存储:
rm -rf ~/.osgrep/data/store-name - 数据位置:
~/.osgrep/data
开发
pnpm install
pnpm build # 或 pnpm dev
pnpm format # biome 检查
故障排除
- 索引感觉过时? 运行
osgrep index来刷新索引。 - 结果奇怪? 运行
osgrep doctor来验证模型。 - 索引卡住? 运行
osgrep index --verbose查看正在处理的文件。 - 希望加快索引速度? 保持备用方案关闭(默认设置),以跳过不支持 TreeSitter 的文件。
- 需要全新开始? 删除
~/.osgrep/data和~/.osgrep/meta.json,然后运行osgrep index。
归属声明
osgrep 是基于 MixedBread 公司的 mgrep 构建的。我们承认并感谢原始架构理念和设计决策对本项目的启发。
详细归属信息请参阅 NOTICE 文件。
许可证
根据 Apache License, Version 2.0 许可。详细信息请参阅 LICENSE 和 Apache-2.0。
版本历史
v0.5.162025/12/09v0.5.152025/12/09v0.5.142025/12/09v0.5.132025/12/08v0.5.122025/12/08v0.5.102025/12/08v0.5.82025/12/07v0.5.72025/12/07v0.5.62025/12/07v0.5.52025/12/07v0.5.42025/12/07v0.5.32025/12/07v0.5.12025/12/06v0.5.02025/12/06v0.4.152025/11/29v0.4.142025/11/29v0.4.132025/11/28v0.4.122025/11/28v0.4.102025/11/27v0.4.92025/11/27常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器