zheref

jutaisho

Ring the bell at the end of a turn — the three escalation rungs from nen/workflow.json (a push notification through the surface, an OS notification, an audible cue), the .nen/last-stop.json marker the Stop hook reads, and the in-session fallback where no hook is installed. Use when hatsu:ren reaches its sixth step, when hatsu:en reaches Ready, or when the maintainer invokes hatsu:jutaisho [at <gate>]. An ordinary turn rings rung 1 only, a turn that did nothing rings nothing, and a genuine gate gets all four parts of § 4 — the nen stop banner, the report link, lettered options with a star on the recommended decision, and the question through the surface's own option picker. Never prompts for hatsu:aka.

zheref 0 Updated 3w ago
GitHub

Install

npx skillscat add zheref/hatsu/jutaisho

Install via the SkillsCat registry.

SKILL.md

Jutaisho — the bell

Nature: Manipulator. Signalling decides whether the maintainer's attention is spent.

When the turn is over, tell me — and only actually interrupt me when it is mine.

The last step of `ren`'s turn and the step `en` fires at
Ready: the only place in the local plane allowed to make a noise, and a bell that rings every turn
is a bell nobody hears.

0. Standalone entry

Already total (`docs/STANDALONE-ENTRY.md` § 4): cold entry adds
only P1, and says whether anything happened — over a quiet checkout, nothing to announce.
Terminal: a gate's successor is the maintainer's decision, named in the options, never prompted.

1. Invocation

hatsu:jutaisho [at <G1 | G1-M | G2 | G3 | G4 | G5>]
nen parse jutaisho --grammar "at [<gate:G1|G1-M|G2|G3|G4|G5>]" --line "<the invocation, minus the prefix>"

An empty --line or a bare at parses to gate: (clause absent), exit 0 — meaningful, not a
gap
: no at <gate> is a turn bell, nothing asked
and no banner; with a gate it is a stop and § 4's whole shape is owed. An unparseable line or an
absent notifications item is asked for and set up inline (missing-argument,
missing-configuration; `WORKFLOW.md` § 4 Ask, set up, continue).

The run Rungs that fire
An ordinary turn — no at <gate> rung 1 only — the surface's own turn-end line
A repository that asks for more (notifications.turn: "all") every rung in notifications.rungs
A gate — at <gate> present, or the page's ask has a gate (below) every rung in notifications.rungs, plus § 4's banner

The page's ask decides the bell — authored here, cited everywhere else. A report ask of any
kind reaches the surface's picker in this same turn, its options verbatim (same letters, order,
star); a page is never the only place a question is put. Only an ask whose gate is G1–G5 makes
this jutaisho at <gate>
, with § 4's four parts. An ask from an ask-once-per-run row of
nen/decisions.json gets the picker and rung 1, and no banner.

Rung 1 is a line in a transcript the maintainer is already reading; rungs 2–3 take over the
machine
, so an ordinary turn rings 2–3 only where a repository says so by name. "A turn
that needs nothing" is narrow
— no at <gate> and nothing to say, no commit, no report
rendered, no step refused — and that turn rings nothing at all, not even rung 1.

2. The three rungs — nen/workflow.json → notifications

Key Meaning Default
notifications.rungs which rungs may fire, in order ["push", "os", "sound"]
notifications.sound the macOS system sound for rung 3 Glass
notifications.turn how loud an ordinary turn is: "rung1" or "all", a closed set validated by nen schema check and refused by pointer on anything else "rung1"
Rung What it is Who fires it
1 · push the surface's own turn-end notification the harness, or this skill through the surface; never nen
2 · os an OS notification, title plus one line the Stop hook off § 3's marker; § 5 in-session where there is none
3 · sound an audible cue, notifications.sound the same
— the banner and efforts table nen stop (§ 4)
  • A rung the workflow does not list does not fire — reported as configured.
  • rungs and turn differ: rungs says which exist here at all, turn how many an
    ungated run may use. turn can only withhold, never conjure, and a gate rings
    everything rungs lists regardless of it.
  • nen fires none of rungs 1–3 and only reports rung 1, so --notified is a claim about what
    this skill already did
    — passed only after rung 1 went out.
  • HATSU_ATTENTION=off rings rungs 2 and 3 nowhere and still consumes the marker.

3. The marker — .nen/last-stop.json

The harness Stop hook fires rungs 2–3: the skill writes the marker; the hook reads, fires and
removes it.
The marker is written only when rungs 2–3 are actually owed — a gate,
or notifications.turn: "all" — because a marker on disk is a request to interrupt.

nen stop --who Kurapika --gate <gate> --notified --mark \
  --title "<what happened, one line>" --body "<the ask, one line>" \
  --report-url "<the spiritual-message report's link>" \
  --options <options.json> [--propose-issue <issue.json>] <efforts.md>

The marker is nen's file (nen.stop.mark/v0.2, one options[] entry recommended), never
hand-written
(`PROCESS.md` § History). sound and rungs are not in it — the hook reads them from
nen/workflow.json — and nen stop show validates a marker while nen stop clear consumes one where
there is no hook.

  • .nen/ is git-ignored, and the marker is the only file this skill writes anywhere.
  • A marker older than 10 minutes is stale, decided from mtime and removed without firing —
    never queued or replayed — so it is written whole, in the turn it describes, never amended.
  • who is the persona, never the name the surface introduced itself as.
  • One marker, overwritten: no queue.
  • The hook is hooks/hooks.json's (and the PreToolUse trunk guard): read, never edited or
    installed.

4. A stop — the four parts, all four or it is not a stop

1 · The nen stop banner and efforts table.

nen stop --who Kurapika --gate <G1|G1-M|G2|G3|G4|G5> --notified <efforts.md>

<efforts.md> is the markdown pipe table nen stop --template emits blank. Pass --notified
only if rung 1 actually fired.

2 · The report link — always, everywhere, never an option: the banner line, the chat line, the
marker's reportUrl and the OS notification body. A report is read, not decided, so the picker lists
only decisions that move the workflow. And the page must actually explain this stop:
before the link goes in, verify the rendered HTML carries the readable #g5-blocker content
`spiritual-message` § 4 specifies
(zheref/hatsu#56); lacking it,
re-render with blocker filled and verify again. The stop never restates the page.

3 · Crazy Slots — lettered options, at least three, ⭐ on the recommended decision. Composed from
the session's context and the workflow's state, seeded by the matching row's
preferred[] in nen/decisions.json
and never limited to it. Every option is an executable act
with its exact command and consequence — never a mood, never the report. Exactly one carries
the star, and the line says what would tip it. Every real stop also carries a proposed process
issue
(--propose-issue, Netero's completeness shape) so the next session does not hit the same
stop. A condition whose row is autonomous never reaches this part: it was resolved by its default, and the
turn page says so with the row id.

4 · The question through the surface's own option picker (`docs/SURFACES.md`'s
native option picker row; nen surface capabilities --surface <s> names it) — never a paragraph
ending in a question mark; its options are the marker's, verbatim (§ 1). A DO or MERGE ask's picker never carries the act,
which is the maintainer's outside the session — a MERGE ask exists only for a PR the run did not author
(its own it merges, en § 5, ruling 2026-09-29 (3)).

Only a genuine stop interrupts — the five G5s `docs/WORKFLOW.md` § 4
lists, plus G1/G2/G3/G4 when one is genuinely due. Everything else is a turn bell.

5. Surfaces, and the fallback without a hook

Which side fires rungs 2–3 is one fact: was a hook file placed here?
(`docs/WORKFLOW.md` § 6.) The fallback's commands, sanitising and
read-stderr rules are `docs/surfaces/README.md` § Shared rules.
Here: the fallback is announced every time, an unfired rung is never rendered as fired, the marker
is removed by the side that consumed it
(the hook, when it fired; the fallback, only where no hook
file is placed), and the stop still stands whichever path rang, § 4's four parts being the real bell.
Residue: osascript and afplay are harness shell, [unknown] to nen and refused by nen watch until; osascript's stderr, never its exit code, is the evidence.

Authority

Permitted: write .nen/last-stop.json through nen stop --mark; run nen stop; fire the
workflow's declared rungs; ask through the surface's option picker. Not permitted: any git or
GitHub write, any label, merge or push — jutaisho ends a turn, it never advances one — and no
delegation
(`PROCESS.md` § Authority every phase shares).

Hard limits

  • Never prompts for `aka` — offering it, hinting at it, or ending a turn with
    "shall I push?" makes a human call an agent's suggestion.
  • Never escalates an ordinary turn past rung 1 with no gate and no notifications.turn: "all" —
    no OS notification, no sound, no marker, no banner, no nen stop — and a turn that did nothing
    rings nothing at all
    , not even rung 1.
  • Never renders a stop with fewer than § 4's four parts, with ⭐ on the recommended decision,
    never on the report, and never hands off a G5 link whose page lacks the blocker (hatsu#56).
  • Never passes --notified for a push notification that did not go out, never claims a rung
    fired that did not
    , and never reads osascript's exit 0 as proof it fired (§ 5).
  • Never leaves its own marker behind where no hook file is placed, never writes who from the
    name the surface introduced itself as
    , and never interpolates an unsanitised value into the
    fallback
    (§§ 3, 5).
  • Never suppresses a real stop because a turn bell already rang, and never fires its noise twice.
  • Never rings rungs 2–3 in-session without saying so, and never escalates an ordinary turn just
    because no hook file is placed
    .