Watch links
A run started from CI, the API, the command-line tool or an AI agent comes with a link to watch it live and read its result, no sign-in needed.
What you get#
Every run started outside the web app answers with two addresses: the run page (link, sign-in required) and a watch link (watchUrl, https://app.testsy.dev/watch/…) that anyone with it can open. The command-line tool prints it under each started run (watch (no login): …), the GitHub Action exposes watch-urls and adds it to the step summary, and MCP run_test / run_project return it, so the person waiting for the result — a colleague reading the CI log, a reviewer on the pull request, someone in a chat — can follow along without an account.
What the viewer sees#
While the run goes: the live screen, the checks as they are verified, and each step with the picture right after it, exactly as on the run page. When it ends: the read-only result, as on a share link — the checks and values, the replay, the video, the console and network logs, and your workspace's name. Nothing else: no other runs, tests, projects or settings, nothing to click that changes anything. Sign-in accounts stay masked as they do for members.
The screen of an app test can show your app's data; the workspace setting below is where you decide who may open the links.
How long it works#
A watch link works while the run is queued or running and for a while after it finishes — 24 hours unless the workspace chose otherwise (1 hour to 7 days). After that it shows that it has expired. For a result you want to keep sharing, make a share link from the run page instead.
Who can open it#
In Settings → Workspace → Watch links an administrator chooses:
- Anyone with the link (default). Runs from a public repository still get a members-only link: the CI log is public, so the link in it would be too. The command-line tool detects this on GitHub Actions and GitLab.
- Signed-in members only: the viewer must sign in and belong to the workspace.
- Off: runs answer without a watch link, and asking for one is refused.
Each run's page lists its watch links with how often they were opened. Turn off stops one straight away (the run page while it runs, or Share on the result). Over the API or MCP: create_watch_link makes one (for a run started from the web app too), revoke_watch_link turns off every link of a run. Each link is a random 128-bit token stored hashed, bound to one run; the page is marked not to be indexed by search engines and sends no referrer.