feat(cli): shut idle headless sessions down after an hour - #42676
Merged
Merged
Conversation
Pavel Feldman (pavelfeldman)
left a comment
Member
There was a problem hiding this comment.
I think this should bubble up from the tools/backend/Context. It should self-destruct upon inactivity, which will be destroying backend server.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Yury Semikhatsky (yury-s)
force-pushed
the
fix-cli-460
branch
from
September 11, 2026 19:13
43250e6 to
5d88965
Compare
This comment has been minimized.
This comment has been minimized.
Contributor
🟢 CI is clear — the one failure is a pre-existing Firefox flakeHi, I'm the Playwright bot and I took a first look at the failing check. The latest merge report (run 34641795387) has a single failure, DetailsPre-existing flake / infra
Triaged by the Playwright bot - agent run |
The daemon now honors timeouts.idle and defaults it to one hour for headless browsers it launched, exiting the same way `close` does. Headed and attached browsers keep running unless a timeout is set explicitly. `open --idle-timeout=<ms>` overrides the default and 0 disables it. The MCP server gets the same default, and its option is renamed to --idle-timeout to match. Fixes microsoft/playwright-cli#460
Yury Semikhatsky (yury-s)
force-pushed
the
fix-cli-460
branch
from
September 11, 2026 21:39
5d88965 to
71acf89
Compare
Pavel Feldman (pavelfeldman)
approved these changes
Sep 11, 2026
Drops the running-call bookkeeping: a tool call is expected to be short relative to the timeout, so restarting the countdown when the call starts is enough and removes the callTool wrapper.
This comment has been minimized.
This comment has been minimized.
Also drops unref(): both the MCP server and the CLI daemon exit through process.exit(), so the timer never decides whether the process lives.
Contributor
Test results for "MCP"8509 passed, 1436 skipped Merge workflow run. |
This was referenced Sep 12, 2026
This was referenced Sep 14, 2026
Yury Semikhatsky (yury-s)
added a commit
to microsoft/playwright-mcp
that referenced
this pull request
Sep 14, 2026
## What's New ### 🎉 New Tools - **`browser_webmcp_list` / `browser_webmcp_call`** — List and call the tools a page registers through the [WebMCP](https://webmachinelearning.github.io/webmcp/) API, letting the page do the work instead of driving its UI. When a page has WebMCP tools, the page status reports how many are available ([#42613](microsoft/playwright#42613)). WebMCP is experimental, see [WebMCP in Chrome](https://developer.chrome.com/docs/ai/webmcp) for how to enable it. ### Other Changes - New `--profile-dir-name <name>` option (env `PLAYWRIGHT_MCP_PROFILE_DIR_NAME`) selects the Chrome profile to connect to in extension mode when the extension is installed in several profiles, for example `"Profile 1"` ([#42527](microsoft/playwright#42527)) - Headless browsers launched by the server are now closed after one hour without tool calls; the next tool call launches a new one. Use `--idle-timeout <ms>` (config `timeouts.idle`, env `PLAYWRIGHT_MCP_IDLE_TIMEOUT`) to change the timeout, `0` disables it. Headed and attached browsers are not closed unless a timeout is set explicitly ([#42663](microsoft/playwright#42663), [#42676](microsoft/playwright#42676)) - `--image-responses` accepts `only`: a response that carries an image consists of the image parts alone, without the text part ([#42672](microsoft/playwright#42672)) ## Bug Fixes - `browser_close` returns an error when the browser context is shared (`--shared-browser-context`) instead of breaking the calling client's session. This supersedes the v0.0.80 change that dropped the backend after `browser_close` ([#42495](microsoft/playwright#42495)) - With `--shared-browser-context`, `browser_start_recording` / `browser_stop_recording` (opt-in via `--caps=devtools`) keep each client's recording separate instead of delivering one client's recorded actions to another ([#42622](microsoft/playwright#42622), [#42627](microsoft/playwright#42627)) - The file access check follows symlinks, so a symlink inside the workspace can no longer be used to read or write files outside the allowed roots ([#42628](microsoft/playwright#42628)) - Explicitly named output files in a nested directory (e.g. `sub/shot.png`) no longer fail with `ENOENT`; `browser_file_upload` and `browser_drop` resolve relative paths against the workspace root ([#42540](microsoft/playwright#42540)) - In extension mode with `PLAYWRIGHT_MCP_EXTENSION_TOKEN` set, a connection that never completes (e.g. the token belongs to another Chrome profile) now fails after 30 seconds with a hint instead of hanging the tool call forever ([#42525](microsoft/playwright#42525)) - Disable the Chromium sandbox by default on Linux for the bundled Chromium build, which lacks the setuid sandbox helper ([#42490](microsoft/playwright#42490))
Yury Semikhatsky (yury-s)
added a commit
to microsoft/playwright-cli
that referenced
this pull request
Sep 14, 2026
## What's New ### 🎉 New Commands - **`webmcp-list` / `webmcp-call`** — List and call the tools a page registers through the [WebMCP](https://webmachinelearning.github.io/webmcp/) API, letting the page do the work instead of driving its UI. When a page has WebMCP tools, the page status reports how many are available ([#42613](microsoft/playwright#42613)). WebMCP is experimental, see [WebMCP in Chrome](https://developer.chrome.com/docs/ai/webmcp) for how to enable it. ### Other Changes - Headless sessions now shut down after one hour without commands, so a session an agent never closed no longer holds a browser; run `open` again to start a new one. Use `open --idle-timeout <ms>` (config `timeouts.idle`, env `PLAYWRIGHT_MCP_IDLE_TIMEOUT`) to change the timeout, `0` disables it. Headed browsers stay open, and attached browsers are only detached when `attach --idle-timeout <ms>` is set ([#42676](microsoft/playwright#42676)) - The skill includes a guide for attaching screenshots and videos to pull requests with `gh --attach` ([#42645](microsoft/playwright#42645)) ## Bug Fixes - Session daemons exit when their control socket is deleted or replaced, instead of staying alive with the browser ([#42454](microsoft/playwright#42454)) - Explicitly named output files in a nested directory (e.g. `screenshot --filename=sub/shot.png`) no longer fail with `ENOENT` ([#42540](microsoft/playwright#42540)) - Video chapters and screencast overlays are no longer hidden behind open dialogs and popovers ([#42642](microsoft/playwright#42642)) - `npx playwright test --debug=cli` works for tests that create more than one browser context and for every test in a worker, not just the first ([#42503](microsoft/playwright#42503)) - With `PLAYWRIGHT_MCP_EXTENSION_TOKEN` set, `attach --extension` fails after 30 seconds with a hint when the extension never connects (e.g. the token belongs to another Chrome profile) instead of hanging forever ([#42525](microsoft/playwright#42525)) - Disable the Chromium sandbox by default on Linux for the bundled Chromium build, which lacks the setuid sandbox helper ([#42490](microsoft/playwright#42490)) ## Upgrading ```bash npm install -g @playwright/cli@0.1.20 ```
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
closedoes, so a session an agent never closed stops holding a browser. Headed and attached browsers are left alone.--idle-timeout <ms>onopen,attachand the MCP server overrides the default in any mode,0disables it. Also settable astimeouts.idlein the config file orPLAYWRIGHT_MCP_IDLE_TIMEOUT. The MCP option was named--timeout-idlein 1.64.0-next and is renamed here before it ships.IdleTimergainspoke(), called when a tool call starts and once when a CLI session is ready, which covers a session that never receives a command.Fixes microsoft/playwright-cli#460