Cherry-pick heuristics, manifest merge, global file search, scrollbar styling, and pytest/Playwright coverage unblock review and filtered export for mmetl.
slack-sieve
Sieve your Slack workspace export before Mattermost import — triage channels, cherry-pick messages, preview attachments.
Slack export → hydrate (attachments) → 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)
make prepare-export— writesprepared-export/frommanifest.json(pytest-covered; not yet run through mmetl/mmctl).- mmetl
transform slackonprepared-export/ - mmctl
import
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
Ongoing Levkin migration status, review order, and TODOs: 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%