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.603
4 files changed
+41−4
SKILL.md+4@@ -44,6 +44,10 @@ dropdown. Backed by the OS keychain (encrypted at rest); passwords are never log signed into) and you decide from the task, the user's work and personal skills, or by asking. It sends no password when the account is already signed in, and hands back any verification step with the exact call that finishes it. Full playbook: the `pup-credentials` skill, section 0.+- **Waiting on the human? TOAST, with the window attached.** `notify_user {title, body, level:"warning",+ focus:{hwnd:<pup window>}}` so clicking the toast opens the exact window that is waiting (`focus:{host:true}`+ for a Bridge consent, which appears inside Hydrogen). pup toasts on every no-password answer itself from+ 2.0.603; you still toast whenever YOUR thread is about to sit and wait, because the user cannot see it. - **pup can read the user's OWN saved browser logins**: `pup_import_browser_logins {}` pulls every password saved in their Chrome/Edge/Brave profiles into pup's vault behind one Adom Bridge consent and one Windows prompt (no AI sees a password). Run it with no `hostFilter` the first time. Reach for
package.json+2−2@@ -1,6 +1,6 @@ { "slug": "pup-bridge",- "version": "2.0.602",+ "version": "2.0.603", "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": "Login capture works on the DEFAULT lane. It only ever existed on the CDP lane, so a password typed into a normal pup window was thrown away and pup kept asking for it (John, 2026-09-17). The extension now injects the same capture rail and forwards the credential to pup over loopback, and on a Google password page, which has no username field, it takes the address Google prints on the page."+ "changelog": "pup toasts the user the moment it needs them for a password, and the toast carries the window: clicking it opens the exact pup window that is waiting. Covers the Google sign-in answers, a site with no saved login, and the browser-login import's consent wait, which arrives as a Hydrogen notification and was being missed." }
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.602",+ "version": "2.0.603", "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": "Login capture works on the DEFAULT lane. It only ever existed on the CDP lane, so a password typed into a normal pup window was thrown away and pup kept asking for it (John, 2026-09-17). The extension now injects the same capture rail and forwards the credential to pup over loopback, and on a Google password page, which has no username field, it takes the address Google prints on the page."+ "changelog": "pup toasts the user the moment it needs them for a password, and the toast carries the window: clicking it opens the exact pup window that is waiting. Covers the Google sign-in answers, a site with no saved login, and the browser-login import's consent wait, which arrives as a Hydrogen notification and was being missed." }
skills/pup-credentials/SKILL.md+33@@ -85,6 +85,39 @@ Traps measured on John's laptop (2026-09-16): - **The vault holds one login per site AND username** since 2.0.596. Before that a second Google account overwrote the first. +### TOAST THE USER, AND PUT THE WINDOW ON THE TOAST (John, 2026-09-17)++> "i didn't even realize you were waiting on me. why did you not ab toast me?" ... "when i just clicked+> that ab toast, i would have expected its action when i clicked the toast to open your pup window. i+> believe ab lets you attach those actions now." ... "whenever you need the users attention for a+> password, you should do it that way"++The moment a flow parks on the human, TOAST, and make the toast open the thing that is waiting:++```+adom-bridge notify_user {"title":"pup needs you to sign in once",+ "body":"Sign in as [email protected] in the pup window (click here to open it).",+ "level":"warning", "focus":{"hwnd": <the pup window's hwnd>}}+```++`focus` is what makes the click useful: `{hwnd}` raises that exact pup window, `{host:true}` reveals the+app Bridge runs under (use it for a Bridge consent, which is a notification inside Hydrogen, not a+window). A toast with no `focus` is the one the user clicks and nothing happens, which is worse than none.++pup does this itself from 2.0.603 on every no-password answer (`google_password_missing`,+`google_verification_required`, `google_password_rejected`, `no_credential`, and the import's+`consent_pending`), so an AI that just relays the answer is already covered. Do it yourself too whenever+you are about to sit and wait: the user cannot see your thread.++### Capture works on BOTH lanes (2.0.602, and why it did not)++Capture is what makes "sign in once" true: type a password into any pup window and pup stores it. It lived+ONLY on the CDP lane until 2.0.602, so every login typed into a normal (extension-lane) window was thrown+away and pup asked again next time. John typed his Google password into a pup window, pup kept nothing,+and the explanation "your browser never saved it" was about the wrong thing. If you are on a build older+than 2.0.602, a typed password is NOT stored on the default lane. Verify a capture instead of assuming it:+`pup_credentials {}` must list the host right after the sign-in.+ ## 1. The vault (how pup remembers logins) - **Auto-capture:** when the user (or pup) signs into a site, pup grabs the credential and stores it