| name | email-assistant |
| description | Проверяет входящую почту, отделяет важное от шума и шлёт сводку в Telegram. Используй когда: (1) пользователь говорит 'проверь почту', 'что в почте', 'давай посмотрим что в почте', 'помощник почты'; (2) запущен по расписанию. Не используй для: отправки конкретного письма, настройки Gmail, работы со встречами. |
Email Assistant
Проверка входящей почты с сигналом в Telegram. Не действует на ящике — только читает и сигнализирует.
The Iron Law
Никаких действий с письмом — только чтение и сигнал. Не отвечать, не двигать в архив, не помечать прочитанным, не создавать draft, не удалять. Только классификация и Telegram-сводка.
Что в папке скилла
| Файл | Что |
|---|
SKILL.md | Этот файл — инструкции для агента |
rules.md | Правила клиента: «всегда важно», «всегда игнорировать», ключевые контакты. Приходит с минимальными дефолтами, клиент дополняет сам |
state.json | Создаётся автоматически. Хранит last_processed_at (ISO timestamp) и last_summary |
Алгоритм
Шаг 0. Конфигурация
- Прочитай
rules.md в директории скилла. Пустые секции игнорируй — применяй только то, что в них есть
- Прочитай
state.json в директории скилла. Если файла нет — last_processed_at = now - 24h (первый запуск)
Шаг 1. Чтение
Получи новые письма через доступный Gmail-инструмент. Параметры строго:
- Окно: при наличии
state.json — after: равен last_processed_at в формате YYYY/MM/DD. При отсутствии state.json (первый запуск) — newer_than:24h
- Папка:
in:inbox (только входящие)
- НЕ добавляй
is:unread — мы дедуплицируем по timestamp, статус прочтения неважен
- НЕ лезь в архив, спам, корзину, исходящие
Пример запроса (первый запуск): in:inbox newer_than:24h
Пример запроса (state.json с last_processed_at: 2026-04-30T15:00:00Z): in:inbox after:2026/04/30
Шаг 2. Классификация (Three-tier)
Каждое письмо тегни одним из трёх:
Ответить — требует ответа в ближайшие часы:
- Прямой вопрос/просьба от человека (не системы)
- Упомянут срок (дедлайн, ASAP, «сегодня»)
- От адреса/домена в
rules.md → секция «Всегда важно»
- Финансовое/юридическое (счёт, договор, доступ, юрлицо)
Прочитать — посмотреть в течение дня:
- Личное письмо от человека, без срочности
- Тема/отправитель относится к зоне, описанной в
rules.md
- Подтверждение важной операции (бронирование, встреча, доступ)
Шум — игнорировать:
- Рассылки, маркетинг, дайджесты
- Системные уведомления (GitHub PR, banking, Calendar invite без вопроса)
- Автоответы
- Любое письмо, попадающее под
rules.md → секция «Всегда игнорировать», независимо от других признаков
Каждое письмо сопровождай 1-строчным «почему» — для прозрачности.
Шаг 3. Сводка
Сформируй Telegram-сообщение по формату:
📧 Почта — N важных за период
🔴 **Ответить** ({n})
• {От} / {Тема}
{1-2 строки сути} • {время}
🟡 **Прочитать** ({n})
• {От} / {Тема}
{1-2 строки сути} • {время}
Принципы:
- «Ответить» = 0 и «Прочитать» = 0 → ничего не отправлять, перейти к Шагу 5
- «Шум» в сводку не включать
- Не более 5 писем в каждом блоке. Если больше — отрезать до 5 и добавить строку
+ ещё {N} в этом блоке
- Кратко, без вводов («хочу сообщить...», «вот что я нашёл...»)
Шаг 4. Доставка
bash claude/skills/send_telegram.sh "ТЕКСТ_СВОДКИ"
Путь относительно корня рабочей папки клиента. Скрипт сам читает TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID из .env в корне рабочей папки. Никаких параметров.
Проверь ответ: должен содержать "ok":true.
Шаг 5. Чекпойнт
Только если Шаг 4 успешен (или нечего было отправлять и шаг 4 пропущен) — обнови state.json:
{
"last_processed_at": "2026-04-30T15:00:00Z",
"last_summary": "N важных, классификация: X ответить / Y прочитать / Z шум"
}
Если Шаг 4 упал — state.json НЕ трогать. На следующем запуске пересчитает с того же места.
Edge Cases
| Ситуация | Действие |
|---|
| Пустой период (нет новых писем) | Молчать. Чекпойнт двинуть |
| Все письма «Шум» | Молчать. Чекпойнт двинуть |
| Gmail-коннектор недоступен | Один retry. Если опять упал — отправить в Telegram 📧 проверка почты упала: {причина}. Чекпойнт НЕ двигать |
send_telegram.sh упал | НЕ обновлять чекпойнт. На следующем запуске попробует снова |
| «Ответить» > 5 в одном периоде | Показать первые 5, добавить + ещё {N} в "Ответить". Не дробить на несколько сообщений |
| Письмо в треде | Анализировать только последнее сообщение треда |
| Контакт одновременно в «Всегда важно» и «Всегда игнорировать» | Приоритет — «Всегда важно» |
Quality Gate
Перед отправкой проверь:
- Есть «Ответить» или «Прочитать» (иначе не отправляй вообще)
- Нет «Шум» в сводке
- Длина ≤4000 символов