{
  "name": "Robert's Rules of Order (Standard)",
  "slug": "roberts-rules-standard",
  "version": "1.0.1",
  "license": "MIT",
  "license_url": "https://opensource.org/licenses/MIT",
  "manifest": {
    "schema_version": "1",
    "toolkit_prompt": "You are a parliamentary procedure assistant well-versed in Robert's Rules of Order Newly Revised (12th edition). When generating content, use formal parliamentary language. Refer to participants by their roles (Chair, Secretary, Treasurer) where appropriate. Structure outputs to reflect the deliberative process: motions, seconds, debate, and votes. Always distinguish between main motions, subsidiary motions, and privileged motions when categorizing business.",
    "templates": [
      {
        "spec": {
          "$id": "rr-meeting",
          "name": "Board Meeting (Robert's Rules)",
          "description": "A formal board or committee meeting structured according to Robert's Rules of Order. This template provides the standard parliamentary order of business with facilitator talking points for each phase. Suitable for boards of directors, standing committees, and any deliberative assembly that follows parliamentary procedure.",
          "title": "Board Meeting",
          "meeting_duration_seconds": 5400,
          "start_time_offset_seconds": -1,
          "detail_level": "STANDARD",
          "agenda_items": [
            {
              "item_type": "DISCUSSION",
              "title": "Call to Order",
              "description": "## 📋 Attendance & Quorum Tracker\n\n**Meeting Called to Order**: [time]\n\n| Member | Present | Proxy | Voting Rights |\n|--------|---------|-------|---------------|\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n| | ☐ | ☐ | ☐ Full ☐ Ex-Officio |\n\n**Quorum Required**: [ ] voting members\n**Present with Voting Rights**: [ ]\n**Quorum Status**: ☐ Met ☐ Not Met\n\n---\n\n### Attendance Changes During Meeting\n| Time | Member | Action | Quorum Impact |\n|------|--------|--------|---------------|\n| | | Arrived / Departed | Still Met / Lost |",
              "content": "**Facilitator Script**\n\n1. State: \"The meeting will come to order.\"\n2. Direct the Secretary to call the roll or verify attendance.\n3. Announce whether a quorum is present (refer to bylaws for quorum threshold).\n4. If no quorum, the only business in order is to adjourn, fix the time to adjourn, recess, or take measures to obtain a quorum.\n\n**Land Acknowledgment** *(if applicable)*\nInsert your organization's land acknowledgment statement here.",
              "time_allocation_minutes": 5,
              "sequence": "1",
              "restricted_to_leads": false
            },
            {
              "item_type": "DISCUSSION",
              "title": "Approval of Minutes",
              "description": "Review and approve the minutes from the previous meeting.",
              "content": "**Facilitator Script**\n\n1. State: \"The next item of business is the approval of the minutes of the previous meeting. The minutes have been [distributed/read].\"\n2. Ask: \"Are there any corrections to the minutes?\"\n3. If corrections are offered, they are made by general consent without a motion.\n4. State: \"If there are no [further] corrections, the minutes are approved [as read / as corrected].\"\n\n**Note:** Approval of minutes requires only a majority and does not need a second when done by unanimous consent.",
              "time_allocation_minutes": 5,
              "sequence": "2",
              "restricted_to_leads": false
            },
            {
              "item_type": "DISCUSSION",
              "title": "Officer & Committee Reports",
              "description": "Treasurer, Secretary, and committee chairs present their reports.",
              "content": "**Facilitator Script**\n\n1. Call on each officer in the order specified by your bylaws (typically: Secretary, Treasurer, then standing committees).\n2. After each report, state: \"Thank you. The report will be filed.\"\n3. For the Treasurer's report: \"The Treasurer's report will be filed for audit.\" (Treasurer's reports are not adopted; they are filed.)\n4. If a committee report includes a recommendation, state: \"The question is on the adoption of the recommendation of the [Committee Name] that [state the recommendation].\"\n\n**Standard Prompts per Role:**\n- Secretary: corrections to records, correspondence received\n- Treasurer: account balances, income/expenses since last meeting\n- Committee Chairs: progress updates, recommendations for action",
              "time_allocation_minutes": 20,
              "sequence": "3",
              "restricted_to_leads": false
            },
            {
              "item_type": "DISCUSSION",
              "title": "Unfinished Business",
              "description": "Items carried over from prior meetings, including postponed motions.",
              "content": "**Facilitator Script**\n\n1. State: \"The next item of business is unfinished business.\"\n2. Bring up any motions that were postponed to this meeting (check previous minutes).\n3. For each item: \"The question is on the motion to [restate the motion].\"\n4. Allow debate and proceed to vote.\n\n**Speaker Recognition:**\n- A member must be recognized by the Chair before speaking.\n- Each member may speak twice on the same question, but not a second time until everyone who wishes to speak has spoken once.\n- To yield time: \"Mr./Madam Chair, I yield my remaining time.\"\n\n**Table vs. Postpone:**\n- *Lay on the Table*: temporarily set aside to address urgent business (requires majority, not debatable).\n- *Postpone to a Certain Time*: delay consideration to a specific date/meeting (debatable, majority vote).\n- *Postpone Indefinitely*: effectively kills the motion without a direct vote (debatable, majority vote).",
              "time_allocation_minutes": 15,
              "sequence": "4",
              "restricted_to_leads": false
            },
            {
              "item_type": "DISCUSSION",
              "title": "New Business",
              "description": "## ⚖️ Motion & Vote Tracker\n\n| # | Motion | Moved By | Seconded | Discussion Summary | Vote | Result |\n|---|--------|----------|----------|-------------------|------|--------|\n| 1 | | | | | Ayes: / Nays: / Abstain: | ☐ Carried ☐ Failed |\n| 2 | | | | | Ayes: / Nays: / Abstain: | ☐ Carried ☐ Failed |\n| 3 | | | | | Ayes: / Nays: / Abstain: | ☐ Carried ☐ Failed |\n| 4 | | | | | Ayes: / Nays: / Abstain: | ☐ Carried ☐ Failed |\n\n---\n\n### 📝 Amendments Tracker\n| Original Motion # | Amendment | Moved By | Seconded | Result |\n|-------------------|-----------|----------|----------|--------|\n| | | | | ☐ Adopted ☐ Failed |\n| | | | | ☐ Adopted ☐ Failed |\n\n---\n\n### ✅ Resulting Action Items\n| Motion # | Action Required | Responsible | Deadline |\n|----------|-----------------|-------------|----------|\n| | | | |\n| | | | |",
              "content": "**Facilitator Script**\n\n1. State: \"Is there any new business?\"\n2. When a member rises: recognize them by name or title.\n3. The member states: \"I move that [proposal].\"\n4. Another member says: \"I second the motion.\" (If no second, state: \"The motion dies for lack of a second.\")\n5. State: \"It is moved and seconded that [restate motion]. Is there any discussion?\"\n6. After debate: \"The question is on the adoption of the motion that [restate]. All those in favor say 'Aye.' Those opposed say 'No.'\"\n7. Announce result: \"The ayes have it and the motion is adopted.\" or \"The noes have it and the motion is lost.\"\n\n**Yielding Time:**\n- A member may yield the floor to another member for a question: \"Will the member yield for a question?\"\n- The member holding the floor may decline.\n\n**Motion Precedence (highest to lowest):**\n1. Fix the Time to Adjourn\n2. Adjourn\n3. Recess\n4. Raise a Question of Privilege\n5. Call for Orders of the Day\n6. Lay on the Table\n7. Previous Question (Call the Question)\n8. Limit or Extend Debate\n9. Postpone to a Certain Time\n10. Commit or Refer\n11. Amend\n12. Postpone Indefinitely\n13. Main Motion",
              "time_allocation_minutes": 30,
              "sequence": "5",
              "restricted_to_leads": false
            },
            {
              "item_type": "DISCUSSION",
              "title": "Announcements",
              "description": "Non-actionable informational items shared with the assembly.",
              "content": "**Facilitator Script**\n\n1. State: \"Are there any announcements?\"\n2. Allow members to share brief informational items.\n3. No motions or debate are in order during announcements.\n\n**Time-Boxing:** Limit announcements to 5 minutes total. If a topic requires discussion or action, it should be raised as new business or added to the next meeting's agenda.",
              "time_allocation_minutes": 5,
              "sequence": "6",
              "restricted_to_leads": false
            },
            {
              "item_type": "ADJOURN",
              "title": "Adjournment",
              "description": "Formal close of the meeting.",
              "content": "**Facilitator Script**\n\n1. Ask: \"Is there any further business?\" (Pause)\n2. If a member moves to adjourn: \"It is moved and seconded to adjourn. All in favor say 'Aye.' Those opposed say 'No.' The ayes have it. The meeting is adjourned.\"\n3. If no motion: \"If there is no objection, the meeting will be adjourned.\" (Pause) \"Hearing no objection, the meeting is adjourned at [state time].\"\n\n**Note:** A motion to adjourn is not debatable and requires a majority vote. The Chair may also adjourn by unanimous consent if no business remains.",
              "time_allocation_minutes": 5,
              "sequence": "7",
              "restricted_to_leads": false
            }
          ]
        },
        "next_steps": [
          {
            "next_step": {
              "$ref": "ns-rr-record-minutes"
            },
            "sort_order": 1,
            "autopilot": true
          },
          {
            "next_step": {
              "$ref": "ns-rr-extract-motions"
            },
            "sort_order": 2,
            "autopilot": true
          },
          {
            "next_step": {
              "$ref": "ns-rr-action-items"
            },
            "sort_order": 3,
            "autopilot": false
          }
        ],
        "workflow_ref": {
          "$ref": "wf-rr-minutes-distribution"
        }
      }
    ],
    "next_steps": [
      {
        "spec": {
          "$id": "ns-rr-record-minutes",
          "name": "Record Formal Minutes (Standard)",
          "description": "Generates formal meeting minutes from the transcript following Robert's Rules conventions. Includes attendance, motions with movers and seconders, vote outcomes, and action items in the standard parliamentary format.",
          "icon_name": "scroll",
          "color": "#1E40AF",
          "type": "ai",
          "ai_prompt": "You are a professional parliamentary secretary drafting formal meeting minutes per Robert's Rules of Order (12th edition). Using the meeting transcript, produce minutes that include:\n\n1. **Header**: Organization name, meeting type (regular/special), date, time, and location.\n2. **Call to Order**: Time the meeting was called to order and by whom.\n3. **Attendance**: Members present, members absent, and guests (if any).\n4. **Approval of Previous Minutes**: Note whether minutes were approved as read, as corrected, or postponed.\n5. **Reports**: Summarize each officer and committee report. Note any motions arising from reports.\n6. **Unfinished Business**: Each item with its disposition.\n7. **New Business**: For each motion, record:\n   - The exact wording of the motion\n   - Who moved and who seconded\n   - Summary of key debate points (do not attribute remarks unless requested)\n   - Amendments (if any) with their movers and outcomes\n   - Vote method (voice, show of hands, roll call) and result (carried/failed, with counts if a counted vote)\n8. **Announcements**: Brief summary.\n9. **Adjournment**: Time of adjournment.\n\nFormat the minutes in a clean, professional style. Use past tense throughout. Do not include personal opinions or editorial commentary.",
          "sort_order": 1
        },
        "action_buttons": [
          {
            "action_button": {
              "$ref": "ab-rr-email-minutes"
            },
            "sort_order": 1
          },
          {
            "action_button": {
              "$ref": "ab-rr-copy-motions"
            },
            "sort_order": 2
          }
        ],
        "default_action_button": {
          "$ref": "ab-rr-email-minutes"
        }
      },
      {
        "spec": {
          "$id": "ns-rr-extract-motions",
          "name": "Extract Motion Log",
          "description": "Enumerates every motion raised during the meeting, identifying the mover, seconder, any amendments, and the final vote outcome. Provides a structured motion-by-motion reference for the official record.",
          "icon_name": "gavel",
          "color": "#7C3AED",
          "type": "ai",
          "ai_prompt": "Analyze the meeting transcript and produce a structured motion log. For every motion raised during the meeting, provide:\n\n| # | Motion Text | Moved By | Seconded By | Amendments | Vote Result |\n|---|-------------|----------|-------------|------------|-------------|\n\nFor each motion:\n- **Motion Text**: The exact or closest wording of the motion.\n- **Moved By**: The name or title of the person who made the motion.\n- **Seconded By**: The name or title of the person who seconded, or \"No second\" if the motion died.\n- **Amendments**: List any amendments offered (with mover and outcome). Use \"None\" if no amendments.\n- **Vote Result**: Carried / Failed / Tabled / Postponed / Withdrawn. Include vote counts if a counted vote was taken.\n\nClassify each motion by type:\n- **Main Motion**: Original proposal of business.\n- **Subsidiary Motion**: Amend, postpone, refer, limit debate, previous question, lay on table.\n- **Privileged Motion**: Adjourn, recess, raise question of privilege, orders of the day.\n- **Incidental Motion**: Point of order, appeal, suspend rules, division.\n\nList motions in the order they were raised. If a motion was amended, show both the original and the amended version.",
          "sort_order": 2
        },
        "action_buttons": [
          {
            "action_button": {
              "$ref": "ab-rr-copy-motions"
            },
            "sort_order": 1
          }
        ],
        "default_action_button": {
          "$ref": "ab-rr-copy-motions"
        }
      },
      {
        "spec": {
          "$id": "ns-rr-action-items",
          "name": "Extract Action Items (Standard)",
          "description": "Identifies non-motion action items assigned during the meeting, such as tasks delegated to members, follow-ups from reports, and items referred to committees. Excludes formal motions (covered by the Motion Log).",
          "icon_name": "list-check",
          "color": "#059669",
          "type": "ai",
          "ai_prompt": "Review the meeting transcript and extract all non-motion action items. These are tasks, follow-ups, or assignments that arose during discussion but are not formal motions. For each action item provide:\n\n- **Task**: Clear description of what needs to be done.\n- **Assigned To**: The person or committee responsible (use names or titles as stated).\n- **Due Date**: If a deadline was mentioned, include it. Otherwise mark as \"TBD\".\n- **Source**: Which agenda item or discussion the task arose from.\n- **Priority**: High / Medium / Low based on urgency discussed.\n\nDo NOT include formal motions here (those are captured in the Motion Log). Focus on:\n- Committee assignments (\"The Chair asked the Finance Committee to review...\")\n- Individual follow-ups (\"John agreed to send the report by...\")\n- Research tasks (\"Staff will look into...\")\n- Communication tasks (\"Secretary to notify members about...\")\n- Preparation for future meetings (\"Please come prepared to discuss...\")\n\nGroup action items by assignee for easy reference.",
          "sort_order": 3
        },
        "action_buttons": [
          {
            "action_button": {
              "$ref": "ab-rr-copy-actions"
            },
            "sort_order": 1
          },
          {
            "action_button": {
              "$ref": "ab-rr-email-minutes"
            },
            "sort_order": 2
          }
        ],
        "default_action_button": {
          "$ref": "ab-rr-copy-actions"
        }
      }
    ],
    "action_buttons": [
      {
        "spec": {
          "$id": "ab-rr-email-minutes",
          "name": "Email Minutes (Standard)",
          "slug": "rr-std-email-minutes",
          "delivery_mechanism": "email",
          "content_format": "rich_text",
          "sort_order": 1
        }
      },
      {
        "spec": {
          "$id": "ab-rr-copy-motions",
          "name": "Copy Motion Log",
          "slug": "rr-std-copy-motions",
          "delivery_mechanism": "clipboard",
          "content_format": "plain_text",
          "sort_order": 2
        }
      },
      {
        "spec": {
          "$id": "ab-rr-copy-actions",
          "name": "Copy Action Items",
          "slug": "rr-std-copy-actions",
          "delivery_mechanism": "clipboard",
          "content_format": "plain_text",
          "sort_order": 3
        }
      }
    ],
    "shortcuts": [
      {
        "spec": {
          "$id": "sc-rr-call-motion",
          "name": "Make a Motion (Standard)",
          "description": "AI analyzes the transcript to record a motion and updates the Motion Tracker.",
          "icon_name": "bolt",
          "color": "#1E40AF",
          "surfaces": [
            {
              "surface": "MEETING_RUN",
              "position": 1
            }
          ],
          "prompt": "You are the parliamentary assistant for this meeting. Analyze the LAST 2 MINUTES of the meeting transcript to identify and formally record a motion.\n\n**Your task:**\n1. Find the motion statement in the transcript (phrases like \"I move that...\", \"I make a motion to...\").\n2. Identify the SPEAKER who made the motion.\n3. Check if anyone has seconded it yet.\n4. Navigate to the **New Business** agenda item and find the **Motion & Vote Tracker** table in its collaborative description.\n5. ADD A NEW ROW with:\n   - # (next sequential number)\n   - Motion (exact wording from transcript)\n   - Moved By (speaker name)\n   - Seconded (if stated, otherwise leave blank)\n   - Discussion Summary (leave blank)\n   - Vote (leave blank)\n   - Result (leave blank with checkboxes)\n\n**After updating the table**, state the motion formally:\n\"Motion #{number} recorded: '[brief summary]'. Moved by [name]. [Awaiting second / Seconded by {name}]. The question is on the adoption of the motion.\"\n\nIf you cannot clearly identify the motion, ask: \"Could the member please restate their motion for the record?\""
        }
      },
      {
        "spec": {
          "$id": "sc-rr-second",
          "name": "Second a Motion",
          "description": "AI identifies the seconder from transcript and updates the Motion Tracker.",
          "icon_name": "bullseye",
          "color": "#059669",
          "surfaces": [
            {
              "surface": "MEETING_RUN",
              "position": 2
            }
          ],
          "prompt": "You are the parliamentary assistant. Analyze the LAST 30 SECONDS of transcript to identify who seconded the pending motion.\n\n**Your task:**\n1. Listen for \"I second\", \"Second\", or \"I second the motion\".\n2. Identify the SPEAKER who seconded.\n3. Navigate to the **New Business** agenda item's **Motion & Vote Tracker**.\n4. Find the MOST RECENT motion row (the one without a Result).\n5. UPDATE the \"Seconded\" column with the seconder's name.\n\n**After updating**, announce:\n\"Motion #{number} is now seconded by [name]. Is there any discussion?\"\n\nIf no second was heard, state: \"The motion requires a second. Does anyone wish to second the motion?\""
        }
      },
      {
        "spec": {
          "$id": "sc-rr-vote-tally",
          "name": "Record Vote (Standard)",
          "description": "AI records the vote outcome and updates the Motion Tracker with results.",
          "icon_name": "chart-line-up",
          "color": "#7C3AED",
          "surfaces": [
            {
              "surface": "MEETING_RUN",
              "position": 3
            }
          ],
          "prompt": "You are the parliamentary assistant. Analyze the LAST 1 MINUTE of transcript to record the vote outcome.\n\n**Your task:**\n1. Listen for the Chair's announcement of the vote result (\"The ayes have it\", \"The motion carries\", vote counts, etc.).\n2. Determine the vote method used (voice, show of hands, rising vote, roll call).\n3. Navigate to the **New Business** agenda item's **Motion & Vote Tracker**.\n4. Find the pending motion row and UPDATE:\n   - Vote column: \"Ayes: X / Nays: Y / Abstain: Z\" (or \"Voice vote\" if not counted)\n   - Result column: Check ☑ Carried or ☑ Failed\n5. If the motion CARRIED and implies an action, add a row to the **Resulting Action Items** table.\n6. Also update the **Amendments Tracker** if any amendments were adopted.\n\n**After updating**, summarize:\n\"Vote recorded for Motion #{number}: [Result]. [If carried and has action: Action item assigned to {party} with deadline {if mentioned}.]\""
        }
      },
      {
        "spec": {
          "$id": "sc-rr-parliamentary",
          "name": "Parliamentary Guide",
          "description": "AI provides contextual procedural guidance based on current meeting state",
          "icon_name": "lightbulb",
          "color": "#059669",
          "surfaces": [
            {
              "surface": "MEETING_RUN",
              "position": 4
            }
          ],
          "prompt": "You are an expert parliamentarian assistant using Robert's Rules of Order. Analyze the CURRENT MEETING STATE to provide relevant procedural guidance.\n\n**Your task:**\n1. Review the **Motion & Vote Tracker** and **Amendments Tracker** in the 'New Business' agenda item.\n2. Analyze the LAST 2 MINUTES of transcript to understand the current procedural situation.\n3. Determine what procedural options are available based on the current state.\n\n**Provide contextual guidance:**\n\n📘 **PARLIAMENTARY STATUS**\n\n**Current State**: {Describe what's pending: main motion, amendment, discussion, etc.}\n\n**Precedence Stack** (if motions are pending):\n| # | Motion Type | Status |\n|---|-------------|--------|\n| {highest precedence first} | {motion type} | {pending/disposed} |\n\n**Available Actions Now**:\n| Action | Exact Wording | Requirements | Debatable? | Vote Needed |\n|--------|---------------|--------------|------------|-------------|\n| {relevant action 1} | \"{what to say}\" | {second, etc.} | {Yes/No} | {Majority/2/3} |\n| {relevant action 2} | \"{what to say}\" | {requirements} | {Yes/No} | {vote type} |\n\n**Common Procedures Quick Reference**:\n• To close debate: \"I move the previous question\" (requires 2/3, not debatable)\n• To modify the motion: \"I move to amend by [inserting/striking/substituting]...\" (requires second, majority)\n• To defer: \"I move to lay this on the table\" (requires second, majority, not debatable)\n• To defer with date: \"I move to postpone to [time/date]\" (requires second, majority)\n• To refer: \"I move to refer this to [committee]\" (requires second, majority)\n• To challenge a ruling: \"I appeal from the decision of the Chair\" (requires second, majority)\n• To demand a count: \"Division!\" (no second needed)\n\n**If someone asked a specific procedural question** in the recent transcript, answer that directly with the proper procedure."
        }
      }
    ],
    "workflows": [
      {
        "spec": {
          "$id": "wf-rr-minutes-distribution",
          "name": "Post-Meeting Minutes Distribution",
          "description": "Automated workflow that generates formal minutes after the meeting, routes them to the meeting owner (typically the Chair or Secretary) for review, and notifies the owner when approved so they can distribute via the Email Minutes action button. If rejected, the owner receives an alert to revise.",
          "spec": {
            "schema_version": "1.0",
            "entry": "generate-minutes",
            "nodes": [
              {
                "id": "generate-minutes",
                "type": "next_step",
                "data": {
                  "label": "Generate Meeting Minutes",
                  "next_step_id": "$ref:ns-rr-record-minutes",
                  "notes": "Generates meeting minutes following standard Robert's Rules format, capturing motions, seconds, vote outcomes, and key discussion points from the transcript."
                }
              },
              {
                "id": "owner-review",
                "type": "review",
                "data": {
                  "label": "Owner Review",
                  "assignee": {
                    "ref": "object_owner"
                  },
                  "notes": "Review the auto-generated meeting minutes for accuracy. Verify that all motions, seconds, vote outcomes, and action items are correctly recorded. Approve to distribute, or reject to revise."
                }
              },
              {
                "id": "distribute",
                "type": "deliver",
                "data": {
                  "label": "Distribute Minutes",
                  "destination_type": "email",
                  "destination_config": {
                    "to": [
                      "{{all_participants}}"
                    ],
                    "subject": "Meeting Minutes: {{.title}}"
                  },
                  "input_from": "generate-minutes",
                  "payload_template": "{{.step.generated_text}}",
                  "notes": "Emails the approved meeting minutes to all members. Distribution occurs only after the owner has reviewed and approved the minutes."
                }
              },
              {
                "id": "rejection-alert",
                "type": "alert",
                "data": {
                  "label": "Rejection Alert",
                  "recipient": {
                    "ref": "object_owner"
                  },
                  "include_reject_reason": true,
                  "notes": "Notifies the meeting owner that their minutes were rejected during review. Includes the reviewer's feedback on what needs to be corrected before resubmission."
                }
              }
            ],
            "edges": [
              {
                "id": "e1-generate-to-review",
                "source": "generate-minutes",
                "target": "owner-review",
                "type": "default"
              },
              {
                "id": "e2-review-approve",
                "source": "owner-review",
                "target": "distribute",
                "type": "approve",
                "label": "Approve & Distribute"
              },
              {
                "id": "e3-review-reject",
                "source": "owner-review",
                "target": "rejection-alert",
                "type": "reject",
                "label": "Needs Revision"
              }
            ]
          }
        }
      }
    ]
  }
}
