Reviewed-on: #2
slack-sieve
Sieve your Slack workspace export before Mattermost import — triage channels, cherry-pick messages, preview attachments.
Slack export → hydrate → review UI → manifest.json → prepare-export → mmetl → mmctl
Quick start
git clone git@git.levkin.ca:ilia/slack-sieve.git
cd slack-sieve
# Optional: download files into __uploads/ from export token URLs
export SLACK_EXPORT_DIR="$HOME/Downloads/your-slack-export"
export SLACK_HYDRATED_DIR="$HOME/Downloads/your-slack-export-enriched"
make hydrate
# Optional: pre-skip noise channels (edit presets/levkin-skips.json or add your own)
make preset-skips
# Review at http://127.0.0.1:8765
export SLACK_EXPORT_PATH="$HOME/Downloads/your-slack-export-enriched"
make review
Selections are saved to manifest.json (gitignored).
Make targets
| Target | Description |
|---|---|
make review |
Start the web UI on port 8765 |
make hydrate |
Copy export + download attachments via embedded xoxe URLs |
make preset-skips |
Mark preset channels as skip in manifest.json |
make prepare-export |
Write prepared-export/ (filtered Slack shape for mmetl) |
Environment
| Variable | Default |
|---|---|
SLACK_EXPORT_PATH |
~/Downloads/Levkin Slack export enriched |
SLACK_EXPORT_DIR |
Raw export for hydrate |
SLACK_HYDRATED_DIR |
Output folder for hydrate |
SLACK_IMPORT_PORT |
8765 |
UI shortcuts
- J/K — previous/next message
- Space — toggle cherry-pick
- I / S — import/skip message
- Shift+I / Shift+S — import/skip whole channel
- N — next undecided channel
Presets
Edit presets/levkin-skips.json (or copy it) for workspace-specific channels to auto-skip.
Mattermost import (after review)
- Set optional
mattermost_channelrenames anduser_emailsinmanifest.json. make prepare-export— writesprepared-export/(pytest-covered).- Zip that folder; mmetl
transform slack --team <team> … - mmctl
import process --bypass-uploadon the Mattermost host
Levkin: import completed 2026-07-10 — see docs/HANDOFF.md for channel map and caveats.
Docs: Migrate from Slack
Requirements
- Python 3.10+ (stdlib only for server)
- Official Slack export folder or enriched copy with
channels.json,users.json, channel dirs
Handoff
Levkin migration status and channel map: docs/HANDOFF.md
Remote
git@git.levkin.ca:ilia/slack-sieve.git
SSH uses LAN 10.0.10.169 via Host git.levkin.ca in ~/.ssh/config (see homelab ansible docs).
Description
Languages
Python
54.7%
JavaScript
25.2%
CSS
8.7%
HTML
3.9%
Shell
3.6%
Other
3.9%