← Commit history
README.md+62−28
@@ -1,28 +1,28 @@ # Adom Desktop -**The bridge between a cloud AI and your real Windows desktop.** A Claude agent in an Adom container โ€” or Hydrogen Desktop running locally โ€” connects to Adom Desktop over an encrypted relay and drives your *actual* machine: your signed-in browser, KiCad, Fusion 360, the shell, files, window automation, screenshots. **Bridges** extend that reach to any app. You stay in control โ€” every command is visible in the Activity Log, side-effecting commands can be gated behind a one-click approval, and it binds to `127.0.0.1` only, so nothing off your machine can reach it.+**The bridge between a cloud AI and your real Windows desktop.** A Claude agent in an Adom container, or Hydrogen Desktop running locally, connects to Adom Desktop over an encrypted relay and drives your *actual* machine: your signed-in browser, KiCad, Fusion 360, the shell, files, window automation, screenshots. **Bridges** extend that reach to any app. You stay in control: every command is visible in the Activity Log, side-effecting commands can be gated behind a one-click approval, and it binds to `127.0.0.1` only, so nothing off your machine can reach it.  ![Adom Desktop main window](docs/main-view.png) -- ๐Ÿ–ฅ๏ธ **Full desktop control** โ€” windows, input, screenshots, UI Automation, the shell, files, the registry, WSL.-- ๐Ÿ”Œ **Bridges** โ€” first-class mini-apps: Puppeteer (browser), KiCad, Fusion 360, your real signed-in browser, Blender, or your own.-- ๐Ÿ”’ **You're in control** โ€” localhost-only, an install-consent trust model, a visible activity log, and an approval gate for the remote cloud-AI path.-- ๐ŸŒ **Multi-machine** โ€” one relay can hold many desktops; address any of them by name, or fan a command out to all.-- ๐Ÿ” **Self-updating & signed** โ€” every release is Azure code-signed and auto-updates from this page.+- **Full desktop control:** windows, input, screenshots, UI Automation, the shell, files, the registry, WSL.+- **Bridges:** first-class mini-apps. Puppeteer (browser), KiCad, Fusion 360, your real signed-in browser, Blender, or your own.+- **You are in control:** localhost-only, an install-consent trust model, a visible activity log, and an approval gate for the remote cloud-AI path.+- **Multi-machine:** one relay can hold many desktops. Address any of them by name, or fan a command out to all.+- **Self-updating and signed:** every release is Azure code-signed and auto-updates from this page.  ## How it works  ![Architecture](docs/arch-flow.svg) -The cloud AI never touches your machine directly. It sends a verb to the **relay**; Adom Desktop โ€” connected out to that relay from your desktop โ€” executes it against Windows or forwards it to a bridge, and streams the result back. A co-resident sibling app (Hydrogen Desktop) can skip the relay and POST straight to the **loopback HTTP API** at `127.0.0.1`.+The cloud AI never touches your machine directly. It sends a verb to the **relay**; Adom Desktop, connected out to that relay from your desktop, executes it against Windows or forwards it to a bridge, and streams the result back. A co-resident sibling app (Hydrogen Desktop) can skip the relay and POST straight to the **loopback HTTP API** at `127.0.0.1`.  ``` Adom container (this package)            User's laptop-โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”-โ”‚ adom-desktop CLI + skillsโ”‚ โ‡† relay โ‡†  โ”‚ Adom Desktop GUI (Tauri) โ”‚-โ”‚ (Claude drives verbs)    โ”‚             โ”‚ KiCad ยท Fusion ยท Chrome  โ”‚-โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ”‚ shell ยท files ยท screens  โ”‚-                                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜++--------------------------+             +--------------------------++| adom-desktop CLI + skills|  <-relay->  | Adom Desktop GUI (Tauri) |+| (Claude drives verbs)    |             | KiCad, Fusion, Chrome    |++--------------------------+             | shell, files, screens    |+                                         +--------------------------+ ```  ## Install (in an Adom container)@@ -31,26 +31,48 @@ Adom container (this package)            User's laptop adom-wiki pkg install adom/adom-desktop ``` -That installs the **container-side** pieces โ€” the `adom-desktop` CLI (SHA256-verified against this page's `version.json`) and the Claude skill bundle into `~/.claude/skills/`:+That installs the **container-side** pieces: the `adom-desktop` CLI (SHA256-verified against this page's `version.json`) and the Claude skill bundle into `~/.claude/skills/`:  | Skill | What Claude learns | |---|---|-| `adom-desktop` | the main verb catalog โ€” screenshots, files, shell, windows, notifications |+| `adom-desktop` | the main verb catalog: screenshots, files, shell, windows, notifications | | `adom-desktop-pup` | real-Chrome (Puppeteer) automation: sessions, tabs, eval, recording |-| `adom-desktop-notify` | native Windows toasts โ€” progress bars, sticky reminders, buttons that round-trip |+| `adom-desktop-notify` | native Windows toasts: progress bars, sticky reminders, buttons that round-trip | | `adom-desktop-bridge-sdk` | author your own bridge: `bridge.json`, health/describe/rich-hint contracts, lifecycle |-| `adom-desktop-bridge-ownership` | the boundary โ€” what AD core owns vs what a bridge author owns |+| `adom-desktop-bridge-ownership` | the boundary: what AD core owns versus what a bridge author owns | | `adom-desktop-multi-ad` | address multiple Adom Desktops on one relay (`--target`, fan-out) | | `adom-desktop-direct-api` | the loopback HTTP API for sibling apps |-| `adom-desktop-installer` ยท `adom-desktop-windows-host` ยท `adom-desktop-discovery` | install/host/discovery details |+| `adom-desktop-installer`, `adom-desktop-windows-host`, `adom-desktop-discovery` | install, host, and discovery details |  `adom-wiki pkg update` keeps it current. The **KiCad** and **Fusion 360** bridge skills install from their own cloud-owned bridge pages.  ## The laptop GUI -The **Windows GUI** installs separately โ€” a signed NSIS installer served from this page (*Download for your machine* above; Hydrogen Desktop installs it automatically). It installs to `%LOCALAPPDATA%\Adom Desktop\`, adds a tray icon, starts on login, and **auto-updates itself** from this page's `version.json` (prompt by default; every 4h + on launch).+The **Windows GUI** installs separately: a signed NSIS installer served from this page (*Download for your machine* above; Hydrogen Desktop installs it automatically). It installs to `%LOCALAPPDATA%\Adom Desktop\`, adds a tray icon, starts on login, and **auto-updates itself** from this page's `version.json` (prompt by default; every 4h and on launch). -The main window (top) puts everything on one surface โ€” **Connections** (each relay + the other Adom Desktops on it as peers), the **Activity Log** (every command, badged by source + type, filterable), the **Bridges sidebar** (installed bridges as mini-app cards), the provisioned **Runtimes**, and the footer approval bar.+The main window (top) puts everything on one surface: **Connections** (each relay plus the other Adom Desktops on it as peers), the **Activity Log** (every command, badged by source and type, filterable), the **Bridges sidebar** (installed bridges as mini-app cards), the provisioned **Runtimes**, and the footer approval bar.++## Downloads++Everything a real user installs comes from this page.++| Artifact | Platform | What it is | How to get it |+|---|---|---|---|+| Signed installer (NSIS) | Windows x64 | The GUI desktop app. Azure Trusted Signing. Installs to `%LOCALAPPDATA%\Adom Desktop\` and auto-updates. | The *Download for your machine* box at the top of this page. This is the one promoted Windows download. |+| CLI + skills package | Linux (container) | The `adom-desktop` CLI a cloud container runs, plus the Claude skill set. SHA256-verified on install. | `adom-wiki pkg install adom/adom-desktop` |+| `version.json` | manifest | The auto-update manifest the GUI polls: per-platform installer URL, SHA256, and size. | Read automatically by the app; you never fetch it by hand. |++The Windows GUI installer is the only promoted Windows download. There is intentionally no standalone Windows CLI download. macOS is planned; the manifest reserves a slot for it.++## Screenshots++Anything AD can see, it can screenshot, losslessly, with **no focus steal** (`PrintWindow` or full-screen DXGI, never a foreground grab). *Every image on this page was produced by these verbs.* `desktop_screenshot_window` returns a **`screenshots[]` array**: the window plus each owned popup or child dialog as its own image (so a confirm bubble hovering over an app comes back alongside the parent, never missed); `desktop_screenshot_screen` grabs the full virtual screen including borderless popups; `browser_screenshot` grabs the pup viewport. Every shot carries a **`coordMap`** so the AI clicks *what it sees* (`{space:"image", shotId, x, y}` to real screen px, no DPI math). It stays generic: AD returns the rich array, the AI decides. `ad_scroll` even lets the AI page AD's own window to capture content below the fold.++## Recording++![Adom Desktop Recorder](docs/recorder.png)++AD records the desktop or a browser session to video. The recorder HUD (above) **requires a `reason`** shown to the user up front, so a recording never starts silently, with live Screen/Microphone toggles and a Start/Stop control. `desktop_recorder_open {reason}` and `desktop_recorder_close` for the desktop; `browser_record_start` and `browser_record_stop` for the pup browser. Built for smooth, high-frame-rate video, not a choppy screenshot loop.  ## Bridges @@ -60,22 +82,34 @@ Each bridge is a small, independently-versioned process the app spawns, supervis  | Bridge | What it drives | |---|---|-| **Puppeteer** (`browser_*`) | A dedicated Chrome-for-Testing (or Edge) โ€” open, drive, screenshot, record. |-| **Native Browser** (`nbrowser_*`) | Your *real* signed-in Chrome/Edge profile, for logins & forms. |-| **KiCad** (`kicad_*`) | Schematic + PCB automation, DRC/ERC, gerber/STEP export, 3D render. |-| **Fusion 360** (`fusion_*`) + **APS** (`aps_*`) | Modeling scripts, exports, indexed cloud-file search. |-| **Blender** (`blender_*`) | Headless Python scripting + renders. |+| **Puppeteer** (`browser_*`) | A dedicated Chrome-for-Testing (or Edge): open, drive, screenshot, record. |+| **Native Browser** (`nbrowser_*`) | Your *real* signed-in Chrome/Edge profile, for logins and forms. |+| **KiCad** (`kicad_*`) | Schematic and PCB automation, DRC/ERC, gerber/STEP export, 3D render. |+| **Fusion 360** (`fusion_*`) plus **APS** (`aps_*`) | Modeling scripts, exports, indexed cloud-file search. |+| **Blender** (`blender_*`) | Headless Python scripting and renders. | | **Hydrogen Desktop** (`hd_*`) | The local dev-environment app AD can embed into. | -Install a third-party bridge by pasting its manifest URL, or `bridge_install {"manifestUrl":"โ€ฆ"}`. Build one with the [Bridge SDK](https://wiki.adom.inc/adom/adom-desktop-bridges).+Install a third-party bridge by pasting its manifest URL, or `bridge_install {"manifestUrl":"..."}`. Build one with the [Bridge SDK](https://wiki.adom.inc/adom/adom-desktop-bridges).++## Settings++![Settings](docs/settings.png)++Auto-connect behavior, the update channel (**prompt** / auto / off), the shell-approval preference, Hydrogen Desktop integration (including *exit when HD exits*), and runtime prewarming. While embedded in HD, HD-owned preferences show as *managed by Hydrogen Desktop*. -## Security & the approval gate+## Security and the approval gate  ![Shell approval bar](docs/approve-bar.png) -**The trust boundary is install-consent + the localhost bind.** Installing the app (and each bridge) is you granting permission for the AI to drive your machine โ€” if you don't want that, uninstall. And the app plus every bridge binds `127.0.0.1` **only, never `0.0.0.0`**, so a caller must already be a program you installed on your own machine to reach it. No network attack surface by construction.+**The trust boundary is install-consent plus the localhost bind.** Installing the app (and each bridge) is you granting permission for the AI to drive your machine; if you do not want that, uninstall. And the app plus every bridge binds `127.0.0.1` **only, never `0.0.0.0`**, so a caller must already be a program you installed on your own machine to reach it. No network attack surface by construction.++On top of that, the **remote cloud-AI path is approval-gated.** Verbs that run code or change the machine (`shell_execute`, `run_script`, `launch_process`, `write_file`, `registry_*`, `process_kill`, and so on) require a human grant when they arrive over the *relay*: **+1hr / +24hr** (time-boxed), **Bypass** (indefinite), or **Revoke**. The grant is human-only; local callers (your CLI, HD, bridges) are trusted by transport and never prompt; read-only verbs are never gated.++## Notifications++![Adom Desktop toast](docs/toast.png) -On top of that, the **remote cloud-AI path is approval-gated.** Verbs that run code or change the machine (`shell_execute`, `run_script`, `launch_process`, `write_file`, `registry_*`, `process_kill`, โ€ฆ) require a human grant when they arrive over the *relay* โ€” **+1hr / +24hr** (time-boxed), **Bypass** (indefinite), or **Revoke**. The grant is human-only; local callers (your CLI, HD, bridges) are trusted by transport and never prompt; read-only verbs are never gated.+AD speaks to you through native Windows toasts via `notify_user`: plain alerts, sticky reminders, progress bars, and interactive toasts with buttons whose click round-trips back to the caller. The shell-approval toast carries *Approve 1 hr / 24 hr / Bypass Permissions* so you can grant from the toast without opening the window. A bridge, even one on a different machine, can `notify_user` with a `target` to reach you wherever you are.  ## Verbs 
SKILL.md+2
@@ -1608,6 +1608,8 @@ Take screenshots of the user's desktop or individual windows. All screenshots us   - Example: `adom-desktop desktop_activity_filter '{"bridge":"kicad"}'` then `adom-desktop desktop_activity_filter '{"clear":true}'` - `desktop_screenshot_window` -- Capture a specific window by HWND - `desktop_screenshot_screen` -- Capture the entire desktop (all monitors)+- `desktop_ad_scroll` (v1.9.86+) -- **Scroll AD's OWN window panels.** AD is a fully AI-controllable app, so you can drive its own scrollbars โ€” most usefully to page the **bridges sidebar** and screenshot cards that are below the fold. Args: `panel` (`bridges` default | `activity` | `connections`), `to` (`top`|`bottom`, absolute โ€” wins over `dy`), `dy` (relative px, default 400; negative = up). Returns `{ok, panel, scrolled, state:{scrollTop,scrollHeight,clientHeight,atTop,atBottom,found}|null, _hint}` โ€” round-tripped from the live window so you can **loop until `state.atBottom==true`**. A collapsed bridges sidebar is auto-expanded first; `state==null` means the panel didn't report (collapsed/empty).+  - Capture-all-cards workflow: `desktop_ad_scroll '{"panel":"bridges","to":"top"}'` โ†’ `desktop_screenshot_window` (AD hwnd) โ†’ `desktop_ad_scroll '{"panel":"bridges"}'` โ†’ screenshot โ†’ repeat until `atBottom`.  ### Browser Automation (Puppeteer) 
dist/linux/adom-desktop
⋯ 1 unchanged line ⋯
docs/recorder.pngadded
⋯ 1 unchanged line ⋯
docs/toast.pngadded
⋯ 1 unchanged line ⋯
package.json+1−1
@@ -1,6 +1,6 @@ {
   "slug": "adom-desktop",
-  "version": "1.9.84",
+  "version": "1.9.86",
   "type": "app",
   "hero": { "path": "docs/hero.png" },
   "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.",
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop",-  "version": "1.9.85",+  "version": "1.9.86",   "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+2
@@ -1608,6 +1608,8 @@ Take screenshots of the user's desktop or individual windows. All screenshots us   - Example: `adom-desktop desktop_activity_filter '{"bridge":"kicad"}'` then `adom-desktop desktop_activity_filter '{"clear":true}'` - `desktop_screenshot_window` -- Capture a specific window by HWND - `desktop_screenshot_screen` -- Capture the entire desktop (all monitors)+- `desktop_ad_scroll` (v1.9.86+) -- **Scroll AD's OWN window panels.** AD is a fully AI-controllable app, so you can drive its own scrollbars โ€” most usefully to page the **bridges sidebar** and screenshot cards that are below the fold. Args: `panel` (`bridges` default | `activity` | `connections`), `to` (`top`|`bottom`, absolute โ€” wins over `dy`), `dy` (relative px, default 400; negative = up). Returns `{ok, panel, scrolled, state:{scrollTop,scrollHeight,clientHeight,atTop,atBottom,found}|null, _hint}` โ€” round-tripped from the live window so you can **loop until `state.atBottom==true`**. A collapsed bridges sidebar is auto-expanded first; `state==null` means the panel didn't report (collapsed/empty).+  - Capture-all-cards workflow: `desktop_ad_scroll '{"panel":"bridges","to":"top"}'` โ†’ `desktop_screenshot_window` (AD hwnd) โ†’ `desktop_ad_scroll '{"panel":"bridges"}'` โ†’ screenshot โ†’ repeat until `atBottom`.  ### Browser Automation (Puppeteer)