slack
Slack Skill
Slack workspace integration with two components:
- Scripts — 7 Python scripts for on-demand Slack operations (bundled here)
- Session Bridge — connect THIS Claude Code session to Slack (background listener + inbox file, no extra API costs)
Daemon & Soul Engine: The Claudicle daemon (unified launcher, soul engine, cognitive pipeline, three-tier memory, Soul Monitor TUI) now lives in its own repo: github.com/tdimino/claudicle. Install Claudicle separately for daemon features.
When to Use This Skill
Scripts (on-demand)
- Posting messages to Slack channels or threads
- Reading channel history or thread replies
- Searching messages or files across the workspace
- Adding or managing reactions on messages
- Uploading files or code snippets
- Listing channels, getting channel info, or joining channels
- Looking up users by name, ID, or email
Session Bridge (recommended)
- Connecting any running Claude Code session to Slack
- Responding to @mentions and DMs with full tool access (this session IS the brain)
- No extra API costs — messages processed in the current session context
- Auto-notification of new messages via UserPromptSubmit hook
- Personality as Claudicle via soul.md instructions (no XML machinery needed)
Prerequisites
All scripts require the SLACK_BOT_TOKEN environment variable (a Bot User OAuth Token starting with xoxb-). Scripts also require requests (uv pip install --system requests).
# Verify token is set
echo $SLACK_BOT_TOKEN
First-Time Setup
- Go to api.slack.com/apps -> Create New App -> From Scratch
- Name it "Claude Code" -> select your workspace
- OAuth & Permissions -> Bot Token Scopes -> add all:
app_mentions:readchannels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,im:writechat:writefiles:write,files:readreactions:write,reactions:readsearch:readusers:read,users:read.emailusers:write(optional — enables green presence dot)
- Settings -> Socket Mode -> toggle ON -> generate an App-Level Token:
- Name:
socket-mode - Scope:
connections:write - Copy the
xapp-token
- Name:
- Event Subscriptions -> toggle ON (no Request URL needed with Socket Mode) -> Subscribe to Bot Events -> add:
app_mention— channel @mentionsmessage.im— direct messages (required for DMs to work)app_home_opened— App Home tab rendering
- App Home -> Show Tabs -> enable "Allow users to send Slash commands and messages from the messages tab"
- Install to Workspace -> approve permissions -> copy Bot User OAuth Token
- Set environment variables (add to shell profile):
export SLACK_BOT_TOKEN=xoxb-... # Bot User OAuth Token export SLACK_APP_TOKEN=xapp-... # App-Level Token (Socket Mode) - Invite the bot to channels:
/invite @Claude Code
After any scope or event subscription change: reinstall the app (Install App -> Reinstall to Workspace) and restart the listener.
Quick Start
# Post a message
python3 ~/.claude/skills/slack/scripts/slack_post.py "#general" "Hello from Claude"
# Read recent messages
python3 ~/.claude/skills/slack/scripts/slack_read.py "#general" -n 10
# Search the workspace
python3 ~/.claude/skills/slack/scripts/slack_search.py "deployment status"
# Connect this session to Slack via Claudicle Session Bridge
# (requires Claudicle installed — see github.com/tdimino/claudicle)
cd ~/.claudicle/daemon && python3 slack_listen.py --bg
python3 ~/.claude/skills/slack/scripts/slack_check.py
Session Bridge
Connect any running Claude Code session to Slack. A background listener catches @mentions and DMs -> inbox.jsonl. This session reads the inbox, processes with full tool access, posts responses back. No extra API costs.
Requires Claudicle daemon installed — see github.com/tdimino/claudicle.
# Connect
cd ~/.claudicle/daemon && python3 slack_listen.py --bg
# Check messages
python3 ~/.claude/skills/slack/scripts/slack_check.py
# Respond to thread, remove hourglass, mark handled
python3 ~/.claude/skills/slack/scripts/slack_post.py "C12345" "response" --thread "TS"
python3 ~/.claude/skills/slack/scripts/slack_react.py "C12345" "TS" "hourglass_flowing_sand" --remove
python3 ~/.claude/skills/slack/scripts/slack_check.py --ack 1
# Disconnect
cd ~/.claudicle/daemon && python3 slack_listen.py --stop
Soul Formatter (optional): scripts/slack_format.py adds Open Souls cognitive step formatting — perception framing, dialogue extraction, monologue logging.
python3 slack_format.py perception "Tom" "What's the status?" # -> Tom said, "..."
echo "$raw" | python3 slack_format.py extract # -> external dialogue only
echo "$raw" | python3 slack_format.py extract --narrate --log # -> narrated + logged
python3 slack_format.py instructions # -> cognitive step XML format
Automated Respond: /slack-respond processes all pending messages as Claudicle with full cognitive steps — perception, monologue, dialogue, post, ack — in a single invocation. See ~/.claude/skills/slack-respond/SKILL.md.
For full installation, architecture, inbox format, auto-notification hook, and troubleshooting, see references/session-bridge.md.
Script Selection Guide
| Task | Script | Example |
|---|---|---|
| Post a message | slack_post.py |
slack_post.py "#general" "Hello" |
| Reply to a thread | slack_post.py |
slack_post.py "#ch" "reply" --thread TS |
| Schedule a message | slack_post.py |
slack_post.py "#ch" "msg" --schedule ISO |
| Read channel history | slack_read.py |
slack_read.py "#general" -n 20 |
| Read thread | slack_read.py |
slack_read.py "#ch" --thread TS |
| Search messages | slack_search.py |
slack_search.py "query" |
| Search files | slack_search.py |
slack_search.py "query" --files |
| Add reaction | slack_react.py |
slack_react.py "#ch" TS emoji |
| Upload file | slack_upload.py |
slack_upload.py "#ch" ./file.pdf |
| Share code snippet | slack_upload.py |
slack_upload.py "#ch" --snippet CODE |
| List channels | slack_channels.py |
slack_channels.py |
| Join channel | slack_channels.py |
slack_channels.py --join "#ch" |
| Find user by email | slack_users.py |
slack_users.py --email user@co.com |
For full script documentation (all parameters, examples, test suite, common workflows), see references/scripts-reference.md.
Rate Limit Awareness
| Tier | Rate | Key Methods |
|---|---|---|
| Tier 1 | 1/min | conversations.history, conversations.replies |
| Tier 2 | 20/min | conversations.list, users.list, search.messages |
| Tier 3 | 50/min | reactions.*, conversations.info, chat.update |
| Tier 4 | 100+/min | files.getUploadURLExternal, files.completeUploadExternal |
| Special | 1/sec/channel | chat.postMessage |
All scripts handle rate limits automatically via _slack_utils.py (local cooldown + retry with Retry-After). See references/rate-limits.md for full details.
Troubleshooting
| Problem | Fix |
|---|---|
| Bot not responding to @mentions | Enable Socket Mode; verify SLACK_APP_TOKEN (xapp-) is exported |
| "missing_scope" error | Add the missing scope in OAuth & Permissions -> reinstall app |
| No search results | Invite bot to channels with /invite @Claude Code, or use user token (xoxp-) |
| Rate limited (429) | Scripts auto-retry; reduce batch sizes |
| "Sending messages turned off" | App Home -> enable "Allow users to send Slash commands and messages from the messages tab" |
| No green presence dot | Add users:write scope -> reinstall app |
| App Home tab blank | Subscribe to app_home_opened event |
For daemon-specific troubleshooting (soul engine, memory, launcher), see Claudicle docs.
File Structure
scripts/
├── slack_check.py # Session Bridge: read/ack inbox messages
├── slack_inbox_hook.py # Session Bridge: UserPromptSubmit auto-check hook
├── slack_format.py # Soul formatter: perception/extract/instructions (Open Souls paradigm)
├── slack_post.py # Post messages to channels/threads
├── slack_read.py # Read channel history or threads
├── slack_search.py # Search messages or files
├── slack_react.py # Add/remove reactions
├── slack_upload.py # Upload files or snippets
├── slack_channels.py # List/join channels
├── slack_users.py # Look up users
└── _slack_utils.py # Shared auth, rate limiting, API calls
Reference Index
| Reference | Contents |
|---|---|
references/session-bridge.md |
Session Bridge: installation, architecture, inbox format, usage workflow, soul formatter, troubleshooting |
references/unified-launcher-architecture.md |
Unified launcher: installation, architecture, per-channel sessions, SDK integration, data flows, threading model |
references/daemon-architecture.md |
Soul engine cognitive steps, memory tiers, XML format, App Home, Soul Monitor TUI |
references/scripts-reference.md |
Full documentation for all 7 scripts, test suite, common workflows |
references/onboarding-guide.md |
User model interview, CLAUDE.md generation, export commands |
references/rate-limits.md |
Slack API rate limit tiers and handling strategy |
Assets
assets/app-icon.png— Slack app icon for bot configuration
More from tdimino/claude-code-minoan
academic-research
Search academic papers, build literature reviews, and synthesize research findings — combines Exa MCP (research_paper category, arxiv filtering) with arxiv-mcp-server for paper discovery, download, and deep analysis. Triggers on academic paper, literature review, research synthesis, arxiv, find papers, scholarly search.
69travel-requirements-expert
Plan a trip, create an itinerary, or research a destination through a structured 5-phase workflow---discovery questions, Exa/Firecrawl research, expert detail gathering, and a day-by-day requirements spec. This skill should be used when a user says "plan a trip," "create an itinerary," "help me visit [place]," or needs travel research with specific venues, safety protocols, and dietary accommodations.
67twilio-api
Use this skill when working with Twilio communication APIs for SMS/MMS messaging, voice calls, phone number management, TwiML, webhook integration, two-way SMS conversations, bulk sending, or production deployment of telephony features. Includes official Twilio patterns, production code examples from Twilio-Aldea (provider-agnostic webhooks, signature validation, TwiML responses), and comprehensive TypeScript examples.
65figma-mcp
Convert Figma designs into production-ready code using MCP server tools. Use this skill when users provide Figma URLs, request design-to-code conversion, ask to implement Figma mockups, or need to extract design tokens and system values from Figma files. Works with frames, components, and entire design files to generate HTML, CSS, React, or other frontend code.
61firecrawl
Scrape web pages to clean markdown using Firecrawl v2 — handles JS-heavy pages, site crawls, URL mapping, document parsing (PDF/DOCX/XLSX), LLM-powered extraction, autonomous agent scraping, and post-scrape browser interaction (Interact API). Prefer over WebFetch for quality and completeness. Triggers on scrape URL, fetch page, crawl site, extract content, parse document, web to markdown, DeepWiki, Firecrawl.
51scrapling
Scrape pages locally with anti-bot bypass, TLS impersonation, and adaptive element tracking — no API keys, no cloud. Handles Cloudflare protection, CSS/XPath element extraction, and survives site redesigns. Complements firecrawl (cloud) with 100% local execution. Triggers on Cloudflare bypass, anti-bot scraping, stealth fetch, local scraping, Scrapling.
47