Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
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.