---
name: gsk-outlook-email
version: 1.0.0
description: 'Outlook Email operations. Actions: search, read, list_folders, create_folder,
  list_emails, list_email_changes, list_rules, create_rule, delete_rule, send, draft,
  reply, reply_draft, forward, delete, archive, move, mark_as_read, add_category,
  remove_category, get_attachment, group_list, group_search, group_read, group_reply.'
metadata:
  category: general
  requires:
    bins:
    - gsk
  cliHelp: gsk outlook --help
---

# gsk-outlook-email

**PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.

> **Note:** a unified `gsk connector` flow is rolling out (see `../gsk-connector/SKILL.md`: `gsk connector tools <id>` / `gsk connector call <id> -t <tool>`) and may not be enabled for every account yet. THIS command remains fully supported — use it directly, and it stays the fallback whenever `gsk connector` is unavailable.

Outlook Email operations. Actions: search, read, list_folders, create_folder, list_emails, list_email_changes, list_rules, create_rule, delete_rule, send, draft, reply, reply_draft, forward, delete, archive, move, mark_as_read, add_category, remove_category, get_attachment, group_list, group_search, group_read, group_reply.

## Usage

```bash
gsk outlook [options]
```

**Aliases:** `outlook`

## Flags

| Flag | Required | Description |
|------|----------|-------------|
| `<action>` (positional) | Yes | Action to perform. 'search': Search emails by query; 'read': Read a specific email by ID; 'list_folders': List structured Outlook mail folders; 'create_folder': Create an Outlook mail folder. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'list_rules': List Outlook inbox rules; 'create_rule': Create an Outlook inbox rule. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'delete_rule': Delete an Outlook inbox rule. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'list_emails': List structured emails with explicit body coverage; 'list_email_changes': List folder-scoped email upserts and tombstones with body coverage using a delta cursor; 'send': Compose and send an email. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'draft': Save an email to the Drafts folder without sending; 'reply': Reply to an existing email. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'reply_draft': Create a reply draft without sending; 'forward': Forward an email to new recipients. Confirmation-gated: on a CLI with client-side confirmation the command runs as a single call after the [y/N] prompt (or --yes).; 'delete': Delete an email. Auto-approved: executes on the FIRST call — no [y/N] prompt and no pending_confirmation step. Do NOT re-run the command; a second call performs the operation again (e.g. sends a duplicate message).; 'archive': Archive one or more emails (pass message_ids to archive a whole set in one call); 'move': Move an email to a different folder. Auto-approved: executes on the FIRST call — no [y/N] prompt and no pending_confirmation step. Do NOT re-run the command; a second call performs the operation again (e.g. sends a duplicate message).; 'mark_as_read': Mark an email as read or unread; 'add_category': Add a category to an email; 'remove_category': Remove a category from an email; 'get_attachment': Download an email attachment; 'group_list': List Microsoft 365 groups; 'group_search': Search group emails; 'group_read': Read a group email; 'group_reply': Reply to a group email (string, one of: search, read, list_folders, create_folder, list_rules, create_rule, delete_rule, list_emails, list_email_changes, send, draft, reply, reply_draft, forward, delete, archive, move, mark_as_read, add_category, remove_category, get_attachment, group_list, group_search, group_read, group_reply) |
| `--queryString` | No | [search] The search query using KQL (Keyword Query Language). Examples: - Simple: 'project meeting' - From Sender: 'from:boss@example.com' - With Subject: 'subject:"Weekly Report"' - Unread Emails: 'isRead=false' - Has Attachments: 'hasAttachments=true' - Cc Recipient: 'cc:user@example.com' - Important: 'importance:high' - Complex: 'from:admin@co.com AND (subject:urgent OR body:critical)' Note: Use after_date/before_date params for date filtering (recommended), or use KQL syntax like 'received:2024-06-01..2024-06-30' in queryString. (string) |
| `--after_date` | No | [search] Filter emails received on or after this date (inclusive). Format: YYYY-MM-DD (e.g., '2024-01-01'). Works for both enterprise and personal accounts. (string) |
| `--before_date` | No | [search] Filter emails received before this date (exclusive). Format: YYYY-MM-DD (e.g., '2024-01-31'). Works for both enterprise and personal accounts. (string) |
| `--size` | No | [search] The number of results to return per page (default: 25, max: 1000). \| [group_search] The maximum number of results to return per group per page (default: 25). (integer, default: `25`) |
| `--from_offset` | No | [search] The starting offset for pagination (used to get the next page of results). (integer, default: `0`) |
| `--auto_paginate` | No | [search] If true, automatically fetches multiple pages until reaching max_total_results (default: 500). Returns ALL emails matching the query. \| [group_search] If true, automatically fetches multiple pages from each group until reaching max_total_results (default: 500). Returns ALL emails matching the query. (boolean) |
| `--max_total_results` | No | [search] Maximum total results to fetch when auto_paginate is true. Default: 500, Maximum: 500. \| [group_search] Maximum total results to fetch across all groups when auto_paginate is true. Default: 500, Maximum: 500. (integer) |
| `--folder` | No | [search] The mail folder to search in. Options: - 'inbox': Inbox folder (default) - 'junkemail' or 'spam': Junk/Spam folder - 'deleteditems' or 'trash': Deleted Items folder - 'drafts': Drafts folder - 'sentitems' or 'sent': Sent Items folder - 'archive': Archive folder - 'all': Search across all folders (uses Search API) - Any custom folder display name (e.g. 'Receipts' or a nested 'Parent/Child' path) is also accepted and resolved to the folder automatically (string) |
| `--search_mode` | No | [search] Search mode to use: - 'auto' (default): Automatically choose best method - 'kql': Use Microsoft Search API with full KQL syntax (enterprise only, supports 'isread:false from:john subject:meeting') - 'filter': Use $filter for property filtering (supports 'isRead eq false', works with folder parameter) (string, one of: auto, kql, filter) |
| `--from_account` | No | [search] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [read] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [list_folders] Connected Outlook mailbox address; required for stable multi-account ingestion. \| [create_folder] Connected Outlook mailbox address. \| [list_rules] Connected Outlook mailbox address. \| [create_rule] Connected Outlook mailbox address. \| [delete_rule] Connected Outlook mailbox address. \| [list_emails] Connected Outlook mailbox address; required for stable multi-account ingestion. \| [list_email_changes] Connected Outlook mailbox address; required for stable multi-account ingestion. \| [send] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [draft] Sender email account to use. \| [reply] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [reply_draft] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [forward] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [delete] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [archive] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [move] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [mark_as_read] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [add_category] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [remove_category] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [get_attachment] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [group_list] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [group_search] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [group_read] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. \| [group_reply] Optional: Email address of the Outlook account to use. Use this when the user has multiple Outlook accounts connected. If not specified, uses the default Outlook account. (string) |
| `--id` | No | [read] The ID of a single Outlook message to retrieve. Mutually exclusive with 'thread_id'. (string) |
| `--thread_id` | No | [read] The Outlook conversationId of the thread to retrieve. Returns every message in the conversation. Mutually exclusive with 'id'. The 'outlook_email_search' tool exposes this value as 'threadId' on each result. \| [group_read] The ID of the email thread to retrieve. This is often the same as the conversationId. \| [group_reply] The ID of the email thread to reply to. Available from trigger data as 'thread_id' or 'emails[0].thread_id'. (string) |
| `--max_messages` | No | [read] Optional cap on how many messages to return when reading by 'thread_id'. Returns the most-recent N messages (chronological order preserved within the slice). Use this for long conversations to keep the LLM context bounded. Ignored when reading by single 'id'. (integer) |
| `--title` | No | [read] The title of the email to retrieve and read \| [group_read] The title of the email thread to retrieve. (string) |
| `--question` | No | [read] Question to answer guiding how to process the email content \| [group_read] Question to answer guiding how to process the email content (string) |
| `--download_attachments` | No | [read] Whether need to download attachments from the email to analysis (boolean) |
| `--aidrive_path` | No | [read] Path in AIDrive where attachments should be saved. Default is /outlook_attachments/ \| [get_attachment] The path in AIDrive to save the attachment. Default: /outlook_attachments/ (string) |
| `--parent_folder_id` | No | [list_folders] Folder ID whose direct children to list; omit for root folders. \| [create_folder] Optional parent folder ID; omit for the mailbox root. (string) |
| `--cursor` | No | [list_folders] Opaque next_cursor from the previous page. \| [list_emails] Opaque next_cursor from the previous page. \| [list_email_changes] Opaque next_cursor while paging the current delta round. (string) |
| `--page_size` | No | [list_folders] Requested page size (1-100, default 50). \| [list_emails] Requested page size (1-100, default 50). \| [list_email_changes] Requested page size (1-100, default 50). (integer, default: `50`) |
| `--folder_name` | No | [create_folder]  \| [move] The target folder name. Can be a well-known folder (inbox, drafts, sentitems, deleteditems, archive, junkemail, outbox) or a custom folder name. Custom folders will be created if they don't exist. (string) |
| `--display_name` | No | [create_rule]  (string) |
| `--conditions` | No | [create_rule] Microsoft Graph message-rule conditions. (object) |
| `--actions` | No | [create_rule] Microsoft Graph message-rule actions. (object) |
| `--exceptions` | No | [create_rule] Optional Microsoft Graph rule exceptions. (object) |
| `--sequence` | No | [create_rule]  (integer) |
| `--is_enabled` | No | [create_rule]  (boolean, default: `True`) |
| `--rule_id` | No | [delete_rule]  (string) |
| `--folder_id` | No | [list_emails] Outlook folder ID returned by list_folders. \| [list_email_changes] Outlook folder ID returned by list_folders. (string) |
| `--received_after` | No | [list_emails] Inclusive UTC date or ISO datetime lower bound. \| [list_email_changes] Initial-round inclusive UTC date or ISO datetime lower bound; omit after a cursor exists. (string) |
| `--received_before` | No | [list_emails] Exclusive UTC date or ISO datetime upper bound. (string) |
| `--delta_cursor` | No | [list_email_changes] Opaque delta_cursor saved after the previous completed round. (string) |
| `--to` | No | [send] Optional: A list of primary recipient email addresses. At least one address across to, cc, or bcc is required. \| [draft] Recipient email address(es), comma-separated. \| [reply] Optional: A list of email addresses for primary recipients. If not provided, defaults to the original sender. By default (reply_all=true), all original recipients are included in CC. \| [reply_draft] Optional: A list of email addresses for primary recipients. If not provided, defaults to the original sender. By default (reply_all), all original recipients are included in CC. \| [forward] Optional: A list of email addresses for primary recipients to forward the email to. \| [group_reply] Optional list of recipient email addresses to add as new participants. These recipients will be notified about the reply. (array) |
| `--subject` | No | [send] Optional: The email subject line. Defaults to empty. \| [draft] Email subject line. (string) |
| `--body` | No | [send] The email body content. **IMPORTANT**: The format MUST match the content_type parameter: - If content_type='text': Use plain text - If content_type='html': Use HTML format with tags like <h1>, <p>, <ul>, etc. **Note**: Email clients DO NOT support Markdown. Convert Markdown to HTML if needed. \| [draft] Email body content (plain text or HTML). \| [reply] The reply message body. **IMPORTANT**: The format MUST match the content_type parameter: - If content_type='text': Use plain text - If content_type='html': Use HTML format with tags like <h1>, <p>, <ul>, etc. **Note**: Email clients DO NOT support Markdown. Convert Markdown to HTML if needed. \| [reply_draft] The reply content in HTML format. Use HTML tags for formatting (e.g., <br>, <b>, <i>). \| [forward] Optional: Additional message to include above the forwarded content. This is your personal note to recipients. (string) |
| `--cc` | No | [send] Optional: A list of email addresses for CC recipients. \| [draft] CC recipient(s), comma-separated. \| [reply] Optional: A list of email addresses for CC recipients. If not provided and 'reply_all' is true (default), includes original CC and TO recipients. If 'reply_all' is false, no CC recipients are added. \| [reply_draft] Optional: A list of email addresses for CC recipients. If not provided and 'reply_type' is 'reply_all' (default), includes original CC and TO recipients. If 'reply_type' is 'reply', no CC recipients are added. \| [forward] Optional: A list of email addresses for CC recipients. (array) |
| `--bcc` | No | [send] Optional: A list of email addresses for BCC recipients. \| [draft] BCC recipient(s), comma-separated. \| [reply] Optional: A list of email addresses for BCC recipients. \| [reply_draft] Optional: A list of email addresses for BCC recipients. \| [forward] Optional: A list of email addresses for BCC recipients. (array) |
| `--from_mailbox` | No | [send] Optional: The email address to send from (e.g., team@company.com). If not specified, the email will be sent from the current user's mailbox. Requires 'Mail.Send.Shared' permission for shared/group mailboxes. \| [reply] Optional: The email address to send the reply from (e.g., team@genspark.ai). If not specified, the reply will be sent from the current user's mailbox. Requires 'Mail.Send.Shared' permission for shared/group mailboxes. \| [reply_draft] Optional: The email address to create the draft from (e.g., team@genspark.ai). If not specified, the draft will be created in the current user's mailbox. Requires 'Mail.Send.Shared' permission for shared/group mailboxes. \| [forward] Optional: The email address to send from (e.g., team@genspark.ai). If not specified, forwards from the current user's mailbox. Requires 'Mail.Send.Shared' permission for shared/group mailboxes. (string) |
| `--content_type` | No | [send] Content type of the body. Default: text/html (recommended) **CRITICAL**: body field format MUST match this parameter: - 'text/plain': body should be plain text - 'text/html': body MUST be valid HTML (not Markdown) Always convert Markdown to HTML before passing to this tool. \| [reply] Content type of the reply body. Default: text/html (recommended) **CRITICAL**: body field format MUST match this parameter: - 'text/plain': body should be plain text - 'text/html': body MUST be valid HTML (not Markdown) Always convert Markdown to HTML before passing to this tool. \| [forward] Content type of the body. Default: text/html \| [group_reply] The format of the content. Use 'text/plain' for plain text or 'text/html' for HTML content. Default is 'text/plain'. (string, one of: text/plain, text/html) |
| `--client_send_id` | No | [send] Optional stable idempotency key. Normally generated automatically for scheduled and interactive sends. (string) |
| `--force_resend` | No | [send] Set true only when the user explicitly wants another copy of an otherwise identical email. This bypasses the 10-minute interactive-send deduplication window. (boolean, default: `False`) |
| `--attachments` | No | [send] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). \| [draft] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). \| [reply] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). \| [reply_draft] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). \| [forward] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). \| [group_reply] Optional file attachments. Each item is either a local file path (read inline by the gsk CLI — the bytes ride in the request body as base64 and are not persisted to blob storage) or an already-hosted URL (file-wrapper URL or other public https). Files are delivered as real email attachments (not links): inline base64 for items ≤3 MB, Microsoft Graph upload session for larger Outlook attachments. CLI alias: --attach / --attachment (repeatable). CLI inline cap: 5 MiB per local file — larger files must be uploaded via 'gsk upload' first and passed as a URL. Per-message raw-payload cap: 18 MiB for Gmail (Gmail's 25 MB send cap is on the base64-encoded RFC 822 message; 18 MiB raw leaves headroom for ~33% encoding overhead) and 150 MB for Outlook (via Graph upload session). (array) |
| `--body_type` | No | [draft] Body format: 'html' (default) or 'text'. (string) |
| `--from_address` | No | [draft] Optional 'From:' identity to send AS — Gmail verified alias, Outlook proxyAddress / mail-enabled group, or a granted SendAs / on-behalf address. Must be an address the from-account is authorized to send as (see 'send_as' on /api/ai-inbox/mailbox/accounts). For Gmail this becomes the draft's MIME 'From:' header; for Outlook the saved draft stays as the from-account and the alias is applied by the eventual send call. (string) |
| `--prompt` | No | [draft] Optional instruction describing the email to write, in the sender's own voice using their Email Brain (persona plus their handling and writing rules) — e.g. 'ask Ana to move the review to Friday, apologize for the short notice'. Use INSTEAD of 'body' to have the body written for you, or TOGETHER WITH 'body' to revise that text per the instruction (everything the instruction does not ask to change is preserved). Recipients and attachments are never inferred from the instruction — pass them explicitly. Omit to commit 'body' exactly as given. (string) |
| `--message_id` | No | [reply] The Outlook message ID to reply to. \| [forward] The Outlook message ID to forward. \| [delete] The Outlook message ID to delete \| [archive] (Deprecated, use message_ids) A single Outlook message ID to archive \| [move] The Outlook message ID to move \| [mark_as_read] (Deprecated, use message_ids) A single Outlook message ID to mark \| [add_category] The Outlook message ID to add category to \| [remove_category] The Outlook message ID to remove category from \| [get_attachment] The Outlook message ID containing the attachment (string) |
| `--reply_all` | No | [reply] Optional: If true (default), reply to all original recipients (TO and CC). If false, reply only to the original sender. (boolean, default: `True`) |
| `--include_original` | No | [reply] Optional: Whether to include the original email content as a quote in the reply. Defaults to true. \| [reply_draft] Optional: Whether to include the original email content as a quote in the draft. Defaults to true. \| [forward] Whether to append the original message as a Gmail-style '---------- Forwarded message ----------' quoted block under the forwarder's note so the recipient sees the original verbatim. Default: true. Set to false only when the caller already embedded their own forwarded block in `body` (e.g. the `.genmail` editor send path). (boolean, default: `True`) |
| `--original_email_id` | No | [reply_draft] The ID of the original email to reply to. Required to create a proper reply draft with quoted content. (string) |
| `--reply_type` | No | [reply_draft] Type of reply: 'reply' sends only to the original sender, 'reply_all' sends to all recipients of the original email. Default: 'reply_all'. Used to determine default recipients if 'to'/'cc' are not provided. (string, one of: reply, reply_all) |
| `--include_attachments` | No | [forward] Whether to include original email attachments in the forward. Default: true (boolean, default: `True`) |
| `--permanent` | No | [delete] Whether to permanently delete the message. Default: false (move to Deleted Items) (boolean) |
| `--message_ids` | No | [archive] The Outlook message ID(s) to archive. Can be a single ID string or an array of IDs. \| [mark_as_read] The Outlook message ID(s) to mark. Can be a single ID string or an array of IDs. |
| `--create_if_not_exists` | No | [move] Whether to create the folder if it doesn't exist. Default: true (boolean) |
| `--is_read` | No | [mark_as_read] Set to true to mark as read, false to mark as unread. Default: true (boolean) |
| `--category_name` | No | [add_category] The category name to add. Common categories include: Red category, Orange category, Yellow category, Green category, Blue category, Purple category \| [remove_category] The category name to remove (string) |
| `--filename` | No | [get_attachment] The filename of the attachment to retrieve. Use '*' to get all attachments. (string) |
| `--save_to_aidrive` | No | [get_attachment] Whether to save the attachment to AIDrive. Default: true (boolean) |
| `--name_filter` | No | [group_list] Optional filter to search for groups by name or email. If provided, only groups matching this filter will be returned. (string) |
| `--group_id` | No | [group_search] The ID of a specific group to search within. If provided, group_name_filter is ignored. \| [group_read] The ID of the group. \| [group_reply] The ID of the M365 group. Available from trigger data as 'group_id' or 'emails[0].group_id'. (string) |
| `--group_name_filter` | No | [group_search] A search term to find groups by name (e.g., 'Marketing'). Used if group_id is not provided. (string) |
| `--query` | No | [group_search] The search query for email subjects. Use an empty string to get recent emails. (string) |
| `--since` | No | [group_search] Optional: only return group emails last delivered on or after this ISO date/datetime (e.g. '2026-06-01' or '2026-06-01T00:00:00Z'). Combined (AND) with the query. (string) |
| `--until` | No | [group_search] Optional: only return group emails last delivered on or before this ISO date/datetime (e.g. '2026-06-15'). Combined (AND) with the query. (string) |
| `--conversation_id` | No | [group_reply] The ID of the conversation. Available from trigger data as 'conversation_id' or 'emails[0].conversation_id'. (string) |
| `--content` | No | [group_reply] The reply content. Can be plain text or HTML. This will be posted as a new message in the group conversation. (string) |

## Write Confirmation

Confirmation-gated actions: `create_folder`, `create_rule`, `delete_rule`, `send`, `reply`, `forward`. The CLI shows a preview and asks `[y/N]` on stderr before the single server call; pass `--yes` (`-y`) for unattended runs. `--no-input` (or `--args-file -`, which consumes stdin) makes a gated call exit 2 with no server call instead of hanging. Never re-run a command to 'confirm' it — every call is a real execution. `--skip_confirmation true` / `--auto_skip_confirmation` are deprecated on this CLI (still accepted, warn on stderr): use `--yes`.

Interactive-only actions: `create_folder`, `create_rule`, `delete_rule` (the action excludes the skip params, e.g. Marketplace policy on Slack) — `--yes` is ignored and a real `[y/N]` answer is required.

Auto-approved actions: `delete`, `move` — the server skips the confirmation gate, so the operation executes on the FIRST call with no `[y/N]` prompt and no confirmation step. Do NOT re-run the command expecting a confirmation arc: a second call performs the operation again (e.g. sends a duplicate message).

## See Also

- [gsk-shared](../gsk-shared/SKILL.md) — Authentication and global flags
