master
Download ZIP Propose a change
Name Last commit message Last updated
docs Delete docs/.pushperf-probe.txt · Colby Knox 2mo ago
tests Publish 1.3.8 · John Lauer 21d ago
.gitignore Fix remote control recovery after network outages; prepare 1.3.4 · John Lauer 1mo ago
check-updates.sh 1.3.3: name the failing update leg in the banner (adom/hook#5). The status file now records which leg failed (sweep vs core-install) and the banner prints the matching retry command; the old static remedy said 'pkg install adom/core' even when that leg had succeeded and the sweep was what broke. · Colby Knox 1mo ago
claude-rc Publish 1.3.9 · John Lauer 21d ago
install.sh Publish 1.3.5 · John Lauer 1mo ago
package.json Publish 1.3.9 · John Lauer 21d ago
page.json Publish 1.3.9 · John Lauer 21d ago
README.md Publish 1.3.8 · John Lauer 21d ago
SKILL.md Publish 1.3.9 · John Lauer 21d ago
uninstall.sh Publish 1.3.0 · John Lauer 1mo ago

adom/hook

Registry-native, cross-agent auto-update. Keeps your adom/core apps and skills current from wiki.adom.inc automatically, on every Claude Code and Codex prompt. No git, no private repository.

Why

The old update path fetched a private GitHub repo on every prompt. That works for insiders but cannot be shared, and it only runs under Claude. This hook checks the public registry instead, so it works for any user and any agent.

How it works

A throttled, bounded check (adom-wiki outdated, ~every 30 min). When an installed package is behind the registry, it applies the update in the background and drops a one-line note into the model's context. It never blocks your prompt.

Two triggers are wired, sharing one throttle stamp (so a double fire is a no-op):

Trigger Where it matters
UserPromptSubmit (Claude Code / Codex) interactive containers -- updates as you type
cron (*/30 + @reboot) headless lite/service containers -- no prompts, so this is the only trigger they get, and it's where prod releases run

If the image has no crontab (or crond isn't running), install says so; have the app call ~/.adom/hooks/adom-core-update.sh on its own interval instead (throttled

  • idempotent, safe to call often).

Under cron, stdout goes to mail or /dev/null, so the durable record is ~/.adom/last-update.status (running, or the last exit code) and ~/.adom/last-update.log.

One pass updates everything installed, not just adom/core's tree:

What How Cadence
every installed package (apps, skills, bootstraps), including ones you installed yourself pkg update ~30 min, on prompt or cron
newly added adom/core members pkg install adom/core (update alone never adds) same run
the adom-wiki CLI itself just another package -- adom/core depends on it same run

The CLI is not a separate self-updating layer: there is no automatic self-update and no CLI timer. adom-wiki self-update is a manual fallback for the one case the package path cannot handle (the atomic binary swap failing with ETXTBSY). If this hook is broken, the CLI goes stale along with everything else.

Components are out of scope: they are wiki content you reference, not packages you install.

Install

adom-wiki install adom/hook

adom/core already depends on it, so a normal bootstrap wires it for you.

Controls

Env var Effect
ADOM_HOOK_INTERVAL=<seconds> check cadence (default 1800)
ADOM_HOOK_FORCE=1 force a check on the next prompt
ADOM_HOOK_DISABLE=1 disable the hook

Uninstall

adom-wiki uninstall adom/hook

Unwires the hook from both ~/.claude/settings.json and ~/.codex/hooks.json.

claude-rc: Remote Control, kept alive

This package also installs claude-rc, which keeps Claude Code Remote Control (claude rc) running on the container so you can open new AI threads on it from the Claude mobile app or claude.ai/code whenever you want.

It is on by default and nobody is asked: as soon as Claude Code is signed in, the next prompt turns it on quietly. Run claude-rc disable if you ever want it off on a container; it then stays off.

  • ah (Hydrogen desktop container): a cron watchdog checks every 2 minutes.
  • hc (Hydrogen Cloud): no cron exists there, so the prompt hook restarts it on your next chat.

After five starts within an hour, further starts are spaced at least 15 minutes apart. The failed state is a cooldown: cron (or the next cloud-container prompt) retries automatically when it expires. claude-rc status shows the retry time. Disabling or declining still prevents all automatic starts. Concurrent watchdog calls share a lock.

claude-rc status      claude-rc enable      claude-rc disable      claude-rc logs