Учёт задач в Google Calendar
Записывает каждую рабочую сессию Claude в Google Calendar отдельным событием: длительность, краткий отчёт, ссылки и использованные инструменты.
- Что делает
- Записывает каждую рабочую сессию Claude в Google Calendar отдельным событием: длительность, краткий отчёт, ссылки и использованные инструменты.
- Когда брать
- Когда хотите видеть в календаре, над чем и сколько вы работали вместе с ИИ, и разбирать неделю по событиям.
- Когда не брать
- Если Google Calendar не подключён к Claude, скилл работать не будет.
- Пример запроса
- Залогируй эту сессию в календарь и покажи, что я делал на прошлой неделе.
- Нужно подключить
- подключённый Google Calendar
Как включить
- Скачайте архив.
- В Claude откройте Настройки → Capabilities → Skills → Upload skill и выберите архив.
- Включите скилл переключателем.
Для терминала
Распакуйте архив и положите папку task-calendar-logger в ~/.claude/skills/. Файл SKILL.md должен лежать внутри этой папки.
Текст
---
name: task-calendar-logger
description: >
Универсальный трекер задач: каждую сессию работы (и автоматическую по расписанию,
и обычный диалог с пользователем) логирует в Google Calendar отдельным событием
с длительностью, кратким отчётом, ссылками на артефакты и списком использованных
инструментов. Автоматические задачи помечаются 🤖 + красный (Tomato), ручные
диалоги — 💬 + зелёный (Basil). Календарь выбирается один раз при первом запуске
и запоминается на будущее. ВСЕГДА запускай этот скилл в начале любой сессии,
где предстоит реальная работа (создание файлов, многошаговые задачи, вызовы
MCP), и обязательно возвращайся к нему в конце — перед финальным ответом
пользователю. Также используй когда пользователь говорит «залогируй сессию»,
«занеси в календарь», «запиши что мы делали», «обнови событие», «покажи что я
делал на прошлой неделе».
compatibility: "Google Calendar MCP (list_calendars, create_event, update_event)"
---
Универсальный трекер задач в Google Calendar
Каждая сессия работы оставляет след в календаре: видно сколько времени и на что было потрачено, что получилось на выходе, и каким способом задача была запущена (автоматически по расписанию или вручную).
Требования: подключённый Google Calendar MCP с тулзами list_calendars, create_event, update_event.
Логика: три шага — настройка (один раз навсегда), создание события в начале сессии, обновление события в конце. Между ними — обычная работа.
Шаг 0 (один раз навсегда): настроить календарь
Перед первым реальным использованием — определи, в какой календарь писать.
Если ID календаря уже сохранён
Проверь CLAUDE.md пользователя или memory на наличие записи вида:
task-calendar-logger: calendarId = <...>, timeZone = <...>
Если есть — используй её и переходи к Шагу 1.
Если ID не сохранён — спросить и запомнить
- Вызови
list_calendars(). - Покажи пользователю варианты через
AskUserQuestion: первые 3-4 наиболее вероятных кандидата (primary, календари с названиями типа "Work", "Cowork", "Tasks") как варианты выбора + опция "Other" для ввода точногоsummary. - После выбора — возьми
idиtimeZoneсоответствующего календаря. - **Сохрани в
CLAUDE.md** пользователя строкой: ``task-calendar-logger: calendarId = <id>, timeZone = <iana-zone>`ЕслиCLAUDE.md` нет — создай его в корне пользовательской папки или в memory.
На этом шаге также договорись с пользователем о таймзоне, если у выбранного календаря она отличается от той, в которой реально живёт пользователь.
Шаг 1: В начале сессии — создать событие
Делай это сразу после того, как уточнил детали задачи (через AskUserQuestion), но до реальной работы.
1.1 Определи тип сессии: AUTO или MANUAL
| Признак | Тип | Эмодзи | colorId |
|---|---|---|---|
| Первое сообщение — это запуск scheduled task (формальный промпт без приветствия, упоминание имени задачи/скилла, фразы вроде "ежедневный запуск", "по расписанию", или системный hint о запуске задачи) | AUTO | 🤖 | 11 (Tomato — красный) |
| Первое сообщение написал живой пользователь (разговорный тон, "сделай мне", "помоги с", вопросы) | MANUAL | 💬 | 10 (Basil — зелёный) |
Если непонятно — считай MANUAL.
1.2 Сгенерируй заголовок
3–7 слов, как пункт в TODO. Не копируй первое сообщение пользователя дословно — переформулируй сжато.
Финальный заголовок: <ЭМОДЗИ> <Суть задачи>.
Примеры:
🤖 Дайджест AI-новостей за неделю(auto)💬 План запуска курса(manual)🤖 Обработка кейса в Slides(auto, scheduled)💬 Презентация про нейропродюсера(manual)
1.3 Засеки время
Через bash: TZ=<timeZone из Шага 0> date +"%Y-%m-%dT%H:%M:%S".
startTime = это значение. endTime черновое = start + 30 минут (в Шаге 3 обновим на фактическое).
1.4 Создай событие
create_event(
calendarId = <ID из Шага 0>,
summary = "<ЭМОДЗИ> <Суть задачи>",
startTime = "<ISO 8601>",
endTime = "<ISO 8601 + 30 минут>",
timeZone = "<из Шага 0>",
colorId = "11" если AUTO, "10" если MANUAL,
description = "<префикс по шаблону ниже>"
)
Шаблон описания для Шага 1:
<🤖 Запущено по расписанию | 💬 Ручная задача>
Статус: в процессе…
📝 Исходный запрос:
«<первое сообщение целиком, до 800 символов>»
**Сохрани eventId** — он нужен в Шаге 3.
Если
create_eventупал — не блокируй основную работу. Сделай одну попытку, при ошибке зафиксируй мысленно и иди дальше. В Шаге 3 попробуешь снова сcreate_eventсразу с фактическим временем.
Шаг 2: По ходу работы — собирай факты
Ничего не пишешь в чат — просто запоминай, что войдёт в финальное описание:
- Файлы: какие создал/изменил (с абсолютными путями).
- Скиллы: какие вызывал, по именам.
- MCP-тулзы: какие коннекторы дёргал и примерно сколько раз (Notion, Google Calendar, Chrome, Gemini, …).
- Внешние ссылки: Notion-страницы, Google Docs, опубликованные посты, созданные события.
- Для research-задач: ключевые выводы в 2–3 предложениях.
Это контекст для Шага 3, а не для пользователя.
Шаг 3: В конце сессии — обновить событие
Делай это перед последним сообщением пользователю (перед present_files или финальным резюме).
3.1 Получи фактическое время окончания
TZ=<timeZone> date +"%Y-%m-%dT%H:%M:%S".
3.2 Собери описание
Шаблон (опускай секции, если в них пусто):
<🤖 Запущено по расписанию | 💬 Ручная задача>
📋 Что сделано:
• <буллет 1 — одно предложение>
• <буллет 2>
• <буллет 3>
📎 Артефакты:
• <название> — <абсолютный путь или URL>
• <название> — <URL>
🛠 Использованные скиллы:
• <skill-name-1>
• <skill-name-2>
🔌 MCP-инструменты:
• <коннектор> (≈<N> вызовов)
📝 Исходный запрос:
«<первое сообщение, до 800 символов>»
3.3 Обнови событие
update_event(
calendarId = <ID из Шага 0>,
eventId = <eventId из Шага 1>,
endTime = "<фактическое ISO 8601>",
description = "<собранное описание>"
)
Заголовок (summary) обновляй только если scope задачи существенно поменялся в ходе работы. Иначе оставь как было.
3.4 Fallback: события из Шага 1 нет
Если в Шаге 1 create_event упал — здесь вызови create_event напрямую: startTime ≈ время начала сессии (прикинь по длине диалога), endTime = сейчас. colorId и эмодзи — по типу из Шага 1.
Поведение в особых случаях
Сессия длиннее 30 минут
Просто обнови endTime в Шаге 3 на фактический — Google Calendar нормально растянет событие.
Сессия короче 5 минут
Всё равно логируй. Лучше иметь много коротких записей, чем потерять данные.
Пользователь явно говорит «не логируй»
Не запускай скилл. Если уже создал событие в Шаге 1 — в Шаге 3 удали его через delete_event.
Несколько задач в одной сессии
Если пользователь в середине переключился на другую задачу — допиши новую тему в summary ("…+ <вторая тема>") и зафиксируй обе в Шаге 3.
Запуск идёт под другим аккаунтом / новым пользователем
Проверь, что calendarId из CLAUDE.md ещё работает (list_calendars его возвращает). Если нет — повтори Шаг 0.
Чеклист на каждую сессию
- [ ] Шаг 0 один раз сделан:
calendarIdиtimeZoneсохранены вCLAUDE.md - [ ] Шаг 1: определён тип (AUTO/MANUAL), заголовок с эмодзи, событие создано с правильным
colorId,eventIdсохранён - [ ] Шаг 2: по ходу — мысленно собраны файлы / скиллы / MCP / ссылки
- [ ] Шаг 3: перед финальным ответом — событие обновлено фактическим
endTimeи осмысленным описанием
Антипаттерны
- ❌ **Создавать событие до
AskUserQuestion.** Заголовок будет про задачу, которая через 30 секунд поменяется. - ❌ Логировать болтовню и тривиальные вопросы. «Что такое REST API», «привет» — пропускай. Условие: должна быть реальная работа (файлы, MCP, многошаговость).
- ❌ Простыни в описании. Не копируй туда сырые ответы тулзов и куски кода. Описание — summary, не транскрипт.
- ❌ **Забывать
timeZone.** Без неё событие может уехать на ±несколько часов. Всегда передавай явно. - ❌ Путать AUTO и MANUAL. От этого зависит цвет и эмодзи — а вся будущая аналитика «сколько времени съели автозадачи vs ручные» строится на этом различии.
- ❌ Спрашивать календарь каждую сессию. Шаг 0 — один раз, дальше читать из
CLAUDE.md.
Справочник: тулзы Google Calendar MCP
**list_calendars()** — возвращает массив {id, summary, timeZone}. Нужен в Шаге 0.
**create_event** — обязательные: summary, startTime (ISO 8601), endTime (ISO 8601). Полезные: calendarId, timeZone, description, colorId.
**update_event** — обязательное: eventId. Опциональные, которые мы используем: calendarId, endTime, description, иногда summary.
**delete_event** — обязательное: eventId. Опциональное: calendarId. Нужно для случая «не логируй».
**Палитра colorId:**
| ID | Цвет | Используем для |
|---|---|---|
| 1 | Lavender | — |
| 2 | Sage | — |
| 3 | Grape | — |
| 4 | Flamingo | — |
| 5 | Banana | — |
| 6 | Tangerine | — |
| 7 | Peacock | — |
| 8 | Graphite | — |
| 9 | Blueberry | — |
| 10 | Basil (зелёный) | MANUAL (💬) |
| 11 | Tomato (красный) | AUTO (🤖) |
Разработано в iiuniversitet — https://iiuniversitet.ru/?utm_source=bonus&utm_medium=skill&utm_campaign=katalog&utm_content=iiu-task-calendar-logger
Автор: iiuniversitet. Раздаточный скилл iiuniversitet «task-calendar-logger».