Tool

explain

Delegate the understanding. explain reads widely inside the scope you give it, synthesises, and reports back with citations — so you get comprehension rather than raw text. Fire several in parallel across different areas when you are mapping something large.

You ask your agent “which of our capabilities need the cloud, and which work fully offline?” — this is what it sends. The same operation is a shell command, which is the form you script against.

Your agent calls — mcp

explain question="which capabilities require the cloud service, and which work with no network at all?" keywords="embedding, reranker, inference, offline, lexical" uriGlob="file:///src/L1/engine/RepoQL.Engine.Embedding*/**"

You call — cli

rql explain "which capabilities require the cloud service, and which work with no network at all?" \ --keywords "embedding, reranker, inference, offline, lexical" \ --uri-glob "file:///src/L1/engine/RepoQL.Engine.Embedding*/**"

What comes back — the same on both surfaces

<Answer> The codebase has two embedding providers behind a composite that swaps between them at lifecycle events. The split is clean: one provider is entirely local, the other is entirely network-dependent. … ## Requires the Cloud Service (network mandatory) Everything in `GrpcEmbeddingProvider` requires a live gRPC connection … <file:///src/L1/engine/RepoQL.Engine.Embedding.Cloud/GrpcEmbeddingProvider.cs#symbol=...> … the full answer runs 3,300 tokens, a citation beside every claim <Nuance> - **Reranking has no offline path.** `IRerankProvider` is implemented only by `GrpcEmbeddingProvider` (production) and `FakeRerankProvider` (tests). … [3.3k tok | 1.3 min | ready]

A minute and a half of reading, delegated — dozens of files consumed so the answer could be thirty lines. The <Nuance> section is where the surprises live: the cliffs and caveats the code has that nobody wrote down. --json emits the whole thing structured.

Parameters

ParameterWhat it does
questionrequiredWhat you want answered. Full sentences work best.
keywordsrequiredThe symbols, files, or terms-of-art to focus on. You almost always know these better than they can be inferred.
uriGloboptionalScope. Always set it — an unscoped explain will confidently answer a different question than the one you meant.
tokenBudgetoptionalRoom for the synthesised answer. It does not limit how much source gets read.

Good questions and bad ones

It rewards a scoped question with a real subject: how does JWT refresh work in AuthService, why does the payment processor use idempotency keys, what happens when an item is indexed, step by step. It does poorly with explain everything about authentication, or what does this service do with no scope — there is no way for it to know which half you meant.

Verify what matters

Every claim carries a citation for a reason. When the stakes are high, follow one back with read and check it against the code.

This page names what exists. The depth behind every name ships inside the binary at help:///: the bounds, the failure modes, how they compose. It answers to explore and read exactly like your code does. Install it, and your agent has the manual.