Hydrogen Desktop Bootstrap (apps + skills)
Public Made by Adomby adom
Layer Hydrogen Desktop's workspace onto a standard Adom workstation.
name: hd-runtime-mode description: > Which workspace runtime your Hydrogen Desktop is using — a WSL2 Ubuntu distro (default) or a legacy Docker container (HD_RUNTIME=docker) — how to tell which one you're in, what changes between them, and which runtime-specific skills to trust. READ THIS FIRST when anything about the workspace's container/distro, networking, volumes, ports, or setup steps seems contradictory: the answer almost always depends on the runtime. Trigger words — runtime, wsl, wsl2, docker mode, HD_RUNTIME, Adom-Workspace, which runtime, container or distro, workspace runtime, container runtime unhealthy, am I in docker or wsl.
HD Runtime Mode — WSL2 (default) vs Docker (legacy)
Hydrogen Desktop hosts your workspace one of two ways. Everything Claude knows about "the container" — its filesystem, networking, ports, stats, and setup steps — depends on which one is active. Check the runtime before trusting any runtime-specific advice.
HD_RUNTIME |
Runtime | What the workspace is | Setup cascade | State file |
|---|---|---|---|---|
unset / wsl2 |
WslDistro — DEFAULT | WSL2 Ubuntu distro Adom-Workspace (wsl --import) |
27 steps | setup-steps-wsl.json |
docker |
DockerDesktop — legacy fallback | Docker container (Docker Desktop) | 24 steps | setup-steps.json |
WSL2 is the default — you only get Docker if HD_RUNTIME=docker was set before
HD launched. The selector is runtime/mod.rs::select_runtime(); the WSL setup
executor is setup_steps_wsl.rs, the Docker one is setup_steps.rs. Both paths
are kept alive on purpose: the Docker runtime is a pristine fallback in case a
machine can't run WSL2.
Which runtime am I in? (authoritative checks)
- Startup log line:
[app] Active workspace runtime: WslDistro(orDockerDesktop). This is the single source of truth. - WSL only:
wsl -l -vshowsAdom-Workspace Running; HD logs[wsl-trigger] backend poller armed (...setup-trigger-wsl.json)and[run_all_wsl] .... - Docker only: a
hydrogen-*container appears indocker ps. - From inside the workspace, ask HD:
GET "$(cat ~/.adom/hd-control-url)/wsl/status"(loopbackhttp://127.0.0.1:<dynamic>) succeeds (with distro info) on the WSL runtime.
⚠️ Benign noise: [docker] Container runtime unhealthy — exec failed, needs restart
This line can appear even on the WSL2 path — a legacy hd-docker heartbeat
polls for a Docker container that doesn't exist and logs "unhealthy". It is
cosmetic and does NOT mean you're in Docker mode. The real WSL health signal is
[wsl] Workspace unhealthy …. Confirm the runtime via check #1, never by this line.
What actually differs between the runtimes
| Concern | WSL2 (default) | Docker (legacy) |
|---|---|---|
| Workspace | Adom-Workspace distro, imported from the pre-baked adom-golden.tar.gz |
container from a ~390 MB image |
| Run a command in it | wsl -d Adom-Workspace -u adom -- <cmd> |
docker exec <container> <cmd> |
| Your files | /home/adom/project in the distro's ext4 fs (no volume); browse from Windows at \\wsl$\Adom-Workspace\… |
Docker named volume; copy out via docker cp |
| Ports | code-server binds 0.0.0.0:7380; WSL2 auto-forwards 0.0.0.0 listeners to Windows localhost |
single -p 7380:8080 map; other ports via /proxy/<port>/ |
| Reach the host | 127.0.0.1 (WSL2 mirrored networking shares loopback with the Windows host); HD's live control URL is in ~/.adom/hd-control-url |
host.docker.internal (Docker-provided) |
| Wipe/reset | wsl --unregister Adom-Workspace (only that distro) |
docker rm + volume/image removal |
Which skills to trust
HD only installs the skills for the active runtime (plus the shared ones), so
in most workspaces you'll already have the right set. The runtime-specific skills
exist in two buckets in the HD repo — wsl2/ and docker/ — and share names:
hd-networking,hd-ports,hd-port-watcher,hd-volume,hd-container,hd-topology,hd-container-stats,hd-setup,hd-setup-steps- WSL-only workspace skills:
hd-workspace-lifecycle,hd-workspace-monitoring - Docker-only skills:
hd-docker-desktop,hd-docker-lifecycle,hd-docker-monitoring
If you ever see Docker-specific advice (docker exec, named volumes, -p port
maps) while check #1 says WslDistro, you're reading the wrong bucket — defer to
the WSL2 mechanics above.
Switching runtimes (rare; usually a dev/support action)
HD reads HD_RUNTIME from its environment at process start.
- → WSL2 (default): ensure
HD_RUNTIMEis unset orwsl2, relaunch HD. If a prior run set Docker:setx HD_RUNTIME wsl2then relaunch. - → Docker (fallback):
setx HD_RUNTIME docker, relaunch HD (requires Docker Desktop running).
---
name: hd-runtime-mode
description: >
Which workspace runtime your Hydrogen Desktop is using — a WSL2 Ubuntu distro
(default) or a legacy Docker container (HD_RUNTIME=docker) — how to tell which
one you're in, what changes between them, and which runtime-specific skills to
trust. READ THIS FIRST when anything about the workspace's container/distro,
networking, volumes, ports, or setup steps seems contradictory: the answer
almost always depends on the runtime. Trigger words — runtime, wsl, wsl2,
docker mode, HD_RUNTIME, Adom-Workspace, which runtime, container or distro,
workspace runtime, container runtime unhealthy, am I in docker or wsl.
---
# HD Runtime Mode — WSL2 (default) vs Docker (legacy)
Hydrogen Desktop hosts your workspace one of two ways. Everything Claude knows
about "the container" — its filesystem, networking, ports, stats, and setup
steps — depends on which one is active. **Check the runtime before trusting any
runtime-specific advice.**
| `HD_RUNTIME` | Runtime | What the workspace is | Setup cascade | State file |
|---|---|---|---|---|
| unset / `wsl2` | **WslDistro — DEFAULT** | WSL2 Ubuntu distro `Adom-Workspace` (`wsl --import`) | 27 steps | `setup-steps-wsl.json` |
| `docker` | DockerDesktop — legacy fallback | Docker container (Docker Desktop) | 24 steps | `setup-steps.json` |
WSL2 is the default — you only get Docker if `HD_RUNTIME=docker` was set before
HD launched. The selector is `runtime/mod.rs::select_runtime()`; the WSL setup
executor is `setup_steps_wsl.rs`, the Docker one is `setup_steps.rs`. Both paths
are kept alive on purpose: the Docker runtime is a pristine fallback in case a
machine can't run WSL2.
## Which runtime am I in? (authoritative checks)
1. **Startup log line:** `[app] Active workspace runtime: WslDistro` (or
`DockerDesktop`). This is the single source of truth.
2. **WSL only:** `wsl -l -v` shows `Adom-Workspace Running`; HD logs
`[wsl-trigger] backend poller armed (...setup-trigger-wsl.json)` and
`[run_all_wsl] ...`.
3. **Docker only:** a `hydrogen-*` container appears in `docker ps`.
4. From inside the workspace, ask HD: `GET "$(cat ~/.adom/hd-control-url)/wsl/status"`
(loopback `http://127.0.0.1:<dynamic>`) succeeds (with distro info) on the WSL runtime.
### ⚠️ Benign noise: `[docker] Container runtime unhealthy — exec failed, needs restart`
This line can appear **even on the WSL2 path** — a legacy `hd-docker` heartbeat
polls for a Docker container that doesn't exist and logs "unhealthy". It is
cosmetic and does NOT mean you're in Docker mode. The real WSL health signal is
`[wsl] Workspace unhealthy …`. Confirm the runtime via check #1, never by this line.
## What actually differs between the runtimes
| Concern | WSL2 (default) | Docker (legacy) |
|---|---|---|
| Workspace | `Adom-Workspace` distro, imported from the pre-baked `adom-golden.tar.gz` | container from a ~390 MB image |
| Run a command in it | `wsl -d Adom-Workspace -u adom -- <cmd>` | `docker exec <container> <cmd>` |
| Your files | `/home/adom/project` in the distro's ext4 fs (no volume); browse from Windows at `\\wsl$\Adom-Workspace\…` | Docker named volume; copy out via `docker cp` |
| Ports | code-server binds `0.0.0.0:7380`; WSL2 auto-forwards `0.0.0.0` listeners to Windows `localhost` | single `-p 7380:8080` map; other ports via `/proxy/<port>/` |
| Reach the host | `127.0.0.1` (WSL2 mirrored networking shares loopback with the Windows host); HD's live control URL is in `~/.adom/hd-control-url` | `host.docker.internal` (Docker-provided) |
| Wipe/reset | `wsl --unregister Adom-Workspace` (only that distro) | `docker rm` + volume/image removal |
## Which skills to trust
HD only installs the skills for the **active** runtime (plus the shared ones), so
in most workspaces you'll already have the right set. The runtime-specific skills
exist in two buckets in the HD repo — `wsl2/` and `docker/` — and share names:
- `hd-networking`, `hd-ports`, `hd-port-watcher`, `hd-volume`, `hd-container`,
`hd-topology`, `hd-container-stats`, `hd-setup`, `hd-setup-steps`
- WSL-only workspace skills: `hd-workspace-lifecycle`, `hd-workspace-monitoring`
- Docker-only skills: `hd-docker-desktop`, `hd-docker-lifecycle`,
`hd-docker-monitoring`
If you ever see Docker-specific advice (`docker exec`, named volumes, `-p` port
maps) while check #1 says `WslDistro`, you're reading the wrong bucket — defer to
the WSL2 mechanics above.
## Switching runtimes (rare; usually a dev/support action)
HD reads `HD_RUNTIME` from its environment at process start.
- → WSL2 (default): ensure `HD_RUNTIME` is unset or `wsl2`, relaunch HD. If a
prior run set Docker: `setx HD_RUNTIME wsl2` then relaunch.
- → Docker (fallback): `setx HD_RUNTIME docker`, relaunch HD (requires Docker
Desktop running).