hook
Public Made by Adomby adom
Registry-native cross-agent auto-update hook. Keeps adom/core apps and skills current from wiki.adom.inc on every Claude Code and Codex prompt, in the background.
name: adom-hook description: Registry-native cross-agent auto-update hook; keeps adom/core apps and skills current from wiki.adom.inc on every Claude Code and Codex prompt.
adom-hook
The registry-native, cross-agent auto-update hook. It keeps your adom/core apps
and skills current from the wiki registry (wiki.adom.inc) without git or any
private repository.
What it does
On every Claude Code and Codex prompt (UserPromptSubmit), a throttled check runs
adom-wiki outdated. When something installed is behind the registry, it applies the
update in the background (adom-wiki update + adom-wiki install adom/core) and prints
a one-line note into the model's context. It never blocks the prompt.
This is the registry-native replacement for the old git fetch hook: same
"stay current automatically" behavior, but sourced from the public registry so it
works for any user and any agent, with no private-GitHub dependency.
Two triggers (interactive + headless)
Installing wires BOTH, and they share one throttle stamp, so a double fire is a no-op:
UserPromptSubmit(Claude Code / Codex) -- fast: an interactive container updates the moment you type.- cron (
*/30+@reboot) -- the headless trigger. A lite/service container has no prompts, so without this it never updates and packages rot until someone SSHes in -- which is exactly where prod releases run. Cron is registered unconditionally (not only when Claude is absent), so an interactive box that sits idle for a day still gets a backstop.
If the image has no crontab, or crond is not running, install says so. In that
case have the app call ~/.adom/hooks/adom-core-update.sh on its own interval --
it is throttled and idempotent, so calling it often is safe.
Reading the result on a headless box: stdout is meaningless under cron (it
becomes mail or /dev/null). The durable record is:
~/.adom/last-update.status--running, or the last exit code (0= fine).~/.adom/last-update.log-- the last update's output.
A failed update is also reported to the next interactive prompt, and the CLI
version each container reports to the registry answers "is the fleet current?"
fleet-wide (GET /api/admin/clients?name=adom-wiki-cli) without SSHing anywhere.
What gets updated
Everything installed, in one pass. pkg update covers every package
adom-wiki pkg list shows -- apps, skills and bootstraps -- including ones you
installed yourself from other owners, not just adom/core's tree. Then
pkg install adom/core re-resolves core so any NEWLY ADDED member arrives (update
alone only refreshes what you already have; it never adds).
The CLI is not a separate layer. adom/adom-wiki-cli is an ordinary package
that adom/core depends on, so it comes down the same path as everything else, in
the same run. There is no automatic self-update and no separate CLI timer -- the
self-update verb is a MANUAL fallback for the one case the package path cannot
handle: if the atomic binary swap ever fails with ETXTBSY ("text file busy"), the
CLI hints you toward it. Do not count on the CLI healing itself; if this hook is
broken, the CLI goes stale with everything else.
Components are out of scope. They are wiki content (symbols, footprints, 3D models) you reference, not packages you install.
Controls
ADOM_HOOK_INTERVAL=<seconds>-- check cadence (default 1800).ADOM_HOOK_FORCE=1-- force a check on the next prompt (testing).ADOM_HOOK_DISABLE=1-- disable the hook entirely.
Install
adom-wiki install adom/hook
It is also a dependency of adom/core, so a normal bootstrap installs it for you.
adom-wiki uninstall adom/hook unwires it from both agents.
Note on Codex
The Codex wiring (~/.codex/hooks.json) targets Codex's UserPromptSubmit event
and its additionalContext channel. Verify against a live Codex install before
relying on it there; the Claude Code path is the verified one.
---
name: adom-hook
description: Registry-native cross-agent auto-update hook; keeps adom/core apps and skills current from wiki.adom.inc on every Claude Code and Codex prompt.
---
# adom-hook
The registry-native, cross-agent auto-update hook. It keeps your `adom/core` apps
and skills current from the wiki registry (wiki.adom.inc) without git or any
private repository.
## What it does
On every Claude Code and Codex prompt (`UserPromptSubmit`), a throttled check runs
`adom-wiki outdated`. When something installed is behind the registry, it applies the
update in the background (`adom-wiki update` + `adom-wiki install adom/core`) and prints
a one-line note into the model's context. It never blocks the prompt.
This is the registry-native replacement for the old `git fetch` hook: same
"stay current automatically" behavior, but sourced from the public registry so it
works for any user and any agent, with no private-GitHub dependency.
## Two triggers (interactive + headless)
Installing wires BOTH, and they share one throttle stamp, so a double fire is a
no-op:
- **`UserPromptSubmit`** (Claude Code / Codex) -- fast: an interactive container
updates the moment you type.
- **cron** (`*/30` + `@reboot`) -- the headless trigger. A lite/service container
has no prompts, so without this it never updates and packages rot until someone
SSHes in -- which is exactly where prod releases run. Cron is registered
unconditionally (not only when Claude is absent), so an interactive box that sits
idle for a day still gets a backstop.
If the image has no `crontab`, or `crond` is not running, install says so. In that
case have the app call `~/.adom/hooks/adom-core-update.sh` on its own interval --
it is throttled and idempotent, so calling it often is safe.
**Reading the result on a headless box:** stdout is meaningless under cron (it
becomes mail or `/dev/null`). The durable record is:
- `~/.adom/last-update.status` -- `running`, or the last exit code (`0` = fine).
- `~/.adom/last-update.log` -- the last update's output.
A failed update is also reported to the next interactive prompt, and the CLI
version each container reports to the registry answers "is the fleet current?"
fleet-wide (`GET /api/admin/clients?name=adom-wiki-cli`) without SSHing anywhere.
## What gets updated
**Everything installed, in one pass.** `pkg update` covers every package
`adom-wiki pkg list` shows -- apps, skills and bootstraps -- including ones you
installed yourself from other owners, not just `adom/core`'s tree. Then
`pkg install adom/core` re-resolves core so any NEWLY ADDED member arrives (update
alone only refreshes what you already have; it never adds).
**The CLI is not a separate layer.** `adom/adom-wiki-cli` is an ordinary package
that `adom/core` depends on, so it comes down the same path as everything else, in
the same run. There is no automatic self-update and no separate CLI timer -- the
`self-update` verb is a MANUAL fallback for the one case the package path cannot
handle: if the atomic binary swap ever fails with ETXTBSY ("text file busy"), the
CLI hints you toward it. Do not count on the CLI healing itself; if this hook is
broken, the CLI goes stale with everything else.
**Components are out of scope.** They are wiki content (symbols, footprints, 3D
models) you reference, not packages you install.
## Controls
- `ADOM_HOOK_INTERVAL=<seconds>` -- check cadence (default 1800).
- `ADOM_HOOK_FORCE=1` -- force a check on the next prompt (testing).
- `ADOM_HOOK_DISABLE=1` -- disable the hook entirely.
## Install
```
adom-wiki install adom/hook
```
It is also a dependency of `adom/core`, so a normal bootstrap installs it for you.
`adom-wiki uninstall adom/hook` unwires it from both agents.
## Note on Codex
The Codex wiring (`~/.codex/hooks.json`) targets Codex's `UserPromptSubmit` event
and its additionalContext channel. Verify against a live Codex install before
relying on it there; the Claude Code path is the verified one.