Slack
Purpose
Operate Slack workspaces through Composio’s Slack toolkit on Rube MCP: discover schemas, ensure ACTIVE Slack OAuth, then send messages, search conversations, manage channels/users, threads, and reactions.
When to Use
- Post or update messages (including threads).
- Search messages or list channels/users.
- Add reactions or manage channel membership when tools allow.
When NOT to Use
- Email → gmail.
- Without Rube MCP or before Slack connection is ACTIVE.
- Posting on behalf of the user without their intent for public channels.
Expected Outcome
RUBE_SEARCH_TOOLS before each workflow for current slugs.
- Channel/user ids resolved via list/search tools when names are given.
- Message timestamps and channel ids from tool responses.
Inputs to Gather
- Channel id or name; user id for DMs when needed.
- Message text (and thread_ts for replies).
- Search query and time bounds for conversation search.
Workflow
- Confirm Rube MCP available (
RUBE_SEARCH_TOOLS).
RUBE_MANAGE_CONNECTIONS with toolkit slack; OAuth until ACTIVE.
RUBE_SEARCH_TOOLS for Slack action; call with schema parameters.
- Resolve channel/user ids when the user gives names.
- Confirm sends in #channels when the user asked for a dry run or preview.
Rube MCP and Slack toolkit
Automate Slack workspace operations including messaging, search, channel management, and reaction workflows through Composio's Slack toolkit.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Slack connection via
RUBE_MANAGE_CONNECTIONS with toolkit slack
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit slack
- If connection is not ACTIVE, follow the returned auth link to complete Slack OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Send Messages to Channels
When to use: User wants to post a message to a Slack channel or DM
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel name to channel ID [Prerequisite]
SLACK_LIST_ALL_CHANNELS - Fallback if FIND_CHANNELS returns empty/ambiguous results [Fallback]
SLACK_FIND_USERS - Resolve user for DMs or @mentions [Optional]
SLACK_OPEN_DM - Open/reuse a DM channel if messaging a user directly [Optional]
SLACK_SEND_MESSAGE - Post the message with resolved channel ID [Required]
SLACK_UPDATES_A_SLACK_MESSAGE - Edit the posted message if corrections needed [Optional]
Key parameters:
channel: Channel ID or name (without '#' prefix)
markdown_text: Preferred field for formatted messages (supports headers, bold, italic, code blocks)
text: Raw text fallback (deprecated in favor of markdown_text)
thread_ts: Timestamp of parent message to reply in a thread
blocks: Block Kit layout blocks (deprecated, use markdown_text)
Pitfalls:
SLACK_FIND_CHANNELS requires query param; missing it errors with "Invalid request data provided"
SLACK_SEND_MESSAGE requires valid channel plus one of markdown_text/text/blocks/attachments
- Invalid block payloads return error=invalid_blocks (max 50 blocks)
- Replies become top-level posts if
thread_ts is omitted
- Persist
response.data.channel and response.data.message.ts from SEND_MESSAGE for edit/thread operations
2. Search Messages and Conversations
When to use: User wants to find specific messages across the workspace
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel for scoped search with in:#channel [Optional]
SLACK_FIND_USERS - Resolve user for author filter with from:@user [Optional]
SLACK_SEARCH_MESSAGES - Run keyword search across accessible conversations [Required]
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION - Expand threads for relevant hits [Required]
Key parameters:
query: Search string supporting modifiers (in:#channel, from:@user, before:YYYY-MM-DD, after:YYYY-MM-DD, has:link, has:file)
count: Results per page (max 100), or total with auto_paginate=true
sort: 'score' (relevance) or 'timestamp' (chronological)
sort_dir: 'asc' or 'desc'
Pitfalls:
- Validation fails if
query is missing/empty
ok=true can still mean no hits (response.data.messages.total=0)
- Matches are under
response.data.messages.matches (sometimes also response.data_preview.messages.matches)
match.text may be empty/truncated; key info can appear in matches[].attachments[]
- Thread expansion via FETCH_MESSAGE_THREAD can truncate when
response.data.has_more=true; paginate via response_metadata.next_cursor
3. Manage Channels and Users
When to use: User wants to list channels, users, or workspace info
Tool sequence:
SLACK_FETCH_TEAM_INFO - Validate connectivity and get workspace identity [Required]
SLACK_LIST_ALL_CHANNELS - Enumerate public channels [Required]
SLACK_LIST_CONVERSATIONS - Include private channels and DMs [Optional]
SLACK_LIST_ALL_USERS - List workspace members [Required]
SLACK_RETRIEVE_CONVERSATION_INFORMATION - Get detailed channel metadata [Optional]
SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONS - List user groups [Optional]
Key parameters:
cursor: Pagination cursor from response_metadata.next_cursor
limit: Results per page (default varies; set explicitly for large workspaces)
types: Channel types filter ('public_channel', 'private_channel', 'im', 'mpim')
Pitfalls:
- Workspace metadata is nested under
response.data.team, not top-level
SLACK_LIST_ALL_CHANNELS returns public channels only; use SLACK_LIST_CONVERSATIONS for private/IM coverage
SLACK_LIST_ALL_USERS can hit HTTP 429 rate limits; honor Retry-After header
- Always paginate via
response_metadata.next_cursor until empty; de-duplicate by id
4. React to and Thread Messages
When to use: User wants to add reactions or manage threaded conversations
Tool sequence:
SLACK_SEARCH_MESSAGES or SLACK_FETCH_CONVERSATION_HISTORY - Find the target message [Prerequisite]
SLACK_ADD_REACTION_TO_AN_ITEM - Add an emoji reaction [Required]
SLACK_FETCH_ITEM_REACTIONS - List reactions on a message [Optional]
SLACK_REMOVE_REACTION_FROM_ITEM - Remove a reaction [Optional]
SLACK_SEND_MESSAGE - Reply in thread using thread_ts [Optional]
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION - Read full thread [Optional]
Key parameters:
channel: Channel ID where the message lives
timestamp / ts: Message timestamp (unique identifier like '1234567890.123456')
name: Emoji name without colons (e.g., 'thumbsup', 'wave::skin-tone-3')
thread_ts: Parent message timestamp for threaded replies
Pitfalls:
- Reactions require exact channel ID + message timestamp pair
- Emoji names use Slack's naming convention without colons
SLACK_FETCH_CONVERSATION_HISTORY only returns main channel timeline, NOT threaded replies
- Use
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION with parent's thread_ts to get thread replies
5. Schedule Messages
When to use: User wants to schedule a message for future delivery
Tool sequence:
SLACK_FIND_CHANNELS - Resolve channel ID [Prerequisite]
SLACK_SCHEDULE_MESSAGE - Schedule the message with post_at timestamp [Required]
Key parameters:
channel: Resolved channel ID
post_at: Unix timestamp for delivery (up to 120 days in advance)
text / blocks: Message content
Pitfalls:
- Scheduling is limited to 120 days in advance
post_at must be a Unix timestamp, not ISO 8601
Common Patterns
ID Resolution
Always resolve display names to IDs before operations:
- Channel name -> Channel ID:
SLACK_FIND_CHANNELS with query param
- User name -> User ID:
SLACK_FIND_USERS with search_query or email
- DM channel:
SLACK_OPEN_DM with resolved user IDs
Pagination
Most list endpoints use cursor-based pagination:
- Follow
response_metadata.next_cursor until empty
- Set explicit
limit values (e.g., 100-200) for reliable paging
- De-duplicate results by
id across pages
Message Formatting
- Prefer
markdown_text over text or blocks for formatted messages
- Use
<@USER_ID> format to mention users (not @username)
- Use
\n for line breaks in markdown_text
Known Pitfalls
- Channel resolution:
SLACK_FIND_CHANNELS can return empty results if channel is private and bot hasn't been invited
- Rate limits:
SLACK_LIST_ALL_USERS and other list endpoints can hit HTTP 429; honor Retry-After header
- Nested responses: Results may be nested under
response.data.results[0].response.data in wrapped executions
- Thread vs channel:
SLACK_FETCH_CONVERSATION_HISTORY returns main timeline only; use SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION for thread replies
- Message editing: Requires both
channel and original message ts; persist these from SEND_MESSAGE response
- Search delays: Recently posted messages may not appear in search results immediately
- Scope limitations: Missing OAuth scopes can cause 403 errors; check with
SLACK_GET_APP_PERMISSION_SCOPES
Quick Reference
| Task |
Tool Slug |
Key Params |
| Find channels |
SLACK_FIND_CHANNELS |
query |
| List all channels |
SLACK_LIST_ALL_CHANNELS |
limit, cursor, types |
| Send message |
SLACK_SEND_MESSAGE |
channel, markdown_text |
| Edit message |
SLACK_UPDATES_A_SLACK_MESSAGE |
channel, ts, markdown_text |
| Search messages |
SLACK_SEARCH_MESSAGES |
query, count, sort |
| Get thread |
SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION |
channel, ts |
| Add reaction |
SLACK_ADD_REACTION_TO_AN_ITEM |
channel, name, timestamp |
| Find users |
SLACK_FIND_USERS |
search_query or email |
| List users |
SLACK_LIST_ALL_USERS |
limit, cursor |
| Open DM |
SLACK_OPEN_DM |
user IDs |
| Schedule message |
SLACK_SCHEDULE_MESSAGE |
channel, post_at, text |
| Get channel info |
SLACK_RETRIEVE_CONVERSATION_INFORMATION |
channel ID |
| Channel history |
SLACK_FETCH_CONVERSATION_HISTORY |
channel, oldest, latest |
| Workspace info |
SLACK_FETCH_TEAM_INFO |
(none) |
Tool Availability Rules
| Access |
Behavior |
| Full tool access |
Execute workflows, verify outputs, report errors. |
| Read-only |
Inspect and plan; provide exact commands or dispatch request for writes. |
| No integration |
State limitation; do not fabricate API results. |
Related tool sets
Review / Decision / Execution Criteria
- Prefer smallest safe change; confirm destructive actions with the user.
- Use evidence from tool responses; cite IDs and links when present.
- Match integration-specific conventions (JQL, RFC3339, A1 notation, etc.).
Output Format
Report:
- What was requested and what was done.
- Key results (tables or bullets).
- Errors, blockers, or missing permissions.
- Suggested next steps.
Quality Bar
- Specific, actionable, and grounded in tool output.
- Concise unless the user asked for detail.
- Respect rate limits, pagination, and API semantics.
Safety and Boundaries
- Do not commit secrets, tokens, or PII into skills or user-visible logs.
- Do not fabricate validation, send, or write confirmations.
- Confirm destructive operations (delete, destroy, mass update) when appropriate.
Escalation / Dispatch Rules
- If the task spans multiple domains, use or suggest related skills via
relationships.skills.
- If write access is required but unavailable, dispatch or ask the user to enable tools.
References
- Legacy content migrated from
skills/old_skills.json (slack).
skills/skill.instruction.md, skills/meta.instructions.md
1---2name: slack3description: Automates Slack messages, channels, search, reactions, and threads via Rube MCP (Composio). Use after RUBE_SEARCH_TOOLS and an ACTIVE Slack workspace connection.4---56# Slack78## Purpose910Operate Slack workspaces through Composio’s Slack toolkit on Rube MCP: discover schemas, ensure ACTIVE Slack OAuth, then send messages, search conversations, manage channels/users, threads, and reactions.1112## When to Use1314- Post or update messages (including threads).15- Search messages or list channels/users.16- Add reactions or manage channel membership when tools allow.1718## When NOT to Use1920- Email → **gmail**.21- Without Rube MCP or before Slack connection is ACTIVE.22- Posting on behalf of the user without their intent for public channels.2324## Expected Outcome2526- `RUBE_SEARCH_TOOLS` before each workflow for current slugs.27- Channel/user ids resolved via list/search tools when names are given.28- Message timestamps and channel ids from tool responses.2930## Inputs to Gather3132- Channel id or name; user id for DMs when needed.33- Message text (and thread_ts for replies).34- Search query and time bounds for conversation search.3536## Workflow37381. Confirm Rube MCP available (`RUBE_SEARCH_TOOLS`).392. `RUBE_MANAGE_CONNECTIONS` with toolkit `slack`; OAuth until ACTIVE.403. `RUBE_SEARCH_TOOLS` for Slack action; call with schema parameters.414. Resolve channel/user ids when the user gives names.425. Confirm sends in #channels when the user asked for a dry run or preview.4344## Rube MCP and Slack toolkit4546Automate Slack workspace operations including messaging, search, channel management, and reaction workflows through Composio's Slack toolkit.4748## Prerequisites4950- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)51- Active Slack connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `slack`52- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas5354## Setup5556**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.5758591. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds602. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `slack`613. If connection is not ACTIVE, follow the returned auth link to complete Slack OAuth624. Confirm connection status shows ACTIVE before running any workflows6364## Core Workflows6566### 1. Send Messages to Channels6768**When to use**: User wants to post a message to a Slack channel or DM6970**Tool sequence**:711. `SLACK_FIND_CHANNELS` - Resolve channel name to channel ID [Prerequisite]722. `SLACK_LIST_ALL_CHANNELS` - Fallback if FIND_CHANNELS returns empty/ambiguous results [Fallback]733. `SLACK_FIND_USERS` - Resolve user for DMs or @mentions [Optional]744. `SLACK_OPEN_DM` - Open/reuse a DM channel if messaging a user directly [Optional]755. `SLACK_SEND_MESSAGE` - Post the message with resolved channel ID [Required]766. `SLACK_UPDATES_A_SLACK_MESSAGE` - Edit the posted message if corrections needed [Optional]7778**Key parameters**:79- `channel`: Channel ID or name (without '#' prefix)80- `markdown_text`: Preferred field for formatted messages (supports headers, bold, italic, code blocks)81- `text`: Raw text fallback (deprecated in favor of markdown_text)82- `thread_ts`: Timestamp of parent message to reply in a thread83- `blocks`: Block Kit layout blocks (deprecated, use markdown_text)8485**Pitfalls**:86- `SLACK_FIND_CHANNELS` requires `query` param; missing it errors with "Invalid request data provided"87- `SLACK_SEND_MESSAGE` requires valid channel plus one of markdown_text/text/blocks/attachments88- Invalid block payloads return error=invalid_blocks (max 50 blocks)89- Replies become top-level posts if `thread_ts` is omitted90- Persist `response.data.channel` and `response.data.message.ts` from SEND_MESSAGE for edit/thread operations9192### 2. Search Messages and Conversations9394**When to use**: User wants to find specific messages across the workspace9596**Tool sequence**:971. `SLACK_FIND_CHANNELS` - Resolve channel for scoped search with `in:#channel` [Optional]982. `SLACK_FIND_USERS` - Resolve user for author filter with `from:@user` [Optional]993. `SLACK_SEARCH_MESSAGES` - Run keyword search across accessible conversations [Required]1004. `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` - Expand threads for relevant hits [Required]101102**Key parameters**:103- `query`: Search string supporting modifiers (`in:#channel`, `from:@user`, `before:YYYY-MM-DD`, `after:YYYY-MM-DD`, `has:link`, `has:file`)104- `count`: Results per page (max 100), or total with auto_paginate=true105- `sort`: 'score' (relevance) or 'timestamp' (chronological)106- `sort_dir`: 'asc' or 'desc'107108**Pitfalls**:109- Validation fails if `query` is missing/empty110- `ok=true` can still mean no hits (`response.data.messages.total=0`)111- Matches are under `response.data.messages.matches` (sometimes also `response.data_preview.messages.matches`)112- `match.text` may be empty/truncated; key info can appear in `matches[].attachments[]`113- Thread expansion via FETCH_MESSAGE_THREAD can truncate when `response.data.has_more=true`; paginate via `response_metadata.next_cursor`114115### 3. Manage Channels and Users116117**When to use**: User wants to list channels, users, or workspace info118119**Tool sequence**:1201. `SLACK_FETCH_TEAM_INFO` - Validate connectivity and get workspace identity [Required]1212. `SLACK_LIST_ALL_CHANNELS` - Enumerate public channels [Required]1223. `SLACK_LIST_CONVERSATIONS` - Include private channels and DMs [Optional]1234. `SLACK_LIST_ALL_USERS` - List workspace members [Required]1245. `SLACK_RETRIEVE_CONVERSATION_INFORMATION` - Get detailed channel metadata [Optional]1256. `SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONS` - List user groups [Optional]126127**Key parameters**:128- `cursor`: Pagination cursor from `response_metadata.next_cursor`129- `limit`: Results per page (default varies; set explicitly for large workspaces)130- `types`: Channel types filter ('public_channel', 'private_channel', 'im', 'mpim')131132**Pitfalls**:133- Workspace metadata is nested under `response.data.team`, not top-level134- `SLACK_LIST_ALL_CHANNELS` returns public channels only; use `SLACK_LIST_CONVERSATIONS` for private/IM coverage135- `SLACK_LIST_ALL_USERS` can hit HTTP 429 rate limits; honor Retry-After header136- Always paginate via `response_metadata.next_cursor` until empty; de-duplicate by `id`137138### 4. React to and Thread Messages139140**When to use**: User wants to add reactions or manage threaded conversations141142**Tool sequence**:1431. `SLACK_SEARCH_MESSAGES` or `SLACK_FETCH_CONVERSATION_HISTORY` - Find the target message [Prerequisite]1442. `SLACK_ADD_REACTION_TO_AN_ITEM` - Add an emoji reaction [Required]1453. `SLACK_FETCH_ITEM_REACTIONS` - List reactions on a message [Optional]1464. `SLACK_REMOVE_REACTION_FROM_ITEM` - Remove a reaction [Optional]1475. `SLACK_SEND_MESSAGE` - Reply in thread using `thread_ts` [Optional]1486. `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` - Read full thread [Optional]149150**Key parameters**:151- `channel`: Channel ID where the message lives152- `timestamp` / `ts`: Message timestamp (unique identifier like '1234567890.123456')153- `name`: Emoji name without colons (e.g., 'thumbsup', 'wave::skin-tone-3')154- `thread_ts`: Parent message timestamp for threaded replies155156**Pitfalls**:157- Reactions require exact channel ID + message timestamp pair158- Emoji names use Slack's naming convention without colons159- `SLACK_FETCH_CONVERSATION_HISTORY` only returns main channel timeline, NOT threaded replies160- Use `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` with parent's `thread_ts` to get thread replies161162### 5. Schedule Messages163164**When to use**: User wants to schedule a message for future delivery165166**Tool sequence**:1671. `SLACK_FIND_CHANNELS` - Resolve channel ID [Prerequisite]1682. `SLACK_SCHEDULE_MESSAGE` - Schedule the message with `post_at` timestamp [Required]169170**Key parameters**:171- `channel`: Resolved channel ID172- `post_at`: Unix timestamp for delivery (up to 120 days in advance)173- `text` / `blocks`: Message content174175**Pitfalls**:176- Scheduling is limited to 120 days in advance177- `post_at` must be a Unix timestamp, not ISO 8601178179## Common Patterns180181### ID Resolution182Always resolve display names to IDs before operations:183- **Channel name -> Channel ID**: `SLACK_FIND_CHANNELS` with `query` param184- **User name -> User ID**: `SLACK_FIND_USERS` with `search_query` or `email`185- **DM channel**: `SLACK_OPEN_DM` with resolved user IDs186187### Pagination188Most list endpoints use cursor-based pagination:189- Follow `response_metadata.next_cursor` until empty190- Set explicit `limit` values (e.g., 100-200) for reliable paging191- De-duplicate results by `id` across pages192193### Message Formatting194- Prefer `markdown_text` over `text` or `blocks` for formatted messages195- Use `<@USER_ID>` format to mention users (not @username)196- Use `\n` for line breaks in markdown_text197198## Known Pitfalls199200- **Channel resolution**: `SLACK_FIND_CHANNELS` can return empty results if channel is private and bot hasn't been invited201- **Rate limits**: `SLACK_LIST_ALL_USERS` and other list endpoints can hit HTTP 429; honor Retry-After header202- **Nested responses**: Results may be nested under `response.data.results[0].response.data` in wrapped executions203- **Thread vs channel**: `SLACK_FETCH_CONVERSATION_HISTORY` returns main timeline only; use `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` for thread replies204- **Message editing**: Requires both `channel` and original message `ts`; persist these from SEND_MESSAGE response205- **Search delays**: Recently posted messages may not appear in search results immediately206- **Scope limitations**: Missing OAuth scopes can cause 403 errors; check with `SLACK_GET_APP_PERMISSION_SCOPES`207208## Quick Reference209210| Task | Tool Slug | Key Params |211|------|-----------|------------|212| Find channels | `SLACK_FIND_CHANNELS` | `query` |213| List all channels | `SLACK_LIST_ALL_CHANNELS` | `limit`, `cursor`, `types` |214| Send message | `SLACK_SEND_MESSAGE` | `channel`, `markdown_text` |215| Edit message | `SLACK_UPDATES_A_SLACK_MESSAGE` | `channel`, `ts`, `markdown_text` |216| Search messages | `SLACK_SEARCH_MESSAGES` | `query`, `count`, `sort` |217| Get thread | `SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION` | `channel`, `ts` |218| Add reaction | `SLACK_ADD_REACTION_TO_AN_ITEM` | `channel`, `name`, `timestamp` |219| Find users | `SLACK_FIND_USERS` | `search_query` or `email` |220| List users | `SLACK_LIST_ALL_USERS` | `limit`, `cursor` |221| Open DM | `SLACK_OPEN_DM` | user IDs |222| Schedule message | `SLACK_SCHEDULE_MESSAGE` | `channel`, `post_at`, `text` |223| Get channel info | `SLACK_RETRIEVE_CONVERSATION_INFORMATION` | channel ID |224| Channel history | `SLACK_FETCH_CONVERSATION_HISTORY` | `channel`, `oldest`, `latest` |225| Workspace info | `SLACK_FETCH_TEAM_INFO` | (none) |226227## Tool Availability Rules228229| Access | Behavior |230|--------|----------|231| Full tool access | Execute workflows, verify outputs, report errors. |232| Read-only | Inspect and plan; provide exact commands or dispatch request for writes. |233| No integration | State limitation; do not fabricate API results. |234235### Related tool sets236237- `slack`238239- MCP: `slack`240241## Review / Decision / Execution Criteria242243- Prefer smallest safe change; confirm destructive actions with the user.244- Use evidence from tool responses; cite IDs and links when present.245- Match integration-specific conventions (JQL, RFC3339, A1 notation, etc.).246247## Output Format248249Report:2502511. What was requested and what was done.2522. Key results (tables or bullets).2533. Errors, blockers, or missing permissions.2544. Suggested next steps.255256## Quality Bar257258- Specific, actionable, and grounded in tool output.259- Concise unless the user asked for detail.260- Respect rate limits, pagination, and API semantics.261262## Safety and Boundaries263264- Do not commit secrets, tokens, or PII into skills or user-visible logs.265- Do not fabricate validation, send, or write confirmations.266- Confirm destructive operations (delete, destroy, mass update) when appropriate.267268## Escalation / Dispatch Rules269270- If the task spans multiple domains, use or suggest related skills via `relationships.skills`.271- If write access is required but unavailable, dispatch or ask the user to enable tools.272273## References274275- Legacy content migrated from `skills/old_skills.json` (`slack`).276- `skills/skill.instruction.md`, `skills/meta.instructions.md`