Google Calendar
История изменений
История выпусков CLI Google Календаря: новые возможности, изменения и исправления.
Заметные изменения в @wirecat/gcal-cli. По одному разделу на версию, новые сверху.
0.1.1 — 29.10.2026
Исправлено
- Заголовок руководства для агента (
skills/gcal-cli/SKILL.md) снова корректный YAML. ЕгоdescriptionсодержалCalendar: sync, что парсер YAML читает как вложенное отображение, поэтому строгие загрузчики навыков и индекс навыков на сайте WireCat отклоняли файл. Текст не изменился, кроме тире вместо этого двоеточия.
0.1.0 — 29.10.2026
Добавлено
gcal <profile> session start | status | endвходит в Google через браузер с доступом к Календарю только на чтение. Пока используется ваш собственный клиент Google OAuth (--client-fileилиGCAL_GOOGLE_CLIENT_IDиGCAL_GOOGLE_CLIENT_SECRET); как его создать, описано в настройках. Вход хранится в системном хранилище ключей или, с--credential-storage file, в личном файле (права 600) там, где хранилище ключей не работает.session status --checkспрашивает у Google, действует ли вход.--grant writeдополнительно запрашиваетcalendar.events, нужный для записи событий, а--grant sharing—calendar.acls, нужный для управления доступом.gcal session listвыводит профили на этом компьютере, у каждогоsigned_in,accountиcredential_storage; ни одна команда не выбирает профиль за вас.gcal <profile> syncкопирует ваши календари в локальное хранилище WireCat, и команды чтения работают без сети.calendars list | sync | unsync,events list | show,search,people list | linkиlinks review | resolve— общие календарные команды WireCat, поэтому другие инструменты WireCat видят те же события и тех же людей. Первая синхронизация читает ваши собственные календари от года назад до трёх месяцев вперёд; каждая следующая просит у Google только изменения. Повторения повторяющегося события сохраняются по отдельности, включая отменённые.sync --embedдополнительно индексирует события для поиска по смыслу. Каждый ответ перечисляет вuntrustedполя, которые написал отправитель приглашения, чтобы агент читал их как данные.- Большая синхронизация продолжается за несколько запусков.
syncсама останавливается до истечения лимита времени (15 минут в терминале, 45 секунд через MCP;--timeoutего меняет,--max-pages <n>дополнительно уменьшает число запросов к Google) и сохраняет результат после каждой страницы. Частичный ответ содержитstate: "partial", сколько уже сделано, и команду для следующего запуска.--rescanначинает все календари заново.gcal <profile> statusпоказывает ход синхронизации каждого календаря,partialилиcomplete, и сколько времени прошло с последнего продвижения. gcal <profile> calendars busyпоказывает, когда календари и люди заняты, по ответу Google о занятости, который говорит когда, но никогда — чем.--duration-minutesвыводит промежутки, свободные у всех, в пределах--hours(по умолчанию 09:00-17:00), с понедельника по пятницу; те, кого Google не показывает, перечислены вunknown. Ничего не сохраняется.gcal <profile> search --backend server <words>использует собственный поиск Google Календаря по синхронизируемым календарям. Он только читает, ничего не сохраняет и находит события и за пределами синхронизированного периода. По умолчанию используется--backend archive, локальное хранилище.gcal <profile> events create | update | delete | respondменяют Google Календарь послеsession start --grant write. Без этого права запись завершается сpermission_errorи называет нужный флаг. Изменение отправляет синхронизированную версию, поэтому событие, изменённое в Google с тех пор, даётevent.conflictи никогда не перезаписывается. Создание, ответ на которое потерялся, заканчиваетсяoutcome_unknownс ID; при повторе с этим ID событие находится.events create --repeat <rule>создаёт повторяющееся событие, аevents update --series --repeat <rule>меняет его правило. Новые даты делают событие со временем событием на весь день, а новое время делает событие на весь день событием со временем, сохраняя ссылку Meet и файлы Drive.respondменяет только ваш собственный ответ. Запись доступна и как инструменты MCP, с теми же параметрами, что в командной строке.gcal api list | show | callи отдельная командаgcal <profile> api <method>для каждого метода дают доступ ко всем методам Google Calendar API v3, которые gcal может обслужить. Они созданы из описания API от Google, и каждый ответ сверяется с ним. Уведомления Google об изменениях (watch,channels.stop) не предлагаются: им нужен публичный веб-адрес.- У каждой команды и каждого метода Google Календаря есть ключ разрешения, например
events.createилиapi.calendar.events.insert. Изменение сначала спрашивает (--yesв скрипте), в том числе открытие доступа к календарю и передача его другому аккаунту; через MCP отвечать некому, поэтомуaskпозволяет агенту выполнить его. Три ключа стоят вdeny, пока вы их не разрешите:events.notify(Google рассылает письма участникам),events.delete.series(удаление всех повторений повторяющегося события) иsharing.notify(Google отправляет письмо человеку, которому открыт календарь). Командыapiпроверяют те же ключи, что и запись событий, а запись события проверяет ещё и ключ своего метода Google, поэтомуpermissions.api readonlyостанавливает и то и другое. Очистка календаря (calendars.clear) запрещена и никогда не предлагается через MCP, как иapi call.--dry-runвыводит все ключи, которые проверяет вызов, с их уровнями. Ключ, не называющий ни одного метода, отклоняется, аgcal doctorпоказывает такие ключи, сохранённые в файле. - Код доступа, PIN и пароль встречи никогда не покидают Google. Они никогда не сохраняются: ссылка для
подключения хранится без строки запроса, а строка описания или места события, где упоминается код доступа,
пароль или PIN, отбрасывается. Команды
apiтоже удаляют их из каждого ответа с событием, в терминале и через MCP. gcal <profile> mcp serveпредоставляет команды профиля агенту, аmcp add claude-code | codex,mcp config,mcp check,mcp revokeиmcp server start | stop | statusнастраивают это.--profiles <names|all>обслуживает несколько профилей; профиль никогда не выбирается сам, поэтомуgcal mcp serveбез профиля выводит их список и останавливается. Сервер сообщает агенту, какой текст написали другие люди, а управляющие символы в ответе показываются явно, поэтому текст приглашения ничего не может скрыть от агента.gcal --helpпоказывает, что умеет gcal и с чего начать, аgcal guideдаёт пошаговые сценарии: настройка, доступ для агента, поиск времени.gcal skill installдобавляет навык инструмента для Claude Code, Codex, Gemini CLI, OpenClaw и Hermes Agent.gcal doctorпоказывает, что настроено, без сети и без хранилища ключей: версию, пути, хранилище, клиент OAuth, блокировку профиля и файлы входа.gcal <profile> runs list | showпоказывает сохранённые запуски gcal, включая вход и выход: успешные — 7 дней, неудачные — 30. Секреты скрыты;config set record_input falseне сохраняет ни одного введённого вами слова.