A focused, terminal-based Slack client with VIP filtering and channel recap functionality.
- 🎯 Simple CLI - No complex TUI, just clean command-line interface
- ⭐ VIP Filtering - Priority messages from important people
- 📊 Channel Recap - Navigate channel summaries with Q/E keys
- 🔍 Message Search - Find messages across workspace
- 💬 Send & Receive - Full message support
- 🆔 Message IDs - Unique IDs for easy reference
# Send to channel
python slack-tui.py --send "#general" "Hello team!"
# Send to user
python slack-tui.py --send "@alice" "Hi Alice!"# Show recent messages
python slack-tui.py --show "#general"
# Show last 50 messages
python slack-tui.py --show "#general" -l 50# Add VIP users
python slack-tui.py --vip-add @boss
python slack-tui.py --vip-add @client
# View VIP messages
python slack-tui.py --vip
# List VIP users
python slack-tui.py --vip-list
# Remove VIP user
python slack-tui.py --vip-remove @username# Interactive recap (use Q/E to navigate, X to exit)
python slack-tui.py --recap# Search messages
python slack-tui.py --search "project deadline"# Show all channels you're in
python slack-tui.py --channels- Python 3.11+
- Slack workspace with app creation permissions
- Slack token (User, Bot, or App token)
✅ xoxp-* - User OAuth Token (recommended for full access) ✅ xoxb-* - Bot User OAuth Token ✅ xoxe.xoxp-* - App Bot Access Token ✅ xoxe-* - App Bot Refresh Token ✅ xapp-* - App-Level Token
# Clone repository
git clone https://github.com/yourusername/slack-tui-app.git
cd slack-tui-app
# Run setup
./setup.shYou can use any of these token types:
- Go to https://api.slack.com/apps
- Click "Create New App" → "From scratch"
- Name: "My Slack TUI"
- Select your workspace
- Go to "OAuth & Permissions"
- Add User Token Scopes:
channels:history,channels:readchat:write,files:writegroups:history,groups:readim:history,im:readmpim:history,mpim:readsearch:readusers:read,users:read.email
- Click "Install to Workspace"
- Copy "User OAuth Token" (starts with
xoxp-)
# Option 1: Environment variable
export SLACK_TOKEN=xoxp-your-token
# Option 2: Pass on command line
python slack-tui.py --token xoxp-your-token --channelsThe app resolves tokens in the following order:
CLI argument -t / --token-
Environment variable
SLACK_TOKEN -
Saved config (only if you explicitly saved it)
-
This guarantees consistent behavior across commands.
Tokens are never saved unless you explicitly ask for it.
python slack-tui.py -t xoxb-... --save-tokenConfig files are stored using OS-appropriate locations:
Windows: %APPDATA%/slack-tui/
Linux: ~/.config/slack-tui/
macOS: ~/Library/Application Support/slack-tui/If you use short-lived Enterprise OAuth tokens:
python slack-tui.py \
-t xoxe.xoxp-ACCESS \
-r xoxe-REFRESH \
--save-tokenslack-tui-app/
├── slack-tui.py # Main CLI application
├── requirements.txt # Python dependencies
├── setup.sh # Installation script
├── examples.sh # Usage examples
├── README.md # This file
│
├── config/ # Configuration management
│ ├── __init__.py
│ └── settings.py # Settings and token storage
│
├── connectors/ # Slack authentication
│ ├── __init__.py
│ └── slack_auth.py # OAuth authentication
│
├── messages/ # Message handling
│ ├── __init__.py
│ ├── message_handler.py # Send/receive messages
│ └── vip_listener.py # VIP filtering
│
├── processors/ # Message processors
│ ├── __init__.py
│ ├── autocomplete.py # Fuzzy matching
│ └── recap.py # Channel recap
│
└── docs/ # Documentation
├── QUICKREF.md # Quick reference
├── QUICKSTART.md # Getting started guide
└── PROJECT_SUMMARY.md # Complete project overview
Configuration stored in ~/.config/slack-tui-app/:
tokens.json- Stored tokens (chmod 0600)vip_users.json- VIP user listsettings.json- App preferences
See examples.sh for more usage examples:
# View all examples
./examples.sh
# Run specific example
./examples.sh 1"No token found"
# Set environment variable
export SLACK_TOKEN=xoxp-your-token # or xoxb-, xoxe-, xapp-
# Or pass directly
python slack-tui.py --token xoxp-your-token --channels"Invalid token format"
- Supported formats: xoxp-, xoxb-, xoxe.xoxp-, xoxe-, xapp-
- Check that token is correctly copied (no spaces, complete)
- Verify token hasn't expired or been revoked
"Unrecognized token format"
- Make sure token starts with one of: xoxp-, xoxb-, xoxe.xoxp-, xoxe-, xapp-
- Legacy tokens (xoxa-, xoxr-) are not supported
"Missing scopes"
- Go to api.slack.com/apps → Your App
- Add missing scopes to User Token Scopes or Bot Token Scopes
- Reinstall app to workspace
- Get new token
# Show authentication help
python slack-tui.py --help-auth
# Show all options
python slack-tui.py --help- QUICKREF.md - Quick command reference
- QUICKSTART.md - Detailed setup guide
- PROJECT_SUMMARY.md - Complete project documentation
python -m pytest tests/# Format code
black .
# Lint
ruff check .- Fork the repository
- Create feature branch
- Make changes
- Submit pull request
MIT License - See LICENSE file
- Issues: https://github.com/yourusername/slack-tui-app/issues
- Discussions: https://github.com/yourusername/slack-tui-app/discussions
Made with ❤️ for focused work
This tool uses Slack's Web API. Authentication (auth.test) can succeed even when a token cannot read channels/messages.
- Default mode is public channels only (
--types public_channel) to minimize required scopes. - See PERMISSIONS.md for a command → API method → scope matrix.
- If you get
missing_scopeornot_allowed_token_type, your token/workspace policy does not allow the requested operation.
channels:read(list public channels)channels:history(read messages)users:read(optional; username resolution)