面向Google编程CHARLES ZHANG

AI DAILY / 2026-09-27

按功能描述找代码:jevgrep CLI

dzhng/jevgrep

AI 编程实践GitHub · 2026-09-26

全文中文翻译 · AI 生成,仅供学习交流

dzhng/jevgrep

原文配图

jevgrep

通过询问代码的功能来查找代码。

编程代理(coding agent)在每个不熟悉的任务里,都要花一部分时间来定位正确的文件。

Jevgrep 给它们一个起点。你向代码仓库提问,jg 在一次标准输出(stdout)响应里,返回相关文件、阅读线索,还有逐字的源代码片段。

它用 Jev 来判断跨文件夹、文件和声明(declaration)的相关性。接下来的实现和测试,由你的编程代理接手。

npm install -g @dzhng/jevgrep
jg auth
jg skill
jg "How are telemetry events recorded and sent?"
./my-project

需要 Node.js 22+、macOS 或 Linux,外加一个 Vercel AI Gateway、TypeSafe 或 OpenRouter 的密钥。

用 jg 不需要单独装 Python、Bun 或 ripgrep。

提供商(provider)选择需要 0.3.0 或更新版本。旧版用 npm install --global @dzhng/jevgrep@latest 升级。

安装代理技能(代理设置所必需)

只装命令行工具(CLI)不够,你的编程代理不会被教会怎么用。

还得在代理工作的项目里把技能装上:

jg skill

安装程序会检测你用的编程代理(Claude Code、Codex、OpenCode 等),然后问装到哪里。加 --global 是用户级安装,加 --yes 是无人值守。这个技能会告诉代理什么时候该调 jg、怎么用返回的上下文,以及什么时候该用自己的常规工具补缺口。所需上下文心里有数的时候,它会跳过重复的检索。当前的仓库技能会先检查 jg 在不在,不在就顺手把 CLI 装上;认证还是得用你选定的那家提供商的密钥。技能安装程序本身不会替你配凭据。

jg skill 底层调用的是 skills CLI,需要 npm/npx 加网络访问。CLI 没装也行,直接跑那个安装程序:

npx skills add dzhng/jevgrep --skill jevgrep

0.1.0 里,jg skill 只会把自带的技能打印出来;这一版请改用 npx skills。

升级

目前没有 jg upgrade 命令。CLI 用 npm 升级:

npm install -g @dzhng/jevgrep@latest
jg --version

已安装的技能单独更新,重新跑一次 jg skill 就行。更新 npm 包不会覆盖项目里的技能文件。认证相关细节见包的使用指南。

从一个问题出发,带着源码离开

知道自己要理解什么行为,却不知道它藏在哪,那就用 jg:

jg "Where is authentication checked before a request reaches a handler?"
jg "How are database connections created, pooled, and closed?"
./src
jg "Which tests cover retry behavior when a request times out?"

Jevgrep 会探查仓库层级,再沿符合条件的分支往下走。它先用内容预览筛文件,再挑出有用的源码单元和它们周围的上下文。即便没法有把握地返回片段,它也会保留符合条件的文件位置,不会硬把每次搜索塞进一个固定的前两名。

摘要排在最前,接着是文件位置、阅读线索,以及带行号的精选源码。Python 和 TypeScript/JavaScript 支持声明解析,其他语言的文本走后备方案。这份输出是给代理用的证据,不是现成的答案,也不保证每个相关文件都翻到了。

可以看一份录好的输出示例。

如果你已经知道确切的符号或路径,那直接读文件,或者跑一次 rg(ripgrep)搜索就够了。Jevgrep 最拿手的是那种横跨多个陌生文件的问题。

我们的测量结果

在一次十任务的 SWE-bench 复现里,编程代理成本降了约 40%。

Sol(一种评估工具,译注:与 jevgrep 同作者的相关评估工具)的完整成本从 $7.62 降到 $4.52,含失败任务,不含 Jev 的开销。

用 jg 时解题率是 7/10,保存下来的基线(baseline)是 8/10。成本是省了,可质量也跟着掉了一档,不能据此说 jg 的解题质量持平或更好。

同一套修正后的运行时,更早一次跑过,那次解出 6/10,成本 $5.54。两次跑互相独立;基线只跑过一次,之后一直被复用在比对里,最终结果也没有合并到一起。两次都没过最初的质量门槛。样本是调过的 Python 子集,用 Sol 评估,所以别拿它去推断普遍能省多少、能跑多快,或者别的编程代理会怎么样。

完整结果和配对的轨迹分析里包含精确成本、失败任务,以及单独观察到的 Jev 费用。方法论见评估指南。

源代码、凭据与本地状态

搜索会把符合条件的源代码内容,通过认证时选定的那家提供商,发给 Jev。默认的文件系统过滤会尊重忽略文件(ignore files),把隐藏文件、依赖与构建产物、二进制文件,以及明显的凭据文件排除掉。这些过滤规则并不能担保所有敏感信息都已移除;选搜索根目录的时候,挑一个你愿意送出去的。

jg auth 会问你的提供商,然后把它的密钥存到权限只给所有者的配置文件里。

再跑一次 auth 会替换原有设置;搜索时一律用已保存的提供商。

jg doctor 用合成输入(synthetic input)做检查。旧版只存了密钥但没记提供商的,依然按 Vercel 密钥处理。通过环境变量设置的凭据和端点覆盖不再生效;以前要是靠这些方式跑的,请重新跑一次 jg auth。

评估答案默认会在本地缓存。CLI 把输出直接写到标准输出,不生成报告文件。缓存控制、搜索覆盖、未完成结果的行为,请用 jg --help。

开发

仓库用 TypeScript、Bun workspaces 和 Turborepo。从一个 checkout 开始:

bun install --frozen-lockfile
bun run dev --help
bun run verify

验证包括对已安装的 Node-only 包跑 Docker 测试。检索、解析、缓存与失败处理背后的设计思路,可以从架构与实现记录开始翻起。

发布指南讲了怎么通过 tag 触发 npm 发布,以及如何核对发出去的包是否完全一致。

MIT。

插图与生成提示。