Pup - Puppeteer Bridge
Public Made by Adomby adom
pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.
pup Chrome sessions never reaped: 3 orphaned sessions ran 2 days and drained a laptop battery overnight
Summary
Orphaned pup (Puppeteer) Chrome sessions were left running for ~2 days and drained a laptop battery overnight. On 2026-07-23 a diagnostic on a Windows laptop found 6 chrome.exe processes (3 pup browser sessions, each a browser process plus its renderer) launched from C:\Users\<user>\.cache\puppeteer\chrome\win64-146.0.7680.76\... on 2026-07-21 between 18:12 and 18:18, still running when checked two days later.
Impact
- The 3 browser processes drew ~20% CPU combined (about 6.5% each) while doing nothing visible. All had
HWND = 0(no window, background-only), so there was no on-screen sign they were still alive. - On this Modern Standby (S0) laptop, unplugged with the lid closed overnight, that constant CPU kept the system out of deep idle. It drew ~13 W and drained from 99.9% to 2.5% in about 5.5 hours, then force-suspended at critical battery.
- A
powercfg /energytrace flagged "Processor utilization is high" (34.8% average), and the top offenders were exactly the three puppeteer-cachechrome.exeprocesses.
Root cause
pup opens browsers in the background and never auto-closes them (documented behavior: "Windows never auto-close, clean up when a task ends"). A task that ended without an explicit cleanup left the sessions running indefinitely. Nothing reaped them: not the bridge on shutdown, not a TTL, not an idle timeout.
Requested fix / ideas
- Reap a pup Chrome session when its owning task or session ends, or after an idle/TTL timeout.
- On bridge shutdown or restart, kill any Chrome spawned from this bridge's puppeteer cache that it still owns.
- Add a verb to list stale pup sessions (with age and owner) and close them, so operators can clean up safely without killing
chrome.exeby name. - Consider a max-session cap, or a warning surfaced when sessions accumulate past a threshold.
Evidence / how to check
- List only pup Chrome:
Get-CimInstance Win32_Process | Where-Object { $_.Name -eq 'chrome.exe' -and $_.CommandLine -like '*puppeteer*' } - Kill safely: stop only those PIDs (path-filtered on the puppeteer cache), never
chrome.exeby name, so the user's real Chrome is untouched. - Environment: adom-desktop GUI 1.9.162 on the laptop, CLI 1.9.167 in the container, Windows, hybrid graphics.
Filed from a battery-drain investigation.