← Commit history
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-native-browser",-  "version": "0.4.15",+  "version": "0.4.17",   "type": "app",   "title": "Adom Native Browser",   "description": "This package installs the SKILLS into your container so your AI knows how to drive your real signed-in Chrome and Edge; Bridge loads the bridge runtime itself from the release zip.",
page.json+38−5
@@ -9,11 +9,11 @@     "chrome",     "edge",     "nbrowser",-    "ai-agent",-    "developer-tools",-    "vibe-coding",+    "pup",     "native-messaging",-    "adom-desktop"+    "adom-desktop",+    "credentials",+    "chip-fetcher"   ],   "status": "live",   "discovery_triggers": [@@ -57,5 +57,38 @@   },   "visibility": "public",   "brief": "Control of the user's REAL signed-in browser (Chrome/Edge), in two layers. Layer 1 (nb) opens URLs into their native browser and works on day one with nothing installed, the OAuth workhorse. Layer 2 (abe, the Adom browser extension) lets the AI fully drive that browser: navigate, click, read, screenshot, real logins.",-  "discovery_pitch": "The native-browser extension drives the user's REAL signed-in Chrome/Edge via nbrowser_* verbs: use it for LOGGING IN, filling forms, and downloading behind auth with their OWN saved passwords - pup cannot (it is a fresh Chrome-for-Testing with no logins). Next moves: run 'adom-desktop bridge_list' to check it is installed; if not, OFFER to install it (see the installing-the-extension skill) - never make the user do it. If this container lacks the skills, 'adom-wiki pkg install adom/adom-native-browser'. Check readiness with 'adom-desktop nbrowser_readiness' (state:needs-extension means offer the install)."+  "discovery_pitch": "The native-browser extension drives the user's REAL signed-in Chrome/Edge via nbrowser_* verbs: use it for LOGGING IN, filling forms, and downloading behind auth with their OWN saved passwords - pup cannot (it is a fresh Chrome-for-Testing with no logins). Next moves: run 'adom-desktop bridge_list' to check it is installed; if not, OFFER to install it (see the installing-the-extension skill) - never make the user do it. If this container lacks the skills, 'adom-wiki pkg install adom/adom-native-browser'. Check readiness with 'adom-desktop nbrowser_readiness' (state:needs-extension means offer the install).",+  "version": "0.4.17",+  "type": "app",+  "description": "This package installs the SKILLS into your container so your AI knows how to drive your real signed-in Chrome and Edge; Bridge loads the bridge runtime itself from the release zip.",+  "install": {+    "binary_name": "adom-native-browser"+  },+  "files": [+    "skills/adom-native-browser/SKILL.md",+    "skills/driving-sites/SKILL.md",+    "skills/driving-the-desktop/SKILL.md",+    "skills/driving-the-extension/SKILL.md",+    "skills/driving-the-extension-demo/SKILL.md",+    "skills/installing-the-extension/SKILL.md",+    "skills/native-browser-recording/SKILL.md",+    "skills/native-browser-safety/SKILL.md",+    "skills/reading-google-messages/SKILL.md",+    "skills/uninstalling-the-extension/SKILL.md",+    "install.sh",+    "uninstall.sh",+    "package.json"+  ],+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "dependencies": {+    "adom/adom-desktop": "^1.9.47"+  },+  "org": "adom",+  "author": {+    "name": "John Lauer",+    "email": "[email protected]"+  } }\ No newline at end of file
skills/driving-the-desktop/SKILL.md−38
@@ -156,46 +156,8 @@ the host decrypts the legacy `os_crypt` key fine, `keylen=32`, but that key can'   summon it (Chrome requires a real OS gesture + foreground window). **Fully-background password fill is   thus impossible for app-bound passwords - a Chrome boundary, not an Adom one.** -### ⛔ PRE-COMPUTE THE WHOLE TAKEOVER BEFORE YOU ASK (John, 2026-08-04)--Any recipe below that needs the foreground must be **fully prepared before the-consent toast goes out**, then executed as **ONE script with no AI turns in the-middle**. The user is frozen from the moment they click "Go ahead"; every model-round trip is seconds of them holding still for nothing.--Real incident: a thread got consent for the saved-password autofill, then spent-six round trips (capture → read → decide coords → click → capture → read →-click) with the user waiting. John: *"you must be prepared before you interrupt-the user... execute what you need to do as fast as possible."*--So, before asking:--1. **Capture and measure in the background.** `desktop_screenshot_window` works-   on occluded windows and returns `coordMap`, so resolve every click point-   first. There is no reason to be measuring after consent.-2. **Write the entire sequence as one runnable script**, including the popup-   step. A popup that only exists after a click still gets handled inline:-   capture it, read its own `shotId` from `screenshots[]`, click its row, verify-   - all in the same run, in code.-3. **Put the verification and the release toast in that same script**, so the-   user is freed the instant it lands.-4. **Budget under 20 seconds.** If it cannot run in one shot, redesign it.--See the `foreground-etiquette` skill for the consent gate itself. This section is-about being ready to move the instant consent arrives.- ### ✅ Recipe - log in with a saved password (autofill via owned-popup, PROVEN on Gusto 2026-06-24) The working flow. Mostly background; the ONLY foreground is the ~1s summon.--**Pre-compute steps 2 and 3's coordinates BEFORE the consent toast, then run-steps 3-6 as a single script.** Re-verified on Chase Connect 2026-08-04: the-password field sat inside an iframe and was **absent from the UIA tree**-(`automationId` and `role:"edit"` both missed it), so the reliable path was-image-space: background `desktop_screenshot_window` → click the field via-`desktop_click {space:"image", shotId, x, y}` → re-capture → the dropdown comes-back as `screenshots[0]` with **its own `shotId`** → click the saved-login row in-POPUP image space. Arrow keys never drive that popup, and pressing Enter on an-empty field submits the form and throws a login error. 1. **Background:** `nbrowser_*` navigate to the login page; on a split/Keycloak form (e.g. Gusto), `nbrowser_type`    the email + `nbrowser_click` "Continue" (email isn't secret) → land on the password step. Confirm with    `nbrowser_eval "!!document.querySelector('input[type=password]')"` (background - NOT a fullscreen grab).
skills/native-browser-recording/SKILL.md+2−2
@@ -1,8 +1,8 @@ --- name: native-browser-recording-description: "How to record full-resolution, high-framerate demo videos of a browser window in the BACKGROUND so the user keeps working. THE BEST PATH is the core adom-desktop verb desktop_record_window_start (WGC) - or nbrowser_record_start {method:\"wgc\"}, which delegates to it: no source picker, no banner, captures occluded windows, no focus theft. The extension's own getDisplayMedia/tabcapture recording is a LAST-RESORT FALLBACK (Chrome forces a manual share-source picker a human must click) and is refused unless you pass fallbackConfirmed:true. Use the native browser ONLY when a demo needs the user's real session/cookies/logins; otherwise record via pup or Hydrogen (see the demo-recording skill). Covers WGC vs the heinous getDisplayMedia picker, the paint-throttling problem, the occlusion/throttle-disable launch flags, the restart-native-Chrome-into-background-recording-mode flow (ask + warn + full process-tree kill + relaunch with profile + flags), and the offer-to-revert-for-battery step. Match on: record a browser window, record the native browser, record a logged-in demo, background recording of Chrome, nbrowser_record, desktop_record_window_start, WGC, source picker, share picker, full-framerate native recording. Part of the adom-browser-extension."+description: "How to record full-resolution, high-framerate demo videos of a browser window in the BACKGROUND so the user keeps working. THE BEST PATH is the core adom-desktop verb desktop_record_window_start (WGC) - or nbrowser_record_start {method:\"wgc\"}, which delegates to it: no source picker, no banner, captures occluded windows, no focus theft. The extension's own getDisplayMedia/tabcapture recording is a LAST-RESORT FALLBACK (Chrome forces a manual share-source picker a human must click) and is refused unless you pass fallbackConfirmed:true. Use the native browser ONLY when a demo needs the user's real session/cookies/logins; otherwise record via pup or Hydrogen (see the demo-recording skill). Covers WGC vs the heinous getDisplayMedia picker, the paint-throttling problem, the occlusion/throttle-disable launch flags, the restart-native-Chrome-into-background-recording-mode flow (ask + warn + full process-tree kill + relaunch with profile + flags), and the offer-to-revert-for-battery step. Match on: record a browser window, record the native browser, record a logged-in demo, background recording of Chrome, nbrowser_record, desktop_record_window_start, WGC, source picker, share picker, full-framerate native recording. Part of the adom-native-browser." ----Part of **adom-browser-extension** (see **driving-the-extension** for the verb surface). The broad demo+Part of **adom-native-browser** (see **driving-the-extension** for the verb surface). The broad demo pipeline (Hydrogen vs pup, scripting, TTS, storyboard, mux, wiki upload) lives in the **demo-recording** skill - this page is ONLY the part that's unique to recording the user's **real, logged-in native browser**. 
skills/uninstalling-the-extension/SKILL.md+2−2
@@ -1,8 +1,8 @@ --- name: uninstalling-the-extension-description: "How WE (this repo) uninstall the Adom browser extension from the user's real Chrome/Edge, driving adom-desktop's GENERIC OS verbs - BACKGROUND-first, never stealing focus. Covers the critical safety guard (all \"Remove\" buttons share the same name, so filter the list to the Adom card first or you can remove the WRONG extension), the Remove-confirm bubble (a Chromium owned popup that needs ONE brief foreground beat because it dies on focus loss), verifying removal by screenshot AND by the nbrowser_ profile key dropping, and optional full cleanup (native-messaging host + bridge). Use when the user says \"uninstall the extension\", \"remove the Adom extension\", \"take it out of my browser\", \"reinstall it\" (uninstall then installing-the-extension). Low-level click mechanics: driving-the-desktop. Safety: native-browser-safety. Part of the adom-browser-extension."+description: "How WE (this repo) uninstall the Adom browser extension from the user's real Chrome/Edge, driving adom-desktop's GENERIC OS verbs - BACKGROUND-first, never stealing focus. Covers the critical safety guard (all \"Remove\" buttons share the same name, so filter the list to the Adom card first or you can remove the WRONG extension), the Remove-confirm bubble (a Chromium owned popup that needs ONE brief foreground beat because it dies on focus loss), verifying removal by screenshot AND by the nbrowser_ profile key dropping, and optional full cleanup (native-messaging host + bridge). Use when the user says \"uninstall the extension\", \"remove the Adom extension\", \"take it out of my browser\", \"reinstall it\" (uninstall then installing-the-extension). Low-level click mechanics: driving-the-desktop. Safety: native-browser-safety. Part of the adom-native-browser." ----Part of **adom-browser-extension**. Install: **installing-the-extension**. Low-level OS mechanics: **driving-the-desktop**. Safety: **native-browser-safety**.+Part of **adom-native-browser**. Install: **installing-the-extension**. Low-level OS mechanics: **driving-the-desktop**. Safety: **native-browser-safety**.  # Uninstalling the extension - the orchestration WE own (background-first)