Tool

explore

Find anything. explore is where your agent starts when it does not yet know what to read: one call searches the index exhaustively — lexical and semantic together — and comes back with what exists, ranked by how well it answers the question. The first call also teaches the vocabulary — the real class names and terms-of-art — that sharpens every call after it.

You ask your agent “where is gitignore matching implemented?” — this is what it sends. The same operation is a shell command, which is the form you script against.

Your agent calls — mcp

explore keywords="gitignore matching" question="where is gitignore matching implemented?" uriGlob="file:///src/L1/engine/**" tokenBudget=700

You call — cli

rql explore "gitignore matching" --question "where is gitignore matching implemented?" \ --uri-glob "src/L1/engine/**" --token-budget 700

What comes back — the same on both surfaces

100% .../RepoQL.Engine.FileSystem/docs/north-star-gitignore.md What great looks like for gitignore pattern matching in RepoQL — full git fidelity and predictable performance, owned natively rather than borrowed from a regex-translating library. | 91 ln, ~1.5k tok 93% .../RepoQL.Engine.FileSystem/GitIgnoreMatcher.cs GitIgnoreMatcher | Add, IsIgnored, RootState, Advance | 875 ln, ~9.2k tok ── src/L1/engine/RepoQL.Engine.FileSystem.Tests/ (5 results) ── 90% .../GitIgnoreMatcherTests.cs IsIgnored_SingleRule, IsIgnored_CaseInsensitive, IsIgnored_DirectoryOnly, IsIgnored_LastMatchWins_Negation | 181 ln, ~2.2k tok [657/700 tok | breadth: 4 | 14.4 s | ready]

A handful of files named, ranked, and summarised for 657 tokens — and none of them opened. The north star document ranked above the implementation because the question asked where, not how. That footer line rides every response: what was spent, and whether the index was ready to be trusted. Scripting against it? --json and --jsonl emit the matches structured instead of rendered.

Parameters

ParameterWhat it does
keywordsrequiredClass names, concepts, or short phrases — the probe. No filler words.
questionoptionalYour intent, as a full sentence. Results are reordered by how well they answer it, not just match it. Skip it only when surveying.
uriGloboptionalWhere to search. file:///** is the right default; unscoped spans every imported repository too.
breadthoptionalMaximum results. 2 for a deep dive, 10 for a survey, 0 to let the server choose.
tokenBudgetoptionalHow much room the answer gets — and therefore how deep it goes.

Budget decides depth

The budget is not a cap on a fixed answer — it chooses the representation. Around 800 tokens maps what exists in headlines; 3,000 adds structure and snippets; 10,000 expands the key symbols in full. A cheap exploratory call that comes back wrong costs almost nothing; the read it saves you costs a great deal.

When results come back weak

Suspect your vocabulary before the repository. Terms borrowed from another codebase rarely land, and keywords exists to map them to the real local names.

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.