gate-protocollisted
Install: claude install-skill m4ttstack/skills
# Gate protocol
One shared protocol for any gated pane or wrapper: publish first, then branch
on attendance. The daemon's gate registry (`rt gate ...`) is the single
arbiter; no per-verb conflict logic belongs anywhere downstream of it.
## Publish
Open before anything that depends on the answer: `rt gate open --subject <s>
--kind <k> --questions <json> [--meta <json>] [--agent <id>] [--pane <id>]
[--nudge <spec>]`. Opening on a subject that already carries an open gate of
the same kind supersedes the old one, so a relaunch after a crash is safe
without a separate cleanup step. After open, branch on attendance below.
## Attendance
Attendance comes from the invocation context, never from asking: the
spawning surface says so (`--spawned-by`), and a human-run verb defaults to
attended.
## Attended (a human's interactive session; default for a human-invoked verb)
1. Present the normal in-pane structured form -- the in-pane experience does
not change. When the gate carries more questions than one form call fits,
chunk the forms, but submit exactly ONE `rt gate answer <id> --answers
<json> --by pane` after the last chunk. A CAS rejection at that point
discards every chunk's answer together, not just the last one.
2. Form answered: `rt gate answer <id> --answers <json> --by pane`. If the
CAS reports an earlier answer, discard the form's answer, say in the pane
in one line which answer won and from where, and proceed on the recorded
one -- the rejection pay