[symbols]
Primary search over the workspace. Strict modes (literal, regex, word) are exhaustive with deterministic order; fuzzy is ranked top-N with frecency. target: auto routes by query shape, and every response echoes the resolved route in data.route.
Text search is the highest-frequency agent operation, and shell tools give unranked, unscoped output that ignores editor-fresh changes.
One tool covers ranked fuzzy discovery and exhaustive grep-grade audits, with scoping, pagination, previews, and a route echo that makes auto behavior observable.
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | Yes | The search text, pattern, or path fragment. /re/ forces regex; "quoted" forces literal. |
| target | string | No | What to search: 'auto', 'files', 'content', 'symbols', 'structural', or 'semantic'. auto routes by query shape. In this release, symbols, structural, and semantic answer from the lexical tier with meta.degraded set. |
| match | string | No | Match mode: 'auto', 'fuzzy', 'literal', 'regex', or 'word'. Strict modes are exhaustive; fuzzy is ranked. auto picks fuzzy for files/symbols and literal for content. |
| case | string | No | Case handling: 'auto' (smart-case: sensitive when the query has an uppercase character), 'sensitive', or 'insensitive'. |
| scope | json | No | Optional scope: pathPrefix (workspace-relative directory), globs (prefix with ! to exclude), and languages (tokens like rust, typescript, csharp). |
| skip | number | No | Pagination offset. |
| take | number | No | Maximum matches to return; clamped to the configured maximum (default 200). |
| maxPreviewChars | number | No | Preview truncation length per match. |
| pathStyle | string | No | 'relative' (workspace-relative, forward-slash) or 'absolute'. |
Fuzzy file and identifier hop (ranked)
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find",
"arguments": {
"query": "usrctrl"
}
}
}Exhaustive regex over content
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find",
"arguments": {
"query": "/fn handle_\\w+/",
"target": "content"
}
}
}Exhaustive word match scoped by globs
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find",
"arguments": {
"query": "timeout",
"target": "content",
"match": "word",
"scope": {
"globs": [
"src/**",
"!**/tests/**"
]
}
}
}
}Forced literal phrase
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "find",
"arguments": {
"query": "\"exact phrase\""
}
}
}Returns matches with workspace-relative path, 1-based line and column, and a trimmed preview; data.route echoes the resolved target and match, and paging carries skip/take/total. exhaustive: true confirms a strict search saw every match; when a limit is hit (match cap, oversized file, time budget) exhaustive flips to false with meta.partial set and the total marked as a floor - never silent truncation. A zero-hit strict search is a valid empty result with a hint suggesting a fuzzy retry; Scout never silently falls back.