Agent skill
slack-webhook
Slack Webhook for posting messages. Use when user says "post to Slack", "Slack webhook", or "send Slack notification".
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/slack-webhook
SKILL.md
Slack Incoming Webhook
Send messages to a Slack channel using Incoming Webhooks. No OAuth or bot setup required.
When to Use
- Send notifications to a specific channel
- CI/CD notifications, alerts, status updates
- Quick integration without full Slack app setup
Prerequisites
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX
Get Webhook URL
- Create app: https://api.slack.com/apps → Create New App → From scratch
- Select Incoming Webhooks → Toggle On
- Click Add New Webhook to Workspace
- Select channel → Allow
- Copy Webhook URL
Usage
Simple Message
Write to /tmp/slack_request.json:
{
"text": "Hello, world."
}
Then run:
curl -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @/tmp/slack_request.json
With Formatting
Write to /tmp/slack_request.json:
{
"text": "*Bold* and _italic_ text"
}
Then run:
curl -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @/tmp/slack_request.json
With Link
Write to /tmp/slack_request.json:
{
"text": "Check <https://example.com|this link>"
}
Then run:
curl -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @/tmp/slack_request.json
With Blocks (Rich Layout)
Write to /tmp/slack_request.json:
{
"text": "New review submitted",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Danny left the following review:"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "<https://example.com|Overlook Hotel>\n:star:\nDoors had too many axe holes."
}
}
]
}
Then run:
curl -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @/tmp/slack_request.json
With Fields
Write to /tmp/slack_request.json:
{
"text": "Deployment status",
"blocks": [
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Environment:*\nProduction"
},
{
"type": "mrkdwn",
"text": "*Status:*\nSuccess"
}
]
}
]
}
Then run:
curl -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @/tmp/slack_request.json
Message Formatting
| Syntax | Result |
|---|---|
*bold* |
bold |
_italic_ |
italic |
~strike~ |
|
`code` |
code |
\n |
newline |
<URL|text> |
hyperlink |
:emoji: |
emoji |
Shell Escaping
Messages with ! may fail due to shell history expansion. Use heredoc:
curl -s -X POST $(printenv SLACK_WEBHOOK_URL) -H "Content-type: application/json" -d @- << 'EOF'
{"text":"Deploy completed! :rocket:"}
EOF
Response
Success: ok (HTTP 200)
Errors:
invalid_payload- Malformed JSONno_text- Missingtextfieldno_service- Webhook disabled or invalidchannel_not_found- Channel deletedchannel_is_archived- Channel archivedaction_prohibited- Admin restriction
Limitations
- One webhook = one channel only
- Cannot override username or icon (set in app config)
- Send only (no reading messages)
- Cannot delete messages after posting
- Rate limit: 1 message/second
For full API access, use the slack skill with Bot Token.
API Reference
- Webhooks Guide: https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks
- Block Kit Builder: https://app.slack.com/block-kit-builder
- Message Formatting: https://docs.slack.dev/messaging/formatting-message-text
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?