app
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.
← Commit history
v1.8.29: background = minimize-and-leave (off-screen already invisible), fully drops keyboard focus
4 files changed
+13−10
adom-bridge-puppeteer-manifest.json+5−5@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "puppeteer",- "version": "1.8.28",- "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.8.28/adom-bridge-puppeteer-v1.8.28.zip",- "sha256": "6f157c9b6f668e95e3679cbb8fcee828faf88ab000a9463d812cf189380068dd",- "size": 155793,+ "version": "1.8.29",+ "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.8.29/adom-bridge-puppeteer-v1.8.29.zip",+ "sha256": "93b7def84fe8b2b203ab3ccd37007cf3525ebd7beda73339205543eaf4b22371",+ "size": 155873, "verbPrefixes": [ "browser_", "desktop_recorder_",@@ -12,5 +12,5 @@ ], "healthEndpoint": "/status", "statusVerb": "browser_readiness",- "released_at": "2026-07-14T18:59:52Z"+ "released_at": "2026-07-14T19:10:42Z" }
src/BRIDGE_VERSION+1−1@@ -1 +1 @@-1.8.28+1.8.29
src/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "puppeteer", "displayName": "Puppeteer (Chrome for Testing + Native)",- "version": "1.8.28",+ "version": "1.8.29", "description": "Drives a browser ALREADY on the machine — installed Chrome, else Microsoft Edge (every Windows PC ships with Edge) — launched with a FRESH isolated profile, so the common case has NO ~150 MB Chrome-for-Testing download and it never touches the user's real tabs/logins. Binds its local server to LOOPBACK (127.0.0.1) only, so no Windows Firewall 'allow Node through the firewall' prompt ever pops. Chrome for Testing is fetched only as a LAST RESORT if the machine has no Chromium browser at all. SPAWN-VERIFIED fallback: pup tries each detected browser (Chrome → Edge → CfT) and actually launches it, falling through to the next if one won't start (and handling browsers like Edge that relaunch onto another PID), so a corrupt/partial install never hard-fails an open. The browser that launches is cached as the default (persisted across restarts) so it isn't re-probed each time. On spawn the bridge SELF-WARMS: detects browsers + disk, and only if the box has no Chrome/Edge and no cached CfT does it background-fetch CfT so the first open is instant. browser_use pins a specific browser (chrome | edge | cft | auto); {browser:'chrome',install:true} downloads & installs REAL Google Chrome (user-scoped, no admin) on an Edge-only box. browser_readiness (READ-ONLY) reports which browser will be used + the full candidate list + the default + free disk. Every failure returns a specific errorCode + _hint (chrome_install_no_disk, chrome_download_network, chrome_install_permission, chrome_stable_not_detected, …). Launches with FULL browser permissions by default for full debug (strictPermissions:true opts out). Headful automation: open/close windows+tabs, navigate, screenshot, eval JS, record. pup is a GENERIC, non-profile browser only — every session is a fresh isolated Chrome/Edge process, never the user's real signed-in browser; profile defaults to sessionId. To drive the user's REAL Chrome/Edge (their profile, cookies, SSO), use the Adom browser EXTENSION's nbrowser_* verbs — a separate bridge, not pup's job.", "homepage": "https://wiki.adom.inc/adom/adom-desktop", "author": "Adom Inc.",
src/server.js+6−3@@ -1536,9 +1536,12 @@ function osBackgroundWindowByPid(pid, cdpPort) { '}', 'if ($handles.Count -eq 0) { Write-Output "no-window"; exit }', 'foreach($h in $handles){',- ' [WinBgP]::ShowWindow($h, $SW_MINIMIZE) | Out-Null', // drop foreground → OS gives it back to the user- ' [WinBgP]::ShowWindow($h, $SW_SHOWNOACTIVATE) | Out-Null', // re-show without activating (composites for screenshots)- ' [WinBgP]::SetWindowPos($h, $BOTTOM, 0,0,0,0, $SWP) | Out-Null', // and pin to the bottom of z-order+ // v1.8.29: just MINIMIZE and leave it — the window is already OFF-SCREEN, so it's+ // invisible either way, and minimizing is the one action that reliably makes Windows+ // hand foreground back to the user (no re-show for the browser to re-grab focus on).+ // CDP screenshots keep working because pup runs the renderer with anti-throttle flags+ // (--disable-backgrounding-occluded-windows etc.), so the page still paints minimized.+ ' [WinBgP]::ShowWindow($h, $SW_MINIMIZE) | Out-Null', '}', // Verify: is any pup window STILL the foreground window? '$fg = [WinBgP]::GetForegroundWindow()',