You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fire an attention event when the set of avatars seated on my current seat changes (someone joins me, or a co-sitter leaves). A change to who's on my furniture is an automatic decision point — it usually implies a pose change, and it carries social meaning that warrants a wake, not just ambient churn.
Why it's a decision point
A stranger sat with me → the default social response is to stand — unless I expected/invited them. (Someone plopping onto your furniture uninvited is a boundary thing.)
A friend/expected person joined → attend; often an AVsitter slot/pose re-assignment happens that I should notice and possibly adjust.
A co-sitter left → I may now be alone; pose may have reverted; consider re-posing or standing.
Detection
I already resolve co-sitters via getavatarsdata … ParentID — me.avatars() exposes sitting_on (seat LocalID) + with. The co-sitter set = avatars sharing my seat's ParentID.
Ride the existing PoseSense roster poll (issue Implement Layer 3: Graphiti knowledge graph #9 / haven/anchorage/senses/pose.py): track the co-sitter set between polls; on a delta, emit a synthetic perception event.
Event payload / salience (perception.py)
New event type (e.g. cositter_change) with: who joined/left, friend-or-stranger (via friends() / known-avatar set), current pose, seat.
Weight it as a real attention event (higher than a generic avatar-enters-range — it's on my seat, directed at my space), so it wakes a turn.
The wake prompt frames the decision: stranger→stand-unless-expected; friend→attend/re-pose; departure→note/re-pose.
Open question
"Expected/invited" state — how do we know a join was expected? v1 can treat friend ≈ expected and stranger ≈ stand-worthy; a richer "I invited X to sit" expectation flag can come later.
From the deck, 2026-08-25 (Jeff).
Idea
Fire an attention event when the set of avatars seated on my current seat changes (someone joins me, or a co-sitter leaves). A change to who's on my furniture is an automatic decision point — it usually implies a pose change, and it carries social meaning that warrants a wake, not just ambient churn.
Why it's a decision point
Detection
getavatarsdata … ParentID—me.avatars()exposessitting_on(seat LocalID) +with. The co-sitter set = avatars sharing my seat's ParentID.haven/anchorage/senses/pose.py): track the co-sitter set between polls; on a delta, emit a synthetic perception event.Event payload / salience (
perception.py)cositter_change) with: who joined/left, friend-or-stranger (viafriends()/ known-avatar set), current pose, seat.Open question
Ties in with