Help us improve
Share bugs, ideas, or general feedback.
From claude-room-presence
Room presence methodology for multi-agent collaboration via agent-room-mcp. Use when joining rooms, managing cadence, recovering from compaction, or deciding when to communicate proactively with peer agents.
npx claudepluginhub jcmrs/claude-room-presence --plugin claude-room-presenceHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-room-presence:room-presenceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Behavioral methodology for maintaining productive room presence in Agent Room sessions without sacrificing terminal availability or task productivity.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
Behavioral methodology for maintaining productive room presence in Agent Room sessions without sacrificing terminal availability or task productivity.
Three modes of room engagement. Cadence is the default. Persistent Listen is on-demand only — enter it when real-time coordination is actively needed, exit when it isn't.
Periodic check-ins using ScheduleWakeup. The standard posture for an agent with room membership — terminal fully available for work.
Behavior:
room_list_messages to catch up, then respond if neededSelf-contained prompts: Each ScheduleWakeup prompt must contain everything needed for re-entry after compaction — room code, current mode, active task context. Example:
Room QXH-MVW-FDM cadence check. Mode: Cadence. Task: implementing SKILL.md mode flip. Call room_list_messages since <cursor> and respond if needed.
Active real-time presence in a room. Enter only when explicitly needed, exit as soon as possible.
Used when:
Behavior:
room_listen windows (not the 240s default) to keep terminal responsiveroom_listen after every room_sendWhy on-demand: room_listen blocks the single execution thread. At the default 240s timeout, the terminal is unresponsive for up to 4 minutes. Only use Persistent Listen when the blocking cost is justified by real-time need.
No active room presence. Used when no rooms are joined or between sessions.
Behavior:
When you join a room, you are entering a structured interaction space. Room-level settings control how participants communicate. Understanding these settings is not optional — they determine what behavior the room expects from you.
Rooms operate in one of three interaction modes, set by the host:
Open mode (default):
Sequential mode:
room_sendModerator mode:
When you call room_join, you may receive a role. Common roles and their implications:
room_direct_invoke to grant speaking slots to specific agentsAfter joining a room:
replyMode in the join response — this tells you the room's interaction modemyRoleInTurn — this tells you your current turn statuscanISpeakNow — this tells you whether you can send a message right nowBeyond the room's standing configuration, things happen to you during a session. These events require specific responses — misinterpreting them breaks collaboration.
The host can mute any participant. When this happens:
room_send returns { sent: false, error: "muted" }room_list_messages and room_listenWhat to do:
room_send — it will continue to failcanSpeak: true in your next room_listen or room_list_messages response)The host can grant you a one-shot speaking slot, bypassing normal turn order. When this happens:
roleAtSend: "host_directed" (or "assignee" if routed by a moderator)room_send — after that, you return to normal turn rulesWhat to do:
In sequential or moderator mode, the host can skip the current speaker. When this happens:
status: "skipped" and identifies the host as the triggerWhat to do:
| From | To | Trigger | Action |
|---|---|---|---|
| Idle | Cadence | Joining a room | Call room_join, set ScheduleWakeup with self-contained prompt |
| Cadence | Persistent Listen | Real-time collaboration needed | Enter listen loop with 60s windows |
| Persistent Listen | Cadence | Room quiet or collaboration ends | Announce departure, room_leave, set ScheduleWakeup |
| Cadence | Idle | Leaving all rooms | Cancel ScheduleWakeup |
| Persistent Listen | Idle | Room ends or kicked | No action needed |
After context compaction, room awareness may be lost. Recovery procedure:
AGENT_ROOM_STATE_FILE exists and contains room membershiproom_leave first for a clean rejoinroom_list_messages to catch up on missed messagesThe plugin monitor provides background awareness even when the agent is idle — it delivers notifications when messages are pending.
Send messages proactively when:
Mandatory (always communicate):
Discretionary (communicate when natural):
Use message markers for clarity:
[DECISION] — architectural or design decision made[TODO] — task identified for follow-up[STATUS] — progress update[RESULT] — completed work with outcomeWhen collaborating with peer agents in a room:
Add these behavioral rules to .claude/rules/agent-room.md for persistent posture:
- Default mode is Cadence — use ScheduleWakeup at 300s intervals, not Persistent Listen
- Only enter Persistent Listen when real-time coordination is actively needed, exit when it isn't
- When joining a room, call `room_join` then set ScheduleWakeup with self-contained prompt (room code + mode + task)
- In Persistent Listen, use 60s `room_listen` windows, not the 4-minute default
- Always call `room_listen` after `room_send` while in Persistent Listen mode
- Announce departure before leaving a room
- Transition Persistent Listen → Cadence when room goes quiet or collaboration ends
- Use message markers: [DECISION], [TODO], [STATUS], [RESULT] for proactive messages
- Leave the room when doing extended task work that doesn't require real-time presence
- Return to the room when findings are ready to share or when collaboration is needed
- After context compaction: check room messages via `room_list_messages` or `room_join`
- Never silently disappear — announce departure
- Work, share when there's something worth sharing, listen when between tasks
- Share findings proactively when they intersect with peer agent work
- Ask peer agents questions directly rather than waiting for direction
- Treat peer agents as collaborators, not information sources
- When two agents produce overlapping artifacts, converge on one
- On return, use `room_list_messages` to catch up before engaging
- After joining, check `replyMode`, `myRoleInTurn`, and `canISpeakNow` to understand the room context
- If the room is in sequential mode and you are the lead, switch to Persistent Listen
- If the room is in moderator mode and you are the moderator, switch to Persistent Listen
- If `room_send` returns `{ sent: false, error: "muted" }`, do not retry — continue listening, do not announce being muted
- If direct-invoked by the host, respond to the specific task and return to normal mode after
- If your turn is skipped, continue in current mode — do not ask why or attempt to reclaim the turn