🟡 进阶

ripwire 怎么用

给编码 AI 用的「代码上下文检索」命令行:让模型在你读代码前先有一张地图,而不是把它扔进仓库、让它一通乱翻。

更新于 2026-09-15

本文校对于 ripwire @ 0.6.0 · 仓库 main 分支(2026-09-15 取)· redhat-et/ripwire · INSTALL.md · README.md

7
命令家族
179
长标志
24
支持的编程语言
~10 MB
单个二进制

0030 秒速览

先记住三句

5 分钟就能跑起来的最小路径

  1. 装一行命令(见 §04)。
  2. 在自己仓库里跑 ripwire . --max-tokens=3000,得到一份「压缩过的项目地图」。
  3. 把这条信息丢进 Claude / Cursor 的输入,让它基于地图回答、再去读具体文件。

关键数字

0.25–0.45s索引一次仓库的耗时(中位区间)
6.6–16.5 MB内存峰值
~10 MB单二进制大小
7 / 179家族数 / 长标志数
6支持一键接的 AI 代理
如果你只想知道它能替你省什么

读完 §01 与 §08 就行——前者说明它不是 ripgrep 的替代品,后者用一张对照表把它跟 ripgrep 的边界划清。要用就跳到 §04。

01它是什么 / 不是什么

它不是什么

它是什么

一句话定位,官方原文:

"The ripgrep of AI context. Give your coding agent a map before it reads the repo."
—— ripwire 仓库副标题

展开来说,它做的具体事有四件:

  1. 结构化定位:给你一个仓库里所有函数、类、模块的清单——比「在 github 里 @ 它」便宜得多。
  2. 调用图:谁调用了 foo、foo 又调用了谁、能生成 HTML 给你看(像 Django migrations 那个例子里那样)。
  3. 质量评估:六个互相独立的「证据家族」(structural shape、lexical naming、syntactic-confusion idioms、git churn history、cross-file colocation、non-local mutable state)给一段代码从结构、命名、易混写法、变更频率、跨文件聚类、跨函数可变状态六个角度看「代码味儿」。
  4. 代理护栏:用 --scan-skill 之类的命令扫描技能文件,把行为含糊、有越权风险的脚本捞出来提醒。
新手最容易误解的一点

它是给 AI 看的——人也读得懂,但读起来没 ripgrep 那么直接。如果你只是想在本地手搜代码、不打算喂给 AI,多数情况下 rg(ripgrep 本体)就够了。ripwire 适合的姿势是「让 AI 替你用它」。

它的几个关键「零」,按官方介绍

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 想换排序 / 换配色时
「家族」这个名字是 ripwire 自己说的

第一版 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_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 预算。
「reflex flags」是什么的梗

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)」五个维度上色。同一份图,换一维就看到不同的人间真相:

按「cx」上色

一眼看到「像意大利面一样」的函数——圈复杂度(cyclomatic complexity)越高颜色越深。适合找要拆的复杂函数。

按「churn」上色

一眼看到「三个 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|testedHTML 图的上色维度只能配 --html 一起用
--top-k=N最多返回 N 个节点太少丢上下文;太多 token 爆
179 个怎么记得住

不用记。摸熟上面表格里这十几个就够了——剩下的是「--help 搜索」级别的细则。官方明确说「--help 是权威来源」,本文不抄清单。

08它和 ripgrep 到底差在哪

这里很多新手会搞混——名字里都带 rip、都是命令行、都要在仓库里跑。下面这张对照表把它们的边界划清。删掉这一节,读者下次在工具选择时刻还是会按"看着像所以差不多"判断,照着那判断要踩一次坑。

维度 ripgrep(rg) ripwire(ripwire)
主要用户人AI 编码代理(或让人写代理调用)
输入是文本模式(正则、字符串)路径 / 任务描述 / 函数名
内部用RustScan——纯文本扫描SCIP 索引 + 多路启发式检索
输出是匹配的行 + 文件名 + 行号结构化上下文(带 token 预算、按相关度排)
要不要索引不需要,每次现扫需要,0.25–0.45 秒建一次
状态零状态零状态(连索引都是临时的)
能否生成 HTML不能能(--html=map.html)
接 AI 编辑器不能能(MCP 服务器 + wrap)
写语言RustC++23

它们各自适合什么

用 ripgrep 的场景
  • 「给我找出包含 TODO 且不在 vendor 目录的所有 .go 文件」
  • 重构后快速确认改完所有 foo → bar
  • 本地手搜一个 API 怎么调
用 ripwire 的场景
  • 让 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 里先让它读仓库地图、回答问题。复制就能跑。

前置

三步

1
装 ripwire

在终端敲:
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。

2
接 Claude Code

ripwire wrap claude——这条命令把 ripwire 注册到 Claude Code 的 MCP 列表里。再跑 ripwire . --doctor,看到 skills active 之类字样就算通了。

3
在 Claude Code 里用

进入你想让它读的仓库目录,启动 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常见问题

支持 Windows 吗?
0.6.0 官方文档只覆盖 macOS / Linux(arm64 + x86-64)。Windows 用户请用 WSL2,或者等官方出 Windows 包。
要 API key / 联网账号吗?
不要。它没有嵌入模型,没有索引服务,没有 daemon。它是一个独立的本地工具。
我搜代码用 ripgrep 够不够?
够。ripgrep 是 ripwire 的"前辈",也是一个非常优秀的工具。ripwire 的差别是给 AI 看的,不是给搜代码的人看的。
能不能接除了 Claude Code 之外的编辑器?
能。官方支持的清单:Codex、Claude Code、Cursor、Windsurf、Gemini、opencode、aider。运行 ripwire wrap --all 自动识别你机器上已装的代理。
装了不生效怎么办?
先跑 ripwire . --doctor——它会指明二进制 / skills / hooks 哪里出问题。再确认 $PATH 里有 $HOME/.local/bin。
升级后命令行为变了怎么办?
以 --help 输出为准。README 也明说「--help 是权威来源」。版本变动后,先 --doctor,再继续用熟悉的 flag。
179 个 flag 怎么背?
不用背。掌握 §07 速查表里的十几个就够日常用,其他用 --help 搜。

99一句话总结

🎯 核心要点

ripwire 是一根「在仓库与编码 AI 之间拉细线」的命令行 + MCP 服务器——单二进制、零依赖,把仓库结构压成一段可控 token 的上下文,配合 Claude Code / Cursor / Codex 等六个生态接入点,让 AI 从一开始就有地图而不是进去乱翻。

98参考来源

证据边界与时效说明

工具仍在快进,这次校对对应 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 跑一次增量核对。

⌂