Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
name: outlook-calendar-shared-calendars
description: Safely write to delegated or shared Outlook calendars. Use when the user explicitly wants to create, update, respond to, cancel, delete, or add a small attachment to an event on a shared or delegated Outlook Calendar.
---

# Outlook Calendar Shared Calendars

Use this skill for writes on delegated or shared Outlook calendars. These write actions are separate from the signed-in user's own calendar actions on purpose.

## Required Target

- Start with `list_calendars` and identify the exact shared or delegated `calendar_id`.
- Use the shared-calendar action names only when the target is a delegated or shared calendar.
- For the signed-in user's own calendar, use the base Outlook Calendar skill and the non-shared event actions.

## Action Routing

- Create event on signed-in user's calendar: `create_event`.
- Create event on shared calendar: `create_shared_calendar_event`.
- Update signed-in user's event: `update_event`.
- Update shared calendar event: `update_shared_calendar_event`.
- Respond to signed-in user's invite: `respond_to_event`.
- Respond to shared calendar invite: `respond_to_shared_calendar_event`.
- Cancel or delete signed-in user's event: `cancel_or_delete_event`.
- Cancel or delete shared calendar event: `cancel_or_delete_shared_calendar_event`.
- Add small attachment to signed-in user's event: `add_event_attachment`.
- Add small attachment to shared calendar event: `add_shared_calendar_event_attachment`.

## Workflow

1. Resolve the target calendar with `list_calendars`; preserve the exact shared `calendar_id`.
2. Fetch or list the relevant event context before a write, and say when the shared calendar exposes only partial detail.
3. Restate the exact target calendar and event before create, update, RSVP, cancel, delete, or attachment writes.
4. Use the shared-calendar action that matches the requested write. Do not pass shared-calendar intent through the normal signed-in-user action.
5. For recurring events, preserve the base Outlook Calendar recurrence safety flow and require the intended update scope.

## Safety

- Treat shared-calendar writes as high impact because they modify another calendar surface.
- Do not assume that free/busy access implies delegated write access.
- If a shared-calendar write action is not available in-session, say that the shared/delegated calendar write capability is unavailable; do not silently retry with the signed-in-user write action.
- Preserve Teams links, rooms, attendees, body format, reminders, recurrence, and show-as state unless the user explicitly asked to change them.

## Example Requests

- "Create this event on the team shared calendar, not my personal calendar."
- "Move the event on the recruiting shared calendar to Thursday at 10 AM Pacific."
- "Cancel that event from the ops shared calendar and send this cancellation note."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Shared Calendars"
short_description: "Safely write to delegated Outlook calendars"
default_prompt: "Use $outlook-calendar-shared-calendars to create, update, RSVP, cancel, delete, or attach files to events on delegated or shared Outlook calendars."
18 changes: 7 additions & 11 deletions plugins/outlook-calendar/skills/outlook-calendar/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: outlook-calendar
description: Handle Outlook Calendar workflows. Use when the user asks for schedule understanding, availability checks, meeting scheduling, intelligent rescheduling, meeting prep, reminder updates, RSVP responses, recurring maintenance, travel coordination, deadline planning, or safe create, update, reschedule, or cancel changes with timezone-aware event times and attendee validation.
description: Handle Outlook Calendar workflows, including delegated/shared calendar writes. Use when the user asks for schedule understanding, availability checks, meeting scheduling, intelligent rescheduling, meeting prep, reminder updates, RSVP responses, recurring maintenance, travel coordination, deadline planning, or safe create, update, reschedule, respond, attach, delete, or cancel changes with timezone-aware event times and attendee validation.
---

# Outlook Calendar
Expand All @@ -20,17 +20,10 @@ If a request depends on proposing candidate times, checking when the user is fre
- For creating a meaningful focus block through intelligent moves, prefer [outlook-calendar-free-up-time](../outlook-calendar-free-up-time/SKILL.md).
- For ranking the best group meeting options, prefer [outlook-calendar-group-scheduler](../outlook-calendar-group-scheduler/SKILL.md).
- For meeting prep briefs grounded in the event and nearby Microsoft context, prefer [outlook-calendar-meeting-prep](../outlook-calendar-meeting-prep/SKILL.md).
- For creating, updating, responding to, deleting, canceling, or attaching files on delegated or shared calendars, prefer [outlook-calendar-shared-calendars](../outlook-calendar-shared-calendars/SKILL.md).
- Keep reminder planning, RSVP replies, recurring-series maintenance, travel-aware scheduling, and deadline planning in this base Outlook skill.

Use this base skill when the request spans multiple Outlook calendar workflows or when no more focused Outlook calendar skill is a better fit.

## Specialized Skills

- For one-day schedule understanding and agenda readouts, prefer [outlook-calendar-daily-brief](../outlook-calendar-daily-brief/SKILL.md).
- For creating a meaningful focus block through intelligent moves, prefer [outlook-calendar-free-up-time](../outlook-calendar-free-up-time/SKILL.md).
- For ranking the best group meeting options, prefer [outlook-calendar-group-scheduler](../outlook-calendar-group-scheduler/SKILL.md).
- For meeting prep briefs grounded in the event and nearby Microsoft context, prefer [outlook-calendar-meeting-prep](../outlook-calendar-meeting-prep/SKILL.md).
- Keep reminder planning, RSVP replies, recurring-series maintenance, travel-aware scheduling, and deadline planning in this base Outlook skill.
Use this base skill when the request spans multiple Outlook Calendar workflows or when no more focused calendar skill is a better fit.

## Preferred Deliverables

Expand Down Expand Up @@ -70,6 +63,7 @@ Use this base skill when the request spans multiple Outlook calendar workflows o
17. For meeting-prep or invite-note requests, collect the relevant source material first, then apply a short, grounded write directly unless the request is still ambiguous or under-specified.
18. Before any create or reschedule write, restate the final interpreted weekday, date, local clock time, and timezone for the event. If the task spans multiple cities or time zones, restate each relevant timestamp separately.
19. Only create, update, move, or cancel events when the user has clearly asked for that action.
20. For delegated or shared calendar writes, route to [../outlook-calendar-shared-calendars/SKILL.md](../outlook-calendar-shared-calendars/SKILL.md). Do not use signed-in-user write actions as a substitute for the explicit shared-calendar action names.

## Read Path

Expand All @@ -82,14 +76,15 @@ Use this base skill when the request spans multiple Outlook calendar workflows o
- If multiple information surfaces are available for meeting prep, prefer this retrieval order unless the user names a specific source: current event body, prior related event bodies, Outlook Email, SharePoint or OneDrive docs, then lower-signal notes sources.
- For document retrieval across Microsoft surfaces, use the actual connector or tool surfaces directly:
- Outlook mail context: use the Outlook Email app tools.
- SharePoint or OneDrive docs: use the Microsoft SharePoint app tools such as `search`, `list_recent_documents`, and `fetch`.
- SharePoint or OneDrive docs: use the Microsoft SharePoint app tools such as `get_site`, `list_site_drives`, `search(query="...")`, `search(query=None, hostname=..., site_path=..., folder_path=...)`, and `fetch`.
- Do not use generic MCP resource discovery such as `list_mcp_resources` to discover SharePoint content for this workflow.

## Outlook-Specific Checks

- Distinguish true busy time from softer constraints such as `Tentative`, `Free`, `Out of Office`, or `Working Elsewhere`.
- If the source data includes attendee response state, organizer role, Teams details, room booking, or work-location context, preserve those details unless the user asked to change them.
- Shared calendars may expose only free/busy signals rather than full event details. Say that directly instead of implying the view is complete.
- Shared or delegated calendar writes use explicit shared action names. Reading and availability can be partial; writing requires a concrete shared `calendar_id`.
- If a slot is free only because another item is marked `Free` or `Working Elsewhere`, describe that nuance.
- If a meeting is online, preserve the existing Teams or online-meeting setup unless the user asks to change it.

Expand Down Expand Up @@ -144,6 +139,7 @@ Use this base skill when the request spans multiple Outlook calendar workflows o
- "Help me decide whether to accept this invite, decline it, or propose a better time."
- "Clean up this recurring staff meeting without breaking the whole series."
- "Add the right reminder coverage for my review next week and the deadline after it."
- "Create this event on the team shared calendar instead of my personal calendar."

## Light Fallback

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
interface:
display_name: "Outlook Calendar"
short_description: "Find availability and safe Outlook event changes"
short_description: "Find availability and safe event changes"
icon_small: "./assets/outlook-calendar-small.svg"
icon_large: "./assets/outlook-calendar.svg"
brand_color: "#0078D4"
default_prompt: "Use $outlook-calendar to compare availability, explain Outlook meeting status, or draft the exact event change, including Teams details when relevant."
default_prompt: "Use $outlook-calendar to compare availability, explain Outlook meeting status, or draft the exact personal or shared-calendar event change, including Teams details when relevant."
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: outlook-email-shared-mailboxes
description: Work with delegated or shared Outlook Email mailboxes. Use when the user explicitly wants to read another mailbox, send from or on behalf of a shared mailbox, mark shared mail read or unread, move shared mail, or browse folders in a shared mailbox.
---

# Outlook Email Shared Mailboxes

Use this skill only when the user is working with a delegated or shared Outlook mailbox. These actions are separate from signed-in-user mailbox actions on purpose.

## Required Target

- Require the exact delegated/shared mailbox owner email address or UPN before reading or writing shared mail.
- Pass that identity as `mailbox_user_principal_name`.
- Do not discover, infer, or guess mailbox identities from display names alone.

## Action Routing

- Read signed-in user's mailbox: use the base Outlook Email skill, not this workflow.
- Read shared mailbox messages: `list_shared_messages`.
- Browse shared mailbox folders: `list_shared_mail_folders`.
- Fetch one shared mailbox message: `fetch_shared_message`.
- Send a new plain-text email from or on behalf of the shared mailbox: `send_email_on_behalf`.
- Mark shared mail read or unread: `mark_shared_email_read_state`.
- Move shared mail: `move_shared_email`.

## Workflow

1. Confirm the mailbox target and preserve the exact `mailbox_user_principal_name`.
2. For folder-specific work, list shared folders first and use exact folder IDs instead of guessing folder paths.
3. For message reads, keep the shared mailbox target attached to every message ID. A message ID from a shared mailbox should later be fetched or mutated with the corresponding shared action.
4. For sends, drafts, moves, and read-state changes, say which mailbox is being used before performing the write.
5. If the user shifts from a shared mailbox to their own mailbox, switch back to the signed-in-user actions.

## Safety

- Treat `send_email_on_behalf` as high impact. It sends immediately from another mailbox and supports plain text only.
- Do not use `send_email` when the user said to send from a shared mailbox.
- Do not use `move_email` or `mark_email_read_state` on message IDs obtained from shared mailbox actions.
- If a write fails because shared/delegated scopes are unavailable, say the shared-mailbox action or scope is the blocker rather than claiming the normal mailbox action cannot work.

## Example Requests

- "List unread mail in the support shared mailbox support@example.com."
- "Send this status note from ops-notices@example.com to the incident responders."
- "Move that message in the billing shared mailbox to its Escalations folder."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Shared Mailboxes"
short_description: "Read and act on delegated Outlook mailboxes"
default_prompt: "Use $outlook-email-shared-mailboxes to read a shared mailbox, send on behalf of it, or move and mark shared mailbox messages safely."
7 changes: 5 additions & 2 deletions plugins/outlook-email/skills/outlook-email/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
name: outlook-email
description: Triage Outlook mail, extract tasks, clean up subscriptions, and draft responses. Use when the user asks to inspect an Outlook inbox or thread, summarize open actions and deadlines, clean up newsletters, draft replies or forwards, or organize mailbox follow-up work before any send or cleanup action.
description: Triage Outlook mail, extract tasks, clean up subscriptions, draft responses, and route shared mailbox work. Use when the user asks to inspect an Outlook inbox or thread, summarize open actions and deadlines, clean up newsletters, draft replies or forwards, organize mailbox follow-up work, or act on a delegated/shared Outlook mailbox.
---

# Outlook Email

## Overview

Use this skill to turn Outlook inbox and thread context into clear summaries, action lists, and ready-to-review drafts. Prefer Outlook-native list and search flows to build a shortlist, expand only the messages that matter, and treat mailbox mutations as separate explicit actions.
Use this skill to turn Outlook Email inbox and thread context into clear summaries, action lists, and ready-to-review drafts. Prefer Outlook-native list and search flows to build a shortlist, expand only the messages that matter, and treat mailbox mutations as separate explicit actions.

Outbound Outlook email writes are plain-text only. When drafting, replying, scheduling, or sending, do not plan around HTML bodies, rich formatting, tracking pixels, or formatting-dependent layouts. If the user asks for richer formatting, say briefly that Outlook email write actions here only support plain text, then translate the request into the clearest plain-text equivalent.

Expand All @@ -27,6 +27,7 @@ Outbound Outlook email writes are plain-text only. When drafting, replying, sche
| Reply drafting, reply-all decisions, and send-vs-draft handling | [../outlook-email-reply-drafting/SKILL.md](../outlook-email-reply-drafting/SKILL.md) |
| Action-item, deadline, and commitment extraction | [../outlook-email-task-extraction/SKILL.md](../outlook-email-task-extraction/SKILL.md) |
| Newsletter and subscription cleanup | [../outlook-email-subscription-cleanup/SKILL.md](../outlook-email-subscription-cleanup/SKILL.md) |
| Delegated or shared mailbox reads, sends, read-state changes, and moves | [../outlook-email-shared-mailboxes/SKILL.md](../outlook-email-shared-mailboxes/SKILL.md) |

## Outlook Reading Pattern

Expand All @@ -36,6 +37,7 @@ Outbound Outlook email writes are plain-text only. When drafting, replying, sche
4. Use draft-first actions for write preparation: `create_reply_draft`, `create_forward_draft`, or `draft_email`.
5. Use mailbox-organization actions only with clear user intent: `mark_email_read_state`, `move_email`, `set_message_categories`, `create_category`, `create_mail_folder`.
6. For newsletter cleanup, inspect `get_unsubscribe_info` before assuming a safe unsubscribe path. `unsubscribe_via_mailto` only covers `mailto:` targets.
7. For delegated or shared mailbox work, route to [../outlook-email-shared-mailboxes/SKILL.md](../outlook-email-shared-mailboxes/SKILL.md). Do not use signed-in-user actions such as `list_messages`, `fetch_message`, `send_email`, `mark_email_read_state`, or `move_email` for another mailbox.

## Workflow

Expand Down Expand Up @@ -98,6 +100,7 @@ Keep these workflows in the base Outlook Email skill instead of splitting them f
- "Prepare a short forward that gives leadership the current status from this email thread."
- "Before you send anything, tell me what assumptions need my confirmation."
- "I drafted that earlier; now send the draft I approved."
- "Show me unread mail in the support shared mailbox and draft the safest next response."

## Light Fallback

Expand Down
4 changes: 2 additions & 2 deletions plugins/outlook-email/skills/outlook-email/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
interface:
display_name: "Outlook Email"
short_description: "Triage inboxes, extract tasks, and draft replies"
short_description: "Triage inboxes, shared mailboxes, and replies"
icon_small: "./assets/outlook-email-small.svg"
icon_large: "./assets/outlook-email.svg"
brand_color: "#0078D4"
default_prompt: "Use $outlook-email to triage my inbox, summarize a thread, extract the tasks I owe, clean up newsletters, or draft the reply or forward I should send next."
default_prompt: "Use $outlook-email to triage my inbox or a shared mailbox, summarize a thread, extract the tasks I owe, clean up newsletters, or draft the reply or forward I should send next."
36 changes: 36 additions & 0 deletions plugins/sharepoint/skills/sharepoint-site-discovery/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
name: sharepoint-site-discovery
description: Resolve the right SharePoint site, library, and folder before file work. Use when the user needs to find the right site context, browse a known site, inspect document libraries, or narrow the correct folder before fetching or editing a file.
---

# SharePoint Site Discovery

Use this skill when the main job is locating the right SharePoint site, drive, or folder before file analysis or editing.

## Start Here

- Treat SharePoint discovery as site-scoped, not user-recency-scoped.
- Use `search(query="...")` for keyword search.
- Use `search(query=None, hostname=..., site_path=..., folder_path=...)` for browse mode.
- Use `get_site(...)` and `list_site_drives(...)` when the user knows the site but not the right library.

## Workflow

1. If the user names a SharePoint hostname and site path, validate them with `get_site(...)`.
2. If the site is known but the right library is not, use `list_site_drives(...)` to inspect the site-scoped document libraries.
3. If the user wants to browse a known folder or library, use `search(query=None, hostname=..., site_path=..., folder_path=...)` and inspect the immediate children.
4. If the user wants to find a file by keyword, use `search(query="...")`, then narrow with `hostname`, `site_path`, or `folder_path` when the scope is known.
5. Preserve the exact returned `url`, site, drive, and folder context so later `fetch`, `update_file`, or `upload_file` calls use the resolved destination instead of a guessed path.
6. When multiple plausible sites or libraries exist, present the candidates and explain the distinguishing context instead of picking silently.

## Output Conventions

- Name the exact site, library, and folder you resolved.
- Distinguish clearly between browse results and keyword-search results.
- When handing off to another SharePoint workflow, include the resolved `url` or the exact site and folder context that should be reused.

## Example Requests

- "Find the right SharePoint site for the launch checklist and show me the available document libraries."
- "Browse the ops site and narrow me to the folder that contains the Q2 roadmap files."
- "Search SharePoint for the pricing workbook, but keep the search inside the finance site."
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Site Discovery"
short_description: "Resolve the right SharePoint site and library"
default_prompt: "Use $sharepoint-site-discovery to find the right SharePoint site, library, or folder before fetching or editing a file."
Loading