notrest

Take the workshop

Not Rest Inc. · Session Harness · 7 of 8 · The deck, and building your own

The workshop's home is learn.not.rest. The full sixty-slide deck lives there: every stop on this walk at greater depth, plus a page for each of the thirty-two tools and each of the eleven hooks. It is browsable there, and inside this field.

The deck — 60 slidesopen the deck

Build your own

The rest of this stop is the part people actually ask for: how to add to a harness once it is running. Four additions, in rising order of blast radius.

Add a session — a role

There is no role variable. A role is set by prompt, and banked verbatim so it stays auditable afterwards.

text version
There is no role variable. A role is set BY PROMPT:
"You are the DIRECTOR for <project>" as the first message,
or a lane's commission text — which agent-ledger banks to
briefs/ verbatim, so the role is auditable afterwards.

   owner ──► prompt names the role ──► session binds its scope
   director ──► commission (contract + touch-only + NOTREST-GATES)
            ──► builder lane (lessons injected) ──► return + card
            ──► director gates; the card is banked by the hook

For a multi-session arrangement: new-fable-project.sh seeds one
blackboard per lane; fable-director runs them.

Add a session — a new project

Establishing the harness in a new folder is four steps, and an estate at an older protocol upgrades in place.

text version
1. cd the project · /notrest
   establish check   ──► exit 6 (nothing established)
   establish         ──► writes COORD.md + protocol block v3
   establish check   ──► exit 0
2. Open a session there: SessionStart hands the packet.
3. Work. Append ledger lines as the nudge asks.
4. /sessionend, or just close — the cushion covers you.

An estate at an older protocol shows STALE (exit 5) and
upgrades in place on the next establish, byte for byte.

Add a tool — a skill

Each step names the check that goes red if you skip it.

text version
1. skills/<name>/SKILL.md — folder name = front-matter name;
   description carries a /verb trigger      (eval TRIGGER-SANITY)
2. Contract, self-check, finish sections    (eval WORKER-CONTRACT)
3. scripts/<tool>.py, named by the SKILL.md (eval SCRIPT-OWNS-SCANNING)
4. scripts/fixture.sh — exit 0 = all held    (the battery)
5. Every cited path exists                  (eval REFERENCES-CITED)
6. Routable? add the verb to router.sh AND
   oracle's routing table                    (eval ROUTE-TABLE-PARITY)
7. Name it on README, plugin README,
   marketplace, tutorial, the render        (doctor ROSTER PARITY,
                                              RENDER SURFACES)
8. Add its files to the golden release
   surface, say why in CHANGELOG            (eval RELEASE-SURFACE)

Each step names the check that goes red if you skip it.

Add a tool — a hook

A hook is a kernel surface: it must fail open and silent, and it ships only through an adversarial round.

text version
1. hooks/<name>.sh — reads stdin with a bounded wait,
   exits 0 and prints nothing on any failure (fail open, silent),
   honors NOTREST_UNATTENDED=1
2. Wire it in hooks.json under its event, with a timeout on
   the command object
3. Add its arms to the hooks fixture: no-hang with an idle
   stdin, and the real effect with a real payload
4. eval HOOK-CONTRACT and doctor HOOKS go green
5. It is a kernel surface: a refuter round before it ships

Adding to a harness is the same discipline as working inside one: write it, measure it, enforce it — then let the checks tell you what you forgot.