ripwire: ripgrep of AI context (CLI+MCP) giving coding agents a map of any repo Red Hat's Emerging Technologies group released ripwire, an open-source CLI and MCP server that generates a ranked, deterministic call graph for coding agents, aiming to replace grep-based exploration with token-budgeted answers about which symbols to touch, what breaks, and which tests to run. The tool supports 21 languages via vendored tree-sitter grammars and installs in one line, activating task-shaped skills for agents like Claude Code, Codex, Cursor, Windsurf, Gemini, opencode, and aider. On a sample repository, ripwire answered an incremental cache invalidation query in about 4.3K tokens, listing ranked symbols with risk annotations, one-hop call context, and confidence scores. ripwire is the ripgrep of AI context. Point it at any repository and your agent gets a ranked, deterministic call graph — what to touch, what it breaks, which tests to run — instead of grepping around and reading whole files. Languages: Rust · C++ · Objective-C/C++ · C · Metal · CUDA · Python · Go · Swift · TypeScript · JavaScript · Java · Ruby · PHP · Lua · Bash · C · JSON · TOML · YAML · Markdown — twenty-one vendored grammars languages , and adding another is a vendored tree-sitter grammar plus one row in a declarative table. One self-contained binary on your own machine, offline, installed in one line — and the same line installs and activates the task-shaped skills that teach your agent when to reach for it, not just how, for every agent it finds on the machine. If your agent can run shell commands — Claude Code, Codex, Cursor, Windsurf, Gemini, opencode, aider — it is set up the moment the install finishes; the MCP server is the optional second interface set-it-up-in-your-coding-agent . Install it and ask it something before you finish reading this page: RIPWIRE REPO=redhat-et/ripwire bash -c "$ curl -fsSL https://raw.githubusercontent.com/redhat-et/ripwire/main/scripts/install.sh " ripwire . --for="incremental cache invalidation" One deterministic, token-budgeted answer: the relevant symbols, their callers, the change risks, and the tests that reach them. Run on this repository 2026-08-30 , that second line answers in about 4.3K tokens with: - The ranked symbols, in rank order — the cache-header constant kCacheMagic first with its doc comment quoted in place and the one next= call that opens it , then spanTierMemoPath the cache-path composer , ingestCommitTree , … ingest — each row with its file, line, and signature. - Risk, annotated in place — complexity, git churn ingest shows 128 recent edits , change amplification touch ingest and 266 graph nodes feel it , purity and test coverage. The fragile spots are visible before anything touches them. - One-hop call context — spanTierMemoPath calls shaKeyedCachePath , headSnapRepoHex , exclConfigHex ; no second query needed to see the neighbourhood. - Its own confidence — this answer says confidence="high" with the score margin attached; a flat ranking says low , so it reads as a starting point instead of masquerading as an answer. Every number on this page is a measurement on a corpus we happen to have. Yours is one we don't. After you have actually used it on your own repository for a while, hand your agent prompts/improve-for-my-language.md /redhat-et/ripwire/blob/main/prompts/improve-for-my-language.md . It harvests that session's own transcript — where ripwire answered, where it missed, where you fell back to grep — and every finding it produces has to cite the moment it came from: what you asked, which command ran, what came back. Open an issue with the result. That is worth more to this project than a bug report, because it arrives in the form the project already runs on: evidence with its provenance attached, not an impression. Several languages here are one contributor's corpus away from being measurably better, and we cannot see your code. The actual wire format — what your agent reads minified XML; trimmed and line-wrapped here