search
Find spoken or on-screen text in a recorded job using case-insensitive substring search. Returns source, timing, and nearest frame to jump to evidence.
Instructions
Case-insensitive substring search across BOTH transcript segments and frame OCR text. Hits carry source (transcript|ocr), t_ms, t_wall when known, the matched text, and the nearest frame position — everything needed to jump straight to evidence. Exact substring only, no embeddings. When NOT to use: fuzzy/semantic questions ("anything about performance?") — page get_transcript and read; regex is not supported. Examples:
search(job_id="...", query="login") — every spoken or on-screen mention of login
user: "what did I say about the login button?" → search(job_id, "login button") → get_moment at hits
search(job_id, "error") — catches the SPOKEN word and the on-screen error text (OCR) in one call
search(job_id, "TypeError") — stack traces on screen are OCR-indexed; great for bug repros
search(job_id, "€49") — prices, IDs, and literals on screen are findable via OCR
take hit.t_wall and grep your server logs ±30 s around it to pair remark ↔ log line
no hits? shorten the stem: "notif" matches notification / notifications / notify
prefer one distinctive word ("checkout") over a whole sentence — substrings must match exactly
every hit has nearest_frame_ms → get_frames(job_id, at_ms=) shows the moment
audio-only job → transcript hits only (there is no OCR index)
anti-example: "summarize the pricing discussion" → get_transcript(format="text") and read it
anti-example: finding an icon or layout glitch with no text → get_frames over the range; OCR sees text only
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| job_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||