discord-webhook/skills/discord-webhook/SKILL.md
This skill should be used when the user asks to "send a Discord notification", "notify Discord", "post to Discord", "send a message to Discord webhook", "alert Discord channel", or when another agent, hook, or skill needs to deliver a notification to a Discord channel via webhook. Provides the complete workflow for reading webhook configuration, formatting messages (plain text or Embed), and sending via HTTP POST.
npx skillsauth add musingfox/cc-plugins Discord WebhookInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Send messages to Discord channels via webhook HTTP POST. Supports plain text and rich Embed format with multi-webhook routing.
Discord webhooks accept JSON payloads via HTTP POST. This skill handles:
content) or rich EmbedcurlBefore resolving, source the project .env file if it exists:
[ -f .env ] && source .env
Then check environment variables:
Look for environment variable DISCORD_WEBHOOK_{NAME} where {NAME} is the uppercase target name:
# Examples:
# Target "deploy" → DISCORD_WEBHOOK_DEPLOY
# Target "alerts" → DISCORD_WEBHOOK_ALERTS
Look for environment variable DISCORD_WEBHOOK_URL.
If no webhook URL is found, inform the user:
No Discord webhook URL configured. Add to your
.envfile:DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your/webhookFor named targets, use
DISCORD_WEBHOOK_{NAME}(e.g.,DISCORD_WEBHOOK_DEPLOY).
Do NOT proceed without a valid webhook URL.
For simple string messages, use the content field:
{
"content": "Deploy v1.2.3 completed successfully"
}
content has a 2000 character limit. Truncate with … if exceeded.
For structured information (deploy reports, error alerts, build status), use the embeds array:
{
"embeds": [{
"title": "Deploy Complete",
"description": "Version **v1.2.3** deployed to production",
"color": 3066993,
"fields": [
{ "name": "Environment", "value": "production", "inline": true },
{ "name": "Duration", "value": "2m 34s", "inline": true }
],
"footer": { "text": "Deployed by Claude Code" },
"timestamp": "2026-04-10T12:00:00.000Z"
}]
}
| Scenario | Format | Reason | |----------|--------|--------| | Simple status update | Plain text | Short, no structure needed | | Error alert with details | Embed | Structured fields, color coding | | Build/deploy report | Embed | Multiple data points | | Quick notification | Plain text | Minimal overhead | | Multi-field data | Embed | Fields layout is clearer |
| Purpose | Color (decimal) | Hex |
|---------|----------------|-----|
| Success | 3066993 | #2ECC71 |
| Error | 15158332 | #E74C3C |
| Warning | 15105570 | #E67E22 |
| Info | 3447003 | #3498DB |
| Default | 9807270 | #959B86 |
Use curl to POST the JSON payload:
curl -s -o /dev/null -w "%{http_code}" \
-H "Content-Type: application/json" \
-d '{"content":"Hello from Claude Code"}' \
"$WEBHOOK_URL"
| HTTP Status | Meaning | Action |
|-------------|---------|--------|
| 204 | Success (no content) | Message sent successfully |
| 400 | Bad request | Check JSON payload format |
| 401 | Unauthorized | Webhook URL is invalid or revoked |
| 404 | Not found | Webhook has been deleted |
| 429 | Rate limited | Wait and retry (respect Retry-After header) |
On success (204), confirm to the caller that the message was sent. On failure, report the HTTP status code and suggest corrective action.
Discord webhooks have a rate limit of ~30 requests per minute. If sending multiple messages, add a 2-second delay between requests.
.env (gitignored)jq -Rs . to safely escape strings for JSON embedding:
SAFE_MSG=$(echo "$RAW_MSG" | jq -Rs .)
curl for sending webhook requests (most reliable for JSON payloads)jq for JSON construction with dynamic valuesdata-ai
Unified entry point for Obsidian daily-note captures and long-form notes. Triggers on "記一下 / log / 紀錄 / capture this / 寫到 journal" (→ cap mode) and "建立筆記 / new note / 寫一份筆記 / create a note on" (→ note mode). Also via `/obw:cap` and `/obw:note`. Requires `.obsidian.yaml`.
tools
Use the `gog` CLI to operate Google Workspace — Gmail (read/search/send/labels/drafts), Calendar (events/RSVP/freebusy/focus-time/out-of-office), and Drive (list/search/upload/ download/share/move). Triggers on any Gmail, inbox, email, calendar, agenda, meeting, schedule, RSVP, Drive, Google Doc/Sheet/Slides, file share, or upload/download request.
documentation
Interactively create .obsidian.yaml for a project and install starter templates (task / doc / adr) into the vault's Templates folder. Skips templates that already exist; never overwrites.
tools
Manage project hook-guard installation — set up, diagnose, or update Claude Code hooks, git pre-commit, and commit-msg scripts with security checks, code-quality gates, and CLAUDECODE skip logic. Triggers on "set up hooks", "configure pre-commit", "add linting hooks", "initialize hook-guard", "check hooks", "hook doctor", "verify hook setup", "troubleshoot hooks", "update hooks", "regenerate hooks", "sync hooks with current tools", or similar requests.