.claude/skills/api-slack/SKILL.md
Slack Web API for messaging, channels, and notifications. Uses Bot token for headless/CI. Activate for Slack operations.
npx skillsauth add d0nghyun/neuron api-slackInstall 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.
Credentials File: .credentials/slack.json
{
"bot_token": "xoxb-...",
"channel_id": "C..."
}
Create token at: https://api.slack.com/apps → Your App → OAuth & Permissions
Load credentials before API calls:
SLACK_BOT_TOKEN=$(jq -r '.bot_token' /Users/dhlee/Git/personal/neuron/.credentials/slack.json)
SLACK_CHANNEL_ID=$(jq -r '.channel_id' /Users/dhlee/Git/personal/neuron/.credentials/slack.json)
Required Scopes:
chat:write - Send messageschannels:read - List public channelschannels:history - Read public channel messagesgroups:history - Read private channel messagesfiles:write - Upload filesreactions:read - Read reactions (optional)https://slack.com/api
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
-H "Content-Type: application/json"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
"https://slack.com/api/auth.test"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "CHANNEL_ID",
"text": "Hello from Claude!"
}' \
"https://slack.com/api/chat.postMessage"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "CHANNEL_ID",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Title*\nDescription text"
}
}
]
}' \
"https://slack.com/api/chat.postMessage"
curl -s -X GET \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
"https://slack.com/api/conversations.list?types=public_channel,private_channel"
curl -s -X GET \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
"https://slack.com/api/conversations.history?channel=CHANNEL_ID&limit=10"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-F "channels=CHANNEL_ID" \
-F "file=@/path/to/file" \
-F "initial_comment=File description" \
"https://slack.com/api/files.upload"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "CHANNEL_ID",
"thread_ts": "1234567890.123456",
"text": "Thread reply"
}' \
"https://slack.com/api/chat.postMessage"
curl -s -X POST \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "CHANNEL_ID",
"timestamp": "1234567890.123456",
"name": "thumbsup"
}' \
"https://slack.com/api/reactions.add"
| Format | Syntax |
|--------|--------|
| Bold | *bold* |
| Italic | _italic_ |
| Strike | ~strike~ |
| Code | `code` |
| Code block | ```code``` |
| Link | <https://url|text> |
| User mention | <@USER_ID> |
| Channel mention | <#CHANNEL_ID> |
| Error | Meaning | Action |
|-------|---------|--------|
| invalid_auth | Bad token | Check .credentials/slack.json |
| channel_not_found | Invalid channel | Verify channel ID |
| not_in_channel | Bot not in channel | Invite bot to channel |
| ratelimited | Too many requests | Wait and retry |
Implement exponential backoff on ratelimited responses.
databases
Notion schedule management. Query today/weekly schedules, add/modify/complete schedules.
testing
Recap session memory into vault and validate vault structure
testing
Counterfactual review of decision paths after Moderate+ tasks
tools
Create a release with version tag. Converts UNRELEASED.md to version file and creates git tag.