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
README.md+25@@ -1,5 +1,12 @@ # pup: the Puppeteer bridge +> **The mission: normal browsers are built for humans; pup is a browser built for the AI — your+> doppelganger on the web.** Chrome asks *you* to save a password, click a dialog, pick a saved+> login, foreground its window. pup handles all of that silently for your AI, because the AI acts+> *as* you (your shared identity, your logins) without needing the human-facing machinery a normal+> browser is made of. Every design choice defers to that: anything a human browser shows a human to+> click, pup does silently for the AI. The goal is an AI that can drive the web the way you would.+ **pup is the AI's own browser: a real, full Chrome/Edge window on the user's desktop that the AI drives with complete programmatic control, but a _sandbox_.** It runs in a fresh, isolated profile that is never the user's real signed-in browser, and opens in the **background by default** so it never disrupts@@ -264,6 +271,24 @@ ffmpeg -i rec.webm -vf "fps=12,scale=640:-1:flags=lanczos,split[s0][s1];[s0]pale **Rule of thumb:** keep **WebM** for archiving + web embeds; make an **MP4** the moment a human on Safari/ PowerPoint/phone needs it; make a short **GIF** only for an inline auto-play preview. +## Skills — what the AI reads to know pup++pup ships as an `adom-wiki` package; installing it drops these skills into the driving AI's+`~/.claude/skills/` so any AI thread knows the full capability surface. Everything published on this+page's **Files** tab.++| Skill | What it teaches |+|---|---|+| **pup** (`SKILL.md`) | START HERE — the mental model, when to use pup vs nb/nbe, the cold-start playbook, and the map to everything else. Addressing (your `ai-thread` name is the handle, no hwnd hunting), the credential vault, page integrity. |+| **pup-settings** | The complete behavior reference: every Settings toggle and the feature behind it — taskbar identity (AUMID) + icon style + grouping, jump lists, the toolbar extension family, annotate/capture, foreground etiquette, the credential vault, in-page identity, recovery/safety. Read to know exactly what pup does on the machine and how to change any of it (`pup_configure` / the dashboard gear). |+| **pup-auto-mode** | THE operating reality: Adom users run their AI in Claude Code Auto mode. How pup stays a great doppelganger inside the safety check — structured verbs pass, the risky moments become clean human pauses, and the `autoMode.allow` allowlist Hydrogen ships. |+| **pup-doppelganger** | The mission and the one design rule it dictates: anything a human browser shows a HUMAN to click, pup handles silently for the AI. The tie-breaker for every feature decision. |+| **pup-page-integrity** | The boundary: pup never mutates a page's own content (title, DOM) to carry pup metadata — that belongs on pup-owned surfaces (taskbar, dashboard, extension, identity tile). |+| **login-recipes/** | A growing corpus of per-site login flows (one file per domain, e.g. `gusto.com.md`) documenting the exact Auto-mode-aware sequence to sign in — which steps auto-approve, which pause for the human, which fields need real keystrokes. **Any Adom user can contribute** the recipe for a site they hit. The goal: thousands of recipes so pup drives logins everywhere. |++Maintainer/source-only skills (in `dev-skills/`, not installed) document the build, debugging, and+hard-won internal doctrine — read those only if you are extending pup itself.+ ## Source & development This bridge is cloud-owned here (extracted from `adom-bridge/plugins/puppeteer`, mirroring the
skills/pup-settings/SKILL.mdadded+113@@ -0,0 +1,113 @@+---+name: pup-settings+description: "The complete reference to pup's behavior: every Settings toggle and the feature behind it — taskbar identity (AUMID), jump lists, the toolbar extension family, annotate/capture, foreground etiquette, the credential vault (auto-capture + autofill), in-page identity, and recovery/safety. Read to know exactly what pup does on the user's machine and how to change any of it. Change settings live with pup_configure {key:value} or the dashboard gear (Settings dialog)."+---++# pup Settings & features — the complete behavior reference++Every knob pup exposes, what it does, its default, and how to flip it. **Change any of these live**+with `pup_configure {<key>:"on"|"off"|<value>}` (no restart), or the gear icon on the pup dashboard+(`http://127.0.0.1:<port>/dashboard`). Settings persist in `~/.adom/pup-settings.json`. Defaults+below are what a fresh Adom user gets.++## Taskbar identity (AUMID) — one taskbar button per pup window++Windows groups taskbar buttons by an Application User Model ID. pup can stamp a per-window AUMID so+each pup window gets its OWN taskbar button with its own icon, instead of all stacking under one.++| Key | Default | What it does |+|---|---|---|+| `aumidIcons` | **on** | Give every pup window its own taskbar button + icon (per-window AUMID). Off = all pup windows stack under one button (old mode). |+| `taskbarGrouping` | **split** | `split` = one button per window. `grouped` = group by category under fewer buttons. Only applies when `aumidIcons` on. |+| `aumidIconStyle` | **category** | `standard` = one pup tile for every window. `category` = a tile that reflects the window's kind (wiki signed-in/out, open web, Adom app, mixed). Only when `aumidIcons` on. |+| `overlayBadges` | **on** | Paint each taskbar icon with the active tab's favicon + the Adom mark, so you can tell what each window is. |++The AUMID identity is registered **registry-only (no Start Menu shortcut)** — pup writes the icon+straight into HKCU and never leaves an "Adom Pup" entry in your Start Menu (v2.0.118).++## Jump lists — the right-click menu on a pup taskbar button++| Key | Default | What it does |+|---|---|---|+| `jumpLists` | **on** | The menu Windows shows when you right-click a pup taskbar icon. Requires `aumidIcons`. |+| `jlViewTasks` | **on** | "Switch to logged-in view / Switch to public view" on wiki windows. |+| `jlCloseAll` | **on** | "Close all pup windows" task on every pup icon. |+| `jlDashboard` | **on** | "Open pup dashboard" task — one click opens the live window/tab/thread map. |+| `jlAnnotate` | **on** | "Annotate this page" task — draw on the page; the capture goes to the owning AI thread. |++## Toolbar extension family — buttons in the browser toolbar++pup ships a small family of MV3 toolbar tiles (pup dots, the identity avatar, the annotate pen).+They ride the Chrome-for-Testing launch (`--load-extension`); pup auto-enables Developer mode and+pins them at each launch (v2.0.114), so they appear with zero setup.++| Key | Default | What it does |+|---|---|---|+| `toolbarExtension` | **on** | The Adom Pup toolbar buttons (annotate, snip, view toggle, dashboard, owner, close). |+| `tbSnipHotkey` | **on** | `Alt+Shift+A` starts annotate (red pen) on the current pup window. |+| `tbFloatyPencil` | **off** | A tiny pencil in the upper-right CORNER of each page; one click starts annotate. Off by default — the corner hover zone can fight buttons in app headers, and the toolbar pen already covers discovery. |+| `floatyHitPx` | **24** | Size (px) of the invisible corner target that reveals the floaty pencil. Applies live. |++## Annotate & capture++Draw on any pup page (red pen / snip); the moment you finish, the marked-up region is captured,+copied to your clipboard, and faded away.++| Key | Default | What it does |+|---|---|---|+| `annCaptionBar` | **on** | Bake a thin context strip under each capture (thread, page, time) so any AI you paste it into sees where it came from. |++Drive it: `pup_annotate {sessionId, tool:"pen"|"snip"}`, the toolbar pen, the `Alt+Shift+A` hotkey,+the jump-list task, or the (off-by-default) corner pencil.++## Foreground etiquette — pup never steals your screen++pup opens windows in the BACKGROUND and signals with a taskbar flash instead of stealing focus. When+an AI *does* raise a window, it must give a reason, shown on-screen.++| Key | Default | What it does |+|---|---|---|+| `openFlash` | **on** | Flash the taskbar button (accent-colored) when a new pup window opens, so you notice it. |+| `autoFlash` | **on** | Flash a window's button when an AI changes it (navigate/click/type). One flash per burst. |+| `agentActivity` | **on** | Show a progress strip on a window's taskbar button while an AI is actively driving it. |+| `fgWatch` | **on** | For 20s after a background open/navigate, watch if something pulled the window to the front and re-park it. |+| `fgCaption` | **on** | When an AI brings a window to your screen, show its stated reason as an on-screen caption. |+| `fgCaptionMs` | **3500** | How long (ms) that foreground-reason caption shows. |+| `notMineCaption` | **off** | Low-importance: when a window fronts itself (JS/focus/Chrome, not pup), briefly caption that Adom did NOT do it. |++## Credential vault — pup manages your logins (no Chrome dialog)++pup runs its own OS-keychain password manager so the AI signs you in without Chrome's foreground+picker. Chrome's native "Save password?" bubble is disabled; pup captures and fills silently.++| Key | Default | What it does |+|---|---|---|+| `captureLogins` | **on** | As you sign into sites, store the username + password in the OS keychain (encrypted; never logged/echoed) so return visits auto-fill. Captures on password blur to beat cross-origin SSO redirects. |+| `autoLogin` | **on** | Fill a matching saved login when a login page loads (background, no dropdown). pup never auto-SUBMITS — submitting is reason-gated via `pup_login {submit:true, submitReason}` which confirms the live domain (anti-phishing). |++Verbs: `pup_login` (fill/submit; `realKeystrokes:true` for React-masked fields like Gusto),+`pup_credentials` (list host+username only), `credential_set` / `credential_delete`. Per-site login+flows live in `login-recipes/` on the wiki page.++## In-page identity — which thread owns this window++| Key | Default | What it does |+|---|---|---|+| `ownerChip` | **on** | A tiny non-interactive chip, bottom-left, naming the owning AI thread + profile. Click-through, can't disturb the page. |+| `titleTag` | **off** | Append "(ai-thread: <name>)" to the window title. Off — many pages manage their own title. |+| `titlePrefix` | **off** | Prepend the owning thread (+ wiki signed-in/out) to the title. Off — pup does not mangle page titles by default (see the page-integrity doctrine). |++## Recovery & safety++| Key | Default | What it does |+|---|---|---|+| `sleepRecovery` | **on** | After the laptop wakes or Chrome dies, bring every pup window back at its last page, signed in. Never restarts a live Chrome. |+| `reportIssues` | **on** | Let pup invite AIs to file a wiki issue when they hit something broken. |+| `minimalTouch` | **on** | Safety mode from the Chrome-crash hunt: pup keeps its hands off your windows — opens + drives pages only, skips the extra Windows machinery. The per-feature toggles above win over this master switch. |++## The one profile that matters: adom-you++Every pup window rides the shared durable **adom-you** profile by default, so logins persist and the+credential store grows over time. Isolation (`isolated:true`) is REASON-GATED (`isolationReason`+required) and a non-adom-you window wears the anonymous identity tile so it's visibly not-you. Never+log in on an isolated throwaway — the session (and 2FA-remember) won't persist.