Step 0 — Load configuration
Read ${CLAUDE_PLUGIN_ROOT}/config.yaml.
If it does not exist, tell the user to copy config.example.yaml to config.yaml and fill in their values. Stop here.
Extract:
communication.tool — slack, teams, discord, or none
communication.channels — map of channel aliases to {id, name}
If communication.tool is "none", tell the user no communication tool is configured and stop.
Step 1 — Load adapter
Read the adapter file at ${CLAUDE_PLUGIN_ROOT}/skills/notify-team/adapters/{communication.tool}.md.
If the adapter does not exist, tell the user that {communication.tool} is not yet supported and stop.
Step 2 — Determine destination
From $ARGUMENTS, extract the target channel or person:
- Check if the argument matches a key in
{config.communication.channels} (e.g., "general", "alerts-dlq")
- If matched, use the channel's
{id} and {name} from config
- If not matched, use the adapter's search command to find the channel/person
- If no destination provided, list configured channels and ask the user
Store: {destination_id}, {destination_name}
Step 3 — Determine message type
Classify the message based on the description and conversation context:
| Type |
Indicators |
Tone |
incident |
outage, error, down, urgente, incidente |
Urgent, factual, action-oriented |
announcement |
release, deployment, change, anuncio |
Informative, clear, structured |
question |
question, pregunta, help, ayuda |
Collaborative, specific, context-rich |
update |
update, status, actualización, progreso |
Concise, progress-focused |
review |
review, feedback, revisión |
Structured, actionable |
If unclear, ask the user.
Step 4 — Detect language
Detect the language from:
- The conversation language
- The channel name (Spanish team channels → Spanish)
- If unclear, ask
Load the appropriate template:
- Spanish → references/templates-es.md
- English → references/templates-en.md
Step 5 — Draft message
Using the appropriate template for the message type, draft the message.
Include:
- Clear subject/headline
- Context (why this message is being sent)
- Key information (what happened, what changed, what is needed)
- Action items (if any — who needs to do what)
- Timeline (if applicable — when is this relevant)
IMPORTANT: The default action is to DRAFT the message, not send it. Always show the draft to the user first.
Step 6 — Review and send
Present the draft to the user:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📨 MESSAGE DRAFT
To: {destination_name}
Type: {message_type}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{formatted message}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ask the user:
- Send as draft — use the adapter's draft command (if supported)
- Send now — use the adapter's send command
- Edit — let the user modify the message
- Cancel — discard
Step 7 — Confirm
After sending:
- Display confirmation with timestamp
- Show link to the message (if available from adapter response)
1---2name: notify-team3description: Use when sending communication to the team. Use when user says 'notify team', 'notifica al equipo', 'send message', 'draft a message', 'enviar mensaje', or needs to communicate with the team.4---56## Step 0 — Load configuration78Read `${CLAUDE_PLUGIN_ROOT}/config.yaml`.9If it does not exist, tell the user to copy `config.example.yaml` to `config.yaml` and fill in their values. Stop here.1011Extract:12- `communication.tool` — slack, teams, discord, or none13- `communication.channels` — map of channel aliases to {id, name}1415If `communication.tool` is "none", tell the user no communication tool is configured and stop.1617## Step 1 — Load adapter1819Read the adapter file at `${CLAUDE_PLUGIN_ROOT}/skills/notify-team/adapters/{communication.tool}.md`.20If the adapter does not exist, tell the user that `{communication.tool}` is not yet supported and stop.2122## Step 2 — Determine destination2324From `$ARGUMENTS`, extract the target channel or person:25261. Check if the argument matches a key in `{config.communication.channels}` (e.g., "general", "alerts-dlq")272. If matched, use the channel's `{id}` and `{name}` from config283. If not matched, use the adapter's search command to find the channel/person294. If no destination provided, list configured channels and ask the user3031Store: `{destination_id}`, `{destination_name}`3233## Step 3 — Determine message type3435Classify the message based on the description and conversation context:3637| Type | Indicators | Tone |38|------|-----------|------|39| `incident` | outage, error, down, urgente, incidente | Urgent, factual, action-oriented |40| `announcement` | release, deployment, change, anuncio | Informative, clear, structured |41| `question` | question, pregunta, help, ayuda | Collaborative, specific, context-rich |42| `update` | update, status, actualización, progreso | Concise, progress-focused |43| `review` | review, feedback, revisión | Structured, actionable |4445If unclear, ask the user.4647## Step 4 — Detect language4849Detect the language from:501. The conversation language512. The channel name (Spanish team channels → Spanish)523. If unclear, ask5354Load the appropriate template:55- Spanish → [references/templates-es.md](references/templates-es.md)56- English → [references/templates-en.md](references/templates-en.md)5758## Step 5 — Draft message5960Using the appropriate template for the message type, draft the message.6162Include:63- Clear subject/headline64- Context (why this message is being sent)65- Key information (what happened, what changed, what is needed)66- Action items (if any — who needs to do what)67- Timeline (if applicable — when is this relevant)6869**IMPORTANT:** The default action is to DRAFT the message, not send it. Always show the draft to the user first.7071## Step 6 — Review and send7273Present the draft to the user:7475```76━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━77📨 MESSAGE DRAFT78 To: {destination_name}79 Type: {message_type}80━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━8182{formatted message}8384━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━85```8687Ask the user:881. **Send as draft** — use the adapter's draft command (if supported)892. **Send now** — use the adapter's send command903. **Edit** — let the user modify the message914. **Cancel** — discard9293## Step 7 — Confirm9495After sending:96- Display confirmation with timestamp97- Show link to the message (if available from adapter response)