Skip to main content

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.

Metadata

Release files for msgsift 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for msgsift 0.1.2
File Size Uploaded Provenance Actions
msgsift-0.1.2.tar.gz 76.9 kB With provenance Details for msgsift-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for msgsift 0.1.2
File Interpreter ABI Platform Actions
msgsift-0.1.2-py3-none-any.whl Python 3 none any Details for msgsift-0.1.2-py3-none-any.whl

Total release size: 103.8 kB

Release files / msgsift-0.1.2.tar.gz

Download URL msgsift-0.1.2.tar.gz
Size 76.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4aa0f473fac324d7187cbab053993e3393c64ae1a440099edb8c5b04144b19ad
BLAKE2b-256 checksum
How to use checksums
9f9fa5c2a5ac6c0e905322f79dc0cb0956ceaa6694847b775349f292117b10ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 26, 2026.

Transparency log

Release files / msgsift-0.1.2-py3-none-any.whl

Download URL msgsift-0.1.2-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f5292a23d1c5ff52dd2d23f807c30271381115b3ab90f768763d2ea2fe5695a
BLAKE2b-256 checksum
How to use checksums
1fe8004475014ca3fab12e0bf7a78205de71aa8409c0868d5b36d959598d9968
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 26, 2026.

Transparency log

Security for msgsift 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for msgsift-0.1.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page