slack-api-5-slash-commands
Sub-skill of slack-api: 5. Slash Commands.
Best use case
slack-api-5-slash-commands is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Sub-skill of slack-api: 5. Slash Commands.
Teams using slack-api-5-slash-commands should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/5-slash-commands/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How slack-api-5-slash-commands Compares
| Feature / Agent | slack-api-5-slash-commands | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Sub-skill of slack-api: 5. Slash Commands.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 5. Slash Commands
## 5. Slash Commands
```python
# commands.py
# ABOUTME: Slash command implementations
# ABOUTME: Various utility commands for team workflows
from slack_bolt import App
from datetime import datetime, timedelta
import random
import os
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
@app.command("/standup")
def handle_standup(ack, body, client, command):
"""Start a standup thread"""
ack()
channel = command['channel_id']
user = command['user_id']
# Create standup thread
result = client.chat_postMessage(
channel=channel,
blocks=[
{
"type": "header",
"text": {
"type": "plain_text",
"text": f":sunrise: Daily Standup - {datetime.now().strftime('%A, %B %d')}",
"emoji": True
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Please share your updates in this thread:\n\n1. :white_check_mark: What did you accomplish yesterday?\n2. :calendar: What are you working on today?\n3. :construction: Any blockers?"
}
},
{
"type": "divider"
},
{
"type": "context",
"elements": [
{"type": "mrkdwn", "text": f"Started by <@{user}>"}
]
}
],
text="Daily Standup"
)
# Pin the standup
client.pins_add(channel=channel, timestamp=result['ts'])
@app.command("/poll")
def handle_poll(ack, body, client, command):
"""Create a quick poll: /poll "Question" "Option 1" "Option 2" ..."""
ack()
text = command.get('text', '')
# Parse quoted arguments
import re
parts = re.findall(r'"([^"]+)"', text)
if len(parts) < 3:
client.chat_postEphemeral(
channel=command['channel_id'],
user=command['user_id'],
text='Usage: /poll "Question" "Option 1" "Option 2" "Option 3"'
)
return
question = parts[0]
options = parts[1:]
# Create poll blocks
option_blocks = []
emojis = [':one:', ':two:', ':three:', ':four:', ':five:', ':six:', ':seven:', ':eight:', ':nine:']
for i, option in enumerate(options[:9]):
option_blocks.append({
"type": "section",
"text": {
"type": "mrkdwn",
"text": f"{emojis[i]} {option}"
}
})
blocks = [
{
"type": "header",
"text": {"type": "plain_text", "text": ":bar_chart: Poll", "emoji": True}
},
{
"type": "section",
"text": {"type": "mrkdwn", "text": f"*{question}*"}
},
{"type": "divider"},
*option_blocks,
{"type": "divider"},
{
"type": "context",
"elements": [
{"type": "mrkdwn", "text": f"Poll by <@{command['user_id']}> | React to vote!"}
]
}
]
result = client.chat_postMessage(
channel=command['channel_id'],
blocks=blocks,
text=f"Poll: {question}"
)
# Add reaction options
for i in range(len(options[:9])):
emoji_names = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
client.reactions_add(
channel=command['channel_id'],
timestamp=result['ts'],
name=emoji_names[i]
)
@app.command("/remind-team")
def handle_team_reminder(ack, body, client, command):
"""Set a team reminder: /remind-team 15m Check deployment status"""
ack()
text = command.get('text', '').strip()
parts = text.split(' ', 1)
if len(parts) < 2:
client.chat_postEphemeral(
channel=command['channel_id'],
user=command['user_id'],
text='Usage: /remind-team 15m Your reminder message'
)
return
time_str = parts[0]
message = parts[1]
# Parse time
time_map = {'s': 1, 'm': 60, 'h': 3600}
unit = time_str[-1]
if unit not in time_map:
client.chat_postEphemeral(
channel=command['channel_id'],
user=command['user_id'],
text='Time format: 15s, 15m, or 2h'
)
return
try:
amount = int(time_str[:-1])
seconds = amount * time_map[unit]
except ValueError:
client.chat_postEphemeral(
channel=command['channel_id'],
user=command['user_id'],
text='Invalid time format'
)
return
# Schedule message
post_at = int(datetime.now().timestamp()) + seconds
client.chat_scheduleMessage(
channel=command['channel_id'],
post_at=post_at,
text=f":bell: *Reminder:* {message}\n\n_Set by <@{command['user_id']}>_"
)
client.chat_postEphemeral(
channel=command['channel_id'],
user=command['user_id'],
text=f"Reminder scheduled for {time_str} from now!"
)
@app.command("/random-pick")
def handle_random_pick(ack, body, client, command):
*Content truncated — see parent skill for full reference.*Related Skills
slack-gif-creator
Create custom animated GIFs for Slack reactions and celebrations. Use for team milestones, custom emoji reactions, inside jokes, and workplace fun.
repo-cleanup-progress-tracking-commands
Sub-skill of repo-cleanup: Progress Tracking Commands (+1).
improve-related-commands
Sub-skill of improve: Related Commands.
clean-code-quick-scan-commands
Sub-skill of clean-code: Quick Scan Commands.
raycast-alfred-1-raycast-script-commands
Sub-skill of raycast-alfred: 1. Raycast Script Commands.
windmill-integration-with-database-and-slack
Sub-skill of windmill: Integration with Database and Slack.
n8n-integration-with-slack-google-sheets-and-email
Sub-skill of n8n: Integration with Slack, Google Sheets, and Email.
github-actions-integration-with-slack-notifications
Sub-skill of github-actions: Integration with Slack Notifications (+1).
activepieces-integration-with-notion-and-slack
Sub-skill of activepieces: Integration with Notion and Slack.
bemrosetta-cli-commands
Sub-skill of bemrosetta: CLI Commands.
python-project-template-key-commands
Sub-skill of python-project-template: Key Commands.
uv-package-manager-5-running-scripts-and-commands
Sub-skill of uv-package-manager: 5. Running Scripts and Commands (+1).