feat(skills): inter-session-messaging replaces inter-session-peer-discipline

- New skill inter-session-messaging v1.0.0: SEND canon (address = folder name,
  file naming, frontmatter from = own folder, never write to self) + RECEIVE +
  POLICY (peer != authority, inbox vs board contract)
- Remove inter-session-peer-discipline (merged into inter-session-messaging)
- session-inbox-monitor: reference → inter-session-messaging
- project-bootstrap: Step 9 address-book registration (shared wiki
  concepts/projects-address-book.md)
- dist rebuilt + pruned
This commit is contained in:
2026-08-20 13:24:33 +03:00
parent 37beda7508
commit 3f3a0cdaa9
11 changed files with 195 additions and 70 deletions

View File

@@ -15,7 +15,7 @@ description: >
there; rely on the Stop-hook inbox pickup + Notify/ntfy. Pi (pi-coding-agent)
sessions: a global extension delivers the session's own project inbox
messages (own directory only, see the Pi section). NOT for how to
handle a received message (→ inter-session-peer-discipline) nor the
handle a received message (→ inter-session-messaging) nor the
multi-machine inbox backend (→ cross-machine-inbox design).
---
@@ -37,7 +37,7 @@ for free on session end. Headless sessions skip it and rely on the pull-model
монитор почты», «настрой авто-монитор инбокса», «raise inbox monitor»,
«auto-arm inbox watcher».
- **NOT for** handling the content of a received message (→
`inter-session-peer-discipline`), nor the multi-machine delivery backend (→
`inter-session-messaging`), nor the multi-machine delivery backend (→
`cross-machine-inbox`). This skill is only the monitor's *lifecycle* on one
machine.
@@ -64,7 +64,7 @@ for free on session end. Headless sessions skip it and rely on the pull-model
3. **Do not sweep yourself.** Killing orphans is the hook's job (it runs before
you, at SessionStart, when no other session activity is live).
4. **On an event** (`New inter-session message in inbox: <name>`), read
`.agents/inbox/` and handle the message per `inter-session-peer-discipline`.
`.agents/inbox/` and handle the message per `inter-session-messaging`.
The Stop-hook also force-delivers any inbox messages at end of turn as a
backstop, so nothing is lost if the monitor missed a beat.
5. **Teardown is automatic.** The Monitor dies at session end. Do **not** add a
@@ -95,7 +95,7 @@ for free on session end. Headless sessions skip it and rely on the pull-model
per-inbox-path, not per-session). Known limitation; the deliberate invariant is
"exactly one monitor per inbox per machine." If the first session is still
active, its next Stop-hook turn still delivers inbox mail — only the real-time
paging is lost until it re-raises. See `inter-session-peer-discipline`.
paging is lost until it re-raises. See `inter-session-messaging`.
- **Sweep over-match** → any *live* process whose command line contains both the
sentinel `CLAUDE_INBOX_MONITOR` and the inbox path is killed. At a real
SessionStart no agent/tool processes are running yet, so only the orphaned
@@ -157,7 +157,7 @@ capability, but each session only ever touches its own project's inbox.
hijacking one-shot scripted runs or consuming messages nobody processes.
- **Delivery:** `pi.sendUserMessage(body, { deliverAs: "followUp", triggerTurn:
true })` — paged into the transcript as a user message; the agent handles it
per `inter-session-peer-discipline`. Partial writes (empty file) are skipped
per `inter-session-messaging`. Partial writes (empty file) are skipped
and retried next poll.
- **Failure mode — cross-harness double-pickup:** CC and pi both sweep; the
`.read/` move makes it first-wins, not double-processing. Two live pi sessions
@@ -172,7 +172,7 @@ capability, but each session only ever touches its own project's inbox.
`/clear` never fires SessionEnd.
- **Don't raise more than one monitor.** The hook guarantees a clean slate before
you raise.
- **Don't handle message content here** — that's `inter-session-peer-discipline`.
- **Don't handle message content here** — that's `inter-session-messaging`.
- **Don't rely on this in headless** — use the pull model (Stop-hook + Notify).
Active headless polling, if ever needed, is a separate cron Routine, not this
skill.