simbiot-harness/skills/gcal/SKILL.md

66 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: gcal
description: Use when Alex asks in TG to schedule a call/meeting ("сделай звонок на X с Владой", "запланируй созвон", "поставь встречу") — creates a Google Calendar event with guest invites in a workday slot (Alex's «3 через 3» cycle), or checks the schedule. Powered by tools/gcal.py.
metadata:
origin: task t-261008155436-a658e9, messages m-516173943/m-516173944
requires: secrets/gcal-service-account.json (service account key; until provided — dry-run/planning only)
---
# gcal: команда из TG → событие в календаре Alex
Одна команда из TG должна решаться одним прогоном этого скилла:
интеншн → валидный слот (рабочий день!) → событие с приглашением → ответ в чат.
## Шаг 1 — разобрать команду
Из сообщения извлечь:
- **что**: тема (по умолчанию «Звонок: <тема/имя гостя>»);
- **когда**: день (сегодня/завтра/дата) и время; длительность (по умолчанию 30 мин);
- **кого**: email гостей. Известные контакты: Влада — videoprodshema@gmail.com.
Email НЕ известен → спросить у Alex ДО создания (угадывать адрес нельзя);
- **время**: Alex в Минске (UTC+3). Время из TG трактовать как минское,
в инструмент передавать UTC.
## Шаг 2 — валидация слота (строго до создания)
```
./venv/bin/python tools/gcal.py next-workdays # ближайшие рабочие
./venv/bin/python tools/gcal.py create ... --dry-run # что попадёт в Google
```
Guard'ы (встроены в create, не обходить):
1. **Только рабочий день** — цикл «3 через 3» (docs/alex-schedule.md).
Якорь цикла: env GCAL_WORK_ANCHOR (по умолчанию 2026-10-02). Сдвиг цикла
Alex сообщил в TG → обновить docs/alex-schedule.md и якорь.
2. **Не позже 2ч до начала** (GCAL_MIN_LEAD_MIN=120) — анти-паттерн рекордера
(t-261008155708: встречи, созданные <2 мин до старта, не заходятся).
Выходной/поздний слот → НЕ создавать, ответить Alex с ближайшими рабочими
днями и попросить подтвердить слот.
## Шаг 3 — создать событие
```
./venv/bin/python tools/gcal.py create \
--title "Звонок: Влада" --day YYYY-MM-DD --time HH:MM \
--duration 30 --guests "videoprodshema@gmail.com" --timezone Europe/Minsk
```
`sendUpdates=all` — приглашения уходят гостям автоматически.
Ответ в чат: ссылка на событие (htmlLink), слот, гости.
## Ключ (один раз, если не настроен)
`tools/gcal.py check` печатает готовность и шаги:
Google Cloud → Calendar API → service account → JSON-ключ → дать
client_email право «Вносить изменения» на календаре Alex → положить в
`secrets/gcal-service-account.json` (0600). Ключа нет → работать dry-run'ом
и попросить Alex прислать ключ (это может сделать только владелец аккаунта).
## Критерии качества
- [ ] Слот — рабочий день цикла; иначе отказ с предложением ближайших рабочих
- [ ] До начала ≥2ч (или осознанный --force по явной просьбе Alex)
- [ ] Гости получили приглашения (sendUpdates=all), email не угадан
- [ ] В ответе Alex — время в его зоне (Минск) и ссылка на событие
- [ ] `check` зелёный; ключ лежит в secrets/ с правами 0600