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
Lock the comprehensive all-profiles credential-import spec: import from EVERY Chromium profile across Chrome+Edge+Brave via ONE admin/SYSTEM helper (one ABE key per browser, one Login Data per profile), merge into an identity-tagged adom-you vault keeping both on conflict, passwords+bookmarks+autofill, first-run + all-profile settings picker; SYSTEM decrypt helper is AD-core
1 file changed
+43−19
dev-skills/pup-browser-import/SKILL.md+43−19@@ -83,27 +83,51 @@ Codex's "Import from Chrome" is the reference implementation of doing this RIGHT the feature such that a cookie failure blocks the password import (Codex reports them independently - do the same). -## Implications for pup's import feature (the plan)+## Implications for pup's import feature (the plan — COMPREHENSIVE, all profiles, LOCKED 2026-08-04) -Priority order, matching what actually works:+John (2026-08-04): "i have [email protected], [email protected], and [email protected] profiles... most+users will have lots of profiles... you should import on ALL of the user's profiles to make a+comprehensive adom-you profile that pup can use. that gives the AI the most power." The earlier+"Profile 1 only" plan was too narrow. Measured on John's box: **4 Chrome profiles (Default, Profile,+Profile 1 [819KB], Profile 2) + 1 Edge profile (Default), ALL ABE=True.** So the feature is ALL+profiles across ALL Chromium browsers. -1. **Passwords via an admin-elevated SYSTEM helper** (the Codex path). This is the real feature:- - AD-side (NOT the container bridge - the container can't touch Windows DPAPI or elevate): a- helper that requests UAC elevation, gets a SYSTEM token, unwraps- `os_crypt.app_bound_encrypted_key` (strip `APPB`, SYSTEM-DPAPI unwrap, then user-DPAPI unwrap) to- get the AES-256-GCM master key, copies `Login Data`, decrypts each `v20`- `password_value` (3-byte version prefix, 12-byte nonce, ciphertext, 16-byte GCM tag), and returns- `{origin, username, password}` rows.- - Bridge side: import those rows into pup's **credential vault** (`src/credential_vault.js`) so the- EXISTING `autoLogin` path signs the agent into sites and builds FRESH sessions (more durable than- copied cookies, which expire anyway).- - Never write a plaintext CSV/file. Decrypt in memory, hand to the vault, zero the buffers.-2. **Cookies: attempt, but treat failure as normal.** Same SYSTEM helper can try the `Cookies`- store (`Network\Cookies`, `v20`, same master key). On a managed profile expect the- "device security policy" refusal - surface it honestly per-item (Codex-style), do not fail the run.-3. **First-run prompt + a dashboard "Import from Chrome" settings section** (John's explicit ask), so- the user can run it later if they skip first-run. Per-profile picker (enumerate `Default` +- `Profile*`). Show the same honest consent about the admin prompt.+STRUCTURAL FACT (verified): the ABE master key lives in each browser's SHARED `User Data/Local State`+(one key per BROWSER), while each PROFILE has its own `Login Data`. So per browser: unwrap the key+ONCE, decrypt EVERY profile with it.++1. **Discover everything.** Enumerate every profile of every Chromium browser (Chrome, Edge, Brave if+ present), reusing HD's existing browser-profile-scan logic. For each profile read `Preferences`+ → `account_info[].email` to get the SOURCE ACCOUNT NAME ([email protected] vs [email protected] vs+ [email protected]) — the identity tag is the whole point.+2. **Passwords via ONE admin-elevated SYSTEM helper, ALL profiles.** AD-side (the container can't+ touch Windows DPAPI or elevate — this half is AD-CORE work, file it there): one UAC → SYSTEM token+ → for EACH browser, unwrap `os_crypt.app_bound_encrypted_key` (strip `APPB`, SYSTEM-DPAPI unwrap,+ then user-DPAPI unwrap) to the AES-256-GCM master key → for EACH profile of that browser, copy+ `Login Data`, decrypt every `v20` `password_value` (3-byte version prefix, 12-byte nonce,+ ciphertext, 16-byte GCM tag). Returns rows `{origin, username, password, sourceBrowser,+ sourceProfile, sourceAccount, lastUsed}`. ONE elevation covers Chrome + Edge + all profiles.+3. **Merge into ONE identity-tagged adom-you vault** (`src/credential_vault.js`, pup-side, ours).+ DECISION 1 (locked): **keep BOTH on a (origin,username) conflict, tagged by identity** — do not+ collapse to newest. A site saved under personal AND work stays as two tagged entries so the agent+ can act as the RIGHT persona; pick by context (the pup window's owner/profile/thread), fall back to+ most-recently-used. This is the "most power" John wants.+4. **Feed the EXISTING `autoLogin`** so the agent logs into any site with the matching tagged+ credential and builds FRESH sessions. DECISION 2 (locked): import **passwords + bookmarks ++ autofill** (bookmarks/autofill are DPAPI-cheap and ride the same pass); cookies stay best-effort+ (blocked by the managed-profile device policy — see below).+ Never write a plaintext CSV/file. Decrypt in memory, hand to the vault, zero the buffers.+5. **DECISION 3 (locked) — ownership:** the elevated SYSTEM decrypt helper is **AD-core** (file+ against adom/adom-desktop); pup owns discovery-surfacing, the merge, the vault, and the UX.+6. **Cookies: attempt, but treat failure as normal.** Same SYSTEM helper can try each profile's+ `Cookies` store (`Network\Cookies`, `v20`, same per-browser master key). On a managed profile expect+ the "device security policy" refusal - surface it honestly per-item (Codex-style), do not fail the+ run. Passwords are the deliverable; sessions come from pup logging in with them.+7. **First-run prompt + a Settings "Import logins from Chrome/Edge" section** (John's explicit ask).+ Lists EVERY discovered profile across ALL browsers with its account name + saved-password count and+ a checkbox each (DEFAULT: all checked). One Import button → ONE UAC prompt → the whole SYSTEM pass →+ merged into the tagged vault. Show the honest consent about the admin prompt (it's the user's own+ data, own machine, own elevation — same as Codex/any password-manager import). ### Passkeys and camera (asked about, decided)