Tool

read

Not file reading — querying the index for a precise cut. The parse already happened, so read returns the richest representation that fits the budget on the call: full content if it fits, else structure, else a headline. Everything else on this page is a way of choosing what “richest” means.

You ask your agent “map the website project — don’t read any files” — this is what it sends. The same operation is a shell command, which is the form you script against.

Your agent calls — mcp

read("file:///src/cloud/website/** => tree: folders", 800)

You call — cli

rql read "file:///src/cloud/website/** => tree: folders" --token-budget 800

What comes back — the same on both surfaces

file:/// src/ cloud/ website/ (1 md) docs/ design/ (1 md) plans/ (7 md) public/ (2 html, 2 png, 2 txt, 1 xml) assets/ (4 js, 2 css, 1 svg) docs/ (1 html) addressing/ (1 html) guides/ keeping-what-you-learn/ (1 html) profiling-with-watch/ (1 html) unfamiliar-codebase/ (1 html) tools/ … ten tool pages, one folder each where-it-runs/ (1 html) run/ (1 html) senses/ (1 html) start/ (1 html) [257 tok | 2.6 s | ready]

That is this documentation’s own project, mapped for 257 tokens without opening a file. Ask for tree: headlines instead and every file arrives with a line describing what it is for. Scripting against it? --json and --jsonl emit structured records instead of the rendered view.

Parameters

ParameterWhat it does
urirequiredThe address. Globs allowed in the path, fragments after it, one modifier at the end. Join several with ;.
tokenBudgetoptionalA contract, not a hint: you get the richest representation that fits inside it. Start at 800–2000 and raise it when the answer is worth more.

The sixteen modifiers

Append => modifier to any address to choose what comes back. One modifier per address; those written with a colon take a parameter after it.

ModifierParameterWhat comes back
contentFull text with line numbers. Assembles resolvable @ references in place.
content:literalRaw source, references left untouched. Use it when you are about to edit the file.
content:previewThe reference manifest and its projected cost, without fetching the targets.
structureSignatures without bodies — classes, methods, headings.
headlineOne line summarising each file, as a flat list.
tree:folders / files / headlinesA directory tree at the detail level you ask for. Folders is cheapest.
find:keywordsSemantic search inside the matched files, with snippets.
similar:seed URIRank the scope by likeness to a seed document, using stored vectors.
grep:textLiteral text search. All-lowercase is case-insensitive; any capital makes it exact.
regex:patternRegular-expression line search across the scope.
wherelocal / remoteResolve the address to a path on disk, or to a GitHub URL.
changesWorking-copy git changes in the scope, grouped staged, unstaged, untracked.
conceptsThe invariants this repository has recorded about the scope, most specific first.
history:query (optional)The commits behind the matched files, symbols, or lines. A query reranks them by relevance.
blameLine attribution grouped by commit — down to a single symbol.
question:your questionA synthesised answer over the matched content, with citations.
lint:errors / warningsDiagnostics aggregated from annotations in the scope.
coverage:uncovered / contentCoverage as a symbol summary, the uncovered gaps, or source with an execution gutter.

Composing them

Glob, fragment, and modifier are independent, so they multiply. The whole address grammar is available in front of every one of these.

file:///src/**/*Handler.cs#symbol=*Handler.CanHandle # every implementation of one method, across the codebase file:///src/Auth.cs#symbol=ValidateToken => blame # who wrote each line of one method, and in which commit file:///src/tests/** => similar: file:///src/Auth/TokenService.cs # the tests that cover a file, found by meaning rather than by name

Budget is a contract

Breadth and depth trade against each other inside the number you set. A glob matching hundreds of files spends the budget on headlines; the same budget on ten files buys the structure of each; on one file it buys the whole thing. Narrow the address to go deep, widen it to go broad.

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.