Boogie
jmapcli · JMAP из терминала
01.
v1.4.0 · macOS
Нативный JMAP-клиент командной строки.

JMAP из командной строки.

jmapcli общается по JMAP со Stalwart (и любым JMAP-сервером) прямо из терминала — отправка, чтение, поиск, синхронизация, перемещение писем и управление ими. Нативный Swift, учётные данные в macOS Keychain, без телеметрии.

$ brew tap jasonhollis/boogie && brew install jmapcli $ jmapcli login # хранится в macOS Keychain $ jmapcli send --to you@example.com --subject "Hi" --body "From the CLI"
02.
— Section 2
Install
Homebrew

Одна строка. Подписано.

2.1
Homebrew tap
brew tap jasonhollis/boogie && brew install jmapcli — единый подписанный бинарник, без зависимостей для компиляции. Обновления через brew upgrade.
— macOS
Apple silicon
2.2
Аутентификация через Keychain
Учётные данные читаются из macOS login Keychain по JMAP-идентичности. Ничего в dotfiles, ничего в env vars.
— security
find-generic
2.3
Без телеметрии
Инструмент никуда не отправляет данные. Единственная сеть, к которой он обращается, — ваш JMAP-сервер.
— zero
SDKs
03.
— Section 3
Credentials
macOS Keychain

Ваш пароль никогда не попадает на диск.

jmapcli не хранит никаких секретов на диске. Ваш пароль (или bearer-токен) хранится в macOS login Keychain; файл учётной записи — ~/.config/jmapcli/config.json, режим 0600 — содержит только URL сервера, имя пользователя и флаг по умолчанию. Впервые работаете с Keychain из терминала? Весь процесс состоит из трёх встроенных команд security.

1 · Сохраните секрет — и считайте его обратно. macOS запрашивает значение, поэтому секрет никогда не вводится в командной строке, не отображается на экране и не записывается в историю оболочки.

# store it — you’re prompted for the secret, nothing echoes $ security add-generic-password -U -s jmap-password -a you@example.com -l "Boogie JMAP password" -w # read it back at any time $ security find-generic-password -s jmap-password -a you@example.com -w # remove it $ security delete-generic-password -s jmap-password -a you@example.com
-s
service — имя, по которому jmapcli выполняет поиск: jmap-password для пароля или jmap-token для bearer-токена (например, Fastmail); укажите только то, что используете.
-a
account — ваш адрес электронной почты (то же имя пользователя, которое вы указываете в jmapcli).
-l
label — название, которое вы увидите в приложении Keychain Access; -U обновляет существующий элемент на месте.
-w
без значения — запрос секрета. Именно это не позволяет ему попасть в ~/.zsh_history и список процессов.

2 · Укажите jmapcli ваш сервер. Зарегистрируйте учётную запись один раз; секрет извлекается напрямую из только что сохранённого элемента Keychain и никогда не появляется в командной строке.

$ jmapcli login --url https://mail.example.com --username you@example.com \ --password "$(security find-generic-password -s jmap-password -a you@example.com -w)" # token auth: swap --password for --token (and store under jmap-token above) $ jmapcli list # from here on, every command reads the Keychain for you
3.1
Ничего в истории, журналах — и в контексте ИИ
После того как секрет помещён в Keychain, повседневные команды (list, send, draft, sync) никогда не передают пароль, поэтому он не может быть перехвачен в ~/.zsh_history, списке процессов или журналах CI. Именно это делает jmapcli безопасным для работы с инструментами терминального ИИ — агент получает JMAP-клиент, но никогда не получает ваш секрет.
— zsh
CI · agents
3.2
Смена пароля или выход из системы
Изменили пароль? Повторно выполните команду security add-generic-password … -w-U перезапишет его на месте. Чтобы удалить учётную запись, jmapcli logout одним шагом удаляет и запись конфигурации, и секрет из Keychain (--all очищает все учётные записи).
— rotate
logout
3.3
Привязка к Mac по замыслу
Login Keychain не синхронизируется через iCloud — это намеренное ограничение: ваш пароль никогда не покидает Mac, на котором вы его ввели. Выполните шаг с security один раз на каждом Mac; config.json можно хранить в синхронизируемой домашней папке, поскольку он не содержит секретов.
— per
machine
04.
— Section 4
Commands
One verb each

Всё — это подкоманда.

login
Сохранить учётные данные JMAP-сервера в Keychain
discover
Обнаружить JMAP-сессию с сервера
accounts
Показать настроенные учётные записи и все доступные для отправки идентичности
mailboxes
Показать все почтовые ящики
list
Показать письма в почтовом ящике
search
Искать почту по тексту, теме, отправителю, получателю или телу (на сервере)
read
Показать полное содержимое письма (рендеринг Markdown)
send
Отправить письмо через JMAP Submission от любой доступной идентичности (--from)
reply
Ответить на сообщение по ID, в треде, с цитированием оригинала
forward
Переслать сообщение по ID, повторно прикрепив вложения
draft
Сохранить письмо в Drafts без отправки
move · trash · delete
Переместить в ящик, переместить в Корзину или удалить навсегда по ID
sync
Выполнить дельта-синхронизацию и показать изменения
contacts
Контакты JSContact: список, добавление, правка, удаление, импорт алиасов
calendar
Показать календари и события, создавать события, задавать цвета календарей
sieve
Просмотр, загрузка, проверка и отправка серверных фильтров Sieve
alias
Управление псевдонимами получателей
mcp
Запустить как сервер Model Context Protocol для AI-инструментов
logout
Удалить сохранённые учётные данные
05.
— Section 5
Changelog
Every release

Что нового.

v1.4.0
Full-text search (text, subject, from, to, body); threaded reply and forward; draft — stage in Drafts without sending; multi-account: accounts and identities, and send/reply/forward as any sendable identity via --from; contacts import-aliases; faster multi-recipient sends. — 2026-06-24
v1.3.1
Calendar event write (add, edit, remove); offline-first hardening. — 2026-06-20
v1.3.0
JSContact contacts — read and write, with a lossless round-trip. — 2026-06-15
v1.2.0
Sieve filters — list, get, validate, and push server-side mail rules. — 2026-06-12
v1.1.0
Calendar — list calendars and events, set colours. — 2026-06-11
v1.0.0
Initial release — send, read, search, sync, and triage mail from the terminal, credentials in the macOS Keychain. — 2026-06-06
— Часть Boogie

Нужно полное приложение?

jmapcli бесплатен
нативное приложение Почта + Календарь доступно в App Store
KTP Digital Pty Ltd · ABN 85 648 755 980