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
login recipes: claude.ai, chatgpt.com; read landed before any sign-in talk
2 files changed
+54
login-recipes/chatgpt.com.mdadded+20@@ -0,0 +1,20 @@+# chatgpt.com / Codex (OpenAI)++**Read `landed` first** (see `claude.ai.md`): `signedIn:true` means the shared profile already has the OpenAI+session; say nothing to the user. `https://chatgpt.com/codex` is a marketing page with a "Log in" link when+signed out; the signed-in surface is `https://chatgpt.com/codex/` with the task list, or `https://chatgpt.com/c/…`.++## The sign-in page (`https://auth.openai.com/…`)++Routes, in order of preference:++1. **Continue with Google**: `pup_click` the button, then `pup_google_signin {account:"<the user's OpenAI account email>"}`.+ Same account-choice rule as claude.ai: ask once, store the username for `chatgpt.com` in the vault.+2. **Email + password**: `pup_credentials` may already hold it (pup captures on the ext lane too). `pup_login+ {submit:true, submitReason:"auth.openai.com is OpenAI's sign-in host"}`.+3. **Email + one-time code**: as for claude.ai, read the code from Gmail with `adom-google`.++OpenAI sometimes adds a device verification or a Cloudflare interaction; reload once, wait, and only then a+`pup_assisted_click`. Never hammer-reload.++After sign-in, re-read `landed` on `https://chatgpt.com/codex/` and confirm `signedIn:true`.
login-recipes/claude.ai.mdadded+34@@ -0,0 +1,34 @@+# claude.ai (Claude, Anthropic)++**Read `landed` first.** Every `pup_open_window` / `pup_navigate` response carries `landed:{url,title,loginPage,signedIn,_hint}`+(pup 2.0.642+). The shared adom-you profile keeps the claude.ai session for weeks, so the common case is+`signedIn:true` and the page is already the user's chats. Do NOT toast "sign in once" in that case; it happened+on 2026-09-19 and the user rightly called it dumb. Only a `loginPage:true` landing needs any of the steps below.++## The sign-in page (`https://claude.ai/login`)++claude.ai has no password. Two routes:++1. **Continue with Google** (preferred, fully automatable): the page shows a "Continue with Google" button.+ Click it with `pup_click`, then the Google chooser appears in the same window. Call+ `pup_google_signin {account:"<the user's Claude account email>"}` or `{kind:"work"}`; pup's Google+ session for that account is already in the profile in most cases, so it completes without the user. If pup+ does not know which account, `pup_google_accounts` lists them; ask the user ONCE which account is their+ Claude account and remember it in the vault as the username for `claude.ai`.+2. **Continue with email** (one-time code): type the email, submit, then claude.ai emails a 6-digit code.+ Read it with the `adom-google` CLI (Gmail search `from:claude.ai newer_than:1h "code"`), type it with+ `pup_type`, submit. Only if the user's mail is not reachable does the user have to be involved, and then a+ single toast with `focus:{hwnd}` that names the code step.++After either route the page lands on `/new`; re-read `landed` to confirm `signedIn:true` before continuing.++## Steps that pause in Auto mode++None on the Google route when the Google session exists. The email route pauses once, on typing the code+(a new credential-like input), which is correct.++## Do not++- Toast before reading `landed`.+- Open a second claude.ai window to "check": navigate the one you have.+- Use an isolated window: the session would be thrown away and the user would sign in again next time.