A straightforward wrapper around Slack's incoming webhooks for posting messages from Claude. You write JSON to a temp file and curl it to your webhook URL. The skill covers the basics: plain text, markdown formatting, blocks for richer layouts, and fields for structured data. One thing to know upfront is that each webhook is hardcoded to a single channel and you can't change the sender name or icon on the fly, those are set in your Slack app config. The rate limit is one message per second. If you need to read messages, delete posts, or work across multiple channels, you'll want the full Bot Token API instead. Good for fire and forget notifications when you don't need bidirectional conversation.
npx -y skills add vm0-ai/vm0-skills --skill slack-webhook --agent claude-codeInstalls into .claude/skills of the current project.
Write to /tmp/slack_request.json:
{
"text": "Hello, world."
}
Then run:
curl -X POST $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @/tmp/slack_request.json
Write to /tmp/slack_request.json:
{
"text": "*Bold* and _italic_ text"
}
Then run:
curl -X POST $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @/tmp/slack_request.json
Write to /tmp/slack_request.json:
{
"text": "Check <https://example.com|this link>"
}
Then run:
curl -X POST $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @/tmp/slack_request.json
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 $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @/tmp/slack_request.json
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 $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @/tmp/slack_request.json
| Syntax | Result |
|---|---|
*bold* | bold |
_italic_ | italic |
~strike~ | |
`code` | code |
\n | newline |
<URL|text> | hyperlink |
:emoji: | emoji |
Messages with ! may fail due to shell history expansion. Use heredoc:
curl -s -X POST $SLACK_WEBHOOK_URL -H "Content-type: application/json" -d @- << 'EOF'
{"text":"Deploy completed! :rocket:"}
EOF
Success: ok (HTTP 200)
Errors:
invalid_payload - Malformed JSONno_text - Missing text fieldno_service - Webhook disabled or invalidchannel_not_found - Channel deletedchannel_is_archived - Channel archivedaction_prohibited - Admin restrictionFor full API access, use the slack skill with Bot Token.
juliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills