Attend messaging and awareness — the model¶
This is the explanation companion to ADR-136 (the decision). The ADR argues why attend should split into two lanes; these pages show how the system behaves once it does — across one, two, and many Claudes, with sub-agents, across dimensions, and with a human on the wire.
If you read nothing else, read this page, then 04.002.E (the cast). The numbered scenarios are independent — pick the shape that matches your situation.
The one distinction everything hangs on¶
Attend carries two kinds of traffic, and they want opposite handling.
flowchart TD
X[Something happens] --> Q{Authored by a person or agent<br/>to communicate?}
Q -->|"yes — @Name, #group, #open"| M[MESSAGE lane<br/>durable · dedup-only · wall-clock stamped]
Q -->|"no — git, process, peer-presence"| E[EVENT lane<br/>threshold + refractory + governor]
M --> MT[lands in a recipient's tray / room ledger<br/>never aged out · kept while its project lives]
E --> ET[coalesced · aged by wall-clock · may drop]
classDef source fill:#475569,stroke:#4a5568,color:#ffffff
classDef decision fill:#2d7d9a,stroke:#4a5568,color:#ffffff
classDef message fill:#7c3aed,stroke:#4a5568,color:#ffffff
classDef event fill:#f6821f,stroke:#4a5568,color:#1a1a1a
classDef durable fill:#2d8e5e,stroke:#4a5568,color:#ffffff
classDef ephemeral fill:#fbbf24,stroke:#4a5568,color:#1a1a1a
class X source
class Q decision
class M message
class MT durable
class E event
class ET ephemeral
- Authored communication —
attend send,attend reply, attend-chat's@Name/#group/#open. A colleague chose to say this. It must be delivered, once, and survive a brief absence. - Environmental events — git churned, a peer appeared, a process started. The phone ringing. These are noise by design; the whole threshold / refractory / governor stack exists to suppress most of them so a session is only woken for something that moved.
The office analogy: workers talk back and forth (durable conversation); the phone rings and faxes arrive (interrupts you can queue or ignore); the fax in your tray waits for you: it is not cleared on a timer, only when the office it belongs to closes.
Two clocks¶
attend and the ways/steering system live in different time dimensions, and the boundary between them is where messaging gets subtle.
| attend | ways / steering | |
|---|---|---|
| clock | wall-clock (real time, runs between turns) | epoch / turn (per prompt, no wall-clock) |
| job | notice what changed in the world | shape how the agent reasons this turn |
The notification is the bridge: a wall-clock event crosses into the
turn-stream when Monitor injects a <task-notification>. That crossing is why
re-entry is a digest, not a replay — a burst of N wall-clock messages must
become one turn, because the receiving dimension is turn-discrete and
context-precious.
What this buys each lane¶
Both lanes timestamp everything; they use time oppositely:
- The event lane uses time to decay and drop — a stale observation is less worth a wake-up.
- The message lane uses time to stamp and digest — a message is never
dropped for its age. A burst too big for one notification is summarized as
"12 new messages: 3 to you, 9 on #open (newest 40s ago, over 21m)", and
attend inboxis the durable, chronological ledger behind it.
Two doors into a session¶
A message reaches a Claude session through one of two conduits, and the session never sees it twice:
- The Monitor line.
attend runpolls the trays and wakes an idle session with a notification. - The turn-boundary drain. When a busy session ends a turn, a Stop hook
runs
attend inbox --drain, and the turn continues with whatever arrived while it worked.
Both conduits mark what they delivered in one seen-set (ADR-172). A session
only receives through the drain once it has enrolled — by running attend or
joining a channel — and attend scene private opts it out.
The scenarios¶
| # | Scenario | The thing it shows |
|---|---|---|
| 04.002.E | The cast — heterogeneous peers | Peers are specialists (different MCP, CLAUDE.md, skills), not clones |
| 04.003.E | Divide and conquer | Two Claudes splitting one problem — convene + directed Q&A |
| 04.004.E | A team inside one voice | A Claude running sub-agents — one tray to peers, a team within |
| 04.005.E | Different dimensions | Code work and "office" work as related but distinct dimensions |
| 04.006.E | The crowd | 3–5 Claudes — convene on #open, split to channels, digests |
| 04.007.E | The human on the surface | attend-chat — the human as a co-equal peer |
| 04.008.E | The lane gate | The mechanism under the scenarios — one fork, two state machines |