Skip to main content

Local-first email triage that turns your inbox into a daily todo list

Project description

msgsift

Local-first email triage that turns your inbox into a calendar-style todo list.

msgsift fetches your unread mail over IMAP, classifies each message with an LLM (local Ollama by default, or Cloudflare Workers AI), and organizes everything into a per-day todo list with a small web UI. A nightly job writes you a short recap of the day and rolls unfinished items forward. Your own manual todos live in the same list. Nothing leaves your machine unless you opt into the Cloudflare backend.

How it works

  • Classify every unread email as ACTION_REQUIRED, FYI, NEWSLETTER, or IGNORE, with a one-line reason and (where useful) a suggested reply.
  • VIP list — senders (by email or domain) are always forced to ACTION_REQUIRED.
  • Forwarding hints — content rules suggest who to forward something to.
  • Daily rollover — at end of day, FYIs/newsletters auto-close, unfinished action items carry to tomorrow, and finished ones stay (scratched out) as a record of what you did.
  • Nightly recap — the model writes a couple of sentences summarizing the day.

Install

uv tool install msgsift

This gives you three commands: msgsift (fetch + classify), msgsift-nightly (recap + rollover), and msgsift-web (the web UI).

Configure

Config lives in ~/.config/msgsift/ (override with MSGSIFT_CONFIG_DIR):

mkdir -p ~/.config/msgsift
cp config.example.toml ~/.config/msgsift/config.toml
cp credentials.example.toml ~/.config/msgsift/credentials.toml
# then edit both — config.toml for settings, credentials.toml for secrets

credentials.toml holds only secrets (IMAP passwords, API tokens) and should never be committed or shared.

Run

msgsift          # fetch unread mail, classify, store, print a digest
msgsift-web      # serve the web UI (default http://127.0.0.1:8000)
msgsift-nightly  # write the day's recap and roll items over

Typically msgsift runs on a timer through the day, msgsift-nightly once at night, and msgsift-web as a long-running service. Example systemd user units are in systemd/.

Backends

  • Ollama (default): fully local and private. Point [classifier.ollama] at your Ollama server and pull a small model (e.g. qwen2.5:3b).
  • Cloudflare Workers AI: offloads inference to a larger model. Set [classifier] backend = "cloudflare" and provide an account_id + api_token. Note: with this backend, message envelopes (sender, subject, snippet) leave your device.

License

AGPL-3.0-or-later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

msgsift-0.1.0.tar.gz (76.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

msgsift-0.1.0-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file msgsift-0.1.0.tar.gz.

File metadata

  • Download URL: msgsift-0.1.0.tar.gz
  • Upload date:
  • Size: 76.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for msgsift-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e814a98016d67272f9c854b0fb905b1cfed4b6f15ebdf4b5c3839bc44b47dad4
MD5 7b76aee19e9b3a89204bdc5bac38f28e
BLAKE2b-256 7b12611e62a14f4f45f1a4f961546c7fe535004b3a0b6b418beb59287250dfe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for msgsift-0.1.0.tar.gz:

Publisher: release.yml on lucasgerads/msgsift

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file msgsift-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: msgsift-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for msgsift-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 676e4320e3b1e1b621ca13a1b37dc82dfbc53a832b2ec10d2967243b2204b404
MD5 9f6a36fb56937c82296063f9f7b654d9
BLAKE2b-256 48a4c848797d23fd35b4e4125c825d1d1c1a378dfaf17ca6f909788fafb11c81

See more details on using hashes here.

Provenance

The following attestation bundles were made for msgsift-0.1.0-py3-none-any.whl:

Publisher: release.yml on lucasgerads/msgsift

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page