
ripwire
by redhat-et
ripwire
The ripgrep of AI context. Point it at a repository and it answers structural questions in tens of milliseconds from a warm index — and labels every count it cannot prove is a total.
Quickstart · What it answers · Real runs · Measured · Tokens saved · Lineage · Honesty contract · Agent setup · Prompt loops · Docs · Slides
Ten seconds. No index server, no embeddings, no API key — a parse and a call graph, built on the spot:
$ ripwire . --callers=rankGraphTeleport
<callers of="rankGraphTeleport" defs="1" count="6" counts_floor="1">
<s t="fn" n="runEval" p="./src/eval.h:133"/>
<s t="fn" n="rankGraph" p="./src/graph.h:1303"/>
<s t="fn" n="anchoredLexicalRank" p="./src/graph.h:1552"/>
<s t="fn" n="churnRankedGraph" p="./src/main.cpp:7246"/>
<s t="fn" n="runDefaultMap" p="./src/main.cpp:7276"/>
<s t="fn" n="getIndex" p="./src/mcpindex.h:734"/>
</callers>
counts_floor="1" is the point. Call edges are extracted from source text by name, so dynamic
dispatch, callbacks and macro-generated call sites contribute no edge: count="6" is a floor,
and the element says so before you read a single row. (Real output, wrapped for reading — it ships as
one minified line, preceded by a legend comment that spells this out in full.)
The name is the design. ripgrep for the retrieval half: a zero-runtime-dependency C++23 binary that crawls a tree, extracts symbols with tree-sitter, resolves references into a call graph, ranks that graph with Personalized PageRank, and streams a deterministic minified XML map to stdout. Tripwire for the honesty half: every count it cannot prove is a total ships labelled a floor, every truncation is disclosed in the header, and a zero means none found, never none exists.
Two runs over the same tree are byte-identical, and a warm run equals a cold one. That is a contract, gated on every pull request and every push to main, not a tendency.
On the latest 60-instance head-to-head against other context tools — same instances, same gold, same metric code — it puts all gold files in the top 10 on 58.3% of them, against 33.3% for the best competitor (repowise), at a 0.114 s median (warm, with a pre-built index). An earlier round measured it against graphify, Aider's repo-map and codebase-memory-mcp; a third round measured it against headroom, the context-compression layer: on real coding questions headroom's default config passed code through untouched while ripwire answered at 7.3% of a grep-and-read baseline's tokens — upstream selection beat downstream compression on every measure the two tools share (and the round's losses to the naive baseline are published first, with fix dispositions). It has won every round run so far. The full tables, and the caveats that belong with them →
Quickstart
Requirements: CMake 3.24+ and a C++23 compiler. Nothing else — tree-sitter's core, all 15 grammars
and the test framework are vendored under third_party/deps, so there is no download step and no
package manager to satisfy. Prove that with the network off: add
-DFETCHCONTENT_FULLY_DISCONNECTED=ON and the build still completes.
Related servers

n8n
Updated todayby n8n-io
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

mcp-server-git
OfficialUpdated todayA Model Context Protocol server providing tools to read, search, and manipulate Git repositories programmatically via LLMs

mcp-server-fetch
OfficialUpdated todayA Model Context Protocol server providing tools to fetch and convert web content for usage by LLMs