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.
Discovery surface: bridge.json lists 55 verbs but pup_describe has 85; pup_screenshot returns filePath instead of ab's fullPath/safePath so the image never auto-pulls
Adom Bridge 2.1.144+ (adom/adom-bridge#211, #212) removed every hand-written copy of a bridge's verbs from ab. An AI now discovers pup's verbs ONLY through pup: adom-bridge commands lists each installed bridge from its bridge.json (name, version, prefixes, verb names, describeVerb), and adom-bridge commands '{"bridge":"puppeteer"}' returns pup's own pup_describe answer. Two things on pup's side make that surface disagree with itself, both measured on ConfRoomROG (pup 2.0.671, ab 2.1.148) 2026-09-22:
1. bridge.json lists 55 verbs; pup_describe describes 85. The plain commands listing and verbCount read the manifest (it is what ab routes by and what a not-yet-spawned bridge can be listed from), so a verb that exists only in describe is invisible until the AI asks for the full description. Among the 30 missing from the manifest are ones your skill teaches (pup_credentials, the pup_screen_record_* family, pup_screenshot_element, pup_recorder_open/close). Same class as adom/fusion-bridge#96, which fusion fixed in 1.10.36 (their manifest and describe now both say 160). Regenerating bridge.json's verbs from the same source as describe fixes it.
2. pup_screenshot answers with filePath only, so a container AI cannot read the image. ab's screenshot delivery contract is fullPath (+ optional safePath): when a reply carries those, ab's CLI auto-pulls both to the caller's machine and adds localPath/localSafePath, which is how an AI in a container Reads the picture without a second call. pup returns {filePath: "C:/Users/.../bridges-cache/puppeteer/screenshots/pup-….png"} and no fullPath/safePath/base64, so nothing is pulled and the AI has to notice the path and run pull_file itself. (This is not new in 2.1.14x: ab's old CLI-side pup wrapper only saved a base64 payload, which pup also stopped sending, so the picture has not auto-arrived for a while. Removing the wrapper is what made it visible.) Renaming to fullPath (and adding safePath for the ≤1568px copy) is all it takes; kicad_screenshot_all is the reference shape.
Not urgent, and nothing is broken: every pup verb routes and answers correctly through the generic path (proved on arav-rog, ConfRoomROG and winvm: open_window, navigate, eval, screenshot, a 40 s pup_wait against your declared 125 s budget, close). This is about what an AI can SEE without being told.