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.
After 2.0.572 update, three threads' sessions share one hwnd, so raising one surfaces another thread's window
Machine: AdomLapper (Windows), pup 2.0.572 (updated from 2.0.566 during the session on 2026-09-14), Adom Bridge 2.1.118.
What happened: thread "all-engineering agenda" asked pup to show its window. pup_raise_os_window {foregroundReason} returned ok, but the window that came to the front was another thread's window: session nsf-pages2 (owner "NSF"), showing the node talk page.
Why: pup_list_windows reports three different sessions, owned by three different threads, all with the SAME hwnd:
pup-wiki owner pup-bridge hwnd 2950842
all-engineering-agenda owner all-engineering agenda hwnd 2950842
nsf-pages2 owner NSF hwnd 2950842
pup_list_tabs for all-engineering-agenda shows one active tab (the agenda doc), so pup itself treats it as its own window. The handle tagging is what is wrong: raising any of the three raises the NSF window, which breaks the window-ownership promise (one thread surfaced another thread's window).
Sequence that led here (all within ~15 min, same box):
- The agenda session's window disappeared;
pup_rescansaid the session was disconnected and its browser was gone. pup_open_windowthen timed out at ab's 60s budget while pup updated to 2.0.572.- Next
pup_open_window {foreground:true, foregroundReason}failed withext_no_answer(40s). - Retry returned ok, but nothing came to the front;
pup_raise_os_windowsaidno_window_handle. - After
pup_rescan("All known sessions are live: []"),pup_raise_os_windowreturned ok and raised hwnd 2950842, the NSF window.
Also: desktop_list_windows on this box returned only 3 windows (Edge, Hydrogen, Windows Input Experience) and none of the pup windows, while the NSF pup window was the foreground window.
Expected: each session is tagged with its own OS window; a raise for one thread never surfaces another thread's window, and if pup is not sure which hwnd is right it should refuse rather than raise a guess.