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.
master
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(withloginPage: true) when pup has no saved login for that site. - A verb answers
no_credentialor "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. You answer one Windows Hello prompt and that is it. Want me to?"
What to run
adom-bridge --ai-thread "<your thread>" pup_import_browser_logins '{}'
No
hostFilterthe first time. A filter hides logins saved under another domain (a site that signs in onlogin.example.comwhile you are onexample.com).One Windows Hello. nb drives Chrome's own password export, so Chrome itself asks the user for Windows Hello (or their OS password) and does its own decryption. One Hello brings the whole profile over. pup also shows a desktop toast saying a Hello prompt is opening.
consent_pendingis not a failure. The import waits on that human step, so the first answer can beconsent_pending. Call the same verb again in a few seconds; it rejoins the same request and does not prompt twice.Under the hood (adom/pup-bridge#136, adom/adom-bridge#254): pup no longer cracks Chrome's sealed store. It calls nb-bridge, which lives inside the user's real browser (
nbrowser_export_saved_logins), and lets Chrome do its own consented export. nb writes the result to an owner-only file on the user's machine and hands pup only a path and counts, never a password. pup reads it locally, merges the logins into pup's OS-keychain vault, and tells nb to delete the file. Passwords never pass through you or the container, and are never printed. This survives Chrome updates, because Chrome is the one decrypting.Which browser profile. nb reads the active profile of the user's browser, and the answer says which in
profile. Gotno_databut the user has saved logins? They are in another profile:nbrowser_profileslists them, then call again withprofile:"chrome:[email protected]"(works forsessionFortoo).Where nb cannot run (2.0.741, pup-bridge#145). If nb is not installed, is older than 0.16.45, or has no extension connected in the user's browser, pup uses Adom Bridge's older decrypt helper instead: the user approves an Adom Bridge request (inside Hydrogen it can appear as a toast or a card, on any of their machines) and then a Windows admin prompt on the PC itself. The answer says
via:"ab-helper"and why innbUnavailable. That path reads Edge and Brave but not Chrome 156 or later, so for Chrome the real fix is nb with its extension (nbrowser_readiness). A user's own answer through nb (Hello declined, no session) is never retried this way.
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.
When a site refuses pup's sign-in: bring the session over
Some sites refuse a fresh sign-in from pup's browser even with the right password or Google account. X (x.com) does, answering "An unexpected error occurred". If the user is already signed in to that site in their own Chrome or Edge, bring that session into pup instead of signing in:
adom-bridge --ai-thread "<your thread>" pup_import_browser_logins '{"sessionFor":"x.com","reason":"Bring your X session into pup so I can use X for you"}'
This reads from inside the user's own browser via nb (nbrowser_export_site_session), so it needs no password and
no Windows Hello: it is a background read of that one domain's cookies, set straight into pup's browser, never
printed. If the user is signed in under a different browser profile, the answer is no_session with a pointer to
nbrowser_profiles; ask the user to check which profile they use. Per-site details are in
login-recipes/<domain>.md on the pup-bridge wiki page.
On a Mac
The password import is Windows-only today (nb drives Chrome's export on Windows first). On a Mac,
pup_import_browser_logins answers unsupported_platform, and the _loginTip says so. What works on a Mac:
- Sign in once in the pup window. Ask the user to sign in themselves in the pup window. pup saves the login as they submit it, then fills it on that site from then on.
- Sync from Windows. If they also use a Windows desktop on the same Adom account,
pup_vault_syncbrings that desktop's logins over.
Rules
- A password never passes through you. Never ask the user to tell you a password, read one out, or paste one in chat, and never type one you were not given. The user typing their own password into the pup window is fine; pup saves it from there.
- 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.
---
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. You answer one Windows Hello prompt and that is it. 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`).
- **One Windows Hello.** nb drives Chrome's own password export, so Chrome itself asks the user for Windows Hello
(or their OS password) and does its own decryption. One Hello brings the whole profile over. pup also shows a
desktop toast saying a Hello prompt is opening.
- **`consent_pending` is not a failure.** The import waits on that human step, 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 (adom/pup-bridge#136, adom/adom-bridge#254):** pup no longer cracks Chrome's sealed store. It
calls nb-bridge, which lives inside the user's real browser (`nbrowser_export_saved_logins`), and lets Chrome do
its own consented export. nb writes the result to an owner-only file on the user's machine and hands pup only a
path and counts, never a password. pup reads it locally, merges the logins into pup's OS-keychain vault, and tells
nb to delete the file. Passwords never pass through you or the container, and are never printed. This survives
Chrome updates, because Chrome is the one decrypting.
- **Which browser profile.** nb reads the active profile of the user's browser, and the answer says which in
`profile`. Got `no_data` but the user has saved logins? They are in another profile: `nbrowser_profiles` lists
them, then call again with `profile:"chrome:[email protected]"` (works for `sessionFor` too).
- **Where nb cannot run (2.0.741, pup-bridge#145).** If nb is not installed, is older than 0.16.45, or has no
extension connected in the user's browser, pup uses Adom Bridge's older decrypt helper instead: the user approves an
Adom Bridge request (inside Hydrogen it can appear as a toast or a card, on any of their machines) and then a Windows
admin prompt on the PC itself. The answer says `via:"ab-helper"` and why in `nbUnavailable`. That path reads Edge
and Brave but not Chrome 156 or later, so for Chrome the real fix is nb with its extension (`nbrowser_readiness`).
A user's own answer through nb (Hello declined, no session) is never retried this way.
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.
## When a site refuses pup's sign-in: bring the session over
Some sites refuse a fresh sign-in from pup's browser even with the right password or Google account. X (x.com) does,
answering "An unexpected error occurred". If the user is already signed in to that site in their own Chrome or Edge,
bring that session into pup instead of signing in:
```bash
adom-bridge --ai-thread "<your thread>" pup_import_browser_logins '{"sessionFor":"x.com","reason":"Bring your X session into pup so I can use X for you"}'
```
This reads from inside the user's own browser via nb (`nbrowser_export_site_session`), so it needs no password and
no Windows Hello: it is a background read of that one domain's cookies, set straight into pup's browser, never
printed. If the user is signed in under a different browser profile, the answer is `no_session` with a pointer to
`nbrowser_profiles`; ask the user to check which profile they use. Per-site details are in
`login-recipes/<domain>.md` on the pup-bridge wiki page.
## On a Mac
The password import is Windows-only today (nb drives Chrome's export on Windows first). On a Mac,
`pup_import_browser_logins` answers `unsupported_platform`, and the `_loginTip` says so. What works on a Mac:
- **Sign in once in the pup window.** Ask the user to sign in themselves in the pup window. pup saves the login as
they submit it, then fills it on that site from then on.
- **Sync from Windows.** If they also use a Windows desktop on the same Adom account, `pup_vault_sync` brings that
desktop's logins over.
## Rules
- **A password never passes through you.** Never ask the user to tell you a password, read one out, or paste one in
chat, and never type one you were not given. The user typing their own password into the pup window is fine;
pup saves it from there.
- **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.