Search across all timelines in an Antithesis test run to find events, correlate property failures, and answer temporal questions about ordering and causation (e.g., did event A always precede failure B? do failures occur even without a preceding fault?).
Skill version: 2026-09-23 a8fe900
Search across all timelines in an Antithesis test run to find events, correlate property failures, and answer temporal questions about ordering and causation — cascade elimination, fault correlation, root cause hypothesis testing, and any "if X happened before Y" query.
The Logs Explorer is distinct from the per-example log viewer used in triage. The triage log viewer shows one timeline centered on one event. The Logs Explorer searches across ALL timelines in a run, supports temporal queries (preceded by, not preceded by, followed by, not followed by), and visualizes results on a multiverse map.
snouty is not installed. See https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md for installation options.agent-browser is not installed. See https://raw.githubusercontent.com/vercel-labs/agent-browser/refs/heads/main/README.md for installation options.agent-browser is older than version v0.23.4. You can upgrade with agent-browser upgrade.jq is not installed. See https://jqlang.org/download/ for installation options.python3 (>= 3.10, stdlib only) for assets/build-url.py.antithesis-triage skill's run discovery workflow to find one first.agent-browser installed and authenticated to the Antithesis tenantThe Logs Explorer uses singular field names, not plural:
assertion.message — the property/assertion name (NOT assertions.message)assertion.status — passing or failing (NOT assertions.status)general.output_text — log output textThe assertion.status field requires the matches operator, not
contains. Other text fields use contains.
Use agent-browser with the shared Antithesis authentication:
SESSION="logs-explorer-$(date +%s)-$$"
agent-browser --session "$SESSION" --session-name antithesis --profile antithesis --args "--no-sandbox"There are three ways to reach the Logs Explorer with the correct run selected:
Navigate to the triage report first, then extract the "Explore logs" link. This is the most reliable method because the link contains the correct session ID already encoded in the URL.
agent-browser --session "$SESSION" eval \
"document.querySelector('a.an-button[href*=\"/search\"]').href"Navigate to the returned URL. This automatically sets the correct session/run.
The URL will have the form:
https://{tenant}.antithesis.com/search?search=v5v{base64_encoded_query}The v5v prefix is a version marker. The base64 payload contains the query
JSON including the session ID (s field). See references/query-builder.md
for the full query JSON format.
The Logs Explorer page has a "Show me logs from" dropdown at the top
(div.select_container.event_search_run_selector). Click it to see a list
of recent runs with their name, status (In progress / Completed / Incomplete),
and timestamp. Select the run you want.
If a run you expect to see is missing, refresh the page.
Click "Logs explorer" in the left sidebar navigation. This goes directly to
https://{tenant}.antithesis.com/search with no run pre-selected. Then use
the "Show me logs from" dropdown to choose a run.
agent-browser --session "$SESSION" open "https://{tenant}.antithesis.com/search"Important: Always ensure the correct run is selected before searching. Each run has its own session ID — queries against the wrong session return no results. The selected run is shown in the dropdown at the top of the page.
| Reference | When to read |
|---|---|
references/query-builder.md | Building and executing search queries |
references/temporal-queries.md | Using preceded-by / not-preceded-by filters |
references/results.md | Reading search results and clicking into details |
references/map.md | Using the multiverse map for cluster analysis |
This skill ships two assets. Pick the one that fits the step you're on:
assets/build-url.py — standalone Python CLI. Builds and decodes
Logs Explorer URLs without any browser. Use this any time you just need
a URL (e.g. to hand to agent-browser open or to paste into a browser).
No injection, no DOM, no session needed.
python3 assets/build-url.py failure \
--session-id "$SESSION_ID" \
--property "my-failing-property" \
--tenant "{tenant}.antithesis.com"See references/query-builder.md for all subcommands (failure,
not-preceded-by, not-followed-by, custom, decode).
assets/antithesis-query-logs.js — in-page runtime. Inject this on
the Logs Explorer page only when you need to interact with the page:
click Search, wait for results, read counts/result rows, switch to the
Map view, etc. Pure URL construction does not need the runtime.
cat assets/antithesis-query-logs.js \
| agent-browser --session "$SESSION" eval --stdinThe runtime registers window.__antithesisQueryLogs. If you get
TypeError: Cannot read properties of undefined from a call against it,
the runtime has not been injected on the current page — inject first.
Prefer build-url.py whenever you just need a URL. Drop to the in-page
runtime only for steps that genuinely have to touch the DOM.
python3 assets/build-url.py decode --url "$EXPLORE_LOGS_URL" | jq -r .s)
or from any existing Logs Explorer URL.python3 assets/build-url.py failure \
--session-id "$SESSION_ID" --property "my-failing-property" \
--tenant "{tenant}.antithesis.com"agent-browser open the URL, inject the runtime, run search, read the
count via window.__antithesisQueryLogs.search().python3 assets/build-url.py not-preceded-by \
--session-id "$SESSION_ID" --property "my-failing-property" \
--pre-field assertion.message --pre-value "suspected-upstream-failure" \
--tenant "{tenant}.antithesis.com"{} details on several results1fd8470
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.