OmniNode-ai

Plans board refresh

Refresh a generated status board by running the generator its overlay names, then prove the board's published timestamp advanced. Thin process interface — the overlay supplies the generator, the board and the publish surface; this skill supplies neither.

OmniNode-ai 4 3 Updated 4w ago

Resources

1
GitHub

Install

npx skillscat add omninode-ai/omniclaude/plugins-onex-skills-plans-board-refresh

Install via the SkillsCat registry.

SKILL.md

Plans board refresh

Catalogue row: plans_board_refresh · Replacement: none yet

This skill is a temporary prose interface over a process that already exists.
It is not the process and it owns no logic. Its whole job is that nobody has to
remember the generator's name and its arguments.

What it wraps

The status-board generator named by the overlay. The generator, the board it
publishes, the repository it lives in and the command that runs it are overlay
content
and appear nowhere in this file. A committed default here would be an
organization's process shipped in a public plugin.

Overlay

Resolve the overlay with the shared resolver, the same search order every
overlay-configured skill uses:

python3 "${CLAUDE_PLUGIN_ROOT}/scripts/resolve_skill_overlay.py" plans_board_refresh
Order Location Kind
1 PLANS_BOARD_REFRESH_OVERLAY_PATH explicit pointer — a miss is a hard stop, never a fall-through
2 each root in ONEX_SKILL_OVERLAY_ROOTS, joined with plans_board_refresh/overlay.yaml discovered

It prints the resolved path, or exits non-zero naming every location it
tried. A non-zero exit is a hard stop, not a fall back to a default —
there is no default. Report its standard error and stop.

Do not guess a generator: a board refresh that ran against a guessed generator
is worse than one that did not run.

The overlay supplies:

Field What it holds
generator_command the command that regenerates and publishes the board
board_locator how to read the published board's timestamp back
working_directory where the generator is run from
cadence how often the process is expected to fire

Preflight, by intent

Run the session preflight first and let --intent decide what it prints:
quiet prints nothing but a blocker, normal prints one line per check with
its fix command, tick writes the same verdict to the run's own record and
nothing to the transcript. A blocked preflight stops the refresh; it does not
downgrade it.

Verification contract

The board's published timestamp advanced past the time this run started.

Read the timestamp before the run and again after it, through board_locator,
and report both. A generator that exits zero having published nothing is the
failure this row exists for, so an unchanged timestamp is a failure, never a
no-op. Report the two timestamps even when they differ — the reader is checking
the delta, not taking a verdict.

A timestamp read that exits non-zero or produces zero bytes is a failed read,
not a timestamp. Two empty reads compare equal, and two failed reads compared
as strings can look like anything, so either one fails the run.

Mechanical replacement

none yet. This row is prose because the refresh is invoked from memory
today. The replacement is a scheduled trigger that fires the generator on its
cadence and writes a firing receipt before it does any work, so that "fired and
published nothing" is distinguishable from "nothing fired". When that exists,
this skill is deleted rather than kept alongside it.

What this skill does NOT do

  • Carry a generator command, a repository name, a path or a host in this file
  • Edit the board, or publish anything the generator did not produce
  • Report success from the generator's own exit code alone