Search
Search queries across the step trace of every run in your account. Find a specific tool call, locate the item that produced a particular output, or filter by error pattern without paging through the runs list.
What "search" actually searches
Search operates over steps — the nodes inside each item's trace — not raw container stdout. Each step has:
- Step type (
llm_call,tool_call,tool_result) - Input and output payloads (JSON)
- Tool name (for tool calls)
- Error message (for failed steps)
- Token counts and cost
Anything that lives in those fields is queryable. What's not queryable: arbitrary print() output, provider-side logs, or anything your code wrote to stdout that wasn't returned through a step.
Papayya deliberately doesn't capture raw container output. We capture the structured trace. It's more useful for debugging specific behavior and keeps storage bounded.
What you can search for
- Error substrings — "timeout", "rate limit", "invalid JSON"
- Tool names — find every item that called
search_databaseorsend_email - Input patterns — locate the item that processed a specific customer ID
- Output patterns — find items where a particular verdict or classification was produced
Using Search
The Search page in the dashboard opens a query box scoped to your current project. Results are grouped by run, with the matched step highlighted inline under its item.
Each result links to the full item detail so you can see the step in context.
Tips
- Exact phrases match best — specific error messages or tool names beat generic words.
- Combine with outcome filters — searching "null" across
faileditems finds crashes; acrossdegradeditems it finds refusals and empty completions; across all items it finds noise. - Search fades as data ages — step retention follows your retention policy; items purged from hot storage are no longer searchable.
API
There is no dedicated /v1/search endpoint. The queryable step surface is the steps endpoint, filterable by outcome and error category:
GET /v1/steps?q=<query>&project_id=<id>&outcome=failed
GET /v1/steps/error-categoriesReturns matching steps with their parent item id and run id, plus a snippet. Use the item id to fetch full context (GET /v1/durable/runs/{itemId}).
When to reach for something else
- Real-time debugging — search is for "find me the item that did X." For active debugging, open the run detail page and watch its items and steps stream in.
- Aggregate metrics — for counts, cost totals, or trends, use the Usage page or query the API directly.
- Cross-project queries — search is project-scoped by default. For account-wide queries, use the API with an explicit account filter.
- Recovering bad items — search finds them; replay re-drives them.