reticle_query answers “where is the thing I mean?” without dumping the whole page into your context window. It queries the way a testing library does. By role, label, text, testid. So your agent binds to meaning rather than to DOM structure that a refactor will move.
Example
ref to act on and a source file to open, for 235 tokens.
Arguments
Every argument also has a predicate spelling, so
{ "role": "button" } works as shorthand for { "by": "role", "value": "button" }.
Use count_only when you only need a number
“Are there still three rows?” does not require three row descriptors:
Reading the response
ref is the handle for every other tool: act, inspect, state. It stays valid until the element leaves the DOM, so you do not need to re-snapshot between actions on the same element.
source appears when @reticlehq/react is installed. Note that all five sidebar buttons above report Sidebar.tsx:41. That is the line where the component renders them in a loop, which is exactly the line you want to edit.
truncated: true with total: 7 means limit cut the list, not that Reticle ran out of room.
states distinguishes present from visible from enabled. An element can be all three and still be covered by a modal. reticle_inspect reports occluded for that.