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
Publish 2.0.593
4 files changed
+31−16
SKILL.md+10−4@@ -396,10 +396,16 @@ all changed nothing. 15s or so after open/navigate before you read, and re-read rather than declaring a page empty. A body of 0 chars WITH a title is a bot wall, not a slow load. -**What it cannot do.** No CDP means no focus emulation, no user-agent override, no precise trusted input,-no annotate overlay, no taskbar identity, and it is NOT part of the normal window/session model-(`pup_list_windows` does not show it). Use it for pages that wall CDP; use normal pup windows for-everything else.+**What it can do (2.0.592).** The extension lane IS the normal pup window now: it appears in+`pup_list_windows`, wears the thread tile, jump list and favicon badge, and answers `pup_click`,+`pup_hover`, `pup_type`, `pup_press_key`, `pup_scroll`, `pup_fill`, `pup_select`, `pup_input_dispatch`,+`pup_annotate`, `pup_screenshot` (a covered window included), `pup_screenshot_element`,+`pup_screenshot_full_res`, `pup_record_start` / `pup_record_stop` (through ab's native recorder), and+`pup_eval` on pages whose CSP or Trusted Types refuse injected script (Google Calendar, Admin, the wiki),+which it retries through DevTools on its own. Still CDP-only, answered with `lane_needs_cdp` and the fix:+selector-driven `pup_download`, `realKeystrokes` logins, iframe targeting, separate profiles, `highFps`,+`webSecurity:false`. Do not reopen with `lane:"cdp"` for input or eval; the `pup-lanes` skill is the+authority on what each lane does. **When it will NOT help.** A site that denies a profile with no established trust denies every client, including the user's real Chrome driven by the real extension (analog.com does exactly this on a cold
package.json+2−2@@ -1,6 +1,6 @@ { "slug": "pup-bridge",- "version": "2.0.592",+ "version": "2.0.593", "type": "app", "description": "The pup SKILL PACK \u2014 the AI skills that teach a cloud/container AI how to drive the Adom Desktop Puppeteer (pup) bridge (browser_* verbs): the everyday `pup` skill plus focused sub-skills for windows/sessions/tabs, screenshots+recording, browsers+Chrome install, and driving the Adom wiki. Installs into ~/.claude/skills + ~/.codex/skills. DOCS ONLY \u2014 this is NOT the bridge runtime. The bridge itself (the Node program that drives the browser) runs on the DESKTOP: Adom Desktop bundles it and auto-installs/updates it, and it's published separately on the Releases tab as adom-bridge-puppeteer-v<ver>.zip. The pkg version is kept in lockstep with the Release version so the page's max version row always carries BOTH a pkg tarball (skills) and a runtime zip (bridge) \u2014 a skills-only or runtime-only bump on the top row breaks constraint installs. TL;DR: pkg install = the skills for your AI; the bridge = the Release zip, which Adom Desktop manages for you.", "keywords": [@@ -148,5 +148,5 @@ "prompt": "Download the puppeteer-bridge zip from the wiki and walk me through server.js" } ],- "changelog": "pup_select {selector, value|label}: choose a <select> option in the background on both lanes (DevTools evaluate, CSP and Trusted Types cannot refuse it); pup_eval on the extension lane falls back to DevTools for Trusted Types refusals too (Google Calendar, Admin). Closes pup-bridge#116."+ "changelog": "skills: the main pup skill's capability paragraph and the screenshots-and-recording skill now describe the extension lane as it is (input parity, pup_select, CSP and Trusted Types eval fallback, recording through ab's native recorder); the old 'no trusted input, not in the session model' text and the three-recorder table were from the era when the lane was a fallback verb and sent the Work thread to file pup-bridge#116." }
page.json+2−2@@ -4,7 +4,7 @@ "slug": "pup-bridge", "title": "Pup - Puppeteer Bridge", "brief": "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.",- "version": "2.0.592",+ "version": "2.0.593", "tags": [ "skills", "pup",@@ -168,5 +168,5 @@ "pup-bridge verbs are invoked through the adom-bridge CLI, not through a binary this package installs, so prefix rules cannot reach them." ] },- "changelog": "pup_select {selector, value|label}: choose a <select> option in the background on both lanes (DevTools evaluate, CSP and Trusted Types cannot refuse it); pup_eval on the extension lane falls back to DevTools for Trusted Types refusals too (Google Calendar, Admin). Closes pup-bridge#116."+ "changelog": "skills: the main pup skill's capability paragraph and the screenshots-and-recording skill now describe the extension lane as it is (input parity, pup_select, CSP and Trusted Types eval fallback, recording through ab's native recorder); the old 'no trusted input, not in the session model' text and the three-recorder table were from the era when the lane was a fallback verb and sent the Work thread to file pup-bridge#116." }
skills/pup-screenshots-recording/SKILL.md+17−8@@ -1,7 +1,7 @@ --- name: pup-screenshots-recording user-invocable: true-description: "Capturing pup (Puppeteer bridge) windows: SCREENSHOTS (pup_screenshot — lossless PNG, full-page vs viewport, full-resolution via pup_screenshot_full_res, and how to actually READ the image) and RECORDING (pup_record_start/stop records ONE pup tab/window's page content to a video; desktop_record_start/stop records the WHOLE desktop across apps). Covers framing a window at an exact size for a clean shot WITHOUT foregrounding it, and why pup shots are true-to-life (real rendered window, not headless). Read when screenshotting a page, capturing full-page vs above-the-fold, recording a demo/walkthrough of an app, or choosing the window-recorder vs the desktop-recorder. Trigger words: pup_screenshot, pup_screenshot_full_res, full page screenshot, screenshot the page, read the screenshot, pup_record_start, pup_record_stop, desktop_record_start, desktop_record_stop, record my app, record a demo, screen recording, walkthrough video, pup screenshot, pup recording."+description: "Capturing pup (Puppeteer bridge) windows: SCREENSHOTS (pup_screenshot — lossless PNG, full-page vs viewport, full-resolution via pup_screenshot_full_res, and how to actually READ the image) and RECORDING (pup_record_start/stop records ONE pup window through ab's native recorder, MP4, extension lane included; desktop_record_start/stop records the WHOLE desktop across apps). Covers framing a window at an exact size for a clean shot WITHOUT foregrounding it, and why pup shots are true-to-life (real rendered window, not headless). Read when screenshotting a page, capturing full-page vs above-the-fold, recording a demo/walkthrough of an app, or choosing the window-recorder vs the desktop-recorder. Trigger words: pup_screenshot, pup_screenshot_full_res, full page screenshot, screenshot the page, read the screenshot, pup_record_start, pup_record_stop, desktop_record_start, desktop_record_stop, record my app, record a demo, screen recording, walkthrough video, pup screenshot, pup recording." --- **Parent skill:** pup-bridge · See also: `pup` (start here), `pup-windows-sessions-tabs`, `pup-browsers-and-chrome`.@@ -39,16 +39,25 @@ adom-bridge-cli pup_screenshot '{"sessionId":"mytask-web","tabId":"tab-2"}' # a characters — `Café` → `Café` — unless you hand-add `;charset=utf-8`; `render_html` just does it right.) Then screenshot/drive it like any page. Great for previewing generated markup without writing a temp file. -## Recording — three recorders, pick by what you're capturing+## Recording: one recorder, ab's, and pup's verbs ride it -**Desktop recording belongs to ab, not pup (John, 2026-09-07).** When someone asks to record the-desktop, guide them to Adom Bridge's native recorder. pup is the fallback, and a decent one.+**Desktop recording belongs to ab, not pup (John, 2026-09-07), and since 2.0.582 so does window+recording.** `pup_record_start {window}` and `pup_record_stop {window}` delegate to ab's native+recorder (`desktop_record_window_start` / `_stop` keyed on the pup window's handle): Windows Graphics+Capture, hardware H.264, an MP4 you can share as is, and a window buried under the user's other windows+still records live. It works on the extension lane. Frames are emitted only when the window's content+changes, so a static page yields few frames and a small file; that is by design, not a dropped take.+The response carries `filePath`, `bytes`, `frames` and `recordedMs`; pull the file with+`adom-bridge pull_file {filePaths:[path]}`. -| Recorder | Captures | Use for |+| Ask | Verb | Captures | |---|---|---|-| **`desktop_record_start` / `desktop_record_stop`** (ab-core, ab 2.1.36+) | a whole monitor or one window, Windows Graphics Capture + system audio (WASAPI loopback) to H.264/AAC MP4; no browser, no picker, consent = a persistent caption | **the default for any desktop recording.** ab goes aggressive on GPU acceleration, including GPU frame offloading when the machine has a GPU, so it is the lightest and sharpest capture on a capable box |-| **`pup_screen_record_start` / `pup_screen_record_stop`** (pup, via `pup_recorder_open`) | the desktop through Chrome's screen share, the way Google Meet records a screen: getDisplayMedia into WebM VP9, system audio + mic mixing, consent = the visible recorder HUD | **the fallback**: it works on a very broad range of computers, including ones where the native path is missing, refuses, or has no usable GPU. Reach for it when `desktop_record_status {}` errors or ab is older than 2.1.36 |-| **`pup_record_start` / `pup_record_stop`** | ONE pup tab/window, the page content only | "record my app", a feature walkthrough, a focused UI flow |+| "record my app", a UI walkthrough | `pup_record_start` / `pup_record_stop` | ONE pup window, whole window frame, MP4, no audio |+| "record my desktop / the demo with sound" | ab `desktop_record_start` / `desktop_record_stop` (ab 2.1.36+) | a whole monitor plus the system audio mix, MP4 |++The old Chrome screen-share recorder (`pup_screen_record_*` through the `pup_recorder_open` HUD) and the+DevTools screencast are retired to fallbacks pup uses only where ab's recorder is absent; do not offer+them. `pup_record_status` and `pup_record_list` report through ab too. Say it the way the user will understand: "ab records your desktop natively (GPU accelerated); pup can do it Meet-style if that is not available." Never present desktop recording as pup's own feature.