← Commit history
README.md+6−6
@@ -118,14 +118,14 @@ Install a third-party bridge by pasting its manifest URL, or `bridge_install {"m  ## The taskbar icon tells you the mode -Same Adom mark, two shades of teal, chosen the moment the window is created and kept in sync if the mode flips. A glance at the taskbar tells you whether AD is on its own or under Hydrogen Desktop.+The tile is always the Adom mark in the brand teal. When Hydrogen Desktop has the helm, AD adds a cogwheel badge to the corner of that tile. A glance at the taskbar tells you who is driving. -| Icon | Mode | Shade | Meaning |-|:---:|:---|:---|:---|-| <img src="docs/icon-standalone.png" alt="Standalone icon, muted teal" width="48"> | **Standalone** (not embedded) | Muted, darker teal (`#46817d`) | AD running on its own. The default for a normal install. |-| <img src="docs/icon-embedded.png" alt="Embedded icon, vivid teal" width="48"> | **Embedded** (under Hydrogen Desktop) | Vivid, brighter teal (`#00b8b0`) | Hydrogen Desktop launched AD and drives its lifecycle. |+| Icon | Mode | Meaning |+|:---:|:---|:---|+| <img src="docs/taskbar-standalone.png" alt="Standalone: plain Adom tile" width="88"> | **Standalone** (not embedded) | AD running on its own. The default for a normal install. |+| <img src="docs/taskbar-embedded.png" alt="Embedded: Adom tile with a cogwheel badge" width="88"> | **Embedded** (under Hydrogen Desktop) | Hydrogen Desktop launched AD and drives its lifecycle. The badge appears on entering embedded mode and clears on leaving: no restart, no flicker. | -Darker/muted tile = AD by itself; brighter/vivid tile = HD has the helm. A vivid tile with no HD running is a stale taskbar-button cache (fixed in v1.9.125); relaunch AD and it settles back to muted.+The badge is a Windows taskbar overlay icon, the one part of a taskbar button that repaints while the app runs. Builds before v1.9.133 signalled the mode by swapping the whole tile between a muted and a vivid teal, which Windows never redrew until the next restart. If you see a desaturated tile, upgrade: v1.9.133 is the first release where the taskbar, Start Menu and jump list all show the real brand colour.  ## Settings 
SKILL.md+21
@@ -1589,6 +1589,27 @@ Two ways to use it:     adom-desktop desktop_taskbar '{"hwnd":133560,"progress":{"state":"paused"},"flash":"until_focused"}'   # captcha — come look
     adom-desktop desktop_taskbar '{"hwnd":133560,"progress":{"state":"none"},"overlay":{"badge":"none"},"flash":"stop"}'  # done — clear all
     ```
+- `desktop_set_window_identity` + `desktop_register_app_identity` (v1.9.134+) -- **Full window-identity takeover.** Make a window you drive present itself as YOUR app: the taskbar button, Alt-Tab entry, hover tooltip and any user pin read your name and icon instead of the process that happens to own the HWND. Built for a bridge driving a borrowed host app (a Chrome for Testing window otherwise reads "Test" with Chrome's icon, which is two brands and a confusing word). AD is generic here — it applies whatever `appId` / `iconPath` / `displayName` you pass and knows nothing about which app that is.
+
+  **You need BOTH halves.** `set_window_identity` stamps a LIVE window (`PKEY_AppUserModel_ID` + `WM_SETICON`); `register_app_identity` teaches Windows what that `appId` MEANS (an HKCU `AppUserModelId` key + a Start Menu shortcut carrying the same AUMID). An unregistered appId falls back to the owning exe's icon, so half one alone leaves Alt-Tab wrong.
+
+    ```bash
+    # Once per install. Ship the .ico in your bridge's release zip; pass its cache path.
+    # `target`/`args` are what a user's PINNED tile launches — point it at a real verb so
+    # the pin opens a managed window instead of an orphan app.
+    adom-desktop desktop_register_app_identity '{"appId":"Adom.Pup","displayName":"Adom Pup",
+      "iconPath":"C:/.../adom-pup.ico",
+      "args":"browser_open_window {\"sessionId\":\"pinned\",\"owner\":\"pinned-launch\"}"}'
+
+    # Per window, e.g. at park time. cacheKey survives page-title churn.
+    adom-desktop desktop_set_window_identity '{"cacheKey":"<sessionId>",
+      "titleContains":"(session: <sessionId>)","appId":"Adom.Pup",
+      "displayName":"Adom Pup","iconPath":"C:/.../adom-pup.ico"}'
+    ```
+  - Window target: `hwnd` OR `titleContains` OR `cacheKey` (+ `fresh` to re-resolve). Response carries `resolvedBy` (`hwnd` | `cachedHwnd` | `title`) and `applied[]`.
+  - **Identity is per-HWND and dies with the window** — re-apply after a window is recreated.
+  - AD holds the icon handles for its whole process lifetime. Icon handles are process-owned: a transient setter leaves windows pointing at dead handles, so the icon reverts moments later. AD being long-lived is exactly why it owns them.
+  - `register_app_identity` writes HKCU only (never a UAC prompt). It is gated for RELAY callers like `write_file`; a bridge calling over the loopback API is trusted by transport and ungated.
 - `desktop_revoke_approvals` -- Revoke all shell auto-approve permissions and deny pending approvals. The next shell command will show the approval dialog.
   - Example: `adom-desktop desktop_revoke_approvals`
 - `desktop_caption` -- Show a global caption overlay that stays visible above ALL windows (KiCad, Fusion, Chrome). Native Win32 overlay — not a browser DOM element. Click-through: mouse events pass to windows below. Captured by screen recordings (browser `getDisplayMedia`, OBS, Game Bar).
dist/linux/adom-desktop
⋯ 1 unchanged line ⋯
package.json+1−1
@@ -1,6 +1,6 @@ {
   "slug": "adom-desktop",
-  "version": "1.9.128",
+  "version": "1.9.135",
   "type": "app",
   "description": "Two parts, two machines. DOWNLOAD (below) = the Windows desktop APP — install it on the PC you want Claude to control (the bridge + GUI, signed, auto-updating). PKG INSTALL (this command) = for a cloud AI's Linux container/Docker — it drops the adom-desktop CLI + Claude skills there so an assistant can drive that Windows PC over the relay. You need the Download on your PC; you need the pkg only inside a container. Capabilities: file transfer, screenshots, notifications, KiCad + Fusion 360, real-Chrome (Puppeteer) automation, shell, windows, and Hydrogen Desktop proxy.",
   "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.128",+  "version": "1.9.135",   "type": "app",   "description": "Two parts, two machines. DOWNLOAD (below) = the Windows desktop APP — install it on the PC you want Claude to control (the bridge + GUI, signed, auto-updating). PKG INSTALL (this command) = for a cloud AI's Linux container/Docker — it drops the adom-desktop CLI + Claude skills there so an assistant can drive that Windows PC over the relay. You need the Download on your PC; you need the pkg only inside a container. Capabilities: file transfer, screenshots, notifications, KiCad + Fusion 360, real-Chrome (Puppeteer) automation, shell, windows, and Hydrogen Desktop proxy.",   "keywords": [
skills/adom-desktop/SKILL.md+21
@@ -1589,6 +1589,27 @@ Two ways to use it:     adom-desktop desktop_taskbar '{"hwnd":133560,"progress":{"state":"paused"},"flash":"until_focused"}'   # captcha — come look
     adom-desktop desktop_taskbar '{"hwnd":133560,"progress":{"state":"none"},"overlay":{"badge":"none"},"flash":"stop"}'  # done — clear all
     ```
+- `desktop_set_window_identity` + `desktop_register_app_identity` (v1.9.134+) -- **Full window-identity takeover.** Make a window you drive present itself as YOUR app: the taskbar button, Alt-Tab entry, hover tooltip and any user pin read your name and icon instead of the process that happens to own the HWND. Built for a bridge driving a borrowed host app (a Chrome for Testing window otherwise reads "Test" with Chrome's icon, which is two brands and a confusing word). AD is generic here — it applies whatever `appId` / `iconPath` / `displayName` you pass and knows nothing about which app that is.
+
+  **You need BOTH halves.** `set_window_identity` stamps a LIVE window (`PKEY_AppUserModel_ID` + `WM_SETICON`); `register_app_identity` teaches Windows what that `appId` MEANS (an HKCU `AppUserModelId` key + a Start Menu shortcut carrying the same AUMID). An unregistered appId falls back to the owning exe's icon, so half one alone leaves Alt-Tab wrong.
+
+    ```bash
+    # Once per install. Ship the .ico in your bridge's release zip; pass its cache path.
+    # `target`/`args` are what a user's PINNED tile launches — point it at a real verb so
+    # the pin opens a managed window instead of an orphan app.
+    adom-desktop desktop_register_app_identity '{"appId":"Adom.Pup","displayName":"Adom Pup",
+      "iconPath":"C:/.../adom-pup.ico",
+      "args":"browser_open_window {\"sessionId\":\"pinned\",\"owner\":\"pinned-launch\"}"}'
+
+    # Per window, e.g. at park time. cacheKey survives page-title churn.
+    adom-desktop desktop_set_window_identity '{"cacheKey":"<sessionId>",
+      "titleContains":"(session: <sessionId>)","appId":"Adom.Pup",
+      "displayName":"Adom Pup","iconPath":"C:/.../adom-pup.ico"}'
+    ```
+  - Window target: `hwnd` OR `titleContains` OR `cacheKey` (+ `fresh` to re-resolve). Response carries `resolvedBy` (`hwnd` | `cachedHwnd` | `title`) and `applied[]`.
+  - **Identity is per-HWND and dies with the window** — re-apply after a window is recreated.
+  - AD holds the icon handles for its whole process lifetime. Icon handles are process-owned: a transient setter leaves windows pointing at dead handles, so the icon reverts moments later. AD being long-lived is exactly why it owns them.
+  - `register_app_identity` writes HKCU only (never a UAC prompt). It is gated for RELAY callers like `write_file`; a bridge calling over the loopback API is trusted by transport and ungated.
 - `desktop_revoke_approvals` -- Revoke all shell auto-approve permissions and deny pending approvals. The next shell command will show the approval dialog.
   - Example: `adom-desktop desktop_revoke_approvals`
 - `desktop_caption` -- Show a global caption overlay that stays visible above ALL windows (KiCad, Fusion, Chrome). Native Win32 overlay — not a browser DOM element. Click-through: mouse events pass to windows below. Captured by screen recordings (browser `getDisplayMedia`, OBS, Game Bar).
version.json+14−14
@@ -1,14 +1,14 @@-{-  "manifest_version": 1,-  "version": "1.9.128",-  "released_at": "2026-07-18T00:00:00Z",-  "windows": {-    "installer_url": "https://wiki.adom.inc/download/adom/adom-desktop/1.9.128/Adom.Desktop_1.9.128_windows_x64-setup.exe",-    "installer_filename": "Adom.Desktop_1.9.128_windows_x64-setup.exe",-    "installer_sha256": "545445a33c8ea8d19cef47523444f91034ba3b9d4defb4f8ba8af5c8b028b705",-    "installer_size": 12770848-  },-  "changelog_url": "https://wiki.adom.inc/adom/adom-desktop",-  "minimum_required": "1.3.30",-  "note": "Machine-initiated relaunches (Hydrogen Desktop's supervisor, the boot autostart shortcut, the installer's post-install relaunch, the relauncher) no longer raise an 'Adom Desktop is already running' toast; only a bare relaunch by a person does. Also fixes the embedded and standalone taskbar tile on a PINNED taskbar: a pinned button takes its tile from the shortcut, so AD now signals the mode with a taskbar overlay badge, with an opt-in setting to rewrite the pinned icon for the full colour flip."-}+{
+  "manifest_version": 1,
+  "version": "1.9.135",
+  "released_at": "2026-07-19T00:00:00Z",
+  "windows": {
+    "installer_url": "https://wiki.adom.inc/download/adom/adom-desktop/1.9.135/Adom.Desktop_1.9.135_windows_x64-setup.exe",
+    "installer_filename": "Adom.Desktop_1.9.135_windows_x64-setup.exe",
+    "installer_sha256": "60ef70416c54a37fd266c965143ef3fafab360664af43fad4241d73236121490",
+    "installer_size": 12780032
+  },
+  "changelog_url": "https://wiki.adom.inc/adom/adom-desktop",
+  "minimum_required": "1.3.30",
+  "note": "One brand icon everywhere: the taskbar, Start Menu and jump list now show the vivid Adom tile (a Start Menu shortcut regression had desaturated it since 1.9.58), with a cogwheel taskbar badge while embedded under Hydrogen Desktop. New desktop_set_window_identity and desktop_register_app_identity verbs let a bridge-driven app window present as its own app in the taskbar, Alt-Tab and pins. WebView2 low-memory mode suspends the hidden GUI, cutting the idle tray-app footprint from about 528 MB to about 93 MB."
+}\ No newline at end of file