Перейти к основному содержимому

Himalaya

Himalaya CLI: IMAP/SMTP-почта из терминала.

Метаданные навыка​

ИсточникВстроенный (установлен по умолчанию)
Путьskills/email/himalaya
Версия1.1.0
Авторcommunity
ЛицензияMIT
Платформыlinux, macos, windows
ТегиEmail, IMAP, SMTP, CLI, Communication

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Агент видит эти инструкции, когда навык активен.

Himalaya Email CLI

Himalaya — это CLI-клиент электронной почты, позволяющий управлять письмами из терминала с использованием бэкендов IMAP, SMTP, Notmuch или Sendmail.

Этот навык отделён от шлюзового адаптера VibeOS Email. Шлюзовой адаптер позволяет отправлять агенту письма по электронной почте и использует встроенный IMAP/SMTP-адаптер VibeOS; данный навык позволяет агенту управлять почтовым ящиком с помощью терминальных инструментов и требует внешнего CLI himalaya.

Ссылки​

  • references/configuration.md (настройка конфигурационного файла + аутентификация IMAP/SMTP)
  • references/message-composition.md (синтаксис MML для составления писем)

Предварительные требования​

  1. Установленный CLI Himalaya (himalaya --version для проверки)
  2. Конфигурационный файл ~/.config/himalaya/config.toml
  3. Настроенные учётные данные IMAP/SMTP (пароль хранится безопасно)

Установка​

# Готовый бинарник (Linux/macOS — рекомендуется)
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh

# macOS через Homebrew
brew install himalaya

# Или через cargo (любая платформа с Rust)
cargo install himalaya --locked

Настройка конфигурации​

Запустите интерактивный мастер для настройки учётной записи:

himalaya account configure

Или создайте ~/.config/himalaya/config.toml вручную:

[accounts.personal]
email = "you@example.com"
display-name = "Your Name"
default = true

backend.type = "imap"
backend.host = "imap.example.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "you@example.com"
backend.auth.type = "password"
backend.auth.cmd = "pass show email/imap" # или используйте keyring

message.send.backend.type = "smtp"
message.send.backend.host = "smtp.example.com"
message.send.backend.port = 587
message.send.backend.encryption.type = "start-tls"
message.send.backend.login = "you@example.com"
message.send.backend.auth.type = "password"
message.send.backend.auth.cmd = "pass show email/smtp"

# Псевдонимы папок (синтаксис himalaya v1.2.0+). Обязательны, когда
# имена папок на сервере не совпадают с каноническими именами himalaya
# (inbox/sent/drafts/trash). Gmail — частый случай — см.
# `references/configuration.md` для маппинга `[Gmail]/Sent Mail`.
folder.aliases.inbox = "INBOX"
folder.aliases.sent = "Sent"
folder.aliases.drafts = "Drafts"
folder.aliases.trash = "Trash"

Внимание на синтаксис псевдонимов. В документации до v1.2.0 использовался подраздел [accounts.NAME.folder.alias] (единственное число alias). v1.2.0 молча игнорирует эту форму — TOML парсится нормально, но резолвер псевдонимов её не читает, поэтому каждый поиск откатывается к каноническому имени. На Gmail это означает, что сохранение в «Отправленные» после успешной доставки через SMTP завершается ошибкой, и himalaya message send выходит с ненулевым кодом. Любой вызывающий (агент, скрипт, пользователь), который повторяет попытку при таком коде выхода, перезапустит всю отправку — включая SMTP — создавая дублирующиеся письма получателям. Всегда используйте folder.aliases.X (множественное число, точечные ключи, непосредственно в [accounts.NAME]).

Примечания по интеграции с VibeOS​

  • Чтение, список, поиск, перемещение, удаление — всё работает напрямую через терминальный инструмент
  • Составление/ответ/пересылка — для надёжности рекомендуется передача через конвейер (cat << EOF | himalaya template send). Интерактивный режим $EDITOR работает с pty=true + фон + инструмент процесса, но требует знания редактора и его команд
  • Используйте --output json для структурированного вывода, который легче парсить программно
  • Мастер himalaya account configure требует интерактивного ввода — используйте режим PTY: terminal(command="himalaya account configure", pty=true)

Типовые операции​

Список папок​

himalaya folder list

Список писем​

Список писем во входящих (по умолчанию):

himalaya envelope list

Список писем в конкретной папке:

himalaya envelope list --folder "Sent"

Список с пагинацией:

himalaya envelope list --page 1 --page-size 20

Поиск писем​

himalaya envelope list from john@example.com subject meeting

Чтение письма​

Чтение письма по ID (показывает обычный текст):

himalaya message read 42

Экспорт сырого MIME:

himalaya message export 42 --full

Ответ на письмо​

Чтобы ответить неинтерактивно из VibeOS, прочитайте исходное сообщение, составьте ответ и передайте его через конвейер:

# Получить шаблон ответа, отредактировать и отправить
himalaya template reply 42 | sed 's/^$/\nВаш текст ответа здесь\n/' | himalaya template send

Или составьте ответ вручную:

cat << 'EOF' | himalaya template send
From: you@example.com
To: sender@example.com
Subject: Re: Original Subject
In-Reply-To: <original-message-id>

Ваш ответ здесь.
EOF

Ответ всем (интерактивно — требуется $EDITOR, вместо этого используйте подход с шаблоном выше):

himalaya message reply 42 --all

Пересылка письма​

# Получить шаблон пересылки и передать с изменениями через конвейер
himalaya template forward 42 | sed 's/^To:.*/To: newrecipient@example.com/' | himalaya template send

Написание нового письма​

Неинтерактивно (используйте это из VibeOS) — передайте сообщение через stdin:

cat << 'EOF' | himalaya template send
From: you@example.com
To: recipient@example.com
Subject: Test Message

Привет от Himalaya!
EOF

Или с флагом заголовков:

himalaya message write -H "To:recipient@example.com" -H "Subject:Test" "Текст сообщения здесь"

Примечание: himalaya message write без ввода через конвейер открывает $EDITOR. Это работает с pty=true + фоновым режимом, но передача через конвейер проще и надёжнее.

Перемещение/копирование писем​

Переместить в папку (сначала целевая папка, затем ID сообщения):

himalaya message move "Archive" 42

Скопировать в папку (сначала целевая папка, затем ID сообщения):

himalaya message copy "Important" 42

Удаление письма​

himalaya message delete 42

Управление флагами​

Добавить флаг:

himalaya flag add 42 --flag seen

Удалить флаг:

himalaya flag remove 42 --flag seen

Несколько учётных записей​

Список учётных записей:

himalaya account list

Использовать конкретную учётную запись:

himalaya --account work envelope list

Вложения​

Сохранить вложения из сообщения:

himalaya attachment download 42

Сохранить в конкретную директорию:

himalaya attachment download 42 --downloads-dir ~/Downloads

Форматы вывода​

Большинство команд поддерживают --output для структурированного вывода:

himalaya envelope list --output json
himalaya envelope list --output plain

Отладка​

Включить отладочное логирование:

RUST_LOG=debug himalaya envelope list

Полная трассировка с бэктрейсом:

RUST_LOG=trace RUST_BACKTRACE=1 himalaya envelope list

Советы​

  • Используйте himalaya --help или himalaya &lt;command&gt; --help для подробной информации.
  • ID сообщений относятся к текущей папке; повторно запрашивайте список после смены папок.
  • Для составления форматированных писем с вложениями используйте синтаксис MML (см. references/message-composition.md).
  • Храните пароли безопасно с помощью pass, системной связки ключей или команды, которая выводит пароль.