Mail

История изменений

Заметки о выпусках Mail CLI: новые возможности, изменения и исправления.

Заметные изменения в @wirecat/mail-cli. По одному разделу на версию, новые сверху.

0.1.1 — 01.11.2026

Исправлено

  • Документация ведёт от sync к первому найденному письму и честно говорит, как хранится пароль. Установка, работа с инструментом и главная страница документации заканчиваются командой memo search mail: mail наполняет общее хранилище, а memo ищет в нём. Пароль хранится в связке ключей, при её сбое переходит в закрытый файл и может приходить из MAIL_PASSWORD; из stdin он никогда не читается. rate_limited называет обе причины: сервер ограничивает аккаунт, и sync исчерпал собственный бюджет запросов. Документация также сообщает, что memo mail delete перемещает почту Gmail в корзину.

0.1.0 — 31.10.2026

Добавлено

  • mail читает почтовый ящик по IMAP в общее хранилище WireCat и никогда не меняет сам ящик. memo и другие инструменты WireCat затем ищут и читают эту почту на вашем компьютере. mail не отправляет почту.
  • session start входит в профиль по паролю приложения. Новому профилю нужен --address, а в терминале адрес спросят сами. Сервер находится по встроенной таблице (Яндекс, Gmail, iCloud, Mail.ru, Fastmail), по записи MX, по ISPDB Thunderbird и по файлу autoconfig домена; --provider или --host вместе с --port и --security задают его вручную и пропускают эти поиски. Команда показывает шаги подготовки ящика, спрашивает пароль приложения без эха (или читает MAIL_PASSWORD), проверяет его на сервере и только потом сохраняет профиль, а пароль кладёт в связке ключей ОС. Без терминала она ничего не спрашивает и называет недостающий параметр или переменную. Пароль приложения, который Himalaya уже хранит в связке ключей, используется, если у mail своего нет. Шаги для каждого провайдера описаны на странице Подготовка почтового ящика. Outlook и Microsoft 365 принимают только OAuth, поэтому session start пока отказывается с ними работать.
  • session status, session end и session list управляют входом. session status --check входит на сервер и доказывает, что пароль ещё работает; session end забывает пароль и оставляет синхронизированную почту; session list не требует профиля и показывает профили на этом компьютере.
  • account check и folders list входят на сервер и показывают, что он поддерживает, а также папки с их ролью и числом писем.
  • sync читает новую почту в общее хранилище и пропускает то, что там уже есть. Если --folder или профиль не называют другие папки, читаются INBOX и Sent, сначала новые, начиная с --since-time (по умолчанию последние 30 дней). Одна дата начинается с местной полуночи, а в ответе указаны часовой пояс и окно в UTC. --limit ограничивает число новых писем за один запуск, --rescan заново перечисляет всё окно. Сохраняются текст и заголовки, вложения не сохраняются.
  • Большой ящик синхронизируется за несколько запусков. sync тратит бюджет запросов, рассчитанный по сроку (15 минут в терминале, 45 секунд через MCP; --timeout и --max-pages меняют его), сохраняет после каждой части и отвечает state: partial с командой для продолжения. mail <profile> status показывает, как далеко продвинулась синхронизация, в том числе пока она идёт. Если часть писем осталась непрочитанной или удаления не проверялись, ответ сообщает об этом в meta.issues.
  • sync переживает ненадёжный сервер. Оборванное соединение открывается заново после короткой паузы, и запуск продолжается; письмо, на которое сервер сейчас не может ответить, запрашивается ещё раз в конце запуска и остаётся на следующий. На сервере без идентификаторов писем, например на Яндексе, каждое новое письмо скачивается один раз, а уже сохранённая почта не читается заново.
  • ИИ-агенты работают с mail через MCP и навык. mail <profile> mcp serve предлагает агенту команды профиля по stdio или по HTTP за вашим собственным туннелем с --http; что можно запускать, решают разрешения профиля, а --permission лишь ужесточает их. mail skill install устанавливает инструкции инструмента для Claude Code, Codex, Gemini CLI и OpenClaw, а для Hermes — с --for hermes.
  • Если связка ключей не работает, пароль приложения попадает в закрытый файл, и об этом не спрашивают. session start кладёт пароль в credentials.json (режим 600) в папке настроек, один раз сообщает об этом в stderr и отвечает credential_storage. --credential-storage file выбирает файл сразу, но это не рекомендуется. session status может ответить password_from: "file".
  • Запуск с перенесёнными папками никогда не удаляет пароль приложения владельца из связки ключей ОС. Такой запуск читает пароль владельца, но не заменяет и не удаляет его, а новый пароль кладёт во временную запись. session end для пароля владельца ничего не удаляет и отвечает kept: "owners-sign-in".
  • wcat mail запускает инструмент, а wcat --help его перечисляет. Пакет устанавливает wcat-mail рядом с mail, а wcat-mail --wcat-describe печатает для wcat имя, версию и описание инструмента.
  • doctor --online сообщает, опубликована ли более новая версия. К почтовому серверу он не обращается.
  • Команды, общие для всех инструментов WireCat: doctor, commands, config, skill, runs и upgrade.