Hydrogen Desktop (macOS / Lima)
Public Made by Adomby adom
The macOS platform layer for Hydrogen Desktop.
name: hd-api-key-mac
description: >
Diagnose and repair the workspace's Adom API key (/var/run/adom/api-key) on macOS
Hydrogen Desktop — the injected session token that adom-cli and every Adom tool
authenticate with. Use when adom-cli returns 401/unauthorized, /var/run/adom/api-key
is missing or empty, "adom-cli can't reach Adom", or the user asks to reauthorize
Adom / re-pull the API key. Covers: pulling the current token from HD via
GET /auth-token, re-writing the key (passwordless sudo), prompting the user to
sign in to HD when the host has no valid session, and triggering HD's
inject-api-key setup step. Trigger words — api key, api-key, /var/run/adom,
401 unauthorized, adom-cli auth, reauthorize adom, re-auth adom, pull api key,
session token missing, fix adom auth, carbon 401.
hd-api-key-mac — recover the workspace Adom API key
/var/run/adom/api-key (mode 644) holds the user's Adom session token, injected
into the Adom-Workspace machine by HD. adom-cli and the other Adom CLIs read it to
authenticate against carbon (through HD's proxy over adom-host). When it's missing
or stale, every Adom platform call fails — usually surfacing as 401/unauthorized
from adom-cli.
Why it goes missing (know before fixing)
/var/runis tmpfs — a machine or Lima-VM reboot silently wipes the key even though the user's session on the Mac is still valid.- HD writes it at three moments: the
inject-api-keysetup step, every Adom auth completion, and on every HD launch (the last two are HD ≥ 0.1.148; older HDs only wrote it during setup — if the user signed in after setup ran, the key never landed. That gap is exactly what this skill recovers). - The setup step self-skips with "sign in later" when the user wasn't signed in yet.
Diagnose (two commands)
wc -c /var/run/adom/api-key 2>/dev/null # missing/0 bytes → key absent
timeout 15 adom-cli carbon user get # 401/unauthorized → key stale or absent
| Symptom | Meaning | Fix |
|---|---|---|
| file missing/empty, host signed in | tmpfs wipe or pre-0.1.148 auth gap | Pull the token (below) |
file present, 401 |
host session rotated/expired since injection | Pull the token (below) |
| pull says no session on host | user isn't signed in to HD | Prompt reauthorization (below) |
Fix — pull the current token from HD
HD's control API serves the raw session token at GET /auth-token (raw text when
signed in; a JSON {"error":"no session token"} object when not). The adom user
has passwordless sudo:
CTRL="$(cat ~/.adom/hd-control-url)" # e.g. http://adom-host:<control> — see hd-api-mac
TOKEN="$(curl -sf "$CTRL/auth-token")"
case "$TOKEN" in
""|\{*) echo "NO SESSION on host — user must sign in to HD (see below)" ;;
*) sudo mkdir -p /var/run/adom \
&& printf %s "$TOKEN" | sudo tee /var/run/adom/api-key >/dev/null \
&& sudo chmod 644 /var/run/adom/api-key \
&& echo "key written ($(wc -c < /var/run/adom/api-key) bytes)" ;;
esac
timeout 15 adom-cli carbon user get # VERIFY — must return user JSON, not 401
Always verify with adom-cli carbon user get — a written key proves nothing if the
host session itself expired (then the pull "succeeds" but carbon still 401s →
reauthorization needed).
Prompt the user to reauthorize
When the host has no session (or the pulled token still 401s), the fix is a human step — tell the user in chat, plainly:
Your Adom session has expired (or you're not signed in). Please bring up the Hydrogen Desktop window and sign in to Adom — I'll pick it up automatically and finish fixing the workspace auth.
Optionally also raise a native toast so they see it outside the editor (see
hd-notifications-mac). Then poll — on HD ≥ 0.1.148 auth completion re-injects the
key automatically:
for i in $(seq 1 60); do [ -s /var/run/adom/api-key ] && break; sleep 5; done
timeout 15 adom-cli carbon user get
If the key never appears (older HD), re-run the pull block above once the user confirms they signed in.
Alternative: trigger HD's setup step
POST "$CTRL/setup/step/inject-api-key" re-runs the injection through HD's Setup
panel (the panel is force-shown; the user sees live progress; the step also
validates against carbon). Use this when you want the user-visible, HD-audited path
instead of writing the file yourself. Do NOT use POST /setup/run-step — that
endpoint is deprecated and hard-refused.
Related
hd-api-mac—~/.adom/hd-control-urldiscovery + theadom-hostgateway (why127.0.0.1doesn't reach HD from the machine).hd-setup-steps— whereinject-api-keysits in the install cascade.
---
name: hd-api-key-mac
description: >
Diagnose and repair the workspace's Adom API key (`/var/run/adom/api-key`) on macOS
Hydrogen Desktop — the injected session token that adom-cli and every Adom tool
authenticate with. Use when adom-cli returns 401/unauthorized, `/var/run/adom/api-key`
is missing or empty, "adom-cli can't reach Adom", or the user asks to reauthorize
Adom / re-pull the API key. Covers: pulling the current token from HD via
`GET /auth-token`, re-writing the key (passwordless sudo), prompting the user to
sign in to HD when the host has no valid session, and triggering HD's
inject-api-key setup step. Trigger words — api key, api-key, /var/run/adom,
401 unauthorized, adom-cli auth, reauthorize adom, re-auth adom, pull api key,
session token missing, fix adom auth, carbon 401.
---
# hd-api-key-mac — recover the workspace Adom API key
`/var/run/adom/api-key` (mode 644) holds the user's Adom **session token**, injected
into the `Adom-Workspace` machine by HD. `adom-cli` and the other Adom CLIs read it to
authenticate against carbon (through HD's proxy over `adom-host`). When it's missing
or stale, every Adom platform call fails — usually surfacing as `401`/`unauthorized`
from `adom-cli`.
## Why it goes missing (know before fixing)
- `/var/run` is **tmpfs** — a machine or Lima-VM reboot silently wipes the key even
though the user's session on the Mac is still valid.
- HD writes it at three moments: the `inject-api-key` setup step, **every Adom auth
completion**, and **on every HD launch** (the last two are HD ≥ 0.1.148; older HDs
only wrote it during setup — if the user signed in *after* setup ran, the key never
landed. That gap is exactly what this skill recovers).
- The setup step self-skips with "sign in later" when the user wasn't signed in yet.
## Diagnose (two commands)
```bash
wc -c /var/run/adom/api-key 2>/dev/null # missing/0 bytes → key absent
timeout 15 adom-cli carbon user get # 401/unauthorized → key stale or absent
```
| Symptom | Meaning | Fix |
|---|---|---|
| file missing/empty, host signed in | tmpfs wipe or pre-0.1.148 auth gap | Pull the token (below) |
| file present, `401` | host session rotated/expired since injection | Pull the token (below) |
| pull says no session on host | user isn't signed in to HD | Prompt reauthorization (below) |
## Fix — pull the current token from HD
HD's control API serves the raw session token at `GET /auth-token` (raw text when
signed in; a JSON `{"error":"no session token"}` object when not). The `adom` user
has passwordless sudo:
```bash
CTRL="$(cat ~/.adom/hd-control-url)" # e.g. http://adom-host:<control> — see hd-api-mac
TOKEN="$(curl -sf "$CTRL/auth-token")"
case "$TOKEN" in
""|\{*) echo "NO SESSION on host — user must sign in to HD (see below)" ;;
*) sudo mkdir -p /var/run/adom \
&& printf %s "$TOKEN" | sudo tee /var/run/adom/api-key >/dev/null \
&& sudo chmod 644 /var/run/adom/api-key \
&& echo "key written ($(wc -c < /var/run/adom/api-key) bytes)" ;;
esac
timeout 15 adom-cli carbon user get # VERIFY — must return user JSON, not 401
```
Always verify with `adom-cli carbon user get` — a written key proves nothing if the
host session itself expired (then the pull "succeeds" but carbon still 401s →
reauthorization needed).
## Prompt the user to reauthorize
When the host has no session (or the pulled token still 401s), the fix is a human
step — **tell the user in chat**, plainly:
> Your Adom session has expired (or you're not signed in). Please bring up the
> Hydrogen Desktop window and sign in to Adom — I'll pick it up automatically and
> finish fixing the workspace auth.
Optionally also raise a native toast so they see it outside the editor (see
`hd-notifications-mac`). Then poll — on HD ≥ 0.1.148 auth completion re-injects the
key automatically:
```bash
for i in $(seq 1 60); do [ -s /var/run/adom/api-key ] && break; sleep 5; done
timeout 15 adom-cli carbon user get
```
If the key never appears (older HD), re-run the pull block above once the user
confirms they signed in.
## Alternative: trigger HD's setup step
`POST "$CTRL/setup/step/inject-api-key"` re-runs the injection through HD's Setup
panel (the panel is force-shown; the user sees live progress; the step also
validates against carbon). Use this when you want the user-visible, HD-audited path
instead of writing the file yourself. Do **NOT** use `POST /setup/run-step` — that
endpoint is deprecated and hard-refused.
## Related
- `hd-api-mac` — `~/.adom/hd-control-url` discovery + the `adom-host` gateway (why
`127.0.0.1` doesn't reach HD from the machine).
- `hd-setup-steps` — where `inject-api-key` sits in the install cascade.