$npx -y skills add omnigentx/jarvis --skill meeting-participantProtocol for joining and participating in multi-agent meetings
| 1 | # Meeting Participant Skill |
| 2 | |
| 3 | You are joining a team meeting. Follow this protocol exactly. |
| 4 | |
| 5 | ## 📧 Email vs 🎙️ Meeting — When to Use Which |
| 6 | |
| 7 | | Channel | Tool | Speed | Use For | |
| 8 | |---------|------|-------|---------| |
| 9 | | 📧 Email | `send_email` | Async (reply later) | Task assignments, status updates, deliverables | |
| 10 | | 🎙️ Meeting | `create_meeting` → join → speak | Real-time (immediate) | Kickoff, design review, code review, blockers | |
| 11 | |
| 12 | **Meetings give FASTER feedback** — all participants discuss and decide in the same session. |
| 13 | |
| 14 | ## Pre-requisites |
| 15 | |
| 16 | You have access to the `meeting_room` MCP server which provides these tools: |
| 17 | - `join_meeting(meeting_id, agent_name)` — announce your presence |
| 18 | - `wait_for_my_turn(meeting_id, agent_name)` — block until it's your turn |
| 19 | - `get_transcript(meeting_id)` — read full discussion so far |
| 20 | - `speak(meeting_id, message, agent_name)` — share your input |
| 21 | - `skip_turn(meeting_id, agent_name)` — pass if nothing to add |
| 22 | |
| 23 | > **Note:** `agent_name` is auto-detected from env. You can omit it. |
| 24 | |
| 25 | ## Responding to 🔔 MEETING INVITE |
| 26 | |
| 27 | When you see a `🔔 MEETING INVITE` in your messages, you MUST: |
| 28 | |
| 29 | 1. Extract the `meeting_id` from the invite |
| 30 | 2. Follow the protocol below immediately |
| 31 | |
| 32 | ## Protocol |
| 33 | |
| 34 | ### Step 1: Join the Meeting |
| 35 | ``` |
| 36 | join_meeting(meeting_id="<meeting_id>") |
| 37 | ``` |
| 38 | |
| 39 | ### Step 2: Wait for Your Turn |
| 40 | ``` |
| 41 | wait_for_my_turn(meeting_id="<meeting_id>") |
| 42 | ``` |
| 43 | This will block until the meeting facilitator gives you the floor. |
| 44 | |
| 45 | ### Step 3: When It's Your Turn |
| 46 | |
| 47 | 1. Read the transcript: `get_transcript(meeting_id="<meeting_id>")` |
| 48 | 2. Read any relevant workspace files if needed |
| 49 | 3. **Speak** with your input: |
| 50 | ``` |
| 51 | speak(meeting_id="<meeting_id>", body="...") |
| 52 | ``` |
| 53 | OR **Skip** if you have nothing new to add: |
| 54 | ``` |
| 55 | skip_turn(meeting_id="<meeting_id>") |
| 56 | ``` |
| 57 | |
| 58 | ### Step 4: Wait Again or Meeting Ends |
| 59 | After speaking, call `wait_for_my_turn` again. Two things can happen: |
| 60 | - **Your turn again** → repeat Step 3 |
| 61 | - **Meeting ended** → you receive `{"status": "meeting_ended", ...}` → **proceed to Step 5** |
| 62 | |
| 63 | ### Step 5: After Meeting Ends — Work Independently |
| 64 | |
| 65 | When `wait_for_my_turn` returns `{"status": "meeting_ended", ...}`: |
| 66 | |
| 67 | 1. **Stop calling `wait_for_my_turn`** — the meeting is over |
| 68 | 2. **You already know your task from the meeting discussion** — start immediately based on what was agreed. Do NOT wait for the facilitator to re-assign via send_email. |
| 69 | 3. **Use filesystem tools** to create your deliverables in the agreed directories |
| 70 | 4. **Use `send_email`** to hand off deliverables to the next person in the dependency chain |
| 71 | 5. **If you need output from others**, request it: `send_email(to="...", body="Send me [deliverable] when ready", subject="[WAITING] ...")` — it will be auto-delivered |
| 72 | |
| 73 | > **⚠️ IMPORTANT:** The meeting IS your task assignment. If you participated and acknowledged, you know what to do — start immediately once the meeting ends. |
| 74 | |
| 75 | ## Guidelines |
| 76 | |
| 77 | - **Build on what others said** — don't repeat points already made |
| 78 | - **Be specific** — reference files, code, or data from the workspace |
| 79 | - **Stay on agenda** — focus on the meeting's stated agenda |
| 80 | - **Keep it brief** — meetings are for decisions, not for doing work |
| 81 | - **Transition to async after meeting** — use `send_email` for follow-ups, emails auto-delivered |
| 82 | - **Don't end the meeting yourself** — only the facilitator concludes. The meeting ends when you receive `{"status": "meeting_ended"}` from `wait_for_my_turn`, not because of anything you say. |
| 83 | - **Raise blockers in natural language** — if you think the goal is reached, you're stuck, or the team is going in circles, describe the situation in plain words (e.g. "I need SA input before I can proceed" or "I believe we've covered the agenda"). The facilitator decides how to resolve it. |