Skip to main content

Signature

Descriptor: search the cad workspace with ripgrep or semgrep

Parameters

Response

A JSON object. The search-wide fields are: Each entry in results names the location that matched and how to read it back:

Invocation

Operational notes

Every open document is serialized on the Parashell main thread into one Python record per object, written to a private temporary directory, searched, and then deleted. The record is the same payload get_object returns, so anything that tool can see is searchable — properties, placement, shape summary, sketch geometry and constraints, and the ExpressionEngine entries that carry parametric expressions. No object type receives special handling, so anything the shared serializer cannot reach is not searchable either; a Spreadsheet::Sheet exposes its cell grid through a property object rather than plain values, so cell contents do not appear in the corpus. Because records are emitted as Python literals, ripgrep sees them as text and semgrep parses them as Python. Semgrep patterns therefore follow Python structure: match a mapping entry as {..., 'Radius': $X, ...}, not 'Radius': $X. Semgrep does not return matched source text to anonymous callers, so match is always read back from the corpus rather than from engine output, and multi-line semgrep matches are joined into a single line. Ripgrep queries are case-sensitive regular expressions and are passed as a single argument, never through a shell. In both mode results are interleaved between engines so one noisy engine cannot consume the whole limit. Engine resolution is cached per process. Each engine gets a 60 second wall-clock budget and indexing gets the standard RPC budget; exceeding either returns an actionable error telling you to narrow location or simplify query. If one engine fails while the other succeeds the call still succeeds and the failure is reported in engine_errors.