Hydrogen Desktop (macOS / Lima)
Public Made by Adomby adom
The macOS platform layer for Hydrogen Desktop.
name: hd-api-mac description: > macOS platform companion to hd-api — the Apple/Lima-specific half of reaching HD's control API. The full endpoint catalog lives in hd-api (adom/hd-bootstrap); THIS skill carries only what differs on macOS: the adom-host gateway (vz doesn't mirror loopback), the ~/.adom/hd-control-url discovery file, HD binding 0.0.0.0, and the nspawn machine-runtime endpoints (the /workspace/* routes, /wsl/* names kept for wire-compat). Mirror of hd-api-windows (the /wsl/* WSL networking tables). Trigger words — hd control api macos, adom-host, hd-control-url, reach HD from the workspace, machine runtime endpoints, vz loopback, workspace health macos.
hd-api (macOS) — reaching the control API across the Lima boundary
This is the macOS half of hd-api. The endpoint catalog, _manifest, auth, and
every route table live in the generic hd-api skill — read that first. This skill
only covers how the Lima/nspawn boundary changes reachability and discovery on
a Mac.
Base URL + the adom-host gateway
- On the macOS host, HD's control API is
http://127.0.0.1:<dynamic>. - From inside the workspace machine, the Apple
vzVM does NOT mirror host loopback, so127.0.0.1won't reach HD. HD binds its host services to0.0.0.0and the workspace reaches them through theadom-hostgateway:http://adom-host:<dynamic>.
⭐ Finding the control port — ~/.adom/hd-control-url
The port is dynamic. From the workspace, read the discovery file HD writes every
launch (already pointed at the adom-host gateway):
CTRL="$(cat ~/.adom/hd-control-url)" # e.g. http://adom-host:<control>
curl -sf "$CTRL/health"
Never hard-code the port or assume 127.0.0.1 from inside the machine — that's the #1
macOS-specific failure when porting a Windows playbook that used a \\wsl$/loopback
path.
Machine-runtime endpoints
The default macOS runtime is the nspawn machine (not Docker). HD exposes the
workspace-runtime routes under /workspace/* — and keeps the /wsl/* route names as
wire-compat aliases, so a caller written against the Windows tables still resolves:
| Method | Path | Notes |
|---|---|---|
| GET | /workspace/status |
machine registered / running / code-server reachable |
| GET | /workspace/health |
deep health: machine + code-server + host reachability |
| GET | /container-status |
runtime available, image/machine present, workspace running |
/test/probe-dialogs classifies macOS permission prompts (Screen Recording /
Accessibility / installer pkg) as blockers — the macOS analog of the Windows
UAC/installer dialogs.
NOT here (lives in the Windows companion)
The \\wsl$ share paths, WSL2 port-proxy / netsh forwarding, and the Windows
loopback-mirroring assumptions are in hd-api-windows. On macOS reachability is the
adom-host gateway + ~/.adom/hd-control-url, full stop.
---
name: hd-api-mac
description: >
macOS platform companion to hd-api — the Apple/Lima-specific half of reaching HD's
control API. The full endpoint catalog lives in hd-api (adom/hd-bootstrap); THIS
skill carries only what differs on macOS: the adom-host gateway (vz doesn't mirror
loopback), the ~/.adom/hd-control-url discovery file, HD binding 0.0.0.0, and the
nspawn machine-runtime endpoints (the /workspace/* routes, /wsl/* names kept for
wire-compat). Mirror of hd-api-windows (the /wsl/* WSL networking tables). Trigger
words — hd control api macos, adom-host, hd-control-url, reach HD from the workspace,
machine runtime endpoints, vz loopback, workspace health macos.
---
# hd-api (macOS) — reaching the control API across the Lima boundary
This is the **macOS half** of `hd-api`. The endpoint catalog, `_manifest`, auth, and
every route table live in the generic **hd-api** skill — read that first. This skill
only covers how the **Lima/nspawn boundary** changes *reachability* and *discovery* on
a Mac.
## Base URL + the adom-host gateway
- On the **macOS host**, HD's control API is `http://127.0.0.1:<dynamic>`.
- From **inside the workspace machine**, the Apple `vz` VM does **NOT** mirror host
loopback, so `127.0.0.1` won't reach HD. HD binds its host services to `0.0.0.0` and
the workspace reaches them through the **`adom-host` gateway**:
`http://adom-host:<dynamic>`.
## ⭐ Finding the control port — `~/.adom/hd-control-url`
The port is dynamic. **From the workspace, read the discovery file** HD writes every
launch (already pointed at the `adom-host` gateway):
```bash
CTRL="$(cat ~/.adom/hd-control-url)" # e.g. http://adom-host:<control>
curl -sf "$CTRL/health"
```
Never hard-code the port or assume `127.0.0.1` from inside the machine — that's the #1
macOS-specific failure when porting a Windows playbook that used a `\\wsl$`/loopback
path.
## Machine-runtime endpoints
The default macOS runtime is the **nspawn machine** (not Docker). HD exposes the
workspace-runtime routes under `/workspace/*` — and **keeps the `/wsl/*` route names as
wire-compat aliases**, so a caller written against the Windows tables still resolves:
| Method | Path | Notes |
|---|---|---|
| GET | `/workspace/status` | machine registered / running / code-server reachable |
| GET | `/workspace/health` | deep health: machine + code-server + host reachability |
| GET | `/container-status` | runtime available, image/machine present, workspace running |
`/test/probe-dialogs` classifies **macOS permission prompts** (Screen Recording /
Accessibility / installer pkg) as blockers — the macOS analog of the Windows
UAC/installer dialogs.
## NOT here (lives in the Windows companion)
The `\\wsl$` share paths, WSL2 port-proxy / `netsh` forwarding, and the Windows
loopback-mirroring assumptions are in `hd-api-windows`. On macOS reachability is the
`adom-host` gateway + `~/.adom/hd-control-url`, full stop.