Skip to content
Agentmart
Submit a tool

crew-notify

Set up outbound notifications to Microsoft Teams or Telegram - deploy results and "Claude stopped and is waiting" questions - and explain the two-way MCP…

Skill by mbadali25

IndexedGPL-2.0★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/mbadali25-crew-notify

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Set up outbound notifications to Microsoft Teams or Telegram - deploy results and "Claude stopped and is waiting" questions - and explain the two-way MCP options. Use when the user says set up notifications, notify me, send to Teams, set up a Telegram bot, post updates to a channel, wire up a webhook, or asks how to get alerted when a promotion fails or Claude is waiting on them.

Use cases: devops, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/crew-notify

What's inside

Skill name
crew-notify
Description
Set up outbound notifications to Microsoft Teams or Telegram - deploy results and "Claude stopped and is waiting" questions - and explain the two-way MCP options. Use when the user says set up notifications, notify me, send to Teams, set up a Telegram bot, post updates to a channel, wire up a webhook, or asks how to get alerted when a promotion fails or Claude is waiting on them.
License
GPL-2.0
Instructions
262 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network
  • Instructions read files in your home folder (~/.ssh, ~/.aws…)

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Notifications

Outbound only, by design. crew sends messages; it never reads a channel and
never accepts instructions from one. The reason is at the bottom of this file
and it is worth reading before you decide to go two-way.

---

## Microsoft Teams

L-0725: crew itself no longer posts to a Teams webhook (`notify.urlEnv` is gone), so
`"provider": "teams"` sends nothing. The webhook below still works for your own
scripts; crew's built-in notifier is Telegram only.

### The old way no longer works

If you find a tutorial saying "channel ••• → Connectors → Incoming Webhook,"
close it. <cite>Office 365 Connectors were permanently disabled across
18–22 May 2026</cite>, and that path is gone. The supported route is a
**Workflows (Power Automate)** webhook.

### Setup

1. In Teams, click the **•••** next to the target channel → **Workflows**.
2. Choose the template **Post to a channel when a webhook request is received**.
   (Private channels are supported; if the picker does not offer yours, create
   the flow from the Power Automate portal instead.)
3. Confirm the Team and Channel, finish the flow, and copy the URL it gives you.
4. Export it in your shell profile — never in the repo, never in config:

```bash
export CREW_TEAMS_WEBHOOK='https://prod-xx.westus.logic.azure.com/workflows/...'
```

5. Test before trusting it:

```bash
curl -sS -X POST "$CREW_TEAMS_WEBHOOK" -H 'Content-Type: application/json' \
  -d '{"type":"message","attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","content":{"type":"AdaptiveCard","version":"1.4","body":[{"type":"TextBlock","text":"crew wired up","wrap":true}]}}]}'
```

### Limits worth knowing

- Messages post as the **Flow bot**. Custom bot name and icon are not available
  via Workflows webhooks — do not spend time trying.
- Interactive buttons do not render on MessageCard payloads. Use Adaptive Cards
  if you want richer layout, but see the warning about approvals below.
- The flow runs under whoever created it. If that person leaves, the
  notifications stop. Create it from a service or shared account if this matters.

---

## Telegram

Yes — Telegram integrations are bots. You create one through another bot.

### Setup

1. Message **@BotFather** in Telegram → `/newbot` → follow prompts.
2. Copy the token it gives you (looks like `123456789:AA...`).
3. Send your new bot any message, or add it to a group and post there.
   A bot cannot message you first; the conversation must be opened from your side.
4. Find the chat id:

```bash
curl -sS "https://api.telegram.org/bot${CREW_TELEGRAM_TOKEN}/getUpdates" \
  | python3 -c 'import json,sys;print([u["message"]["chat"]["id"] for u in json.load(sys.stdin)["result"]])'
```

Group ids are negative. That is normal, not an error.

5. Export both:

```bash
export CREW_TELEGRAM_TOKEN='123456789:AA...'
```

On Windows, set it for your user from PowerShell. `.Trim()` drops the
trailing space or newline a paste often carries; the hooks trim too, but the
`curl` test below does not:

```powershell
[Environment]::SetEnvironmentVariable('CREW_TELEGRAM_TOKEN', '123456789:AA...'.Trim(), 'User')
```

Restart Claude Code afterwards so the hooks see it.

6. Test:

```bash
curl -sS -X POST "https://api.telegram.org/bot${CREW_TELEGRAM_TOKEN}/sendMessage" \
  --data-urlencode "chat_id=<id>" --data-urlencode "text=crew wired up"
```

### Note

If you add the bot to a group, privacy mode means it only sees messages
addressed to it — which is fine here, since crew never reads anyway.

---

## Configuration

Set it once, machine-wide, in `~/.claude/crew/config.json` - `notify` is a
global key ("the person's own chat, not the project's"). A repo's
`.crew/config.json` overrides any key it sets; a repo that leaves `provider`
null inherits the global one, and a repo that says `"provider": "none"` opts
out on purpose (`crew_notify.py config` prints that it overrides the global
provider). `tokenEnv` is read from the global file only: a
repo's is ignored, with a notice, so a cloned repo cannot pick which variable
becomes the request URL. That cannot stop a repo setting the variable's
value: a project's `.claude/settings.json` `env` block can set the variable
your global `tokenEnv` names for sessions in that repo, and crew
cannot tell that value from yours. Redirects are refused. `config` masks `chatId`.

```json
"notify": {
  "provider": "telegram",
  "tokenEnv": "CREW_TELEGRAM_TOKEN",

From mbadali25/useful-claude-add-ons, GPL-2.0.

More from mbadali25/useful-claude-add-ons

Signals

Stars
2
Forks
0
Open issues
17
Last commit (this folder)
Oct 21, 2026 (7 days ago)
Last release
Jul 28, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
GPL-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from mbadali25

Cite this page

crew-notify skill. Agent Mart. https://agentmart.dev/skills/mbadali25-crew-notify (last updated 2026-10-24)