← Commit history
SKILL.md+13−4
@@ -290,11 +290,18 @@ adom-desktop pull_file '{"filePaths":["C:\\Users\\john\\Downloads\\image.png"],"  ## Available Commands -**Get full structured command list with descriptions, args, and prerequisites:**+**Get the full structured command list with descriptions, args, and prerequisites:** ```bash-adom-desktop list_commands+adom-desktop commands            # aliases: list_commands, help+adom-desktop --target <name> commands   # + THAT box's installed bridges (installed_bridges_on_target) ```-Returns categorized JSON with every command, its required/optional args, return values, prerequisites, and workflow notes. Use this when you need to discover available commands or understand what a command expects.+Returns categorized JSON with every command, its required/optional args, return values, prerequisites, and workflow notes. Run this FIRST when you're unsure what a verb is called.++**Two kinds of verbs (v1.9.103 — don't confuse them):**+- **BUILT-IN AD-core verbs** are always available on every Adom Desktop, no install, NOT bridges. This is where screenshots, windows, input, files, registry, shell, tunnel, update, and notify live. A whole-screen shot is `desktop_screenshot_screen`; one window (with chrome) is `desktop_screenshot_window {"hwnd":N}` or `{"titleContains":"..."}` (get hwnds from `desktop_list_windows`).+- **BRIDGE verbs** (`kicad_`/`fusion_`/`browser_`/`blender_`/`nbrowser_`…) need that bridge installed — see `installed_bridges_on_target` in `commands`, or run `bridge_list`.++If a verb returns `errorCode:"unknown_verb"`, **read the error's `_hint`** — it carries a fuzzy "did you mean" (e.g. `desktop_screenshot` → `desktop_screenshot_screen`) and tells you whether the right verb is built-in or a bridge. Don't conclude a capability is "a missing bridge" from a guessed verb name; call `commands` and check.  ### Connection Management @@ -1547,6 +1554,8 @@ Two ways to use it:  `screenRect` is in the SAME physical-px space as `desktop_list_windows` rects and the `desktop_click` default (`space:"screen"`). +> **Driving a GUI app that pops error boxes / modal dialogs? Read the dedicated [`adom-desktop-window-capture`](WINDOW_CAPTURE.md) skill.** `desktop_screenshot_window {hwnd}` captures ONE window AND the child dialogs / error boxes it owns, even when the window is backgrounded/occluded/minimized (PrintWindow, no focus steal). It is the breakthrough for automating native apps whose dialogs a full-screen grab can't see. The rest of this section is the reference; that skill is the how-and-why.+ **Popups (owned):** As of **v1.8.177**, `desktop_screenshot_window` **also captures the window's OWNED popups** — borderless confirm bubbles (Chromium's "Remove '\<ext\>'?"), owned dropdowns, owned dialogs — that don't enumerate in `desktop_list_windows` and aren't visible in a PrintWindow of the main window. They ride back as a top-level **`screenshots[]`** array (the same generic shape `kicad_screenshot_all` uses; the CLI auto-pulls each entry's `fullPath`→`localPath` and `safePath`→`localSafePath`). `ownedPopupCount` is always present (0 = none). Each entry carries `hwnd`, `title`, `kind:"owned_popup"`, and its own `coordMap`+`shotId`, so you can **click the bubble's buttons** with `{space:"image", shotId, x, y}` or drive them in the background by name via `desktop_ui_click {scope:"popups"}`. This is the generic mechanism — there's no app-specific "Chrome bubble" verb; every window screenshot surfaces any owned popups so you get the data and decide. **Use `desktop_screenshot_screen`** (full virtual-screen grab) only for popups *not owned* by your target window, or to see everything at once.  **Screen geometry on every shot (v1.8.178):** every `desktop_screenshot_window` / `_screen` response now carries:@@ -1566,7 +1575,7 @@ Two ways to use it:   - `hwnd` (int) OR `titleContains` (string)   - `flash`: `"until_focused"` | `"stop"`   - `progress`: `{state: "normal"|"paused"|"error"|"indeterminate"|"none", value?: 0..100}` — **state→color**: normal=green, **paused=yellow** (use for human-in-the-loop gates: captcha / 2FA / login), error=red, indeterminate=marquee, none=clear.-  - `overlay`: `{badge: "adom"|"none", icon?: "<.ico path or base64>", tooltip?: "<hover>"}` — built-in badges are `adom` (the Adom logo — a "driven by Adom" trust tell) and `none` (clear); 3rd-party bridges pass their own `icon` (`.ico` path or base64; PNG not yet supported). `tooltip` is the overlay's accessible description.+  - `overlay`: `{badge: "adom"|"none", icon?: "<PNG or .ico — file path OR base64>", tooltip?: "<hover>"}` — built-in badges are `adom` (the Adom logo — a "driven by Adom" trust tell) and `none` (clear); 3rd-party bridges pass their **own** `icon` (a **PNG** or `.ico`, given as a file path or base64 — AD magic-sniffs the format and renders it at 32px). AD stays generic here: it paints whatever overlay art you hand it, so a bridge ships its own badge instead of asking for a named variant. `tooltip` is the overlay's accessible description.   - Returns `{ok, hwnd, title, applied:[...]}`. Clears: `flash:"stop"`, `progress.state:"none"`, `overlay.badge:"none"` — call these on task-end / window-close to clean up.   - Example (long task, human gate, then done):     ```bash
dist/linux/adom-desktop
⋯ 1 unchanged line ⋯
package.json+1−1
@@ -1,6 +1,6 @@ {
   "slug": "adom-desktop",
-  "version": "1.9.105",
+  "version": "1.9.106",
   "type": "app",
   "description": "Laptop bridge: file transfer, screenshots, notifications, KiCad + Fusion 360 control, real-Chrome (Puppeteer) automation, and Hydrogen Desktop proxy. One install gives Claude every desktop verb it needs.",
   "discovery_pitch": "Use when a cloud AI needs to reach a real Windows desktop: run shell commands, capture screenshots, drive native apps and browsers, transfer files, and control KiCad / Fusion 360 / third-party bridges.",
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop",-  "version": "1.9.105",+  "version": "1.9.106",   "type": "app",   "description": "Laptop bridge: file transfer, screenshots, notifications, KiCad + Fusion 360 control, real-Chrome (Puppeteer) automation, and Hydrogen Desktop proxy. One install gives Claude every desktop verb it needs.",   "keywords": [
skills/adom-desktop/SKILL.md+11−4
@@ -290,11 +290,18 @@ adom-desktop pull_file '{"filePaths":["C:\\Users\\john\\Downloads\\image.png"],"  ## Available Commands -**Get full structured command list with descriptions, args, and prerequisites:**+**Get the full structured command list with descriptions, args, and prerequisites:** ```bash-adom-desktop list_commands+adom-desktop commands            # aliases: list_commands, help+adom-desktop --target <name> commands   # + THAT box's installed bridges (installed_bridges_on_target) ```-Returns categorized JSON with every command, its required/optional args, return values, prerequisites, and workflow notes. Use this when you need to discover available commands or understand what a command expects.+Returns categorized JSON with every command, its required/optional args, return values, prerequisites, and workflow notes. Run this FIRST when you're unsure what a verb is called.++**Two kinds of verbs (v1.9.103 — don't confuse them):**+- **BUILT-IN AD-core verbs** are always available on every Adom Desktop, no install, NOT bridges. This is where screenshots, windows, input, files, registry, shell, tunnel, update, and notify live. A whole-screen shot is `desktop_screenshot_screen`; one window (with chrome) is `desktop_screenshot_window {"hwnd":N}` or `{"titleContains":"..."}` (get hwnds from `desktop_list_windows`).+- **BRIDGE verbs** (`kicad_`/`fusion_`/`browser_`/`blender_`/`nbrowser_`…) need that bridge installed — see `installed_bridges_on_target` in `commands`, or run `bridge_list`.++If a verb returns `errorCode:"unknown_verb"`, **read the error's `_hint`** — it carries a fuzzy "did you mean" (e.g. `desktop_screenshot` → `desktop_screenshot_screen`) and tells you whether the right verb is built-in or a bridge. Don't conclude a capability is "a missing bridge" from a guessed verb name; call `commands` and check.  ### Connection Management @@ -1568,7 +1575,7 @@ Two ways to use it:   - `hwnd` (int) OR `titleContains` (string)   - `flash`: `"until_focused"` | `"stop"`   - `progress`: `{state: "normal"|"paused"|"error"|"indeterminate"|"none", value?: 0..100}` — **state→color**: normal=green, **paused=yellow** (use for human-in-the-loop gates: captcha / 2FA / login), error=red, indeterminate=marquee, none=clear.-  - `overlay`: `{badge: "adom"|"none", icon?: "<.ico path or base64>", tooltip?: "<hover>"}` — built-in badges are `adom` (the Adom logo — a "driven by Adom" trust tell) and `none` (clear); 3rd-party bridges pass their own `icon` (`.ico` path or base64; PNG not yet supported). `tooltip` is the overlay's accessible description.+  - `overlay`: `{badge: "adom"|"none", icon?: "<PNG or .ico — file path OR base64>", tooltip?: "<hover>"}` — built-in badges are `adom` (the Adom logo — a "driven by Adom" trust tell) and `none` (clear); 3rd-party bridges pass their **own** `icon` (a **PNG** or `.ico`, given as a file path or base64 — AD magic-sniffs the format and renders it at 32px). AD stays generic here: it paints whatever overlay art you hand it, so a bridge ships its own badge instead of asking for a named variant. `tooltip` is the overlay's accessible description.   - Returns `{ok, hwnd, title, applied:[...]}`. Clears: `flash:"stop"`, `progress.state:"none"`, `overlay.badge:"none"` — call these on task-end / window-close to clean up.   - Example (long task, human gate, then done):     ```bash
version.json+6−6
@@ -1,14 +1,14 @@ {   "manifest_version": 1,-  "version": "1.9.105",+  "version": "1.9.106",   "released_at": "2026-07-14T00:00:00Z",   "windows": {-    "installer_url": "https://wiki.adom.inc/download/adom/adom-desktop/1.9.105/Adom.Desktop_1.9.105_windows_x64-setup.exe",-    "installer_filename": "Adom.Desktop_1.9.105_windows_x64-setup.exe",-    "installer_sha256": "dd7fedb1ab25f529b121ae6c3ce680515dc8b27ea0d4dabfa0495bf86ecc8886",-    "installer_size": 10493552+    "installer_url": "https://wiki.adom.inc/download/adom/adom-desktop/1.9.106/Adom.Desktop_1.9.106_windows_x64-setup.exe",+    "installer_filename": "Adom.Desktop_1.9.106_windows_x64-setup.exe",+    "installer_sha256": "a6c488550c4a4020ecac33a073fbbe2f809ef9f14f1aff72f5bb8d1ef8f21a54",+    "installer_size": 10509728   },   "changelog_url": "https://wiki.adom.inc/adom/adom-desktop",   "minimum_required": "1.3.30",-  "note": "No cmd-window flash on Puppeteer bridge start/redeploy (missing CREATE_NO_WINDOW on a Node probe)."+  "note": "Disk janitor prunes transient temp dirs (screenshots kept 10 days, capped). Custom PNG taskbar overlay: desktop_taskbar overlay.icon accepts a PNG so a bridge can badge any window with its own art." }