Skip to main content
reticle doctor collapses the setup failure modes into one command. It is the first thing to run when something is wrong.

Flags

What it prints

Human-readable lines on stdout, not the JSON log. Real capture:
When nothing has connected, the sessions line fails and the daemon’s own diagnosis is appended under the checklist. Real capture, against a daemon on a scratch port that no app had dialled, with the diagnosis wrapped for width and trimmed at the ellipsis:

The chromium line

Playwright pins one Chromium revision per version, and the daemon launches that one and no other. So the check is not “is a Chromium there” but “is this revision there”, and the three answers have three different fixes. All three captures below are real, taken by pointing PLAYWRIGHT_BROWSERS_PATH at a full root, a stale root, and an empty one. ✓ installed means the wanted revision is on disk. Nothing to do.
✗ wrong revision means builds are installed and none of them is the wanted one. One pinned download away. The line names the revision Playwright wants, then every revision the root actually holds, then the exact command:
✗ missing means the browsers root holds no Chromium at all. It prints the full executable path it looked for, so you can see which root it searched. If that is not where your browsers live, PLAYWRIGHT_BROWSERS_PATH is what moves it:
Both failing lines are one line in the terminal, wrapped here for width, and the punctuation that separates the verdict from its explanation is shown as .... The revision number and the pinned Playwright version come from the build you are running, so yours may differ from these; use the ones your own doctor prints. The wanted revision and the root are both read back off the path Playwright itself resolves, so PLAYWRIGHT_BROWSERS_PATH and every platform default (including %LOCALAPPDATA%\ms-playwright on Windows) are honoured without this command keeping its own table of roots.
Run the command doctor prints, not npx playwright install chromium. The unpinned form resolves the newest Playwright, downloads its revision, and leaves the check saying exactly what it said before. That loop is why the line names the version to pin to.

Exit codes

Always 0. doctor reports; it does not gate.

Worked example

Deeper debugging

Reading the daemon log, and what RETICLE_TRACE=1 adds to it.
Last modified on September 19, 2026