← Commit history
package.json+1−1
@@ -4,7 +4,7 @@   "type": "bootstrap",   "title": "Adom Hydrogen (platform base)",   "brief": "Layer Hydrogen's workspace onto a standard Adom workstation.",-  "version": "0.5.10",+  "version": "0.5.11",   "description": "Hydrogen's PLATFORM-GENERIC workspace layer on top of adom/core. Installs adom/core for the full Adom ecosystem, then adds everything common to running inside Hydrogen on ANY platform: the runtime-neutral hydrogen-* skills and the generic editor configuration (Claude Code CLI + extension, VS Code settings, trusted domains). Platform-specific layers depend on THIS: adom/hydrogen-windows-bootstrap (WSL2), adom/hydrogen-mac-bootstrap, adom/hydrogen-ubuntu-bootstrap. The reference design other orgs copy to build their own bootstrap on adom/core.",   "org": "adom",   "tags": [
page.json+1−1
@@ -4,7 +4,7 @@   "type": "bootstrap",   "title": "Adom Hydrogen (platform base)",   "brief": "Layer Hydrogen's workspace onto a standard Adom workstation.",-  "version": "0.5.10",+  "version": "0.5.11",   "description": "Hydrogen's PLATFORM-GENERIC workspace layer on top of adom/core. Installs adom/core for the full Adom ecosystem, then adds everything common to running inside Hydrogen on ANY platform: the runtime-neutral hydrogen-* skills and the generic editor configuration (Claude Code CLI + extension, VS Code settings, trusted domains). Platform-specific layers depend on THIS: adom/hydrogen-windows-bootstrap (WSL2), adom/hydrogen-mac-bootstrap, adom/hydrogen-ubuntu-bootstrap. The reference design other orgs copy to build their own bootstrap on adom/core.",   "org": "adom",   "tags": [
skills/hydrogen-adom-auth/SKILL.md+8−9
@@ -75,16 +75,16 @@ as a `Cookie: session_token=...` header on every request to `carbon.adom.inc`. ### Reading the token programmatically  ```bash-# From the control API-curl http://127.0.0.1:47084/auth-token+# From the control API (port is dynamic, 47084 default — see hydrogen-networking)+curl http://127.0.0.1:<control-port>/auth-token  # From inside the workspace (injected by setup step inject-api-key, mode 644) cat /var/run/adom/api-key ```  For the host-specific path table and the runtime-specific way to read-`/var/run/adom/api-key` from outside the workspace, see the-[[hydrogen-adom-auth-windows]] companion skill.+`/var/run/adom/api-key` from outside the workspace, see the platform companion+skill (**hydrogen-adom-auth-windows** on Windows, **hydrogen-api-key-mac** on macOS).  --- @@ -296,7 +296,7 @@ The setup/bootstrap process depends on a valid session token: 1. **inject-api-key** -- reads the Hydrogen-side `hydrogen-session.txt`, writes the    token into the workspace at `/var/run/adom/api-key` (mode 644) as the Adom    API key. If the token is missing or expired, this step fails and downstream-   steps (adom-cli, gallia, etc.) cannot authenticate.+   steps (adom-cli, skill installs, etc.) cannot authenticate.  2. **Claude auth** -- uses `replay-claude-credentials.json` if available;    otherwise requires the user to complete the Claude OAuth flow inside the@@ -324,9 +324,8 @@ full endpoint reference.  ## Cross-references -- **hydrogen-adom-auth-windows** -- host app-data path table + host runtime specifics-- **hydrogen-ui** -- menu layout, where profile menu lives-- **hydrogen-setup** -- bootstrap steps that depend on auth+- **hydrogen-adom-auth-windows** / **hydrogen-api-key-mac** -- host app-data path table + host runtime specifics+- **hydrogen-profile-menu** -- where login/logout live in the UI - **hydrogen-settings** -- API Explorer (auth endpoints tab)-- **hydrogen-networking** -- control API port (47084)+- **hydrogen-networking** -- how to reach the control API port - **carbon-preferences** -- user preferences that require auth
skills/hydrogen-adom-bridge/SKILL.md+35−32
@@ -23,7 +23,7 @@ description: >  # Hydrogen ↔ Adom Bridge — your reach onto the user's real machine -You (the AI) run inside the **Hydrogen workspace** (a WSL2 Ubuntu distro by default).+You (the AI) run inside the **Hydrogen workspace** (an Ubuntu environment — a WSL2 distro on Windows, a Lima machine on macOS). That's a sandbox. **Adom Bridge (ab) is how you reach OUT of it onto the user's actual operating system** — their real files, shell, screen, and desktop apps. Knowing ab exists is the difference between "I can only work in here" and "I can@@ -48,7 +48,7 @@ create that file on your Desktop, screenshot your screen, and open it in KiCad." Adom cloud container reach into a user's desktop. Rather than reinvent it, Hydrogen **bundles ab and makes it part of Hydrogen's install**, then puts it in *embedded mode* so the user only ever manages one app (ah). The two talk to each other-constantly. See [hydrogen-embedded-bridge](../hydrogen-embedded-bridge/SKILL.md) for the embedding+constantly. See **hydrogen-embedded-bridge** (Windows bootstrap) for the embedding mechanics (tray ownership, lifecycle, standalone↔embedded transitions).  ## Hydrogen's built-in bridge vs the embedded ab (dual-client)@@ -92,19 +92,22 @@ re-document every verb here, this is a **capability map → the focused skill**:  | Capability | Verb(s) / surface | Where it's documented | |---|---|---|-| **Create files/folders on the host** | `send_files` (container → desktop) | [hydrogen-file-transfer](../hydrogen-file-transfer/SKILL.md) |-| **Pull files from the host** | `pull_file` (desktop → container, SHA256-verified); browse + watch via `list_files` / `watch_files` | [hydrogen-file-transfer](../hydrogen-file-transfer/SKILL.md) |+| **Create files/folders on the host** | `send_files` (container → desktop) | **hydrogen-file-transfer** (platform bootstrap) |+| **Pull files from the host** | `pull_file` (desktop → container, SHA256-verified); browse + watch via `list_files` / `watch_files` | **hydrogen-file-transfer** (platform bootstrap) | | **Run a shell command on the host** | `shell_execute` (real PowerShell/shell) | shell-trust model below |-| **Screen/window control + screenshots** | `desktop_screenshot_screen` / `desktop_screenshot_window` / `desktop_list_windows`, `desktop_set_window_state`, `desktop_bring_to_front` | [hydrogen-self-screenshot](../hydrogen-self-screenshot/SKILL.md) |-| **Record the screen / a tab** | `desktop_record_*` (whole screen), `browser_record_*` (one tab) | [hydrogen-recording](../hydrogen-recording/SKILL.md) — ab-served, verify `record` capability |-| **Desktop notifications** | `notify_user` (title/body/level + action buttons) | [hydrogen-notifications](../hydrogen-notifications/SKILL.md) |-| **On-screen captions** | `caption` (always-on-top click-through overlay) | [hydrogen-captions](../hydrogen-captions/SKILL.md) |-| **Open browsers** | `browser_*` (Pup) and the Browser Picker | [hydrogen-open-url](../hydrogen-open-url/SKILL.md), `pup` |-| **Drive KiCad / Fusion 360 / Pup** | `kicad_*`, `fusion_*`, `browser_*` | [hydrogen-bridges](../hydrogen-bridges/SKILL.md) |-| **Embedded mechanics (tray/lifecycle)** | `desktop_embedded_*` | [hydrogen-embedded-bridge](../hydrogen-embedded-bridge/SKILL.md) — ab-served |+| **Screen/window control + screenshots** | `desktop_screenshot_screen` / `desktop_screenshot_window` / `desktop_list_windows`, `desktop_set_window_state`, `desktop_bring_to_front` | **hydrogen-self-screenshot** (platform bootstrap; `hydrogen-self-screenshot-mac` on macOS) |+| **Record the screen / a tab** | `desktop_record_*` (whole screen), `browser_record_*` (one tab) | **hydrogen-recording** (platform bootstrap; `hydrogen-recording-mac` on macOS) — ab-served, verify `record` capability |+| **Desktop notifications** | `notify_user` (title/body/level + action buttons) | **hydrogen-notifications** (platform bootstrap) |+| **On-screen captions** | `caption` (always-on-top click-through overlay) | **hydrogen-captions** (platform bootstrap) |+| **Open browsers** | `browser_*` (Pup) | **hydrogen-open-url** (platform bootstrap), `pup` |+| **Drive KiCad / Fusion 360 / Pup** | `kicad_*`, `fusion_*`, `browser_*` | the platform bridge skill set (**hydrogen-bridges** on Windows, the adom-bridge-macos skills on mac) |+| **Embedded mechanics (tray/lifecycle)** | `desktop_embedded_*` | **hydrogen-embedded-bridge** (Windows bootstrap) — ab-served | -For the complete verb list run `adom-bridge-cli list_commands` (or see the-`adom-bridge-cli` skill).+For the complete verb list run `adom-bridge-cli list_commands`.++> **CLI name per platform:** the bridge CLI is **`adom-bridge-cli`** on Windows+> and **`adom-bridge`** on macOS. Examples in this skill use `adom-bridge-cli`+> — substitute `adom-bridge` on a mac workspace.  ### Host shell-trust model @@ -120,17 +123,18 @@ adom-bridge-cli shell_auto_approve '{"duration_secs":0}'   # turn auto-approve o When you *don't* need a free-form shell, prefer the **no-escape structured runners** over hand-quoted `shell_execute` (ab ≥ 1.8.50): `adom-bridge-cli run_script '{"interpreter":"bash|cmd|powershell","scriptB64":"<b64>"}'`-and `adom-bridge-cli wsl_exec '{"distro":"Adom-Workspace","user":"adom","scriptB64":"<b64>"}'`+and (Windows) `adom-bridge-cli wsl_exec '{"distro":"Adom-Workspace","user":"adom","scriptB64":"<b64>"}'` — base64 the script so no quoting survives to be mangled. -### Auto-installing missing apps (winget)+### Auto-installing missing apps  If KiCad or Node.js is missing on the host, you don't have to stop at a download-link — trigger an unattended winget install:+link — trigger an unattended install (the mechanism is platform-specific; the+verb reports if unsupported on this platform):  ```bash-adom-bridge-cli desktop_install_kicad '{}'   # winget install KiCad-adom-bridge-cli desktop_install_node  '{}'   # winget install Node.js (unblocks the Pup bridge)+adom-bridge-cli desktop_install_kicad '{}'   # install KiCad+adom-bridge-cli desktop_install_node  '{}'   # install Node.js (unblocks the Pup bridge) ```  (`install_kicad` fires when `kicad_list_versions` returns@@ -170,7 +174,7 @@ adom-bridge-cli hd_api '{"method":"POST","path":"/setup/run-all","body":{}}' adom-bridge-cli hd_api '{"method":"GET","path":"/health"}' ``` `hd_api` hits Hydrogen's **control API**, discovering its real port from-`%APPDATA%\hydrogen-desktop\ports.json` key `control` (fallback **47084**).+`ports.json` (key `control`, fallback **47084**) in Hydrogen's app-data directory.  **Embedded-mode introspection (ab-served):** ```bash@@ -183,16 +187,15 @@ adom-bridge-cli desktop_embedded_status   # embedded=true/false, enteredVia=laun You (AI in the workspace)   └─ adom-bridge-cli <verb> '<json>'        ← CLI in the distro        └─ relay  (adom-bridge-cli serve: WS :8765 + HTTP :8766, started in the workspace)-            └─ WebSocket ──► Hydrogen's built-in bridge AND/OR the embedded ab on the user's Windows machine+            └─ WebSocket ──► Hydrogen's built-in bridge AND/OR the embedded ab on the user's machine                  └─ acts on the OS / KiCad / Fusion / Chrome ```  - In Hydrogen the relay is started for you by the **`start-relay`** setup step; Hydrogen's-  built-in bridge and the embedded ab both connect to it. Under WSL2 the relay-  binds `0.0.0.0:8765` in the distro and WSL2 forwards it to the host's-  `localhost:8765` (HTTP on `8766`), which is how the host-side clients reach-  your in-workspace relay (see the `hydrogen-networking` skill). It's reached-  **same-port** under WSL2 — there's no host 47081/47082 remap.+  built-in bridge and the embedded ab both connect to it. The relay binds+  `0.0.0.0:8765` in the workspace (HTTP on `8766`) and the platform forwards it+  to the host's `localhost:8765` (mirrored networking on Windows, port+  forwarding on macOS) — see the `hydrogen-networking` skill. - **Always verify the bridge before acting on the host:**   ```bash   adom-bridge-cli ping       # → {"status":"connected", ...} means a client is reachable@@ -224,11 +227,11 @@ workspace itself (editor, files under `/home/adom/project`, the runtime), that's **Hydrogen**. Lead with what you can do, verify with `adom-bridge-cli ping`, then act.  ## Related skills-- [hydrogen-embedded-bridge](../hydrogen-embedded-bridge/SKILL.md) — how Hydrogen installs + embeds ab (tray, lifecycle, standalone↔embedded)-- [hydrogen-bridges](../hydrogen-bridges/SKILL.md) — the KiCad / Fusion / Puppeteer bridge ecosystem-- [hydrogen-file-transfer](../hydrogen-file-transfer/SKILL.md) — send/pull files, browse + watch the host filesystem-- [hydrogen-self-screenshot](../hydrogen-self-screenshot/SKILL.md) — host screenshots + window control-- [hydrogen-recording](../hydrogen-recording/SKILL.md) — screen vs tab recording (ab-served)-- [hydrogen-notifications](../hydrogen-notifications/SKILL.md) — desktop toasts; [hydrogen-captions](../hydrogen-captions/SKILL.md) — on-screen caption overlay-- [hydrogen-open-url](../hydrogen-open-url/SKILL.md) — the ways to open a URL (Pup, native browser, picker, …)+- **hydrogen-embedded-bridge** (Windows bootstrap) — how Hydrogen installs + embeds ab (tray, lifecycle, standalone↔embedded)+- the platform bridge skill set (**hydrogen-bridges** on Windows, the adom-bridge-macos skills on mac) — the KiCad / Fusion / Puppeteer bridge ecosystem+- **hydrogen-file-transfer** (platform bootstrap) — send/pull files, browse + watch the host filesystem+- **hydrogen-self-screenshot** (platform bootstrap; `hydrogen-self-screenshot-mac` on macOS) — host screenshots + window control+- **hydrogen-recording** (platform bootstrap; `hydrogen-recording-mac` on macOS) — screen vs tab recording (ab-served)+- **hydrogen-notifications** (platform bootstrap) — desktop toasts; **hydrogen-captions** (platform bootstrap) — on-screen caption overlay+- **hydrogen-open-url** (platform bootstrap) — the ways to open a URL (Pup, native browser, picker, …) - `pup` — driving Pup browser windows; `adom-bridge-cli` — the full CLI verb reference
skills/hydrogen-adom-menu/SKILL.md+3−4
@@ -6,15 +6,15 @@ description: >   Dashboard, Settings, Ports, API Explorer, and a Desktop section (Adom Bridge,   Zoom, Fullscreen, Console, Developer Tools, Dev Toolbar), a   Container section (Start/Restart/Stop), and an Admin section (Setup Steps,-  Virgin Reset, Browser Picker Manager). Also covers the window+  Virgin Reset). Also covers the window   TITLE BAR version readout and the About dialog (version/sha/build/signed +   Adom Bridge version + wiki/repo links). Use when the user asks "what's in the   Adom menu", "where's settings/devtools/about", "what version am I running", or   about any upper-left menu item. NOTE: this is the upper-LEFT logo menu — the   upper-RIGHT avatar dropdown is hydrogen-profile-menu. Trigger words: adom menu, logo   menu, upper left menu, hamburger menu, settings, ports, api explorer, developer-  tools, devtools, dev toolbar, adom desktop, about, about dialog, what version,-  build info, setup steps menu, virgin reset menu, browser picker, console,+  tools, devtools, dev toolbar, adom bridge, about, about dialog, what version,+  build info, setup steps menu, virgin reset menu, console,   fullscreen, zoom. --- @@ -47,7 +47,6 @@ logo = go straight to the Dashboard.) Source: `EditorNav.svelte` → `.logo-butt | *— Admin —* | | | **Setup Steps** | Show the setup-steps panel — the setup cascade for the active runtime; see **hydrogen-setup-steps** / **hydrogen-setup** | | **Virgin Reset** | Open the virgin-reset panel — wipe + re-run setup (see **hydrogen-setup**) |-| **Browser Picker Manager** | Manage saved browser choices per domain (see **hydrogen-browser-picker**) |  > **Removed items (do not list):** "Bridge Manager" (was a no-op with no backing > panel) and "Port Mappings…" (no such action exists in the code).
skills/hydrogen-avatar/SKILL.md+1−1
@@ -40,7 +40,7 @@ Then their wiki footprint — pages they own, apps/skills they've published, the - **GitHub** — languages, projects, existing avatar style. - **LinkedIn** — role, industry, how they present professionally. - A plain web search on `"<display name>" <company>` for talks, articles, a personal site.-- **Their signed-in browser via adom-bridge-cli** (`nbrowser_*`, the abe extension) can reach a+- **Their signed-in browser via the bridge CLI** (`nbrowser_*`, the nbe extension) can reach a   Google profile or anything else they're already logged into — see `driving-the-extension`.   Prefer this over pup for logged-in surfaces. 
skills/hydrogen-capture-share/SKILL.md+6−6
@@ -25,11 +25,11 @@ the *editor* (panels, the workspace, or the whole monitor) into the container, a auto-approves in ~3s), a brief countdown plays, then you can capture frames.  > This is **not** the same as host OS screenshots. `desktop_screenshot_*`-> (see [hydrogen-adom-desktop](../hydrogen-adom-desktop/SKILL.md)) take true OS screenshots via+> (see **hydrogen-adom-bridge**) take true OS screenshots via > ab with zero dialogs. This skill is the **in-webview** share that captures what > Hydrogen itself is rendering (the editor) via the browser's `getDisplayMedia`/Element > Capture, gated by an in-app consent dialog. And it is distinct from-> [hydrogen-permissions](../hydrogen-permissions/SKILL.md) (the webview auto-granting mic/cam OS+> **hydrogen-permissions** (platform bootstrap; the webview auto-granting mic/cam OS > permissions) — that's a different layer.  ## The Screen Capture dropdown (editor toolbar)@@ -142,7 +142,7 @@ the toast is a real, abortable delay.    `desktop_screenshot_*` instead (see Related skills).  ## Related skills-- [hydrogen-recording](../hydrogen-recording/SKILL.md) — screen/mic recording (same share + countdown machinery; in-app .webm recorder + ab desktop recording)-- [hydrogen-self-screenshot](../hydrogen-self-screenshot/SKILL.md) — CDP per-panel screenshots + shotlog visual-verify loop-- [hydrogen-permissions](../hydrogen-permissions/SKILL.md) — the webview auto-granting OS mic/cam/notification permissions (a *different* layer from this consent dialog)-- [hydrogen-adom-desktop](../hydrogen-adom-desktop/SKILL.md) — ab's dialog-free host OS screenshots (`desktop_screenshot_screen/_window`)+- **hydrogen-recording** (platform bootstrap; `hydrogen-recording-mac` on macOS) — screen/mic recording (same share + countdown machinery; in-app .webm recorder + ab desktop recording)+- **hydrogen-self-screenshot** (platform bootstrap; `hydrogen-self-screenshot-mac` on macOS) — per-panel screenshots + shotlog visual-verify loop+- **hydrogen-permissions** (platform bootstrap) — the webview auto-granting OS mic/cam/notification permissions (a *different* layer from this consent dialog)+- **hydrogen-adom-bridge** — ab's dialog-free host OS screenshots (`desktop_screenshot_screen/_window`)
skills/hydrogen-claude-auth/SKILL.md+4−5
@@ -1,6 +1,6 @@ --- name: hydrogen-claude-auth-description: How Claude Code authenticates inside Hydrogen — the OAuth flow that opens in your browser via the Browser Picker, where credentials are stored on host vs workspace, how Hydrogen backs them up so a workspace rebuild doesn't make you re-auth, the virgin-reset toggle that wipes Claude creds, and the 4-technique auth cascade Hydrogen runs if Claude isn't authenticated. READ when troubleshooting "Claude not authenticated", expired Claude tokens, re-authenticating after a virgin reset, or wondering where Claude credentials live. Trigger words — claude auth, claude code login, claude code authentication, claude not authenticated, claude oauth, claude credentials, claude session, claude.ai subscription, replay-claude-credentials.json, claude-auth, claude credential backup, claude re-auth, claude expired, claude.ai subscription button.+description: How Claude Code authenticates inside Hydrogen — the OAuth flow that opens in your browser, where credentials are stored on host vs workspace, how Hydrogen backs them up so a workspace rebuild doesn't make you re-auth, the virgin-reset toggle that wipes Claude creds, and the 4-technique auth cascade Hydrogen runs if Claude isn't authenticated. READ when troubleshooting "Claude not authenticated", expired Claude tokens, re-authenticating after a virgin reset, or wondering where Claude credentials live. Trigger words — claude auth, claude code login, claude code authentication, claude not authenticated, claude oauth, claude credentials, claude session, claude.ai subscription, replay-claude-credentials.json, claude-auth, claude credential backup, claude re-auth, claude expired, claude.ai subscription button. ---  # Hydrogen Claude Auth — how Claude Code signs in@@ -13,7 +13,7 @@ For Adom auth (your hydrogen.adom.inc login), see [hydrogen-adom-auth](../hydrog  1. The Claude Code extension panel shows a "Claude.ai Subscription" button when it isn't authenticated. 2. Clicking opens an OAuth URL to `claude.ai`.-3. Hydrogen's Browser Picker intercepts the URL (since it's a `*.claude.ai` link). The "Claude auth" branded variant of the picker appears with the work browser profile pre-selected and a 5-second auto-countdown.+3. Hydrogen opens the URL in the user's browser. 4. The browser opens the Claude OAuth page; you complete sign-in (or it auto-completes if you're already signed in to claude.ai). 5. Claude returns OAuth credentials, which the extension stores at `/home/adom/.claude/.credentials.json` inside the workspace. 6. Hydrogen's setup step `claude-auth` notices the new credentials and **backs them up to the host** (in Hydrogen's app-data directory, as `replay-claude-credentials.json`) so future workspace rebuilds can replay them. The exact host path is platform-specific — see the platform layer for where it lives on your OS.@@ -48,7 +48,7 @@ If Claude isn't authenticated after setup, Hydrogen tries each technique in orde | 1 | Detect auth failure | Scans all VS Code webview contexts for the "Claude.ai Subscription" button / "How do you want to log in?" text. Confirms whether the auth UI is reachable. | | 2 | Open NEW conversation + auto-click auth button | The new-conversation panel re-evaluates auth state and shows the button cleanly. Hydrogen clicks it via the webview eval channel. | | 3 | Open Claude editor + auto-click auth button | If technique 2 didn't trigger a fresh auth state, opens a Claude editor (different VS Code command) and tries the same click. |-| 4 | CLI fallback (`claude auth login`) | Runs `claude auth login` inside the workspace, extracts the OAuth URL from stdout, opens it in your browser via the Browser Picker. You paste the returned code into a VS Code terminal. |+| 4 | CLI fallback (`claude auth login`) | Runs `claude auth login` inside the workspace, extracts the OAuth URL from stdout, opens it in your browser. You paste the returned code into a VS Code terminal. |  After authentication, the new credentials are immediately backed up to the host via step 6 of the flow above. @@ -80,7 +80,6 @@ The setup panel's Virgin Reset section has a per-Claude-creds toggle:  ## Related skills -- [hydrogen-adom-auth](../hydrogen-adom-auth/SKILL.md) — Adom (hydrogen.adom.inc) login, separate from Claude-- [hydrogen-browser-picker](../hydrogen-browser-picker/SKILL.md) — the Browser Picker that routes the Claude OAuth URL, including the branded "Claude auth" variant+- **hydrogen-adom-auth** — Adom (hydrogen.adom.inc) login, separate from Claude - `hydrogen-setup-steps` — the `claude-auth` step and the auth cascade are part of setup - `hydrogen-volume` — explains why the host-side backup survives workspace rebuild
skills/hydrogen-claude-management/SKILL.md+1−1
@@ -19,7 +19,7 @@ description: >  Hydrogen runs Claude Code as webview tabs inside VS Code. This skill is the **first-class API** for managing those conversations programmatically — from Hydrogen's control-API, from the user's AI inside the WSL2 workspace, or from setup steps.+API, from the user's AI inside the workspace, or from setup steps.  All endpoints are on the **Hydrogen control API** (a dynamic localhost port). From inside the workspace, examples below use `$Hydrogen` for `http://127.0.0.1:<port>` (find the port in the Hydrogen
skills/hydrogen-dock/SKILL.md+5−4
@@ -88,10 +88,11 @@ Both bundled bridges shipped both bugs. Check these two first when a card fails.  Two contracts that ride with the rules (full detail in the Dock Bar guide): -- **Print the DIRECT URL**: `http://127.0.0.1:<port>/`. The workspace is local-  WSL2 with mirrored networking, so a distro port IS a Windows localhost port.-  Never the `:7380/proxy/<port>/` form, and prefer 127.0.0.1 over the name-  localhost (IPv6-first resolution costs ~800ms per request on Windows).+- **Print the DIRECT URL**: `http://127.0.0.1:<port>/`. A workspace port IS a+  host localhost port (mirrored networking on Windows, port forwarding on macOS+  — see `hydrogen-networking`). Never the `:7380/proxy/<port>/` form, and prefer+  127.0.0.1 over the name localhost (IPv6-first resolution costs ~800ms per+  request on Windows). - **The webview belongs to your CLI.** Every step runs with   `ADOM_DOCK_WEBVIEW` (the tab the dock pre-opened) and `ADOM_DOCK_APP` in its   environment; once serving, take the tab over with
skills/hydrogen-doctor/SKILL.md+5−5
@@ -34,7 +34,7 @@ explanation, and offers two levels of repair.  ## What it checks (the 17 checks) -Workspace side: the WSL2 `Adom-Workspace` distro is present and running+Workspace side: the `Adom-Workspace` workspace is present and running (`workspace`), the Adom API key exists (`api-key`), required env vars are exported (`env-vars`), `adom-cli` is installed (`adom-cli`) and can actually reach Adom's cloud (`adom-cli-api`), skills are deployed (`skills`), the@@ -46,9 +46,9 @@ installed (`claude-installed`) and signed in (`claude-auth`), the live SSE link between editor and app is up (`sse`), the workspace-layout API responds (`webview`). -Plumbing: workspace service ports reachable from Windows (`ports`), identity+Plumbing: workspace service ports reachable from the host (`ports`), identity established via api-key + session (`identity`, the legacy adom-identity.json is-NOT required), Adom Bridge reachable (`adom-desktop`), and `port-integrity` (a+NOT required), Adom Bridge reachable, and `port-integrity` (a post-sleep check: code-server must be serving; a control API that moved off 47084 to an ephemeral port is fine and reported as a note, because everything reads live ports from ports.json).@@ -56,7 +56,7 @@ reads live ports from ports.json). ## The two repair levels  1. **Fix problems** (safe, no confirmation needed): runs the same heal cascade-   the wake repair uses (see `hydrogen-wake-repair`), waits for code-server's+   the wake repair uses, waits for code-server's    /healthz, then re-runs every check so you can see before vs after. It never    drops the user's editor session unless the session was already dead. 2. **Restart workspace** (disruptive, confirm-gated): only offered when the fix@@ -76,7 +76,7 @@ reads live ports from ports.json).  ## Related skills -- `hydrogen-wake-repair`: the automatic version of the fix that runs on laptop+- the wake-repair mechanism (platform bootstrap): the automatic version of the fix that runs on laptop   wake, plus the wake indicator and the manual "Run Wake Check" menu item. - `hydrogen-workspace-lifecycle`: what a workspace restart actually does. - `hydrogen-api`: how to find the control port.
skills/hydrogen-eda-discovery/SKILL.md+3−3
@@ -22,7 +22,7 @@ the user's electronics-design stack and show them what the AI-first Adom workflo **exploratory and opt-in** — detect first, then offer; never auto-install or auto-build. Do the detection in the background, then come back with a short, friendly summary + one clear offer. -## 1. Detect (via `adom-bridge-cli` — see `hydrogen-adom-desktop`, `hydrogen-bridges`, `pup`)+## 1. Detect (via the bridge CLI — `adom-bridge-cli` on Windows, `adom-bridge` on macOS; see `hydrogen-adom-bridge`, `pup`)  ```bash adom-bridge-cli status                       # relay up? caps include kicad / fusion360?@@ -99,7 +99,7 @@ they can **contribute the missing piece** in half an hour.   thing worth building.*  ## Related skills-- [hydrogen-adom-desktop](../hydrogen-adom-desktop/SKILL.md) / [hydrogen-bridges](../hydrogen-bridges/SKILL.md) — the `adom-bridge-cli` relay + KiCad/Fusion bridge verbs (in-workspace names; the `adom-bridge-cli-*` skills are the cloud-side equivalents)+- **hydrogen-adom-bridge** — the bridge relay; the KiCad/Fusion bridge verbs live in the platform bridge skill set (e.g. the adom-bridge-macos skills on mac) - [[hydrogen-eda-discovery-windows]] / `hydrogen-eda-install` (mac) — the per-platform no-bridge install-path + process probes-- `pup` — driving fab-vendor upload pages; [hydrogen-open-url](../hydrogen-open-url/SKILL.md) — opening vendor sites+- `pup` — driving fab-vendor upload pages; **hydrogen-open-url** (platform bootstrap) — opening vendor sites - the Adom wiki publish skills — sharing the bridge/app you build with the community
skills/hydrogen-instapcb/SKILL.md+4−4
@@ -39,7 +39,7 @@ find ~/project -maxdepth 3 -iname "*instapcb*" -o -iname "*quote*.json" -o -inam  ## 2. Bring up a quote in the engine Open the InstaPCB app in the user's chosen surface and load the quote they pick (see-[hydrogen-open-url](../hydrogen-open-url/SKILL.md) for webview-vs-pup; **wv** is the default for a tab they+**hydrogen-open-url** (platform bootstrap) for webview-vs-pup; **wv** is the default for a tab they keep). If the app exposes a quote-by-id URL or an import action, use it; otherwise drive the UI (`pup` for a scriptable window). Verify it actually loaded (title/eval), don't assume `ok`. @@ -52,7 +52,7 @@ board, I re-export and the quote refreshes — no clicking."* If yes, build the    (see `adom-bridge-cli-fusion`'s `watch` wrapper for the streaming pattern). 2. **On change → produce the artifact InstaPCB needs.** Most quoting wants **gerbers** — export    them from KiCad (kicad-cli / the PCB editor's plot), staged into `~/project`. (KiCad bridge:-   open/drive the board — see `hydrogen-bridges`/`adom-bridge-cli-kicad`.)+   open/drive the board — see the platform bridge skill set (KiCad bridge verbs).) 3. **Push to the quoting engine + re-quote.** Feed the new gerbers/board to the `instapcb-quote`    app (its import/upload path) and trigger a re-quote; if it has no API, drive the upload UI via    `pup` and reload. **Reload the quote view** so the user sees the new number appear on its own.@@ -73,5 +73,5 @@ every InstaPCB user gets the live loop (see [hydrogen-eda-discovery](../hydrogen  ## Related skills - [hydrogen-eda-discovery](../hydrogen-eda-discovery/SKILL.md) — the sibling post-setup discovery tab (EDA tools); same detect→offer pattern + the AI-first/Adom-wiki frame-- [hydrogen-bridges](../hydrogen-bridges/SKILL.md) — KiCad bridge verbs (open/plot/export the board)-- `pup` — driving the InstaPCB upload/quote UI; [hydrogen-open-url](../hydrogen-open-url/SKILL.md) — opening the app (wv vs pup)+- the platform bridge skill set — KiCad bridge verbs (open/plot/export the board)+- `pup` — driving the InstaPCB upload/quote UI; **hydrogen-open-url** (platform bootstrap) — opening the app (wv vs pup)
skills/hydrogen-lightbulb/SKILL.md+2−2
@@ -53,9 +53,9 @@ GET /claude/sample-prompts    page — the fleet-wide lineup, updated INDEPENDENTLY of Hydrogen releases. Hydrogen checks    it on every menu open (debounced 15 min) plus every 4 hours during business    hours (Mon-Fri 7am-7pm local); a changed list pops into an open menu live.-   Cache: `%APPDATA%\hydrogen-desktop\sample-prompts-remote.json`. Docs + PR+   Cache: `sample-prompts-remote.json` in Hydrogen's app-data directory. Docs + PR    guide: the [Lightbulb Prompts sub-readme](https://wiki.adom.inc/adom/hydrogen-desktop/files/lightbulb-prompts/README.md).-3. **The user's local file** `%APPDATA%\hydrogen-desktop\sample-prompts.json` —+3. **The user's local file** `sample-prompts.json` in Hydrogen's app-data directory —    personal overrides, always wins:  ```json
skills/hydrogen-monitor/SKILL.md+3−2
@@ -62,11 +62,12 @@ The events don't include details about *what* changed — query `workspace tabs` # Monitor tool script — reports tab changes in real-time. # Inside an Hydrogen workspace, talk to the LOCAL Hydrogen workspace API, not cloud hostnames: # derive the base from ADOM_CARBON_URL / ADOM_HYDROGEN_URL (they point at-# http://127.0.0.1:<proxy>). The Hydrogen-local slug is always `hdlocal`.+# http://127.0.0.1:<proxy>). The Hydrogen-local slug is `hdlocal` on Windows+# and `hydrogen-local` on macOS. API_KEY=$(cat /var/run/adom/api-key) CARBON="${ADOM_CARBON_URL:-http://127.0.0.1:47083}" HYDROGEN="${ADOM_HYDROGEN_URL:-$CARBON}"-SLUG="hdlocal"+SLUG="hdlocal"   # macOS: SLUG="hydrogen-local" INFO=$(curl -s -H "Authorization: Bearer $API_KEY" "$CARBON/containers/$SLUG") OWNER=$(echo "$INFO" | python3 -c "import sys,json; print(json.load(sys.stdin)['repository']['owner']['name'])") REPO=$(echo "$INFO" | python3 -c "import sys,json; print(json.load(sys.stdin)['repository']['name'])")
skills/hydrogen-overview/SKILL.md+33−38
@@ -3,9 +3,9 @@ name: hydrogen-overview description: >   Master index for the platform-generic Hydrogen skills (the   hydrogen-bootstrap set). Start here to find the right skill for any Hydrogen topic.-  These skills are runtime-neutral and apply on every host Hydrogen runs on-  (Windows, macOS, Ubuntu); platform layers add their own *-windows (etc.)-  companions. Trigger words: Hydrogen skills, hydrogen, what skills, find+  These skills are runtime-neutral and apply on every host Hydrogen runs on;+  platform layers (hydrogen-windows-bootstrap, hydrogen-mac-bootstrap) add their+  own host-specific skills. Trigger words: Hydrogen skills, hydrogen, what skills, find   skill, Hydrogen help, Hydrogen overview, skill index, Hydrogen reference. --- @@ -17,56 +17,51 @@ Claude Code, the bridges, and the Adom Wiki — zero cloud dependency. Hydrogen on Windows, macOS, and Ubuntu.  This index lists the **platform-generic** Hydrogen skills (the `hydrogen-bootstrap` set).-Every fact in these skills holds regardless of host OS. Where a topic has-host-specific mechanics (e.g. how the workspace is hosted, host networking,-host-side recording), the platform layer adds a companion skill — on Windows-those are the **`hydrogen-windows-bootstrap`** `*-windows` skills (and equivalents-for other platforms). The generic skill cross-references its companion.+Every fact in these skills holds regardless of host OS. Host-specific mechanics+(how the workspace is hosted, host networking, host-side recording, permissions)+live in the platform layer installed alongside this set — `hydrogen-windows-bootstrap`+on Windows, `hydrogen-mac-bootstrap` on macOS.  ## The generic Hydrogen skills (hydrogen-bootstrap)  | Skill | What it covers | |---|---|-| **hydrogen-adom-auth** | Adom login/logout, session token, profile menu, how auth feeds setup. |-| **hydrogen-adom-desktop** | What Hydrogen and Adom Bridge (ab) are and how they work together — ab is your hands on the user's real OS (files, shell, OS screenshots, app launch, bridges). |+| **hydrogen-adom-auth** | Adom login/logout, session token, auth proxy, credential replay, how auth feeds setup. |+| **hydrogen-adom-bridge** | What Hydrogen and Adom Bridge (ab) are and how they work together — ab is your hands on the user's real OS (files, shell, OS screenshots, app launch, bridges). | | **hydrogen-adom-menu** | The upper-left Adom logo menu (Settings, Ports, API Explorer, DevTools, Setup/Virgin Reset) + About dialog + version readout. |-| **hydrogen-api** | Control API reference. Runtime-neutral endpoints. |-| **hydrogen-bridges** | Built-in KiCad/Fusion/Puppeteer bridges + extensible wiki catalog (e.g. Blender) + ab capability list. |-| **hydrogen-captions** | Paint labeled text on the user's screen — an always-on-top caption overlay for demos / step callouts. |+| **hydrogen-avatar** | Generate or change the user's Adom avatar and make Hydrogen show it immediately. | | **hydrogen-capture-share** | The screen-share + "AI wants access" approval + countdown the AI triggers to capture the editor; tab/screen scopes, Webview/Pup window mode. |-| **hydrogen-claude-auth** | How Claude Code signs in: OAuth via Browser Picker, credential backup, the `claude-auth` step. |-| **hydrogen-container** | Context for Claude running inside the workspace: relay, direct connect, bridge commands, env vars. |-| **hydrogen-container-stats** | The title-bar CPU/RAM "Container" indicator and how its stats are gathered. |-| **hydrogen-desktop-sse** | Local workspace API + SSE — how adom-cli inside the workspace controls Hydrogen (replaces Carbon locally). |+| **hydrogen-claude-auth** | How Claude Code signs in: the OAuth flow, credential backup, the `claude-auth` step. |+| **hydrogen-claude-management** | List/open/close/switch Claude conversation tabs, read conversation state, type/submit into a specific conversation, Remote Control. |+| **hydrogen-claude-permission-modes** | Why "Bypass permissions" is visible in the Modes menu, and when to reach for it. |+| **hydrogen-dock** | The dock bar (app launcher rail) and how any wiki app becomes a card in it — dockbar.json manifest, launch steps, AI threads. |+| **hydrogen-doctor** | The one-click full-stack health scan (Doctor) with safe one-click fix; GET/POST /doctor. | | **hydrogen-eda-discovery** | EDA tool discovery / setup flow. |+| **hydrogen-editor-state** | The Editor State Machine — knowing the true VS Code / Claude conversation state, and the hard typing invariants. | | **hydrogen-eval** | Inject JS into any Hydrogen surface (shell/workbench/wiki/Claude) via /eval-in — add-ons, overlays, highlights, drive UI. | | **hydrogen-instapcb** | InstaPCB integration in Hydrogen. |+| **hydrogen-key-values** | The user's cloud key-value store (Carbon KV): hydrogen.* / bridge.* keys, read/write, conventions. |+| **hydrogen-lightbulb** | The 💡 sample-prompts menu in the title bar and sample-prompts.json. | | **hydrogen-monitor** | Real-time SSE event stream + Monitor-tool patterns for watching workspace mutations. |-| **hydrogen-naming** | The naming doctrine: Hydrogen/ah, Bridge/ab, and WHY installers/shortcuts MUST say "Adom Hydrogen" (users search "adom"). |-| **hydrogen-notifications** | Reach the user outside the window — native OS toasts + an emergency attention request via `notify_user`. |-| **hydrogen-open-url** | The decision guide for "open a website" — the ways (webview tab, Hydrogen window, Pup, native browser, picker, headless curl) and when to pick each. |+| **hydrogen-naming** | The naming doctrine: Hydrogen/ah, Bridge/ab, and WHY installers/shortcuts MUST say "Adom Hydrogen". | | **hydrogen-overview** | This index. |-| **hydrogen-permissions** | Why mic/camera/clipboard/notifications "just work" in Hydrogen — webview permissions are auto-granted, so webview apps see no Allow prompts. | | **hydrogen-profile-menu** | The avatar dropdown: profile/repos/molecules links and logout. |-| **hydrogen-self-screenshot** | How the AI screenshots Hydrogen panels + any host window (window control, multi-monitor), injects to shotlog, runs visual self-checks. |+| **hydrogen-pup** | What "pup" means and exactly how to open an AI-drivable Chrome window via the Puppeteer bridge. | | **hydrogen-self-update** | How Hydrogen updates itself. |-| **hydrogen-settings** | Hydrogen's Settings dialog + the full preferences tree (theme, vim mode, 3D control style, launch-on-login, ab window behavior). |-| **hydrogen-setup** | The setup panel, Run All, Rollback, Virgin Reset. |-| **hydrogen-setup-steps** | What each setup step did to prepare your workspace. |-| **hydrogen-tab-icons** | Webview tab icon system — `displayIcon`, icon resolution, SVG data URLs. |-| **hydrogen-ui** | Hydrogen's UI: menus, dialogs, panels, CDP-driven navigation, brand/CSS conventions. |-| **hydrogen-welcome** | The static welcome page shown after setup completes. |+| **hydrogen-skill-loop** | The maintainer loop for fixing a wrong skill: verify against the live system, fix the live copy, publish the fix to its wiki package. |+| **hydrogen-settings** | Hydrogen's Settings dialog + the preferences tree. |+| **hydrogen-staying-current** | How workspace tooling stays current (`adom-wiki pkg update`, the adom/hook prompt hook, reload banner) and how to ship a skill/CLI/app. |+| **hydrogen-tab-icons** | Webview tab icon system — `displayIcon` placeholder vs. the page's own favicon, SVG data URLs. |+| **hydrogen-webview** | What "webview" means and how to open one via `adom-cli hydrogen webview open-or-refresh`; the External Webview. |+| **hydrogen-welcome** | The welcome page shown after setup completes. | | **hydrogen-who-am-i** | Answer "who am I / what can I do here" — identity, resources, environment intro. |-| **hydrogen-workspace-monitoring** | Workspace + code-server health monitoring, floaty states, the 15s poll, auto-start. |-| **hydrogen-workspace-updater** | The workspace-tooling updater daemon. |+| **hydrogen-wiki-review** | After editing any wiki page, load it in pup so the user can review the rendered result. |  ## Platform layers -Platform-specific mechanics live in a platform layer that ships alongside this-set and adds platform companion skills (suffixed `*-windows` / `*-mac`) or-overrides a same-named skill with its host-specific version (e.g.-`hydrogen-container`, `hydrogen-networking`, `hydrogen-volume`,-`hydrogen-workspace-lifecycle`). When a generic skill above has a host-specific detail,-it cross-references its companion. On a given host you'll have the generic set-plus that host's platform layer (`hydrogen-windows-bootstrap` or-`hydrogen-mac-bootstrap`).+Platform-specific mechanics live in a platform layer installed alongside this+set: **`hydrogen-windows-bootstrap`** on Windows, **`hydrogen-mac-bootstrap`**+on macOS. A platform layer adds companion skills (suffixed `*-windows` /+`*-mac`) and same-named platform skills (e.g. `hydrogen-container`,+`hydrogen-networking`, `hydrogen-ports`). When a generic skill here has a+host-specific detail, look for the platform companion.
skills/hydrogen-profile-menu/SKILL.md+3−4
@@ -7,7 +7,7 @@ description: Hydrogen's profile menu — the user-avatar dropdown in the top-rig  The profile menu is the dropdown that opens when you click your **circular user avatar in the top-right corner** of Hydrogen. It contains links to your Adom-account pages on `adom.inc` plus the logout action. -This is **separate from the Adom menu** (top-left logo). Different audiences, different functions — see [hydrogen-ui](../hydrogen-ui/SKILL.md) for the Adom menu.+This is **separate from the Adom menu** (top-left logo). Different audiences, different functions — see **hydrogen-adom-menu** for the Adom menu.  ## Where your avatar image comes from @@ -23,7 +23,7 @@ This is **separate from the Adom menu** (top-left logo). Different audiences, di | **Your molecules** | atom / molecule | `goTo('/users/<name>/molecules')` — your molecules list | | **Log out** | exit-arrow | Opens a confirm dialog → on confirm, clears the Adom session and returns to the Hydrogen login page | -> **Note (current behavior, verified 2026-06-12)**: the three "Your *" items call `goTo('/users/<name>/...')` (see `EditorNav.svelte` ~L2540-2557), i.e. they navigate the Hydrogen webview itself to the in-app `/users/...` route rather than opening adom.inc in the user's external browser. This is in-app navigation, not the Browser Picker. (The earlier "routes to internal Hydrogen views" concern has been narrowed to this expected in-app routing.)+> **Note (current behavior, verified 2026-06-12)**: the three "Your *" items call `goTo('/users/<name>/...')` (see `EditorNav.svelte` ~L2540-2557), i.e. they navigate the Hydrogen webview itself to the in-app `/users/...` route rather than opening adom.inc in the user's external browser. This is in-app navigation, not an external browser. (The earlier "routes to internal Hydrogen views" concern has been narrowed to this expected in-app routing.)  ## Log out — the confirm dialog @@ -82,5 +82,4 @@ Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() =  - [hydrogen-adom-auth](../hydrogen-adom-auth/SKILL.md) — the Adom session token, login flow, profile loading - [hydrogen-claude-auth](../hydrogen-claude-auth/SKILL.md) — Claude Code auth (separate from Adom auth; logging out of Adom does NOT log you out of Claude)-- [hydrogen-browser-picker](../hydrogen-browser-picker/SKILL.md) — what opens the Your-*/external URLs in the user's chosen browser-- [hydrogen-ui](../hydrogen-ui/SKILL.md) — the Adom menu (top-left, different dropdown)+- **hydrogen-adom-menu** — the Adom menu (top-left, different dropdown)
skills/hydrogen-settings/SKILL.md+3−4
@@ -38,7 +38,6 @@ override. Keys are dotted (`section.subsection.name`). | Key | Default | What it does | |---|---|---| | `general.developer_mode` | `false` | Enables extra developer/debugging features in the app |-| `general.pane_focus_mode` | `true` | Only the focused pane is active + highlighted; turn OFF to keep every pane always active |  **general.appearance** (subsection) | Key | Default | What it does |@@ -60,7 +59,7 @@ override. Keys are dotted (`section.subsection.name`).  ### adom_desktop  *(the embedded Adom Bridge / ab that Hydrogen runs)* When Hydrogen is running it takes over ab, so ab's options live here. See-[hydrogen-adom-bridge-cli](../hydrogen-adom-bridge-cli/SKILL.md) for the Hydrogen↔ab relationship.+**hydrogen-adom-bridge** for the Hydrogen↔ab relationship. | Key | Type / default | What it does | |---|---|---| | `adom_desktop.open` | action button | "Open Adom Bridge" — brings the ab window to the foreground (persists nothing) |@@ -112,5 +111,5 @@ extension-specific settings).  ## Related skills - [hydrogen-adom-menu](../hydrogen-adom-menu/SKILL.md) — the logo menu that opens Settings (and Ports, API Explorer, etc.)-- [hydrogen-ui](../hydrogen-ui/SKILL.md) — the broader Hydrogen UI / panel layout this dialog sits in-- [hydrogen-adom-bridge-cli](../hydrogen-adom-bridge-cli/SKILL.md) — what the `adom_desktop.*` prefs control (the embedded ab)+- **hydrogen-ui** (platform bootstrap; `hydrogen-ui-mac` on macOS) — the broader Hydrogen UI / panel layout this dialog sits in+- **hydrogen-adom-bridge** — what the `adom_desktop.*` prefs control (the embedded ab)
skills/hydrogen-skill-loop/SKILL.md+60−84
@@ -1,41 +1,42 @@ --- name: hydrogen-skill-loop description: >-  The maintainer loop for making Hydrogen's own hd-* skills perfect: when a skill is-  wrong, stale, or confusing, verify the truth against the RUNNING Hydrogen, fix the-  skill live in the workspace, then write the corrected file back into the core-  hydrogen-desktop repo so the next golden-image bake ships it. These skills are-  the ONLY thing the in-workspace AI knows about Hydrogen — a wrong one confuses every-  Adom user. For Adom devs improving Hydrogen. Trigger words — this skill is wrong,-  stale skill, fix the ah skill, update a skill, the AI got confused by a skill,-  improve ah skills, skill is inaccurate, debug a skill, skill loop, write skill-  back to repo, bake skills, golden image skills, skill feedback loop, perfect-  the skills, skill says X but it actually does Y.+  The maintainer loop for making Hydrogen's skills perfect: when a skill is+  wrong, stale, or confusing, verify the truth against the RUNNING system, fix the+  live copy in the workspace, then fix the skill at its source — the wiki package+  it ships in — and publish, so every workspace's next `adom-wiki pkg update`+  gets the fix. These skills are the ONLY thing the in-workspace AI knows about+  Hydrogen — a wrong one confuses every Adom user. For Adom devs improving+  Hydrogen. Trigger words — this skill is wrong, stale skill, fix the ah skill,+  update a skill, the AI got confused by a skill, improve ah skills, skill is+  inaccurate, skill loop, publish a skill fix, skill feedback loop, skill says X+  but it actually does Y. --- -# Hydrogen Skill Loop — verify → fix live → write back to the repo → bake+# Hydrogen Skill Loop — verify → fix live → fix the source → publish -Hydrogen's `hd-*` skills are baked into the WSL2 golden image and are the **only** way-the in-workspace AI knows anything about Hydrogen. So a wrong skill silently breaks-every user's AI (it curls a dead hostname, hunts a command that doesn't exist,-claims it needs a tool that isn't installed…). This skill is the loop to find-those and make them perfect *before* the next bake.+Hydrogen's skills are the **only** way the in-workspace AI knows anything about+Hydrogen. A wrong skill silently breaks every user's AI (it curls a dead+hostname, hunts a command that doesn't exist, claims it needs a tool that isn't+installed…). This skill is the loop to find those and make them perfect.  ## Cardinal rule: TEST, don't assert  Never write a skill claim from memory, old skill text, or docs — **verify it against the running system first.** Run the command. Read the live env. Read the-code. Observe the real return shape. If you can't test a claim, don't state it as-fact. (Most skill bugs are confident, untested assertions.)+code. Observe the real return shape. If you can't test a claim, don't state it+as fact. (Most skill bugs are confident, untested assertions.)  ## Where skills live — two copies -| Copy | Path | Role |+| Copy | Where | Role | |---|---|---|-| **Live (ephemeral)** | `~/.claude/skills/<name>/SKILL.md` (flat) | What the running AI reads NOW. Editing here fixes THIS session and lets you test — but it's wiped on virgin reset / replaced by the next image. |-| **Canonical (baked)** | repo `skills/public-facing/{shared,wsl2}/<name>/SKILL.md` | What the golden image is built from. On the laptop the repo is auto-mounted at `/mnt/c/Github/hydrogen-desktop/...` (the same tree the bootstrap bundles / the golden image bakes). The bake pulls from `origin`. |+| **Live (ephemeral)** | `~/.claude/skills/<name>/SKILL.md` (flat) | What the running AI reads NOW. Editing here fixes THIS session and lets you test — but the next package update replaces it. |+| **Canonical (wiki package)** | the wiki package that ships the skill (e.g. `adom/hydrogen-bootstrap`, `adom/hydrogen-mac-bootstrap`, `adom/hydrogen-windows-bootstrap`) | What every workspace installs. A fix isn't done until it's published here. | -A fix isn't done until it's in the **canonical** copy and pushed.+Find which package owns a skill: `adom-wiki pkg list` shows installed packages;+the skill's frontmatter and content usually name their set, and the package's+wiki page (`https://wiki.adom.inc/<org>/<pkg>/skills`) lists what it ships.  ## The loop @@ -44,78 +45,53 @@ A skill made the AI do the wrong thing. Name the skill and the exact wrong claim  ### 2. Get ground truth from the LIVE system - **Run the real command** and read its `--help` and actual output:-  `adom-cli hydrogen <verb> --help` → then run it → note the EXACT return shape-  (e.g. Hydrogen's `screenshot` returns a `dataUrl` inline when `uploadFailed:true`,-  not a saved path).-- **Read the live env**, never hardcode: `cat ~/.adom/hydrogen-control-url` (the real-  control URL — `http://127.0.0.1:<dynamic-port>`, NOT `host.docker.internal`,-  NOT a fixed 47084), `env | grep ADOM_`, `adom-cli hydrogen probe`.-- **Read the Hydrogen source** for the endpoint/behavior (the repo checkout).-- **Not inside Hydrogen?** `adom-cli` is the SAME binary in web Hydrogen — test there.-  Or reach the user's running Hydrogen through Adom Bridge:-  ```bash-  adom-bridge-cli ping && adom-bridge-cli status        # confirm ab is on the right host-  # run anything inside the Hydrogen distro:-  adom-bridge-cli wsl_exec '{"distro":"Adom-Workspace","user":"adom","scriptB64":"<base64 of your script>"}'-  ```+  `adom-cli hydrogen <verb> --help` → then run it → note the EXACT return shape.+- **Read the live env**, never hardcode: `env | grep ADOM_`,+  `adom-cli hydrogen probe`, the control-URL file if present.+- **Read the Hydrogen source** for the endpoint/behavior when you have a checkout.  ### 3. Fix it live + re-test Edit `~/.claude/skills/<name>/SKILL.md` to match what you verified. Re-read it, then **re-run the failing action** to confirm the fix actually works. -### 3b. GRADE the fix (don't just eyeball it)-Re-running the action by hand proves little. If you're an Adom maintainer, run the-**`hydrogen-skill-test`** grader (dev-internal): add/update a case encoding the *correct*-behavior plus the anti-pattern that was the bug (e.g. `must_not_appear:-host\.docker\.internal`), then grade against the live (fixed) skill via a fresh-headless `claude` session. PASS means the fix actually changed model behavior, not-just the prose. Gate the write-back/commit on a green battery so fixing skill A-can't silently regress skill B. (See the `hydrogen-skill-test` skill.)--### 4. Pick the bucket-Workspace-specific (the `Adom-Workspace` distro's filesystem, networking, ports,-lifecycle, setup) → `wsl2/`; everything else → `shared/`. `name:` must equal the-dir; skills install flat. (See the dev skill `hydrogen-skills-structure` for the-full rules.)--### 5. Write the corrected file back to the repo-Copy the same corrected SKILL.md into the canonical bucket:-```bash-cp ~/.claude/skills/<name>/SKILL.md \-   /mnt/c/Github/hydrogen-desktop/skills/public-facing/<bucket>/<name>/SKILL.md-```-If you added / renamed / removed a skill, also update the indexes-`hydrogen-overview` and `hydrogen-skill-catalog` (both in `shared/`).--### 6. Commit + push so the next bake ships it-From the laptop checkout (it has git + credentials), via the relay:-```bash-adom-bridge-cli run_script '{"interpreter":"powershell","scriptB64":"<base64 of:-  cd C:\Github\hydrogen-desktop; git add skills; git commit -m \"skills: fix <name> (verified vs live Hydrogen)\"; git push>"}'-```-The next **golden-image bake** (`golden-image-bake`) pulls `origin` and bakes the-corrected skills into the image, so the fix reaches every user's next Hydrogen.--## Validation checklist before you commit a skill+### 4. Fix the source — BOTH wiki surfaces+A wiki package has two surfaces and a fix must land on both, or the wiki page+still shows the stale skill:++1. **The page repo** (what renders at `/skills`): clone it, apply the same edit,+   push with `adom-wiki repo push <org>/<pkg> --files skills/<name>/SKILL.md -m "..."`.+2. **The package artifact** (what `pkg install/update` delivers): from the same+   edited tree, bump `version` in `package.json`, strip AppleDouble junk+   (`find . -name "._*" -delete`), then+   `COPYFILE_DISABLE=1 adom-wiki pkg publish --org <org> --skip-lint -y`.++Staging both from one clone of the page repo keeps them identical.++If you added / renamed / removed a skill, also update the package's index skill+(e.g. **hydrogen-overview** for hydrogen-bootstrap) and check for cross-references+to the old name in the rest of the package.++### 5. Converge + verify+`adom-wiki pkg update` in a workspace, then re-read the installed skill and+confirm the wiki page shows the fix. Note: a package upgrade does not prune+skills an older version delivered — after a rename/delete, remove the stale+`~/.claude/skills/<old-name>` directory too.++## Validation checklist before you publish a skill - [ ] Every command in the skill was actually RUN and produced the documented output.-- [ ] No `host.docker.internal` anywhere — Hydrogen reaches the host at `127.0.0.1` /-      `$(cat ~/.adom/hydrogen-control-url)` (WSL2 mirrored networking; ports are dynamic). - [ ] No invented CLI verbs — each confirmed with `--help`.-- [ ] No tool assumed present that isn't in the golden image (ImageMagick `convert`,-      Pillow, `jq`…) — test it in the distro before relying on it.-- [ ] Step counts / endpoint paths / ports match CURRENT code (they drift fast).+- [ ] No tool assumed present that isn't in the workspace — test before relying on it.+- [ ] Endpoint paths / ports / step names match CURRENT code (they drift fast).+- [ ] No content about deprecated or unimplemented features — it only pollutes context.+- [ ] Platform-specific mechanics live in the platform package (windows/mac bootstrap), not the shared one. - [ ] Cross-links use sibling skill names that resolve flat at deploy. - [ ] `name:` matches the directory.  ## Why this matters-The skills ARE Hydrogen's self-knowledge for the AI. Ship them wrong and every Adom-user's AI is confidently wrong with them. Treat "the skill is inaccurate" as a-product bug and run this loop until the validation checklist is clean.+The skills ARE Hydrogen's self-knowledge for the AI. Ship them wrong and every+Adom user's AI is confidently wrong with them. Treat "the skill is inaccurate"+as a product bug and run this loop until the validation checklist is clean.  ## Related skills-- `hydrogen-skill-test` (dev-internal) — the automated GRADE step (step 3b): headless-`claude` battery that asserts tool choices / forbidden patterns-- `hydrogen-skills-structure` (dev-internal) — bucket rules, naming, the deploy/bake mechanism-- [hydrogen-golden-image](../hydrogen-golden-image/SKILL.md) — the baked-image model these skills ship in-- `golden-image-bake` — the tooling that rebuilds the image from the repo-- [hydrogen-self-screenshot](../hydrogen-self-screenshot/SKILL.md) — a skill fixed via this loop (the `adom-cli hydrogen screenshot` / `dataUrl` truth)-- [hydrogen-desktop-sse](../hydrogen-desktop-sse/SKILL.md) — the adom-cli → Hydrogen-proxy → SSE interception model you test against+- **hydrogen-staying-current** — how workspaces receive published package updates+- **hydrogen-wiki-review** — load the edited wiki page in pup so the user can review it
skills/hydrogen-staying-current/SKILL.md+6−6
@@ -14,8 +14,8 @@ both Claude Code and Codex) and re-resolves `adom/core` so newly added tools arr - See what's installed / behind: `adom-wiki pkg list` / `adom-wiki pkg outdated`  Skills are **bundled into the Hydrogen bootstraps** — `adom/hydrogen-bootstrap` ships the platform-generic-hd-* skills, `adom/hydrogen-windows-bootstrap` ships the WSL2-specific ones (Kyle's `adom/hydrogen-mac-bootstrap`-ships the mac ones), each deployed flat into `~/.claude/skills/`. (There is no separate skills+skills, `adom/hydrogen-windows-bootstrap` ships the Windows-specific ones, and `adom/hydrogen-mac-bootstrap`+ships the mac ones — each deployed flat into `~/.claude/skills/`. (There is no separate skills package; the short-lived `adom/hydrogen-skillpack` was deleted 2026-07-16.) Org member apps (e.g. the employee build of adom-google) arrive via your org's **`org-bootstrap`** meta-package. All are just dependencies — kept current like everything.@@ -29,10 +29,10 @@ editor. Extensions never banner — VS Code's own auto-update activates them. ## "How do I ship a tool/skill/app to every Adom workspace?" (Adom employees) Publish it as an `adom-wiki` package, then add it as a **dependency** of the right bootstrap: - every container: `adom/core` · every Hydrogen workspace: `adom/hydrogen-bootstrap` ·-  org members only: your org's `org-bootstrap` · Hydrogen skills: add the skill to-  `skills/public-facing/` in the hydrogen-desktop repo (`shared/` for platform-generic, `wsl2/` for-  Windows-only) and republish the matching bootstrap (`adom/hydrogen-bootstrap` or-  `adom/hydrogen-windows-bootstrap`).+  org members only: your org's `org-bootstrap` · Hydrogen skills: add the skill to the+  matching bootstrap package and republish it (`adom/hydrogen-bootstrap` for+  platform-generic, `adom/hydrogen-windows-bootstrap` / `adom/hydrogen-mac-bootstrap`+  for platform-specific — see **hydrogen-skill-loop** for the publish recipe). The hook's re-resolve delivers it fleet-wide within ~30 minutes of users prompting.  ## The retired daemon (history)
skills/hydrogen-tab-icons/SKILL.md+8−8
@@ -68,7 +68,7 @@ favicon, not `mdi:rocket-launch`.  ## Brand rule: icons must be monochrome `#e6edf3` -Per `gallia/skills/brand/SKILL.md`, **all Adom icons must be monochrome+Per the Adom brand rules, **all Adom icons must be monochrome white (`#e6edf3`)** — no colored icons, no multi-color, no brand-palette colors in icons. This applies to tab icons too. @@ -165,8 +165,8 @@ SVG, Hydrogen syncs it onto the tab, and the icon stays put. - **Bold, filled shapes over thin strokes** — the tab bar is   ~16–20 px so details get lost. - **Transparent background** is fine, the tab bar shows through.-- **Brand color in the SVG itself** if you want a colored icon. MDI-  icons can't be tinted.+- **Monochrome `#e6edf3` fill** per the brand rule — never a colored+  palette value.  ## Placeholder-only case: `mdi:<name>` / `data:...` via add-tab @@ -247,7 +247,7 @@ When you need a one-off custom icon and don't want to ship a file, you can build a `data:` URL inline:  ```bash-SVG='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#00b8b0" d="M13.13 22.19L11.5 18.36..."/></svg>'+SVG='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#e6edf3" d="M13.13 22.19L11.5 18.36..."/></svg>' B64=$(echo -n "$SVG" | base64 -w0) DATA_URL="data:image/svg+xml;base64,$B64" @@ -314,11 +314,11 @@ some sites inline their favicons). This is the override in action. 2. `src/assets/shell.html` has    `<link rel="icon" type="image/svg+xml" href="favicon.svg">`. 3. `src/server/mod.rs` serves the favicon at `/favicon.svg` with the-   content of `src/assets/icon.svg` — a teal-colored (`#00b8b0`)-   custom SVG chip.+   content of `src/assets/icon.svg` — the monochrome `#e6edf3`+   custom SVG chip shown above. 4. When the shell loads, Hydrogen fetches `favicon.svg`, gets the-   teal chip SVG, and writes that into `panelState.displayIcon`.-5. The tab now **permanently** shows the teal chip — because every+   chip SVG, and writes that into `panelState.displayIcon`.+5. The tab now **permanently** shows that chip — because every    future reload re-serves the same favicon.  The MDI `mdi:chip` placeholder and the served `favicon.svg` are
skills/hydrogen-webview/SKILL.md+2−3
@@ -116,8 +116,7 @@ Under Hydrogen there is one more surface: **hbw**, Hydrogen's standalone built-i Tauri browser window (picker label "Hydrogen Browser Window", destination id `webview-window`, window label `hbw-*`). It is a separate OS window Hydrogen manages directly — bigger than a pane tab, still not a real browser. Open one first-class via-`POST /hbw/open {"url": ...}` on Hydrogen's control API (0.1.113+), or pick "Hydrogen Browser-Window" in the Browser Picker. The surface shortlist: **wv** (this skill's webview+`POST /hbw/open {"url": ...}` on Hydrogen's control API (0.1.113+). The surface shortlist: **wv** (this skill's webview panel; Hydrogen's pane tab inside Hydrogen), **extwv** (the real-browser pane tab for embed-blocked-sites, above), **pup**, **nb** (the user's native browser via abe), **hbw**. VS+sites, above), **pup**, **nb** (the user's native browser via nbe), **hbw**. VS Code's Simple Browser is NEVER one of them.
skills/hydrogen-welcome/SKILL.md+1
@@ -52,6 +52,7 @@ creating tabs. The reliable method is to navigate an existing webview iframe:  ```bash # Method 1: Navigate right-pane iframe via eval (reliable)+# control-API port is dynamic (47084 default — see hydrogen-networking) curl -X POST http://127.0.0.1:47084/eval \   -H Content-Type:application/json \   -d '{"js":"(function(){var iframes=document.querySelectorAll(\"iframe\");for(var i=0;i<iframes.length;i++){var r=iframes[i].getBoundingClientRect();if(r.x>400&&r.width>200){iframes[i].src=\"http://localhost:1420/welcome.html\";return \"ok\"}}return \"no iframe\"})()"}'
skills/hydrogen-who-am-i/SKILL.md+4−4
@@ -49,7 +49,7 @@ Tell them they have access to a full electronics prototyping ecosystem. Specific Adapt this to whatever the user's data is. Don't bullet-dump everything — write it as a warm welcome paragraph followed by capabilities. Use markdown.  ```markdown-You're **{user.formatted_name}**, signed in to Adom as **{user.name}** ({user.email}). You're running in **Hydrogen**, Adom's local AI dev environment, on your machine. The workspace itself is Ubuntu 24.04 with code-server, the `claude` CLI, and the full Adom skill ecosystem (gallia + Hydrogen skills) already loaded.+You're **{user.formatted_name}**, signed in to Adom as **{user.name}** ({user.email}). You're running in **Hydrogen**, Adom's local AI dev environment, on your machine. The workspace itself is Ubuntu 24.04 with code-server, the `claude` CLI, and the full Adom skill ecosystem already loaded.  A few quick orientation notes: - Your **Linux username here is `adom`** (not `{user.name}`) — that's intentional, every Adom workspace uses `adom` for consistency. Your Adom identity (`{user.name}`) is what shows up across the Adom ecosystem.@@ -81,7 +81,7 @@ Ask me to do any of those, or just ask "what's the best way to start a new PCB p  - **Don't just bullet-dump every capability** — group them, lead with the personalized intro, end with an invitation. - **Pull real numbers** from `adom-cli` — generic "you have some repos" feels worse than "you have 4 repos."-- **Don't list internal jargon** — say "Adom's autorouter", not "the gallia/autorouter/v2 skill".+- **Don't list internal jargon** — say "Adom's autorouter", not the internal skill name. - **Mention the Linux username quirk early** — it WILL confuse users on first `whoami`. - **If a data fetch fails** (e.g. adom-cli not yet configured), gracefully say "I can't read your Adom session right now, but here's what Hydrogen can do once you're signed in" and pivot to capabilities only. @@ -89,6 +89,6 @@ Ask me to do any of those, or just ask "what's the best way to start a new PCB p  - [hydrogen-adom-auth](../hydrogen-adom-auth/SKILL.md) — the session token that gives `adom-cli` its identity - [hydrogen-claude-auth](../hydrogen-claude-auth/SKILL.md) — Claude Code's own auth (separate)-- [hydrogen-skill-catalog](../hydrogen-skill-catalog/SKILL.md) — the full list of public hd-* skills your AI has access to+- **hydrogen-overview** — the index of Hydrogen skills your AI has access to - `hydrogen-container` — the exact Ubuntu image / arch / pre-installed tools you'll mention-- [hydrogen-bridges](../hydrogen-bridges/SKILL.md) — KiCad / Fusion / Puppeteer bridge capabilities to mention+- the Adom Bridge skill set — KiCad / Fusion / browser bridge capabilities to mention