ilia e526308e82
CI / skip-ci-check (push) Successful in 31s
CI / secret-scan (push) Successful in 30s
CI / python-ci (push) Successful in 37s
Merge pull request 'ci: fix python-ci on ubuntu-latest' (#11) from chore/fix-python-ci into main
2026-08-06 12:43:34 -05:00
2026-07-26 15:20:37 -05:00

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)

  1. Set optional mattermost_channel renames and user_emails in manifest.json.
  2. make prepare-export — writes prepared-export/ (pytest-covered).
  3. Zip that folder; mmetl transform slack --team <team> …
  4. mmctl import process --bypass-upload on 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 to Gitea uses your local ~/.ssh/config Host git.levkin.ca entry (see private ansible docs).

License

MIT — see LICENSE.

S
Description
Sieve Slack export before Mattermost import — triage UI
Readme MIT
652 KiB
Languages
Python 54.6%
JavaScript 25.2%
CSS 8.7%
HTML 3.9%
Shell 3.7%
Other 3.9%