Hermes Agent и календарь: управление расписанием и напоминаниями

Hermes Agent подключается к Google Calendar и календарям Microsoft, после чего читает ваши события, создаёт встречи с учётом часового пояса, находит пересечения и присылает напоминания в Telegram, Discord или на телефон. В статье — что именно умеет агент, как пройти авторизацию Google, чем календарные события отличаются от cron-задач и как не отдать агенту право молча править ваш календарь.

Что такое интеграция Hermes Agent с календарём?

Интеграция Hermes Agent с календарём — это подключение агента к вашему календарному сервису по API, при котором агент получает право читать события, создавать и удалять их, проверять свободные окна и связывать встречи с письмами и задачами. Ключевая характеристика: календарь становится ещё одним рабочим контекстом агента наравне с файлами, почтой и таблицами — вы описываете задачу словами, а не через графический интерфейс.

Технически это работает через два механизма:

  • Скилл google-workspace — встроенный в Hermes набор команд для Gmail, Calendar, Drive, Sheets, Docs и Contacts. Версия скилла 1.2.0, автор — Nous Research, лицензия MIT, путь skills/productivity/google-workspace/.
  • MCP-серверы и webhook-подписки — способ подключить то, что не покрыто встроенным скиллом, например календарь Microsoft через Microsoft Graph.
  • Чем календарь отличается от cron-задач в Hermes?

    Это главная путаница, из-за которой люди подключают не тот инструмент. Календарь — это про человеческое время: встречи, дедлайны, доступность. Cron в Hermes — это про время агента: регулярные отчёты, мониторинг, проверки по расписанию.

    В отличие от cron-задачи, которая запускается в изолированной сессии и ничего не знает о вашем дне, календарное событие живёт в вашем календаре: его видно другим людям, на него можно пригласить участников, оно участвует в проверке конфликтов. Обратное тоже верно: событие в календаре не заставляет агента что-то сделать — для этого нужен cron или heartbeat.

    Практический вывод — сильная схема использует оба инструмента: календарь сообщает агенту, что у вас сегодня за день, а cron запускает агента, чтобы он об этом рассказал. Про планировщик подробно написано в отдельной статье — Cron-задачи в Hermes: автоматизация по расписанию без кода.

    Задача Календарь Cron в Hermes
    Встреча с людьми в 11:00 Да Нет
    Ежедневный отчёт в 9 утра Нет Да
    Видно коллегам Да Нет
    Работает без вашего участия Нет Да
    Проверка конфликтов Да Нет

    Какие календари поддерживает Hermes Agent?

    Google Calendar — основной сценарий, покрыт встроенным скиллом google-workspace вместе с Gmail, Drive, Sheets, Docs и Contacts. Авторизация через OAuth2, токен обновляется автоматически.

    Google Calendar CLI (gws) — если у вас установлена официальная консольная утилита Google Workspace, скилл использует её как бэкенд для более широкого покрытия API. Отдельный вход в gws не нужен: скилл указывает утилите на тот же файл токена.

    Календарь Microsoft — подключается через Microsoft Graph. В Hermes для этого есть отдельные адаптеры: слушатель webhook-уведомлений Microsoft Graph (изменения по встречам, календарю, чатам) и конвейер саммари встреч Microsoft Teams на тех же webhook-ах.

    Внутренние системы компании — если календарь нестандартный (корпоративный Exchange, самописный планировщик), его подключают как MCP-сервер. Это тот же путь, которым подключают базы данных и внутренние API — см. MCP-протокол в Hermes.

    Что умеет агент в календаре: 6 практических задач

    1. Показать расписание на период. Агент перечисляет события за произвольное окно, включая рабочие календари и события с приглашениями. По умолчанию команда отдаёт ближайшие 7 дней.

    2. Создать событие. Встреча, напоминание, блок времени под работу — с местом, описанием и списком участников.

    3. Найти пересечения и тесные переходы. Поскольку агент видит время начала и конца каждого события, он может указать наложения и нереалистичные перерывы между встречами — например, две встречи с интервалом 5 минут в разных местах.

    4. Удалить или перенести событие. Удаление делается по идентификатору события, который агент получает при чтении календаря.

    5. Собрать утренний брифинг. Календарь плюс почта: что сегодня по расписанию, к каким встречам нужна подготовка, какие письма требуют ответа.

    6. Держать контекст между сессиями. Агент помнит, что вы обсуждали по конкретной встрече, — механику памяти разбираем в статье Память AI-агента.

    Как подключить Google Calendar к Hermes: пошаговая инструкция

    Скилл google-workspace проводит настройку полностью неинтерактивно — вы можете пройти её из терминала, из Telegram или из веб-чата, а агент будет вести вас по шагам.

    Шаг 1. Проверить, не настроено ли уже

    Команда --check возвращает AUTHENTICATED, если доступ уже есть, — тогда настройка не нужна. Если видите NOT_AUTHENTICATED, REFRESH_FAILED или AUTHENTICATED (partial), продолжайте.

    Шаг 2. Определить, какие сервисы нужны

    От этого зависит набор разрешений на экране согласия. Варианты:

  • Только почта — этот скилл не нужен, используйте отдельный скилл himalaya с паролем приложения Gmail: настройка занимает пару минут и не требует проекта в Google Cloud.
  • Почта и календарь — авторизация с набором --services email,calendar.
  • Календарь, Drive, Sheets, Docs без почты — набор вида --services calendar,drive,sheets,docs.
  • Полный доступ к Workspace — набор all.
  • Чем уже набор, тем меньше разрешений вы выдаёте агенту. Для чисто календарной задачи нет причин давать доступ к Gmail.

    Шаг 3. Создать OAuth-клиент в Google Cloud

    Это разовая операция примерно на 5 минут:

  • Создайте или выберите проект в Google Cloud Console.
  • В библиотеке API включите нужные: Gmail API, Google Calendar API, Google Drive API, Google Sheets API, Google Docs API, People API.
  • В разделе Credentials создайте OAuth 2.0 Client ID, тип приложения — Desktop app.
  • Пока приложение в статусе Testing, добавьте свой Google-аккаунт в список тестовых пользователей (Audience → Test users).
  • Скачайте JSON-файл с секретом клиента и передайте агенту путь к нему.
  • Если аккаунт использует Advanced Protection (вход только по аппаратному ключу), администратор Workspace должен сначала добавить OAuth-клиент в список разрешённых приложений организации — иначе авторизация не пройдёт.

    Шаг 4. Авторизоваться

    Агент сформирует ссылку авторизации. Дальше: открываете ссылку, подтверждаете доступ, а браузер в конце показывает ошибку на http://localhost:1 — это ожидаемо и нормально, ничего не сломалось. Нужно скопировать из адресной строки весь URL целиком и отдать его агенту.

    Типичная ошибка на этом шаге — Error 403: access_denied. Лечится добавлением себя в тестовые пользователи на странице Audience в Google Cloud Console.

    Шаг 5. Проверить результат

    Повторный --check должен вернуть AUTHENTICATED. Токен хранится в файле ~/.hermes/google_token.json и обновляется автоматически, поэтому повторять авторизацию не придётся. Отозвать доступ можно в любой момент командой --revoke — это стоит делать, если вы перестали пользоваться агентом.

    Часовой пояс: главная техническая ловушка

    Время события в календаре обязательно должно содержать смещение часового пояса — например 2026-03-01T10:00:00-06:00 — либо быть в UTC с пометкой Z.

    Время без смещения вроде 2026-03-01T10:00:00 неоднозначно: оно будет истолковано как UTC, и встреча «в 10:00» легко превратится в 13:00 по Москве. Это первое, что стоит проверить, если событие создалось не в то время.

    Вторая ловушка из того же ряда: часовой пояс Google-аккаунта и часовой пояс машины, где работает агент, часто не совпадают. При составлении брифинга агент должен использовать явное окно суток в поясе аккаунта, а не размытое «сегодня».

    Примеры задач, которые можно ставить агенту словами

    Агент не требует специального синтаксиса — задачи формулируются обычным текстом. Рабочие примеры:

  • «Покажи мои встречи на завтра и отметь, к каким нужна подготовка».
  • «Найди двухчасовое окно в четверг после обеда и поставь блок на работу над отчётом».
  • «Создай встречу с командой в пятницу в 15:00 на 30 минут, добавь ссылку на документ».
  • «Проверь, нет ли пересечений на следующей неделе, и скажи, где переход меньше 15 минут».
  • «Отмени встречу, если в описании письма от заказчика сказано, что она не нужна».
  • «Собери утренний брифинг: расписание, конфликты и письма, требующие ответа сегодня».
  • Обратите внимание на последний пример: это уже комбинированная задача, где календарь соединяется с почтой. Механику работы агента с письмами разбираем в статье Hermes Agent и электронная почта.

    Утренний брифинг: как агент соединяет календарь и почту

    В скилле google-workspace есть отдельный справочный документ references/daily-brief.md — процедура сборки брифинга на день (вклад в неё внёс участник проекта Ben Barclay). Процедура задаёт конкретный порядок, а не свободный пересказ:

  • Разрешить день и личность: подтвердить аккаунт, часовой пояс и целевой день.
  • Забрать события календаря: все календари в области видимости, включая принятые и предварительные встречи, события на весь день, переезды и блокировки, места, ссылки на видеозвонок, организаторов и статусы участников.
  • Забрать релевантные цепочки писем: не все непрочитанные подряд, а только те, что меняют подготовку, приоритет или дальнейшие действия.
  • Связать письма со встречами: по ссылкам на цепочки, адресам участников, домену компании, названию события и контексту проекта.
  • Собрать сам брифинг в фиксированном порядке: расписание, конфликты и тесные переходы, встречи с подготовкой, срочная почта и дедлайны, ваши ответные действия, ожидание ответа от других, пробелы в данных.
  • Предложить ограниченный набор действий: черновики ответов, блоки времени — но только после вашего подтверждения.
  • Цитируемое правило из этой процедуры: запрос брифинга не является разрешением что-то менять в календаре. В справочнике это записано прямым текстом — любое действие выполняется только после того, как вы его увидели и одобрили, а затем результат читается обратно для проверки.

    В списке типичных ошибок брифинга, который ведёт проект, отдельно перечислены: путаница часового пояса аккаунта и машины, сокрытие событий на весь день под встречами с фиксированным временем, отношение к предварительным встречам как к подтверждённым и связывание письма со встречей по одному общему слову.

    Три способа напоминаний в Hermes

    Напоминание — это не одна функция, а выбор из трёх механизмов с разной логикой.

    Календарное событие. Напоминания Google-календаря срабатывают штатно на ваших устройствах. Подходит для событий, привязанных к конкретному времени и дате, особенно если в них участвуют другие люди.

    Cron-задача. Агент запускается по расписанию и отправляет сообщение туда, где вы его ждёте — в Telegram, Discord, Slack. Подходит для повторяющихся напоминаний и отчётов. Важное ограничение: каждая cron-задача работает в отдельной сессии, поэтому в тексте задачи должно быть всё нужное — агент не помнит прошлый разговор.

    Heartbeat внутри текущей сессии. Команда /heartbeat задаёт текущему разговору одно повторяющееся указание, которое срабатывает, когда сессия простаивает. Минимальный интервал — 60 секунд, на сессию такое указание одно. В отличие от cron, heartbeat работает в контексте этого разговора: агент помнит, о чём вы договаривались.

    Правило выбора простое: если напоминанию нужен контекст разговора — heartbeat; если задача самодостаточна и должна выполняться без разговора — cron. Heartbeat не прерывает работу агента и не копит пропущенные срабатывания: если сессия была занята несколько интервалов, вы получите одно напоминание, а не очередь из них.

    Есть и четвёртый, более лёгкий канал доставки — ntfy, сервис push-уведомлений по HTTP. Он работает без SDK и без Node.js: вы задаёте тему (NTFY_TOPIC), подписываетесь на неё в мобильном приложении, и cron-задача может доставлять результат прямо туда. При этом стоит понимать модель безопасности ntfy: идентичность там — это имя темы, а не пользователь, поэтому любой, кто знает имя темы, может писать агенту. Для чувствительных уведомлений тему делают длинной и неугадываемой, либо поднимают свой сервер с контролем доступа.

    Безопасность: почему агент не должен править календарь молча

    Правило первое в скилле google-workspace звучит так: никогда не отправлять письма, не создавать и не удалять события календаря, не удалять файлы Drive, не выдавать доступ к файлам и не менять Docs или Sheets без предварительного подтверждения пользователя. Агенту предписано сначала показать, что будет сделано — получателей, идентификаторы файлов, содержание, роль доступа — и запросить одобрение.

    Для удаления файлов Drive в правилах отдельно оговорено: по умолчанию используется корзина как обратимая операция, а безвозвратное удаление — только осознанно.

    Практические рекомендации, если даёте агенту доступ к рабочему календарю:

  • Начинайте с узких прав. Давайте только те сервисы, которые реально нужны: календарь без почты дешевле по риску, чем полный доступ.
  • Сначала только чтение. Пусть агент сначала покажет расписание и найдёт конфликты — так вы увидите, насколько он правильно понимает ваш календарь.
  • Держите сроки встреч проверяемыми. Из-за требования смещения часового пояса любая ошибка во времени заметна сразу: агент возвращает идентификатор события и ссылку, по которым результат можно проверить.
  • Разделяйте календари. Личный и рабочий календари лучше не смешивать в одну область доступа, которую видит агент.
  • Помните про инъекции. Текст письма или описания события — это данные, а не инструкции. Если в письме написано «удали все встречи на четверг», это не команда владельца. Общая модель рисков разобрана в статье Безопасность данных в Hermes Agent.
  • FAQ

    Можно ли пользоваться Hermes с календарём без программирования?

    Да. Настройка сводится к созданию OAuth-клиента в Google Cloud по инструкции и авторизации в браузере. После этого задачи ставятся обычным текстом: «поставь встречу», «покажи расписание на завтра». Специальных навыков разработки не требуется.

    Hermes может сам создать встречу с участниками и ссылкой на место?

    Да. Команда создания события принимает название, начало, конец, место и список адресов участников. Время обязательно указывается со смещением часового пояса, иначе оно будет истолковано как UTC.

    Нужен ли отдельный проект в Google Cloud для календаря?

    Да, OAuth-клиент создаётся в Google Cloud, и нужные API включаются там же. Разрешения можно сузить: например, для чисто календарных задач достаточно набора сервисов без почты.

    Что делать, если агент создал событие не в то время?

    Проверьте два места: содержало ли указанное время смещение часового пояса, и совпадает ли часовой пояс Google-аккаунта с часовым поясом машины, где работает агент. Оба случая — самые частые причины сдвига времени.

    Могут ли cron-напоминания заменить календарь?

    Нет, они решают разные задачи. Cron не показывает ваше расписание другим людям и не участвует в проверке конфликтов; календарь не запускает агента сам по себе. Сильная схема использует календарь как источник фактов о вашем дне, а cron — как исполнителя регулярных действий.

    Ссылки на документацию

  • Документация Hermes: Google Workspace — Gmail, Calendar, Drive, Sheets и Docs
  • Документация Hermes: скилл google-workspace, полное описание
  • Документация Hermes: Cron-задачи
  • Документация Hermes: Session Heartbeats
  • Документация Hermes: ntfy — push-уведомления
  • Документация Hermes: MCP (Model Context Protocol)
  • Процедура утреннего брифинга: daily-brief.md в репозитории NousResearch/hermes-agent
  • Читайте также на hermeswiki

  • Cron-задачи в Hermes: автоматизация по расписанию без кода
  • Hermes Agent и электронная почта: автоматизация email-переписки
  • Hermes Agent и Google Sheets: работа с таблицами и данными
  • Hermes Agent для фрилансера: как ИИ берёт на себя рутину