| Age | Commit message (Collapse) | Author | Files | Lines |
|
mailrules.py and qtmaildir's src/tagrules.cpp are two implementations of
one format, so a schema change is a two-repo change: a field added on one
side is silently dropped when the other saves.
Also notes that post-new is installed and live, so a change here reaches
real mail on the cron timer rather than when someone next runs a command.
|
|
Editing stays out of this tool: a rule edit affects every future sync
and its gate is not designed yet. qtmaildir has the editor.
The install step now copies mailrules.py beside mailctl.py. The import
resolves from the script's own directory, so copying only mailctl.py
would break every command, not just the new ones.
|
|
|
|
mailctl is a deliberately narrow CLI wrapper around notmuch, built so an
AI coding agent can search and organize local mail with no ability to
send. There is no SMTP, reply, or compose code path in the tool.
Safety model:
- reads run freely, mutations are gated
- tag changes are dry-run until --apply
- cross-account mutations need an explicit --all-accounts
- destructive tags need --apply and --confirm-destructive
- bulk mutations are capped by --max-messages
- every applied mutation is audited to a local log
Accounts are not in the source. They load from
~/.config/mailctl/accounts.json and are validated against both the
schema and the actual maildirs on disk at import time, so a typo cannot
produce a query matching nothing or a draft under the wrong identity.
Ships with mailsync.sh (a separate mbsync + notmuch new driver, meant
for cron) and mail-organize, a Claude Code skill that makes mailctl the
only sanctioned interface to the user's mail.
Licensed GPLv2-only.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|