ripwire 怎么用
给编码 AI 用的「代码上下文检索」命令行:让模型在你读代码前先有一张地图,而不是把它扔进仓库、让它一通乱翻。
更新于 2026-09-15
本文校对于 ripwire @ 0.6.0 · 仓库 main 分支(2026-09-15 取)· redhat-et/ripwire · INSTALL.md · README.md
0030 秒速览
先记住三句
- 它是 ripgrep 的近亲,目的不同:ripgrep 在代码里搜文本;ripwire 把代码结构压成一段给 AI 看的内容,少花 token、少跑弯路。
- 单二进制、零依赖:一个
ripwire可执行文件,下载到本地就能跑,没有守护进程、没有索引服务、不用 API key。 - 接 AI 代理最省事的方式就一条命令:
ripwire wrap claude,剩下的它自己接好 Claude Code / Cursor / Windsurf 等。
5 分钟就能跑起来的最小路径
- 装一行命令(见 §04)。
- 在自己仓库里跑
ripwire . --max-tokens=3000,得到一份「压缩过的项目地图」。 - 把这条信息丢进 Claude / Cursor 的输入,让它基于地图回答、再去读具体文件。
关键数字
读完 §01 与 §08 就行——前者说明它不是 ripgrep 的替代品,后者用一张对照表把它跟 ripgrep 的边界划清。要用就跳到 §04。
01它是什么 / 不是什么
它不是什么
- 不是 ripgrep 的竞品。ripgrep 是一把很快的「在文本里搜关键词」的瑞士军刀;ripwire 是给编码代理搭的「先用一张地图替它定位、再去读文件」的脚手架。名字里有 wire,意思是「在仓库与代理之间拉一根细线」。
- 不是一个通用搜索引擎。它没有「全文索引」也没有「向量索引」——它内部用的是 SCIP(语言无关的代码索引协议)加上几路启发式检索(命名、调用关系、复杂度、churn 频率等),按问题「拼」出一段上下文。
- 不是 IDE 插件。它本身是一个命令行(CLI)和一个 MCP 服务器(MCP,就是 Model Context Protocol,AI 代理用来「插外部工具」的标准协议,类似 USB-C)。VS Code / Cursor 直接通过 MCP 接入,不需要装插件。
它是什么
一句话定位,官方原文:
"The ripgrep of AI context. Give your coding agent a map before it reads the repo."
—— ripwire 仓库副标题
展开来说,它做的具体事有四件:
- 结构化定位:给你一个仓库里所有函数、类、模块的清单——比「在 github 里 @ 它」便宜得多。
- 调用图:谁调用了
foo、foo又调用了谁、能生成 HTML 给你看(像 Django migrations 那个例子里那样)。 - 质量评估:六个互相独立的「证据家族」(
structural shape、lexical naming、syntactic-confusion idioms、git churn history、cross-file colocation、non-local mutable state)给一段代码从结构、命名、易混写法、变更频率、跨文件聚类、跨函数可变状态六个角度看「代码味儿」。 - 代理护栏:用
--scan-skill之类的命令扫描技能文件,把行为含糊、有越权风险的脚本捞出来提醒。
它是给 AI 看的——人也读得懂,但读起来没 ripgrep 那么直接。如果你只是想在本地手搜代码、不打算喂给 AI,多数情况下 rg(ripgrep 本体)就够了。ripwire 适合的姿势是「让 AI 替你用它」。
它的几个关键「零」,按官方介绍
- 零依赖:所有库都 vendored(内嵌进二进制),离线也能编译。
- 零配置:开箱即用,不需要
.ripwirerc,命令拿到就跑。 - 零状态:没有守护进程(daemon,没有常驻后台的程序)、没有索引服务、没有嵌入模型、不用 API key。
02七大家族
ripwire 的命令按用途分成七组(原文:「七家族」,共 179 个长标志)。这不只是记忆口诀——你打开 --help 看到的也是这个分组。
速查表(见 §07 也有完整版)
| 家族 | 主要干什么 | 举两个常见 flag | 什么时候用 |
|---|---|---|---|
understand(理解一个陌生的仓库) |
把整库结构抽成一段可读摘要 | --max-tokens、--for |
新加入项目第一天 |
navigate(导航 / 答一个问题) |
按任务把相关片段聚起来 | --callers、--recall |
代理想找「什么做什么的」 |
zoom(伸缩细节梯子) |
在同一处不断下钻 | --expand、--impact |
从函数下钻到调用图 / 反向调用 |
assess(评估质量 / 结构) |
六个独立证据家族打分 | --quality-panel、--hotspots |
提交前 / PR review |
self-diagnosis(自我诊断) |
看自己哪里配错了 | --doctor、--lint |
跑 ripwire 失败先跑这个 |
security(安全) |
扫技能文件 / 越权风险 | --scan-skill、--scan-skills |
接 AI 代理前必跑 |
knobs(旋钮 / 模式) |
调整输出形态 | --rank-by=rrf、--color-by=cx |
想换排序 / 换配色时 |
第一版 README 的家族表里就写了 "understand a codebase cold" 等七条;这七条是命令的组织原则,不是子命令(subcommand,就是命令里那个 install、wrap 之类的第二段)。所以家族是「按目的分类」,子命令是「按动作分类」,不要混。
03装上
最小一条命令(macOS / Linux)
下面是 INSTALL.md 给出的官方安装方式,绝大多数情况下你只要敲这一行就够了:
# 下载脚本会自己挑适合你架构(arm64 / x86_64)的二进制
RIPWIRE_REPO=redhat-et/ripwire bash -c "$(curl -fsSL https://raw.githubusercontent.com/redhat-et/ripwire/main/scripts/install.sh)"
# 默认装到 ~/.local/bin,把这行加到你的 ~/.zshrc(或 ~/.bashrc)
export PATH="$HOME/.local/bin:$PATH"
ripwire --version # 验证:应打印出 0.6.0 或更新的版本号
输出长得像 ripwire 0.6.0 (linux x86_64, build …) ,看到版本号就算装好了。
装完之后再跑一步「体检」
这步是 ripwire 自己推荐的、能挡掉 80% 安装问题的小命令:
ripwire . --doctor # 检查二进制、skills 链接、hooks 是否就位
输出会说清楚「没问题 / 哪一步失败 / 怎么修」。先跑它再开始用,是最稳的姿势。
Apple Silicon(M 系列芯片)能用吗?
能。官方原文是「one self-contained binary for macOS and Linux (arm64 and x86-64)」。这里的两个词都指「CPU 指令集」(CPU 听懂的「机器语」格式)——arm64 是 Apple 自家 Mac 和多数移动设备用的(也叫 AArch64);x86-64 是 Intel/AMD 的台式机 / 服务器用的(也写作 x86_64)。Apple Silicon 走 arm64 这条,上面那条命令直接装。
想离线装(公司内网 / 没代理)
从源码编译,所有依赖都内嵌(vendored),不需要联网拉库:
git clone https://github.com/redhat-et/ripwire.git
cd ripwire
cmake -S . -B build # 需要 CMake 3.24+
cmake --build build -j # 需要 C++23 编译器:clang 16+ / AppleClang 15+ / gcc 13+
./build/ripwire --version
把 cmake -S . -B build 改成 cmake -S . -B build -DFETCHCONTENT_FULLY_DISCONNECTED=ON,再 cmake --build build -j,即可在无法访问互联网的机器上完整编译(依赖都是 vendored)。
想锁特定版本
把这条塞到环境变量里:
RIPWIRE_VERSION=v0.5.0 RIPWIRE_REPO=redhat-et/ripwire bash -c "$(curl -fsSL ...)"
以后想升级,再跑同一行(不设 RIPWIRE_VERSION 就拿最新版)就更新。
想跳过确认提示 / CPU 检查(非默认机器)
另外两个常被用到的安装变量:
RIPWIRE_INSTALL_YES=1:跳过确认提示。RIPWIRE_SKIP_CPU_CHECK=1:跳过 x86-64-v3 CPU 检查。x86-64-v3 是 x86-64 指令集下的一个微架构版本(再加一些新指令),2015 年后的 Intel/AMD 基本都支持;如果你的机器更旧、或装了更老指令集的 Linux 发行版,配上这个变量可以绕过版本检查(旧机器上二进制仍然会先跑自检再装)。
环境变量速查
| 变量 | 作用 |
|---|---|
RIPWIRE_REPO | 必填:取 redhat-et/ripwire。 |
RIPWIRE_VERSION | 锁特定 tag,比如 v0.5.0。默认取最新发布。 |
RIPWIRE_INSTALL_PREFIX | 装到别的目录(默认 ~/.local,二进制落在 <prefix>/bin)。 |
RIPWIRE_INSTALL_YES=1 | 跳过确认提示。 |
RIPWIRE_SKIP_CPU_CHECK=1 | 跳过 x86-64-v3 检查。 |
RIPWIRE_NO_ACTIVATE=1 | 只放 skill 不激活。 |
04起步四条命令
装好之后,README 里给出的 quickstart 长这样——四条命令覆盖四种最常见的「我想用它做什么」。
# 1) 给整库建一份「可喂给 AI 的地图」,按重要度排序,截到 3000 token 左右
ripwire . --max-tokens=3000
# 2) 带任务:「我在做 incremental cache invalidation」,挑出真正相关的部分
ripwire . --for="incremental cache invalidation"
# 3) 查某个函数的调用方(谁调过 someFunction)
ripwire . --callers=someFunction
# 4) 提交前的「测试门槛」自检
ripwire . --test-gate
命令 #1 是新手最该先跑的一条
它默认输出是一段结构化的仓库地图(struct / defs 之类),长度被压在 3000 token——刚好是大多数对话窗口(context window,就是模型一次能同时看到的最大文本量)的舒适上限。把这段输出原样贴在 Claude / Cursor 的输入里,再问「请用这段代码回答我的问题」,模型一开始就带着地图推理,比让它空进来读到满要省得多。
「reflex flags」——四个自动化场景的快捷旗
ripwire 还有四个被官方称作「reflex flags」的、专门面向代理工作流的旗:一敲就走。
| flag | 它做的事 |
|---|---|
--from-trace=FILE |
从一份运行 trace(追踪日志,记录程序一步步走了哪些函数、读了哪些文件)反向生成仓库导航。 |
--edit-check=SYM |
把对 SYM 的改动前置评估一遍——影响面、未跑到的测试、易踩的耦合。 |
--merge-scout=REF1,REF2 |
两个分支合并前先派一只「侦察兵」过去,把差异点的上下文打印出来。 |
--pack-task="…" |
把一个具体任务打包成「给代理吃的一份上下文」,自带排序与 token 预算。 |
ripwire 仓库里把这套旗称作 reflex(反射)——意思是「给代理装一条神经:碰到这种场景,不需要再去查 --help,闭眼敲这条旗就行」。不用背,看一眼 §07 的速查表即可。
05几个真正适合用它的场景
AI 代理进一个陌生仓库之前
让代理不直接从「Read every file」开始,而是先用 ripwire . --max-tokens=N 拿一份地图。这是 ripwire 的头号卖点。
PR review / 提交门禁
把 --test-gate 和 --quality-delta(看本次改动在六个证据家族上的变化)挂在 CI 上。CI 拒绝就需要修。
复盘一段历史变更
想知道「去年重构的那批函数现在被谁调用」,跑 --callers / --impact。
扫技能文件的安全风险
代理要执行一个 skill(技能,就是预先打包好的一套动作),先用 --scan-skill PATH 看它会不会做越权事。
调试一个不熟悉的库
把第三方库(比如 Django migrations)当作输入,传 --html=map.html,得到一张自包含的调用图,浏览器打开看:
ripwire path/to/django/db/migrations \
--rank-by=rrf --top-k=120 \
--color-by=cx --html=map.html
open map.html # macOS 上直接打开
得到的图可以按「复杂度(cx)」「变更频率(churn)」「语言(lang)」「社区热度(community)」「是否被测试覆盖(tested)」五个维度上色。同一份图,换一维就看到不同的人间真相:
一眼看到「像意大利面一样」的函数——圈复杂度(cyclomatic complexity)越高颜色越深。适合找要拆的复杂函数。
一眼看到「三个 sprint 内被反复改」的热点——热点往往意味着「当时讨论没讨论清楚」。适合复盘、改文档优先级。
06接进 Claude Code / Cursor
最省事:ripwire wrap
这是给「我只想装上让它干活」的人留的入口。一行命令,ripwire 自己去认识你机器上已经装好的代理。
# 接 Claude Code(最常见的 Claude 官方 IDE 插件名)
ripwire wrap claude
# 或:自动扫描你机器上已装的代理(Claude Code / Cursor / Windsurf / Gemini / opencode / aider)
ripwire wrap --all
# Codex CLI 走另一条路
bash skills/install.sh --codex
上面两条命令做了什么:ripwire 把它的 MCP 服务器注册到你选的那个代理里,让代理在需要「读仓库之前先建地图」的时候自动调用 ripwire——你不用再手动命令。
它支持的代理名单(官方)
截至 0.6.0:Codex、Claude Code、Cursor、Windsurf、Gemini、opencode、aider——共 7 个生态接入点(README 原文:「Codex, Claude Code, Cursor, Windsurf, Gemini, opencode, aider」)。
装完不知道有没有装对?
ripwire wrap --all --dry-run # 看会发生什么而不真改
ripwire . --doctor # 检查 skill / hook 状态
wrap 默认会激活 ripwire 的 skill(让代理自动启用)。如果你只想先看下它会改哪些东西,加 --dry-run。另外安装时用 RIPWIRE_NO_ACTIVATE=1 可以只放 skill 不激活。
07flags 速查(一页纸)
179 个长标志没法背,下面这张表把「家族 / 干啥的 / 常见搭配 / 别当什么用」四列摆齐。删掉这一节,读者以后还得重读 §02–§06 才能找到某个东西——这是上手件,留着。
| 家族 | 代表性 flag | 干啥的 | 别当什么用 |
|---|---|---|---|
| understand | --max-tokens=N | 压到 N token 输出 | 别指望它能全仓库精排——超出 N 会被截断 |
--for="..." | 任务聚焦式检索 | 别把任务描述写得过大;越具体越准 | |
--pack-task="..." | 把任务打包成代理上下文 | 别忘了引号;shell 里的双引号要转义 | |
| navigate | --callers=SYM | 看谁调用了 SYM | 同名符号会被同时列出;想精准得配合 --lang |
--recall | 按代理上次的输入相关性回查 | 仅与代理联用时有意义,单独跑效果弱 | |
--pr-context | 为 PR 评论组装上下文 | 需要 git 历史里有 origin | |
| zoom | --expand=SYM | 展开一个符号的定义与体 | 别指望看到宏展开;它看的是解析后 |
--impact=SYM | 看改 SYM 影响到的下游 | 动态调用(如反射)会被低估——这是静态分析的硬边界 | |
--from-trace=FILE | 从运行 trace 反查上下文 | FILE 格式要和它支持的对得上(写一行会告诉你) | |
| assess | --quality-panel | 六个独立证据家族同时打分 | 别只看一个家族;六个互相独立是卖点 |
--hotspots | 按变更频率排热点 | 需要 git 历史里有一定提交量;新仓库看不出来 | |
--quality-delta | 本次改动相对基线的质量变化 | 基线要先扫一遍 | |
| self-diagnosis | --doctor | 装完跑一遍排错 | 这是工具对自己;不是看仓库健康度 |
--lint | 扫 ripwire 自己支持的语言问题 | 不是替代 eslint / clippy | |
--naming-consistency | 命名一致性检查 | 大型代码库里最有用 | |
| security | --scan-skill PATH | 扫一个 skill 文件的风险 | 不替代安全团队的代码审计;只对 skill 写作者格式 |
--scan-skills | 扫整个 skill 目录 | CI 里跑比较合适 | |
| knobs | --rank-by=rrf | 用 RRF(多路融合排序)合并多路检索结果 | 别和单路 flag 撞了;它默认开了 RRF |
--color-by=cx|churn|lang|community|tested | HTML 图的上色维度 | 只能配 --html 一起用 | |
--top-k=N | 最多返回 N 个节点 | 太少丢上下文;太多 token 爆 |
不用记。摸熟上面表格里这十几个就够了——剩下的是「--help 搜索」级别的细则。官方明确说「--help 是权威来源」,本文不抄清单。
08它和 ripgrep 到底差在哪
这里很多新手会搞混——名字里都带 rip、都是命令行、都要在仓库里跑。下面这张对照表把它们的边界划清。删掉这一节,读者下次在工具选择时刻还是会按"看着像所以差不多"判断,照着那判断要踩一次坑。
| 维度 | ripgrep(rg) |
ripwire(ripwire) |
|---|---|---|
| 主要用户 | 人 | AI 编码代理(或让人写代理调用) |
| 输入是 | 文本模式(正则、字符串) | 路径 / 任务描述 / 函数名 |
| 内部用 | RustScan——纯文本扫描 | SCIP 索引 + 多路启发式检索 |
| 输出是 | 匹配的行 + 文件名 + 行号 | 结构化上下文(带 token 预算、按相关度排) |
| 要不要索引 | 不需要,每次现扫 | 需要,0.25–0.45 秒建一次 |
| 状态 | 零状态 | 零状态(连索引都是临时的) |
| 能否生成 HTML | 不能 | 能(--html=map.html) |
| 接 AI 编辑器 | 不能 | 能(MCP 服务器 + wrap) |
| 写语言 | Rust | C++23 |
它们各自适合什么
- 「给我找出包含
TODO且不在 vendor 目录的所有 .go 文件」 - 重构后快速确认改完所有
foo→bar - 本地手搜一个 API 怎么调
- 让 Claude 进一个陌生仓库之前先建地图
- 提交前跑
--test-gate和--quality-delta - 复盘某函数被谁依赖、调用图长什么样
- 扫描 skill 文件看有没有越权行为
反过来也成立:ripwire 跑得再快,也不是 ripgrep 的替代——它的输出是给 AI 看的「结构化上下文」,人看起来反而不如 rg 直接。装 ripwire 不需要卸 ripgrep;它们是同事不是竞争关系。
09几个常见坑与边界
坑 1:以为它是索引服务
它没有守护进程,每次索引是临时的(一次 0.25–0.45 秒)。这意味着同一个仓库连跑两条命令,会重新索引两次。如果你要在 CI 里跑多次,把它放进 shell 脚本的同一行管道或单独步骤里,别用循环逐个调——索引的开销会叠加。
坑 2:以为 token 越多越好
把 --max-tokens 拉到 8000、9000 听起来信息更多,但超出现实对话窗口的内容模型读不到一半——浪费钱。3000 是经验值。任务复杂再用 --pack-task 分阶段。
坑 3:把 --quality-panel 当 CI 红线
六个证据家族每一个都有其视角。CI 拒过一次就合并失败?把六个家族的阈值调得合适;新代码首次过 review 时往往是名声最大的时候。
坑 4:以为 --scan-skill 是「恶意代码扫描器」
它扫的是 ripwire 支持的 skill 文件写法——比如是否含糊地请求权限、是否声明了边界。它不替代安全团队的代码审计。
边界 1:不支持 Windows
官方原文只覆盖 macOS 和 Linux(arm64 + x86-64)。Windows 用户要么跑 WSL2,要么等到官方加。
边界 2:动态调用 / 反射被低估
SCIP 与类似的静态分析(只读代码不运行代码的那种)对动态派发(运行时才决定调哪个函数那种情况)天然不可见。--impact 在 Python / Ruby / JS 这种反射重的语言里会有盲区——解决办法是跑 --from-trace,把运行时的 trace 喂给它。
边界 3:版本号变了命令语义就要重新核
179 个长标志意味着你不能背名字。装新版之后先跑 --doctor 再用熟悉的命令;README 也明说「--help 是权威来源」。
10最小例子:把 Claude Code 接到一个本地仓库
下面这段是个能完整走通的最小流程——装 ripwire → 接 Claude Code → 在 Claude 里先让它读仓库地图、回答问题。复制就能跑。
前置
- macOS 或 Linux(含 Apple Silicon 的 Mac)
- 已经装上 Claude Code(命令行)
- 能在终端里
curl到 raw.githubusercontent.com
三步
在终端敲:RIPWIRE_REPO=redhat-et/ripwire bash -c "$(curl -fsSL https://raw.githubusercontent.com/redhat-et/ripwire/main/scripts/install.sh)"
装完追加 export PATH="$HOME/.local/bin:$PATH" 到 ~/.zshrc,然后 source ~/.zshrc。验证:ripwire --version。
ripwire wrap claude——这条命令把 ripwire 注册到 Claude Code 的 MCP 列表里。再跑 ripwire . --doctor,看到 skills active 之类字样就算通了。
进入你想让它读的仓库目录,启动 Claude Code。先问一句「先给我一份仓库地图」,Claude 会自动调 ripwire 拉一段上下文;接着再问具体问题。观察 Claude 是否少了「我先读一下这些文件…」这一步——有的话说明地图到位了。
一条命令看效果(不用 Claude)
cd your-project-repo
ripwire . --max-tokens=3000 | head -80 # 看仓库地图长什么样
ripwire . --callers=parseConfig # 查 parseConfig 的调用方
ripwire . --html=map.html --color-by=churn # 生成变更热点图
open map.html # macOS 上浏览器打开
挂到 CI 里
# CI 步骤(伪代码)
- run: RIPWIRE_REPO=redhat-et/ripwire bash -c "$(curl -fsSL ...)"
- run: ripwire . --test-gate
- run: ripwire . --quality-delta --base=origin/main
11常见问题
ripwire wrap --all 自动识别你机器上已装的代理。ripwire . --doctor——它会指明二进制 / skills / hooks 哪里出问题。再确认 $PATH 里有 $HOME/.local/bin。--help 输出为准。README 也明说「--help 是权威来源」。版本变动后,先 --doctor,再继续用熟悉的 flag。--help 搜。99一句话总结
ripwire 是一根「在仓库与编码 AI 之间拉细线」的命令行 + MCP 服务器——单二进制、零依赖,把仓库结构压成一段可控 token 的上下文,配合 Claude Code / Cursor / Codex 等六个生态接入点,让 AI 从一开始就有地图而不是进去乱翻。
98参考来源
- redhat-et/ripwire — 仓库主页(0.6.0 概述、七大家族、品牌 tagline "The ripgrep of AI context")
- INSTALL.md(预编译安装命令、六个环境变量、离线构建步骤)
- README.md(Quickstart 四条命令、reflex flags、
--quality-panel六证据家族原文、--html调用图示例) - scripts/install.sh(安装脚本本体)
工具仍在快进,这次校对对应 main 分支上的 0.6.0(2026-09-15 取)。--max-tokens=3000、--html=map.html、ripwire wrap claude 这些命令级别的内容在 0.5.x 与 0.6.x 是一致的;装新版之前,先跑 --doctor,再看 --help——这两条是 README 自己标榜的「权威来源」。本文涉及的版本号、flag 名称、官方支持的代理清单等可核对项约 15 处,建议每两个月左右用 /learn-refresh 跑一次增量核对。