Adom Desktop Control
Public Made by Adomby adom
Drive the user's real desktop from the cloud: their Chrome/Edge, headless pup, native UI, the Hydrogen editor, sibling Claude tabs, plus screen recording and video post.
name: hydrogen-web-control description: > What you CAN and (mostly) CANNOT drive in the Hydrogen web editor (hydrogen.adom.inc///edit) from the cloud, and why its embedded Claude Code panel input is unreachable by automation. Read before trying to type into a Hydrogen Claude tab. Trigger words: hydrogen editor, hydrogen web control, type into the claude tab, drive hydrogen, galliaApril editor, claude panel input.
Hydrogen web control
The Hydrogen editor (https://hydrogen.adom.inc/<user>/<env>/edit) is a web app the
user runs in Chrome or Edge. You can reach its top frame via the browser extension
(native-browser-control, remember
"browser":"edge" if it's in Edge). But its embedded Claude Code panel input is
buried in nested cross-origin webviews and is NOT reachable by any automation we have.
This skill exists so you don't burn a session rediscovering that.
The structure (why the Claude input is unreachable)
hydrogen.adom.inc/<user>/<env>/edit <- top page (browser-extension reachable)
└─ iframe <user>-<env>-....adom.cloud <- CROSS-ORIGIN (accessible:false)
└─ iframe (VS Code / code-server) <- another layer
└─ webview (Claude Code panel) <- the "ctrl esc to focus" input lives here
What the top frame exposes: a single textarea with placeholder "Plan/Build your
project" (Hydrogen's own launcher), NOT the Claude chat input. The Claude input is
several cross-origin frames down.
What FAILS (all tested, all dead ends)
- nbrowser/CDP eval (Chrome AND Edge): top-frame only. It can't cross into the
cross-origin iframe, and nbrowser has no frame-targeting (allFrames/frameUrl/frame
params are ignored).
iframe.contentDocument->accessible:false. - OS SendInput (
desktop_click+desktop_type+desktop_press_key, and the "ctrl esc to focus Claude" shortcut): reaches the browser and Edge's NATIVE UI (your text lands in Edge's search box, not Claude) but does NOT register in the webview editor. Always screenshot, you'll see the placeholder unchanged. - UIA (
desktop_find_control): the webview's shadow DOM isn't exposed; returns the document fallback, not the input.
What WORKS
- Reading/driving the top frame (the "Plan/Build your project" textarea, page chrome)
via
nbrowser_eval. Set a textarea value with the native setter:Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,'value').set.call(ta, text)then dispatchinput. - Screenshotting the Hydrogen window (
desktop_screenshot_window, background). - Navigating the top page.
If you need the Hydrogen Claude to run a prompt
You can't type it in programmatically. Options:
- Ask the user to paste the prompt into that Claude tab (it's the one case where asking is correct, you genuinely cannot do it). If it's a galliaApril-env Claude in bypass mode, it has relay access and will drive Fusion/the browser itself, see claude-control.
- Do the work yourself instead of delegating to that sibling, you have the same relay access it does.
The real unlock (flag it to whoever owns adom-browser-extension): frame-targeted
eval so CDP can address a nested webview's execution context.
---
name: hydrogen-web-control
description: >
What you CAN and (mostly) CANNOT drive in the Hydrogen web editor
(hydrogen.adom.inc/<user>/<env>/edit) from the cloud, and why its embedded Claude
Code panel input is unreachable by automation. Read before trying to type into a
Hydrogen Claude tab. Trigger words: hydrogen editor, hydrogen web control, type
into the claude tab, drive hydrogen, galliaApril editor, claude panel input.
---
# Hydrogen web control
The Hydrogen editor (`https://hydrogen.adom.inc/<user>/<env>/edit`) is a web app the
user runs in Chrome or Edge. You can reach its **top frame** via the browser extension
([native-browser-control](../native-browser-control/SKILL.md), remember
`"browser":"edge"` if it's in Edge). But its embedded **Claude Code panel input is
buried in nested cross-origin webviews and is NOT reachable by any automation** we have.
This skill exists so you don't burn a session rediscovering that.
## The structure (why the Claude input is unreachable)
```
hydrogen.adom.inc/<user>/<env>/edit <- top page (browser-extension reachable)
└─ iframe <user>-<env>-....adom.cloud <- CROSS-ORIGIN (accessible:false)
└─ iframe (VS Code / code-server) <- another layer
└─ webview (Claude Code panel) <- the "ctrl esc to focus" input lives here
```
What the top frame exposes: a single `textarea` with placeholder **"Plan/Build your
project"** (Hydrogen's own launcher), NOT the Claude chat input. The Claude input is
several cross-origin frames down.
## What FAILS (all tested, all dead ends)
- **nbrowser/CDP eval** (Chrome AND Edge): top-frame only. It can't cross into the
cross-origin iframe, and nbrowser has **no frame-targeting** (allFrames/frameUrl/frame
params are ignored). `iframe.contentDocument` -> `accessible:false`.
- **OS SendInput** (`desktop_click` + `desktop_type` + `desktop_press_key`, and the
"ctrl esc to focus Claude" shortcut): reaches the browser and Edge's NATIVE UI (your
text lands in Edge's *search box*, not Claude) but does NOT register in the webview
editor. Always screenshot, you'll see the placeholder unchanged.
- **UIA** (`desktop_find_control`): the webview's shadow DOM isn't exposed; returns the
document fallback, not the input.
## What WORKS
- Reading/driving the **top frame** (the "Plan/Build your project" textarea, page chrome)
via `nbrowser_eval`. Set a textarea value with the native setter:
`Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,'value').set.call(ta, text)`
then dispatch `input`.
- **Screenshotting** the Hydrogen window (`desktop_screenshot_window`, background).
- Navigating the top page.
## If you need the Hydrogen Claude to run a prompt
You can't type it in programmatically. Options:
1. **Ask the user to paste the prompt** into that Claude tab (it's the one case where
asking is correct, you genuinely cannot do it). If it's a galliaApril-env Claude in
bypass mode, it has relay access and will drive Fusion/the browser itself, see
[claude-control](../claude-control/SKILL.md).
2. **Do the work yourself** instead of delegating to that sibling, you have the same
relay access it does.
The real unlock (flag it to whoever owns `adom-browser-extension`): **frame-targeted
eval** so CDP can address a nested webview's execution context.