Skip to content

Clean up browser MCP subprocess tree#85832

Merged
steipete merged 3 commits into
openclaw:mainfrom
TurboTheTurtle:fix/browser-mcp-process-cleanup-85721
May 24, 2026
Merged

Clean up browser MCP subprocess tree#85832
steipete merged 3 commits into
openclaw:mainfrom
TurboTheTurtle:fix/browser-mcp-process-cleanup-85721

Conversation

@TurboTheTurtle

@TurboTheTurtle TurboTheTurtle commented May 23, 2026

Copy link
Copy Markdown
Contributor

Fixes #85721.

Summary

  • disable chrome-devtools-mcp usage statistics by default to avoid the telemetry helper path
  • route all browser MCP teardown through an owned-process cleanup helper
  • collect and terminate child subprocesses before/after client close so detached helpers cannot accumulate
  • run Windows tree cleanup before closing the stdio client so taskkill /T still sees the root tree

Real behavior proof

  • Behavior or issue addressed: Browser automation should not leave owned Chrome MCP subprocesses running after temporary probes, reconnects, or session cleanup. This includes the npx -> chrome-devtools-mcp -> helper process tree and the Windows taskkill /T ordering called out in review.
  • Real environment tested: Local OpenClaw checkout on macOS, branch fix/browser-mcp-process-cleanup-85721, current head bc07969c9312609ee2a3a72a006a4bc414e3ae86.
  • Exact steps or command run after this patch:
    • node --import tsx .tmp/pr85832-live-chrome-mcp-proof.ts
    • node scripts/run-vitest.mjs extensions/browser/src/browser/chrome-mcp.test.ts extensions/browser/src/browser/server-context.existing-session.test.ts extensions/browser/src/browser/server-context.stop-running-browser.test.ts extensions/browser/src/browser/routes/basic.existing-session.test.ts
    • node scripts/check-changed.mjs --base origin/main
  • Evidence after fix: Terminal output from the after-fix checkout:
RUN  v4.1.7 /private/tmp/openclaw-pr85832-live-proof

Test Files  4 passed (4)
Tests  56 passed (56)

[check:changed] lanes=extensions, extensionTests
[check:changed] extensions/browser/src/browser/chrome-mcp.test.ts: extension test
[check:changed] extensions/browser/src/browser/chrome-mcp.ts: extension production
[check:changed] runtime-sidecar-loaders: local runtime sidecar loaders look OK.
Import cycle check: 0 runtime value cycle(s).

Current-head live process-count proof from the patched checkout (bc07969c9312609ee2a3a72a006a4bc414e3ae86) against a dedicated headless Google Chrome remote-debugging endpoint:

proof-start=2026-05-24T05:38:10.966Z
commit=bc07969c9312609ee2a3a72a006a4bc414e3ae86
environment=macOS 25.5.0 node v24.15.0
chrome=dedicated headless Google Chrome with local CDP port
baseline matching chrome-devtools-mcp/watchdog/update-helper processes=0
    none
iteration 1: opened real Chrome MCP session rootPid=81949
iteration 1: live owned process tree
    pid=81949 ppid=81917 cmd=npm exec chrome-devtools-mcp@latest --browserUrl http://127.0.0.1:<port> --no-usage-statistics --experimentalStructuredContent --experimental-page-id-routing
    pid=81968 ppid=81949 cmd=chrome-devtools-mcp
iteration 1: after cleanup owned process tree entries=0
iteration 1: after cleanup matching chrome-devtools-mcp/watchdog/update-helper processes=0
iteration 2: opened real Chrome MCP session rootPid=82024
iteration 2: live owned process tree
    pid=82024 ppid=81917 cmd=npm exec chrome-devtools-mcp@latest --browserUrl http://127.0.0.1:<port> --no-usage-statistics --experimentalStructuredContent --experimental-page-id-routing
    pid=82036 ppid=82024 cmd=chrome-devtools-mcp
iteration 2: after cleanup owned process tree entries=0
iteration 2: after cleanup matching chrome-devtools-mcp/watchdog/update-helper processes=0
iteration 3: opened real Chrome MCP session rootPid=82066
iteration 3: live owned process tree
    pid=82066 ppid=81917 cmd=npm exec chrome-devtools-mcp@latest --browserUrl http://127.0.0.1:<port> --no-usage-statistics --experimentalStructuredContent --experimental-page-id-routing
    pid=82079 ppid=82066 cmd=chrome-devtools-mcp
iteration 3: after cleanup owned process tree entries=0
iteration 3: after cleanup matching chrome-devtools-mcp/watchdog/update-helper processes=0
final matching chrome-devtools-mcp/watchdog/update-helper processes=0
    none
result=PASS real Chrome MCP subprocesses were bounded and cleaned up after repeated sessions
  • Observed result after fix: In a live macOS run, each repeated browser operation created a real npm exec chrome-devtools-mcp@latest -> chrome-devtools-mcp owned subprocess tree, then closeChromeMcpSession removed the owned tree and returned the global Chrome MCP/helper/watchdog/update-helper process count to zero. The after-fix regression also verifies owned Linux-style cleanup kills the simulated 123 -> 124 -> 125 Chrome MCP tree child-first and leaves unrelated pid 126 alone. The new Windows regression verifies cleanup order is taskkill:123 before client.close, so the root tree is still identifiable when taskkill /T runs. Generated Chrome MCP args also include --no-usage-statistics by default unless an explicit usage-statistics flag is supplied.
  • What was not tested: I did not run the live process-count proof on Windows; the Windows-specific taskkill /T ordering is covered by the regression test.

Validation

  • node --import tsx .tmp/pr85832-live-chrome-mcp-proof.ts
    • Result: PASS; three real Chrome MCP sessions returned to zero Chrome MCP/helper/watchdog/update-helper processes after cleanup.
  • node scripts/run-vitest.mjs extensions/browser/src/browser/chrome-mcp.test.ts extensions/browser/src/browser/server-context.existing-session.test.ts extensions/browser/src/browser/server-context.stop-running-browser.test.ts extensions/browser/src/browser/routes/basic.existing-session.test.ts
    • Test Files: 4 passed (4)
    • Tests: 56 passed (56)
  • node scripts/check-changed.mjs --base origin/main
    • Result: passed extension lane checks, extension test typecheck/lint, runtime sidecar loader guard, and import-cycle check.

Please preserve author attribution if this PR is squashed/reworked, or include:

Co-authored-by: Andy Ye [email protected]

@openclaw-barnacle openclaw-barnacle Bot added size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 23, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

Behavior proof from this branch:

  • node scripts/run-vitest.mjs extensions/browser/src/browser/chrome-mcp.test.ts extensions/browser/src/browser/server-context.existing-session.test.ts extensions/browser/src/browser/server-context.stop-running-browser.test.ts extensions/browser/src/browser/routes/basic.existing-session.test.ts
    • Result: 4 test files passed, 51 tests passed.
  • node scripts/check-changed.mjs --base upstream/main
    • Result: changed-check passed for the extension lanes, including typecheck/lint/import-cycle guards.
  • git log --format='%h %an <%ae> %s' upstream/main..HEAD
    • Result: 47265b969a Andy Ye <[email protected]> fix: clean up browser MCP subprocess tree
  • Raw Pulls API verification:
    • maintainer_can_modify: true
    • head sha: 47265b969a0e010afb6f1f78b0fd34af4492340c

Process cleanup behavior covered by the new regression:

  • simulated owned tree: 123 -> 124 -> 125
  • unrelated pid 126 left alone
  • close path calls client.close() once
  • cleanup sends child-first SIGTERM, then SIGKILL, to 125, 124, and 123

Also verified generated Chrome MCP args now include --no-usage-statistics by default, while explicit usage-stat args are not duplicated.

Note: node scripts/crabbox-wrapper.mjs run --repo openclaw/openclaw --shell -- "pnpm check:changed" failed before invoking the repo because the local crabbox binary did not pass its basic --version/--help sanity checks. I used node scripts/check-changed.mjs --base upstream/main locally instead because this worktree is based on upstream/main, while the default pnpm check:changed expects an origin/main merge-base.

@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Latest ClawSweeper review: 2026-05-24 05:49 UTC / May 24, 2026, 1:49 AM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

PR Surface
Source +208, Tests +71. Total +279 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 218 10 +208
Tests 1 71 0 +71
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 289 10 +279

Summary
The PR adds browser-plugin Chrome MCP subprocess-tree cleanup, routes direct client.close() teardown through an owned-process helper, and adds POSIX plus Windows cleanup-order regressions.

Reproducibility: yes. at source level, though I did not run a live current-main leak loop in this read-only review. Current main only calls SDK client.close(), and the upstream stdio transport close path only controls the spawned process rather than the full npx -> chrome-devtools-mcp -> helper tree described in the linked report.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: Strong current-head terminal proof and focused tests make this a solid PR, with normal maintainer review still needed for OS process-kill risk.

Rank-up moves:

  • Have a maintainer explicitly accept the macOS live proof plus mocked Linux/Windows coverage, or request live Windows proof before merge.
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Real behavior proof
Sufficient (terminal): The PR body now includes current-head terminal proof showing repeated real Chrome MCP sessions returning to zero matching processes, plus focused test and changed-check output; private details are redacted.

Risk before merge

  • The patch deliberately sends SIGTERM/SIGKILL or taskkill /T /F to PIDs collected from an owned Chrome MCP tree, so maintainers need to accept the PID ownership and PID-reuse tradeoff before merge.
  • Live process-count proof is macOS-only; Linux/POSIX descendant cleanup and Windows taskkill ordering are covered by focused mocked regressions rather than live OS proof.
  • Custom mcpCommand launches are also marked as an owned tree, so operators using a custom wrapper that starts persistent child services could see those children terminated on session cleanup.

Maintainer options:

  1. Land with availability sign-off (recommended)
    Maintainers can accept the owned-tree termination tradeoff because the PR has current-head macOS live proof plus focused POSIX and Windows regressions for the risky ordering.
  2. Request Windows live proof
    If Windows runtime confidence is required before merge, ask for a live Windows taskkill/process-count proof against the current PR head.
  3. Pause for a shared cleanup seam
    If maintainers want one plugin-safe process-tree cleanup contract instead of browser-local PID traversal, pause this PR and design that SDK/runtime seam first.

Next step before merge
Needs maintainer sign-off on OS process-tree termination risk; no narrow automated repair defect was found.

Security
Cleared: No dependency, workflow, lockfile, credential, permission, or supply-chain change was found; the concrete merge concern is runtime availability from OS process termination.

Review details

Best possible solution:

Land the browser-plugin-owned cleanup after maintainer sign-off on process-tree termination semantics, then let the linked leak issue close from the merged fix.

Do we have a high-confidence way to reproduce the issue?

Yes at source level, though I did not run a live current-main leak loop in this read-only review. Current main only calls SDK client.close(), and the upstream stdio transport close path only controls the spawned process rather than the full npx -> chrome-devtools-mcp -> helper tree described in the linked report.

Is this the best way to solve the issue?

Yes, the PR is a narrow browser-plugin fix that keeps ownership local and adds focused regression coverage for the cleanup paths. The safer alternative would be a shared plugin-safe process cleanup seam, but that is a broader design choice rather than required for this bug fix.

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body now includes current-head terminal proof showing repeated real Chrome MCP sessions returning to zero matching processes, plus focused test and changed-check output; private details are redacted.
  • add rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and Strong current-head terminal proof and focused tests make this a solid PR, with normal maintainer review still needed for OS process-kill risk.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body now includes current-head terminal proof showing repeated real Chrome MCP sessions returning to zero matching processes, plus focused test and changed-check output; private details are redacted.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P1: The linked bug reports Chrome MCP process accumulation consuming gigabytes of memory and destabilizing browser automation sessions.
  • merge-risk: 🚨 availability: Merging this PR changes teardown from SDK close-only to force-terminating an OS process tree, which can affect runtime process availability if ownership assumptions are wrong.
  • rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and Strong current-head terminal proof and focused tests make this a solid PR, with normal maintainer review still needed for OS process-kill risk.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body now includes current-head terminal proof showing repeated real Chrome MCP sessions returning to zero matching processes, plus focused test and changed-check output; private details are redacted.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body now includes current-head terminal proof showing repeated real Chrome MCP sessions returning to zero matching processes, plus focused test and changed-check output; private details are redacted.

What I checked:

  • Current main teardown is direct SDK close only: Current main removes cached Chrome MCP sessions and calls session.client.close() without collecting or terminating the subprocess tree, so the linked accumulation bug is still present on main. (extensions/browser/src/browser/chrome-mcp.ts:337, 0ba6b235349a)
  • Dependency close contract only owns the spawned stdio process: The upstream @modelcontextprotocol/sdk v1.29.0 StdioClientTransport.close() ends stdin, waits, and signals the direct child process; it does not enumerate or kill grandchildren/watchdog helpers. (upstream:modelcontextprotocol/typescript-sdk/src/client/stdio.ts:167)
  • PR adds owned-tree cleanup around Chrome MCP close: The PR head collects descendant PIDs from ps, force-cleans with taskkill /T /F on Windows before SDK close, and otherwise closes the client then terminates collected descendants and root PID best-effort. (extensions/browser/src/browser/chrome-mcp.ts:590, bc07969c9312)
  • Regression coverage exercises POSIX and Windows cleanup semantics: The tests assert child-first SIGTERM/SIGKILL for an owned Linux-style tree, Windows taskkill before client.close, and fallback to SDK close if taskkill fails. (extensions/browser/src/browser/chrome-mcp.test.ts:272, bc07969c9312)
  • PR body includes current-head live proof: The PR body and latest author comment report a macOS live run on bc07969c9312609ee2a3a72a006a4bc414e3ae86 where three real npm exec chrome-devtools-mcp@latest -> chrome-devtools-mcp sessions returned to zero matching processes, plus 56 focused tests and changed checks passed. (bc07969c9312)
  • Browser docs confirm this is the documented Chrome MCP path: The browser docs describe the existing-session path spawning npx chrome-devtools-mcp@latest --autoConnect, matching the process tree affected by the leak report and this PR. Public docs: docs/tools/browser.md. (docs/tools/browser.md:613, 0ba6b235349a)

Likely related people:

  • steipete: Git history shows Peter Steinberger introduced the Chrome MCP existing-session docs, moved the browser implementation into the bundled plugin, and has most recent/current-main ownership of chrome-mcp.ts and its tests. (role: feature owner and recent area contributor; confidence: high; commits: 593964560ba7, 8eeb7f082975, 1a4766051847; files: extensions/browser/src/browser/chrome-mcp.ts, extensions/browser/src/browser/chrome-mcp.test.ts, docs/tools/browser.md)
  • Daniel Sauer: The closest shared process-tree helper history is the graceful process-tree termination work in src/process/kill-tree.ts, which is relevant to reviewing the OS cleanup semantics even though the browser plugin cannot import core internals directly. (role: adjacent process-tree cleanup contributor; confidence: medium; commits: 20957efa4674; files: src/process/kill-tree.ts, src/agents/mcp-stdio-transport.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 0ba6b235349a.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 23, 2026
@clawsweeper

clawsweeper Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Cosmic Merge Sprite

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: polishes edge cases.
Image traits: location CI tidepool; accessory review stamp; palette cobalt, lime, and pearl; mood sparkly; pose standing beside its cracked shell; shell starlit enamel shell; lighting tiny status-light glow; background small green status lights.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Cosmic Merge Sprite in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 23, 2026

Copy link
Copy Markdown
Contributor Author

Added live process-count proof to the PR body.

Tested commit: 8f61f287f6474c11d0a0fac739c981a85f3a8bf3
Environment: macOS 25.5.0, Node v24.15.0, dedicated headless Google Chrome with local CDP port
Live proof: three repeated real npm exec chrome-devtools-mcp@latest -> chrome-devtools-mcp sessions returned to zero Chrome MCP/helper/watchdog/update-helper processes after cleanup.
Validation: focused browser MCP regression set still passes, 4 files / 52 tests.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
@steipete
steipete force-pushed the fix/browser-mcp-process-cleanup-85721 branch from 8f61f28 to bc07969 Compare May 24, 2026 05:16
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 24, 2026

Copy link
Copy Markdown
Contributor Author

Refreshed the live process-count proof on the current PR head.

Tested commit: bc07969c9312609ee2a3a72a006a4bc414e3ae86
Environment: macOS 25.5.0, Node v24.15.0, dedicated headless Google Chrome with local CDP port
Live proof: three repeated real npm exec chrome-devtools-mcp@latest -> chrome-devtools-mcp sessions returned to zero Chrome MCP/helper/watchdog/update-helper processes after cleanup.
Validation:

  • node scripts/run-vitest.mjs extensions/browser/src/browser/chrome-mcp.test.ts extensions/browser/src/browser/server-context.existing-session.test.ts extensions/browser/src/browser/server-context.stop-running-browser.test.ts extensions/browser/src/browser/routes/basic.existing-session.test.ts passed: 4 files / 56 tests.
  • node scripts/check-changed.mjs --base origin/main passed for the extension lane.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
@steipete
steipete merged commit 8dc6b4d into openclaw:main May 24, 2026
143 of 156 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 25, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
@TurboTheTurtle
TurboTheTurtle deleted the fix/browser-mcp-process-cleanup-85721 branch May 25, 2026 20:42
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* fix: clean up browser MCP subprocess tree

* fix: clean up windows browser mcp tree before close

* fix(browser): repair chrome mcp cleanup rebase

---------

Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Browser automation: chrome-devtools-mcp processes accumulate and never terminate (memory leak)

2 participants