Authenticate `agent-browser` against an Antithesis tenant and read data from Antithesis web pages (triage reports, runs page, logs viewer, causality reports). Only invoke this skill when explicitly requested by another skill or the user. Requires interactive browser authentication and is unsuitable for fully headless workflows.
Skill version: 2026-09-23 a8fe900
A helper skill for reading data from authenticated Antithesis web pages
when the snouty API doesn't expose what's needed. Other skills
(antithesis-triage, antithesis-debug, antithesis-query-logs) delegate
here when they need an authenticated browser session.
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.Reference files: This skill's references/ directory contains detailed guides for specific tasks. Do NOT read them all up front — only read a reference file when you are told to. Each reference file is mentioned by name at the point where it is needed.
SESSION for each invocation of this skill.open, after link clicks that may change pages, and after reopening a report from a finding route, wait until networkidle, inject assets/antithesis-agent-browser.js, then use the matching *.waitForReady() method before continuing.agent-browser calls in parallel. They are stateful with side effects.window.__antithesisAgentBrowser is undefined or missing, inject the runtime and rerun the same method.agent-browseragent-browser has two session variables:
--session: the name of a unique, isolated browser instance--session-name: auto-save/restore cookies by nameEvery invocation MUST use a unique --session value. Generate it once and reuse it whenever you see $SESSION referenced by this skill.
SESSION=antithesis-ab-$(date +%s)-$$Use --session-name antithesis on the FIRST agent-browser command that references a new $SESSION. This creates the session and restores saved cookies. Subsequent commands for the same $SESSION do not need --session-name — the session already exists.
Close the live session when done.
agent-browser --session $SESSION closeDo NOT navigate to the home page just to check auth. Instead, navigate directly to your target URL (report, runs page, etc.) using the session-creation command:
agent-browser --session "$SESSION" --session-name antithesis open "$TARGET_URL"
agent-browser --session "$SESSION" wait --load networkidle
agent-browser --session "$SESSION" get urlIf the URL starts with https://$TENANT.antithesis.com then you are authenticated. If it redirected to a login page, you need to authenticate — read references/setup-auth.md, which gates the interactive headed login on user confirmation.
This skill ships a runtime (assets/antithesis-agent-browser.js) that exposes helper methods on window.__antithesisAgentBrowser for reading data from Antithesis pages. Inject it after navigation completes:
cat assets/antithesis-agent-browser.js \
| agent-browser --session "$SESSION" eval --stdinCall its methods with agent-browser eval:
agent-browser --session "$SESSION" eval \
"window.__antithesisAgentBrowser.report.getRunMetadata()"agent-browser eval awaits Promises automatically, so async and sync methods use the same call pattern.
Error handling: Runtime methods throw on error, which causes agent-browser eval to return a non-zero exit code. Check the exit code to detect failures — no output parsing required. The error message describes what went wrong (e.g. wrong page, element not found, timeout).
If window.__antithesisAgentBrowser is missing, reinject assets/antithesis-agent-browser.js and retry.
NEVER run agent-browser calls in parallel. They are stateful calls with side effects; parallel calls can break or return confusing results.
Each Antithesis page loads content asynchronously. After navigation to any Antithesis page, follow this pattern:
First, wait for networkidle:
agent-browser --session "$SESSION" wait --load networkidleThen, check the url to see if you got redirected to an authentication page:
agent-browser --session "$SESSION" get urlIf you hit an authentication page, stop and reauthenticate before continuing.
Then, inject the runtime:
cat assets/antithesis-agent-browser.js \
| agent-browser --session "$SESSION" eval --stdinFinally, eval the page-specific wait function to wait for all asynchronous chunks to finish loading:
window.__antithesisAgentBrowser.report.waitForReady()window.__antithesisAgentBrowser.logs.waitForReady()window.__antithesisAgentBrowser.runs.waitForReady()Each wait method polls for up to 60 seconds by default. On success it returns { attempts, waitedMs }. On timeout, the method throws causing agent-browser eval to return a non-zero exit code.
Use the lower-level boolean checks when you need a one-shot probe:
window.__antithesisAgentBrowser.report.loadingFinished()window.__antithesisAgentBrowser.logs.loadingFinished()window.__antithesisAgentBrowser.runs.loadingFinished()If a page still does not become ready, inspect status:
window.__antithesisAgentBrowser.report.loadingStatus()window.__antithesisAgentBrowser.logs.loadingStatus()window.__antithesisAgentBrowser.runs.loadingStatus()After every report waitForReady() call, check result.error. If it is present, read references/error-reports.md for the error-report workflow.
references/setup-auth.md for the interactive login flow.references/run-discovery-ui.md. Prefer snouty runs list whenever possible — only fall back to the UI when the API is unavailable or doesn't expose what you need.references/properties-from-ui.md. Prefer snouty runs --json properties whenever possible.run_id from a triage-report URL that cannot be matched against snouty runs list. The run_id is rendered at the bottom of the main report page (report_id → run_id is not currently exposed by the API).references/error-reports.md.1fd8470
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.