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.731
4 files changed
+140−9
SKILL.md+14−1@@ -1,7 +1,7 @@ --- name: pup user-invocable: true-description: "Drive a browser on the user's desktop from the cloud: the Puppeteer 'pup' bridge (pup_* verbs via the adom-bridge-cli CLI). To the user these are PUP WINDOWS, full stop: never name the browser build or how pup drives it unless they ask. pup runs its own browser in a pup-managed DURABLE profile (logins/localStorage persist and are shared across pup windows), driven through pup's own extension channel with no debug port, which is the lane every vendor site loads on and it speaks the full DevTools protocol (CDP) through that extension, so every pup window has CDP-level access (pup_devtools for any raw command) even where the separate CDP lane is off: never give up or switch machines because 'CDP is off', in the BACKGROUND so it never disturbs the user; NOT the user's real signed-in profile (that is the Adom extension's nbrowser_* verbs), NOT headless (a real rendered window, so screenshots/recording are true-to-life). Open/close windows + tabs, navigate, screenshot, eval JS, record. This is the START-HERE skill: the mental model + when-to-use + the skill map; deeper topics route to the sub-skills. For 'is it ready' use pup_readiness (not pup_status). Trigger words: pup, puppeteer, browser window, open in pup, open my app in pup, browser screenshot, browser eval, browser reload, visual debug, headful chrome, pup_open_window, pup_screenshot, pup_readiness, pup_prewarm, chrome for testing, open in browser, open my web app, show my app in the browser, preview my app, open the app I just built, view my app, open localhost, show my dev server, pup_login, log into a site in pup, autofill password, saved login, durable profile, isolated window."+description: "Drive a browser on the user's desktop from the cloud: the Puppeteer 'pup' bridge (pup_* verbs via the adom-bridge-cli CLI). To the user these are PUP WINDOWS, full stop: never name the browser build or how pup drives it unless they ask. pup runs its own browser in a pup-managed DURABLE profile (logins/localStorage persist and are shared across pup windows), driven through pup's own extension channel with no debug port, which is the lane every vendor site loads on and it speaks the full DevTools protocol (CDP) through that extension, so every pup window has CDP-level access (pup_devtools for any raw command) even where the separate CDP lane is off: never give up or switch machines because 'CDP is off', in the BACKGROUND so it never disturbs the user; NOT the user's real signed-in profile (that is the Adom extension's nbrowser_* verbs), NOT headless (a real rendered window, so screenshots/recording are true-to-life). Open/close windows + tabs, navigate, screenshot, eval JS, record. Signing a user in: pup can IMPORT every password saved in their own Chrome/Edge in one approval (pup_import_browser_logins), then fill sign-in pages itself; offer it whenever a login is in the way. This is the START-HERE skill: the mental model + when-to-use + the skill map; deeper topics route to the sub-skills. For 'is it ready' use pup_readiness (not pup_status). Trigger words: pup, puppeteer, browser window, open in pup, open my app in pup, browser screenshot, browser eval, browser reload, visual debug, headful chrome, pup_open_window, pup_screenshot, pup_readiness, pup_prewarm, chrome for testing, open in browser, open my web app, show my app in the browser, preview my app, open the app I just built, view my app, open localhost, show my dev server, pup_login, log into a site in pup, autofill password, saved login, durable profile, isolated window." --- # Pup: browser control on the user's desktop (start here)@@ -23,6 +23,19 @@ adom-bridge-cli --ai-thread "<your thread>" pup_open_window '{"url":"https://exa adom-bridge-cli --ai-thread "<your thread>" pup_screenshot '{}' # zero-id: resolves to YOUR window ``` +## Signing in? Offer to import the user's own logins first++pup can import every password saved in the user's own Chrome, Edge or Brave in one approval: one Adom Bridge consent+plus one Windows prompt, through `pup_import_browser_logins {}`. From then on pup fills sign-in pages in the+background. Most users do not know this exists, so when a login is in the way, offer it in plain words:+"I can bring your saved passwords from Chrome or Edge into pup, so I can sign you in here and on other sites+automatically. Want me to?" Offer it the first time any of these happens:+- the user asks you to log in somewhere+- an open or navigate answer carries `_loginTip` (pup has no saved login for that sign-in page)+- a verb answers `no_credential`++Full playbook: the `pup-import-logins` skill. Never ask the user to type or read out a password.+ ## pup windows have CDP-level access: never give up because "CDP is off" Every pup window is driven through pup's own browser extension, which speaks the full DevTools protocol (CDP) to the
package.json+32−4@@ -1,6 +1,6 @@ { "slug": "pup-bridge",- "version": "2.0.730",+ "version": "2.0.731", "type": "app", "description": "The pup SKILL PACK: the AI skills that teach a cloud/container AI how to drive the Bridge Puppeteer (pup) bridge (pup_* 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 Bridge 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 Bridge manages for you.", "keywords": [@@ -31,6 +31,7 @@ "skills/pup-lanes/SKILL.md", "skills/pup-settings/SKILL.md", "skills/pup-credentials/SKILL.md",+ "skills/pup-import-logins/SKILL.md", "skills/pup-progress/SKILL.md", "skills/pup-taskbar-states/SKILL.md", "install.sh",@@ -82,7 +83,7 @@ "hero": { "path": "hero-v9.png" },- "discovery_pitch": "Use pup to drive Chrome from the cloud: open/close browser windows + tabs, navigate, screenshot, eval JS, and record windows. It drives the browser ALREADY on the machine, installed Chrome, else Microsoft Edge (every Windows PC has Edge), with a fresh isolated profile, so usually NO download and it doesn't disrupt the user; Chrome for Testing is fetched only as a last resort. For 'is it ready' use pup_readiness. Or pass nativeBrowser+nativeProfile to drive the user's REAL signed-in Chrome/Edge/Brave. Call the adom-bridge-cli pup_* verbs.",+ "discovery_pitch": "pup gives your AI its own real browser on your desktop, driven in the background, signed in as you. It can import every password saved in your Chrome or Edge in one approval, then sign you into sites by itself, so the AI never stalls at a login page. Open pages, click, type, screenshot, record, and keep one window per AI thread on your taskbar. Say 'open it in pup' or 'import my saved passwords into pup'.", "discovery_triggers": [ "pup", "open in pup",@@ -120,9 +121,36 @@ "pup_record_start", "pup_readiness", "fork the pup bridge",- "puppeteer bridge source"+ "puppeteer bridge source",+ "log me in",+ "sign me in",+ "log in to",+ "sign in to",+ "log me into",+ "sign me into",+ "can't log in",+ "cannot sign in",+ "login failed",+ "keeps asking me to log in",+ "import my passwords",+ "import my logins",+ "import passwords",+ "bring my passwords",+ "chrome passwords",+ "edge passwords",+ "saved passwords",+ "my credentials",+ "auto login",+ "autofill my password",+ "password manager",+ "sign in for me",+ "log in for me" ], "sample_prompts": [+ {+ "prompt": "import my saved passwords into pup so you can log me in",+ "label": "Bring your logins to pup"+ }, { "label": "Open in pup", "prompt": "Open my app in pup (pup_open_window) and screenshot it"@@ -148,5 +176,5 @@ "prompt": "Download the puppeteer-bridge zip from the wiki and walk me through server.js" } ],- "changelog": "pup_eval and pup_login work on strict pages again (pup-bridge#130): American Express's login page refuses page scripts with 'eval is disabled', a wording pup's fallback did not recognize, so both failed on the extension lane; they now fall back to the DevTools path as on other strict pages. macOS (Kyle's pull request #5): --use-mock-keychain on every Chrome launch so a new browser build never pops a keychain prompt, a depth-counted capture guard, and tools/rust-build-macos.sh. No change on Windows from the macOS parts. Includes 2.0.729."+ "changelog": "pup now handles sign-in pages on the extension lane, every window's default, and tells the AI it can import the user's own logins (John, 2026-10-20: AIs never offered it, even to users who hit logins all the time). After each open and navigate, a page with a password field is filled in the background from the vault when pup has the login (never submitted; _autoLogin says so), and when it has none the answer carries _loginTip telling the AI to OFFER pup_import_browser_logins: every password saved in the user's own Chrome or Edge, in one Adom Bridge approval plus one Windows prompt. New skill pup-import-logins with the words people use when a login is in the way; the main pup skill says the same near the top; the wiki page's discovery triggers and pitch now cover logging in. Includes 2.0.730." }
page.json+32−4@@ -4,7 +4,7 @@ "slug": "pup-bridge", "title": "Pup - the AI's own browser", "brief": "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.",- "version": "2.0.730",+ "version": "2.0.731", "tags": [ "skills", "pup",@@ -52,10 +52,37 @@ "pup_record_start", "pup_readiness", "fork the pup bridge",- "puppeteer bridge source"+ "puppeteer bridge source",+ "log me in",+ "sign me in",+ "log in to",+ "sign in to",+ "log me into",+ "sign me into",+ "can't log in",+ "cannot sign in",+ "login failed",+ "keeps asking me to log in",+ "import my passwords",+ "import my logins",+ "import passwords",+ "bring my passwords",+ "chrome passwords",+ "edge passwords",+ "saved passwords",+ "my credentials",+ "auto login",+ "autofill my password",+ "password manager",+ "sign in for me",+ "log in for me" ],- "discovery_pitch": "Use pup to drive Chrome from the cloud: open/close browser windows + tabs, navigate, screenshot, eval JS, and record windows. It drives the browser ALREADY on the machine, installed Chrome, else Microsoft Edge (every Windows PC has Edge), with a fresh isolated profile, so usually NO download and it doesn't disrupt the user; Chrome for Testing is fetched only as a last resort. For 'is it ready' use pup_readiness. Or pass nativeBrowser+nativeProfile to drive the user's REAL signed-in Chrome/Edge/Brave. Call the adom-bridge-cli pup_* verbs.",+ "discovery_pitch": "pup gives your AI its own real browser on your desktop, driven in the background, signed in as you. It can import every password saved in your Chrome or Edge in one approval, then sign you into sites by itself, so the AI never stalls at a login page. Open pages, click, type, screenshot, record, and keep one window per AI thread on your taskbar. Say 'open it in pup' or 'import my saved passwords into pup'.", "sample_prompts": [+ {+ "prompt": "import my saved passwords into pup so you can log me in",+ "label": "Bring your logins to pup"+ }, { "label": "Open in pup", "prompt": "Open my app in pup (pup_open_window) and screenshot it"@@ -120,6 +147,7 @@ "skills/pup-lanes/SKILL.md", "skills/pup-settings/SKILL.md", "skills/pup-credentials/SKILL.md",+ "skills/pup-import-logins/SKILL.md", "skills/pup-progress/SKILL.md", "skills/pup-taskbar-states/SKILL.md", "install.sh",@@ -168,5 +196,5 @@ "Kyle Bergstedt <[email protected]>", "Colby Knox" ],- "changelog": "pup_eval and pup_login work on strict pages again (pup-bridge#130): American Express's login page refuses page scripts with 'eval is disabled', a wording pup's fallback did not recognize, so both failed on the extension lane; they now fall back to the DevTools path as on other strict pages. macOS (Kyle's pull request #5): --use-mock-keychain on every Chrome launch so a new browser build never pops a keychain prompt, a depth-counted capture guard, and tools/rust-build-macos.sh. No change on Windows from the macOS parts. Includes 2.0.729."+ "changelog": "pup now handles sign-in pages on the extension lane, every window's default, and tells the AI it can import the user's own logins (John, 2026-10-20: AIs never offered it, even to users who hit logins all the time). After each open and navigate, a page with a password field is filled in the background from the vault when pup has the login (never submitted; _autoLogin says so), and when it has none the answer carries _loginTip telling the AI to OFFER pup_import_browser_logins: every password saved in the user's own Chrome or Edge, in one Adom Bridge approval plus one Windows prompt. New skill pup-import-logins with the words people use when a login is in the way; the main pup skill says the same near the top; the wiki page's discovery triggers and pitch now cover logging in. Includes 2.0.730." }
skills/pup-import-logins/SKILL.mdadded+62@@ -0,0 +1,62 @@+---+name: pup-import-logins+description: "Before you sign a user into ANY site in pup, or the moment a login is missing, failing or asks for a password: OFFER to import the user's own saved Chrome, Edge and Brave passwords into pup with pup_import_browser_logins. One Adom Bridge approval plus one Windows prompt brings every saved login over, and from then on pup fills sign-in pages by itself. Most users do not know pup can do this; telling them is your job. Trigger words: log me in, sign me in, sign in to, log in to, login, logging in, can't log in, cannot sign in, login failed, wrong password, password, passwords, my password, saved passwords, credentials, my credentials, import passwords, import logins, import my logins, bring my passwords, chrome passwords, edge passwords, password manager, auto login, autologin, auto fill, autofill, sign-in page, login page, no_credential, no saved login, vault empty, keeps asking me to log in, stuck at login."+---++# Import the user's own logins into pup++pup has its own password vault, and it can fill the user's saved passwords from their own browser. One import+brings over every login saved in their Chrome, Edge or Brave, for work and personal sites alike. After that, pup+fills sign-in pages in the background, without asking anyone for a password.++Most users have never heard of this. When a login is in the way, offering it is the most useful thing you can do.++## When to offer it++Offer the import, in plain words, as soon as any of these happens:++- The user asks you to sign in, log in, or use an account on a site.+- A pup window lands on a sign-in page. Since 2.0.731 the open or navigate answer carries `_loginTip`+ (with `loginPage: true`) when pup has no saved login for that site.+- A verb answers `no_credential` or "no saved login matches".+- `pup_credentials {}` comes back empty or short.+- The user says a site keeps asking them to log in, or a login failed.++Offer it once per conversation. If they say no, do not ask again.++## What to say++> "I can bring your saved passwords from Chrome or Edge into pup, so I can sign you in here and on other sites+> automatically. It takes one approval in Adom Bridge plus one Windows prompt. Want me to?"++## What to run++```bash+adom-bridge --ai-thread "<your thread>" pup_import_browser_logins '{}'+```++- **No `hostFilter` the first time.** A filter hides logins saved under another domain (a site that signs in on+ `login.example.com` while you are on `example.com`).+- **Approvals:** the user sees an Adom Bridge consent dialog and then a Windows admin prompt. pup also shows a+ desktop toast saying it is waiting for them.+- **`consent_pending` is not a failure.** The import waits on a human, so the first answer can be `consent_pending`.+ Call the same verb again in a few seconds; it rejoins the same request and does not prompt twice.+- **Under the hood:** it uses Adom Bridge's own credential import, `desktop_decrypt_browser_credentials`. The+ passwords go into pup's vault in the OS keychain. They never pass through you or the container, and they are+ never printed.++After it finishes, reload the sign-in page (`pup_reload {}`). pup fills it in the background and says so in+`_autoLogin`. Confirm the live domain is the site you meant, then `pup_login {submit:true, submitReason:"<why this+domain is right>"}` to sign in.++## Rules++- **Never ask the user to type or read out a password,** and never type one you were not given. The import is the+ way.+- **Never submit a login without a `submitReason`.** pup refuses a bare submit on purpose, to catch lookalike domains.+- **Saying no is fine.** If the user declines, sign in another way they choose, or skip the step.++Related skills:++- **`pup-credentials`:** the whole vault (auto-capture, Google accounts, cards, stale passwords).+- **`pup-vendor-login`:** sign-in flows for vendor portals.