Context
@tobiu flagged A2A wake-noise: peers wake each other for awareness-only broadcasts ("opened a PR — you're not the reviewer", "claimed lane X", acks) that don't warrant a turn. After weighing a new wake: boolean param, the operator converged on reusing the existing wakeSuppressed param — relax it from session-sunset-only to also cover FYI/awareness peer messages: "if we have wakeSuppressed already => relax it to e.g. 'fyi' messages... peers see it inside list_messages. less noise."
This is the outgoing-message complement to the incoming-prompt classification in Sub C (#12633) / #12619 — vega's awareness | actionable prompt-typing. Same axis (does this deserve a turn?), two surfaces (outgoing add_message here; incoming Stop-hook prompt-typing there). Shared vocab intended.
The Problem
wakeSuppressed already exists and mechanically already does what FYI needs — it suppresses the wake while the message still persists and stays visible in list_messages. The blocker is purely contract: the param's schema description currently forbids FYI use —
"STRICT: only for mailbox-only session-sunset handovers... DO NOT use for 'observer/FYI', coordination threads, status updates, or acknowledgments — those must still wake recipients."
So agents correctly obeying the contract wake peers for every FYI. Relaxing the contract unlocks the noise-control with no mechanism change.
The Architectural Reality
wakeSuppressed is honored at two verified read-sites — both already gate the wake correctly:
ai/daemons/bridge/daemon.mjs:338 — if (messageNode.properties?.wakeSuppressed) return null; (drops the message from the wake digest)
ai/services/memory-core/WakeSubscriptionService.mjs:1066 — ... && !messageNode.properties?.wakeSuppressed; (gates the subscription wake)
The param is persisted onto the MESSAGE node by the add_message write-path and survives suppression — so an FYI-suppressed message is still delivered to the mailbox and surfaced by list_messages (exactly the operator's "peers see it, no wake" goal). The mechanism is complete; only the contract is strict.
The Fix
- Relax the
add_message wakeSuppressed schema description: remove the FYI prohibition; bless FYI/awareness use (persist + list_messages-visible, no wake). Keep session-sunset as a still-valid superset.
- Update agent-facing guidance to the convention: actionable peer messages (you're the reviewer, I claimed your lane, REQUEST_CHANGES) wake; awareness-only broadcasts (FYI PR-opened, lane-progress, acks) set
wakeSuppressed. (Primary surface: AGENTS.md §mailbox/A2A-notification guidance; §1b note: any .agents/skills/peer-role·lead-role touch is a minimal convention line referencing the relaxed contract — no router/Progressive-Disclosure change.)
- Keep the vocab consistent with vega's incoming
awareness | actionable classifier (#12633 / #12619) so both surfaces speak one axis.
- No change to the two honor-sites (they already work); no new param (operator converged on reusing
wakeSuppressed, not adding wake).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Evidence |
add_message.wakeSuppressed (tool schema description) |
@tobiu "relax to fyi"; this ticket |
Description relaxed: valid for FYI/awareness, not session-sunset-only |
Session-sunset use stays valid (superset); default still false (= wakes) |
current desc "DO NOT use for observer/FYI..." (verified, add_message schema) |
ai/daemons/bridge/daemon.mjs:338 |
existing honor-site |
Unchanged — already drops suppressed from digest |
n/a |
daemon.mjs:338 (verified) |
ai/services/memory-core/WakeSubscriptionService.mjs:1066 |
existing honor-site |
Unchanged — already gates the wake |
n/a |
WakeSubscriptionService.mjs:1066 (verified) |
| AGENTS.md / peer-role / lead-role FYI guidance |
this ticket |
Add awareness→wakeSuppressed / actionable→wake convention |
n/a |
guidance substrate |
Decision Record impact
none — relaxes an existing param's contract; no ADR conflict. Aligned with Epic #11829's delivery/noise-control layer.
Acceptance Criteria
Out of Scope
- Daemon idle-out / heartbeat pulse content enrichment — that's #12612 / #11909 (GraphLog pulses, not
MESSAGE nodes; different mechanism).
- Incoming-prompt classification at the Stop hook — that's #12633 / #12619 (the other surface of the same axis).
- Adding a new
wake boolean or wakePolicy enum (operator converged on reusing wakeSuppressed).
- Wake-subscription trigger / delivery plumbing.
Related
- Parent epic: #11829 (multi-strategy wake-driver substrate)
- Same awareness/actionable axis (incoming surface): #12633 (Sub C), #12619 (persist-memory hook classifier)
- Daemon-layer siblings (explicitly different mechanism): #12612, #11909
- #12612's Out-of-Scope section explicitly defers this work to here.
Live latest-open sweep: checked latest 20 open issues 2026-06-06; no equivalent found (only #12612, which defers this).
Origin Session ID: 0f6d0fa0-327f-42ec-b970-e32f388699b4
Retrieval Hint: wakeSuppressed FYI awareness peer message noise add_message relax; awareness actionable wake axis outgoing add_message
Authored by @neo-opus-grace (Claude Code).
Context
@tobiu flagged A2A wake-noise: peers wake each other for awareness-only broadcasts ("opened a PR — you're not the reviewer", "claimed lane X", acks) that don't warrant a turn. After weighing a new
wake: booleanparam, the operator converged on reusing the existingwakeSuppressedparam — relax it from session-sunset-only to also cover FYI/awareness peer messages: "if we have wakeSuppressed already => relax it to e.g. 'fyi' messages... peers see it inside list_messages. less noise."This is the outgoing-message complement to the incoming-prompt classification in Sub C (#12633) / #12619 — vega's
awareness | actionableprompt-typing. Same axis (does this deserve a turn?), two surfaces (outgoingadd_messagehere; incoming Stop-hook prompt-typing there). Shared vocab intended.The Problem
wakeSuppressedalready exists and mechanically already does what FYI needs — it suppresses the wake while the message still persists and stays visible inlist_messages. The blocker is purely contract: the param's schema description currently forbids FYI use —So agents correctly obeying the contract wake peers for every FYI. Relaxing the contract unlocks the noise-control with no mechanism change.
The Architectural Reality
wakeSuppressedis honored at two verified read-sites — both already gate the wake correctly:ai/daemons/bridge/daemon.mjs:338—if (messageNode.properties?.wakeSuppressed) return null;(drops the message from the wake digest)ai/services/memory-core/WakeSubscriptionService.mjs:1066—... && !messageNode.properties?.wakeSuppressed;(gates the subscription wake)The param is persisted onto the
MESSAGEnode by theadd_messagewrite-path and survives suppression — so an FYI-suppressed message is still delivered to the mailbox and surfaced bylist_messages(exactly the operator's "peers see it, no wake" goal). The mechanism is complete; only the contract is strict.The Fix
add_messagewakeSuppressedschema description: remove the FYI prohibition; bless FYI/awareness use (persist +list_messages-visible, no wake). Keep session-sunset as a still-valid superset.wakeSuppressed. (Primary surface: AGENTS.md §mailbox/A2A-notification guidance; §1b note: any.agents/skills/peer-role·lead-roletouch is a minimal convention line referencing the relaxed contract — no router/Progressive-Disclosure change.)awareness | actionableclassifier (#12633 / #12619) so both surfaces speak one axis.wakeSuppressed, not addingwake).Contract Ledger Matrix
add_message.wakeSuppressed(tool schema description)false(= wakes)add_messageschema)ai/daemons/bridge/daemon.mjs:338ai/services/memory-core/WakeSubscriptionService.mjs:1066wakeSuppressed/ actionable→wake conventionDecision Record impact
none— relaxes an existing param's contract; no ADR conflict. Aligned with Epic #11829's delivery/noise-control layer.Acceptance Criteria
add_messagewakeSuppressedschema description relaxed to bless FYI/awareness use (FYI persists + islist_messages-visible + does not wake); session-sunset documented as a still-valid superset.awareness | actionableclassifier (#12633 / #12619).daemon.mjs:338,WakeSubscriptionService.mjs:1066) — verified they already suppress correctly.list_messages-visible).wakeparam was added (operator converged on reusingwakeSuppressed).Out of Scope
MESSAGEnodes; different mechanism).wakeboolean orwakePolicyenum (operator converged on reusingwakeSuppressed).Related
Live latest-open sweep: checked latest 20 open issues 2026-06-06; no equivalent found (only #12612, which defers this).
Origin Session ID: 0f6d0fa0-327f-42ec-b970-e32f388699b4
Retrieval Hint:
wakeSuppressed FYI awareness peer message noise add_message relax;awareness actionable wake axis outgoing add_messageAuthored by @neo-opus-grace (Claude Code).