---
name: weekly-plan
description: Проводит интерактивное недельное планирование по методологии Дорофеева. Собирает данные из Singularity, Google Calendar, новости, погоду. СПРАШИВАЕТ пользователя о просроченных задачах, входящих задачах, распределении задач "когда-нибудь". Сохраняет финальный план в markdown файл artifacts/weekly-reports/. ИСПОЛЬЗУЙ ЭТОТ SKILL когда пользователь ЯВНО просит: провести weekly review, недельное планирование, обзор недели, планирование по Дорофееву, или упоминает "разобрать задачи на неделю".
license: MIT
allowed-tools: Read, Write, Bash(curl:*), mcp__singularity__list_tasks, mcp__singularity__get_task, mcp__singularity__update_task, mcp__singularity__complete_task, mcp__singularity__get_inbox_tasks, mcp__singularity__list_projects, mcp__google-calendar__list-calendars, mcp__google-calendar__list-events, WebSearch, WebFetch, AskUserQuestion
---

# Weekly Plan - Недельное планирование

Ты мой личный ассистент, который помогает с планированием задач и подведением итогов.
Проведи еженедельный обзор для пользователя по методологии Максима Дорофеева.

---

## ⛔ КРИТИЧЕСКИ ВАЖНЫЕ ПРАВИЛА

### Запрет на выдумывание данных
- **НИКОГДА не придумывай задачи, события, названия или детали**
- **ВСЕ данные берутся ТОЛЬКО из реальных источников:**
  - Задачи → только из Singularity API (list_tasks, get_task)
  - События → только из Google Calendar API (list-events)
  - Проекты → только из Singularity API (list_projects)
  - Новости → только из WebSearch/WebFetch с реальными ссылками и за актуальное время
- **Если данных нет — так и напиши "Данных нет", не заполняй придуманными**
- **Названия задач, проектов, событий — копируй ДОСЛОВНО из источника**
- **Не додумывай модели машин, имена людей, детали событий**

### Очистка контекста
- Перед выполнением skill **игнорируй любые ранее полученные данные**
- Каждый запрос к API делай заново — не используй "кэшированные" результаты
- Если есть сомнения в актуальности данных — перезапроси API

---

## Workflow (краткий обзор)

### ФАЗА 1: Подготовка и сбор данных

**Шаг 0: Подготовка**
- ⚠️ **ПОЛУЧИ ТЕКУЩУЮ ДАТУ ТОЛЬКО ЧЕРЕЗ СИСТЕМНУЮ КОМАНДУ:**
```bash
date "+%Y-%m-%d %A %H:%M"
```
- ⚠️ **НЕ ИСПОЛЬЗУЙ timeapi.io, Google Calendar API или другие внешние сервисы для даты!**
- ⚠️ **НИКОГДА НЕ УГАДЫВАЙ ДНИ НЕДЕЛИ — ТОЛЬКО ИЗ ВЫВОДА `date`!**
- **Пример:** `date` вернул `2026-01-05 Monday` → Вт 06.01, Ср 07.01, Чт 08.01, Пт 09.01, Сб 10.01, Вс 11.01
- Для расчёта дат используй: `date -d "+N days" "+%Y-%m-%d %A"`
- Прочитай `config/settings.yaml` для получения: город, источники новостей, параметры skill
- Задавай уточняющие вопросы для улучшения отчета

**Шаг 1: Анализ прошлой недели**
- Получи выполненные задачи из Singularity за прошлую неделю
- Получи события из Google Calendar за прошлую неделю
- Составь краткий отчёт: что сделано, какие встречи прошли

---

### ФАЗА 2: Интерактивная обработка (ОБЯЗАТЕЛЬНАЯ!)

⚠️ **НЕ переходи к Фазе 4 (формирование отчета) пока не завершена Фаза 2!**

**Шаг 2.1: Расчистка "хвостов" (просроченные задачи)**
- Найди просроченные задачи через Singularity
- По КАЖДОЙ задаче ОТДЕЛЬНО используй `AskUserQuestion` с опциями:
  - Перенести на завтра
  - Отложить на когда-нибудь
  - Выполнить сейчас
  - Оставить как есть
- Собери ВСЕ ответы, затем batch обновление через API

**Шаг 2.2: Разбор входящих задач (без проекта)**
- Получи задачи без проекта через `get_inbox_tasks(max_count=1000)`
- По КАЖДОЙ задаче спроси в какой проект перенести (предложи подходящий)
- Собери ВСЕ ответы, затем batch обновление

**Шаг 2.3: Задачи "когда-нибудь"**
- Получи задачи "когда-нибудь" (deferred=true без start)
- Спроси: "Хочешь распределить какие-то задачи по дням этой недели?"
- Если да — собери выбранные задачи и назначь даты
- Batch обновление через API

**Получение через прямой API запрос:**

```bash
curl -s -X GET "https://api.singularity-app.com/v2/task?includeRemoved=false&includeArchived=false" \
  -H "accept: application/json" \
  -H "Authorization: Bearer 34c737d2-5237-438b-97dc-a83ec77db36e" | \
python3 -c "
import sys, json
from collections import defaultdict

response = json.load(sys.stdin)
tasks = response.get('tasks', [])

# Фильтруем: deferred=true И нет start
deferred_tasks = [
    t for t in tasks
    if t.get('deferred') == True and (t.get('start') is None or t.get('start') == 'null')
]

# Группируем по проектам
by_project = defaultdict(list)
for task in deferred_tasks:
    project_id = task.get('projectId', 'No Project')
    by_project[project_id].append({'id': task['id'], 'title': task['title']})

print(f'Всего: {len(deferred_tasks)}')
print(json.dumps(dict(by_project), indent=2, ensure_ascii=False))
"
```

📖 См. CLAUDE.md строки 174-206

**Формат итоговой секции в markdown:**
```markdown
## ⏳ ЗАДАЧИ "КОГДА-НИБУДЬ"

Отложенных задач: 27

После распределения:
- "Настроить автобэкапы" → Пятница 27.12
- "Прочитать Deep Work" → Суббота 28.12

Осталось: 24 задачи

Breakdown по проектам:
- clawbuster: 8 задач
- Личные: 12 задач
```

📖 **Детали интерактивных сценариев:** [references/INTERACTIVE.md](references/INTERACTIVE.md)

---

### ФАЗА 3: Применение изменений

- Выполни ВСЕ изменения через Singularity API на основе ответов из Фазы 2
- Выводи прогресс: "✅ Обработано X задач"

---

### ФАЗА 4: Формирование финального отчета

**ТОЛЬКО после завершения Фаз 1-3!**

**Шаг 4.1: План на неделю**
- Составь детальный обзор задач на неделю
- Сгруппируй по дням недели
- Формат: "Название (Проект) [Приоритет]"

**Шаг 4.2: Календарь на 4 недели**
- Получи события на 4 недели вперед
- Выдели особые события (дни рождения, праздники, важные дедлайны)
- Предложи задачи по событиям

**Шаг 4.3: Обзор проектов**
- Для КАЖДОГО проекта (даже если задач нет):
  - Количество задач (всего)
  - ВСЕ задачи на эту неделю (не 2-3, а все!)
  - ВСЕ остальные задачи (позже)
  - Краткий обзор по проекту
  - Рекомендации как эффективнее закрывать задачи
- Предложи объединить дубликаты задач (спроси у пользователя)

#### Детальный алгоритм для "Обзор проектов"

⚠️ **КРИТИЧНО:** Эта секция ОБЯЗАТЕЛЬНА в итоговом отчете!
⚠️ **ОБЯЗАТЕЛЬНО выводить ВСЕ задачи проекта, не только на эту неделю!**

**Шаг 1: Получить ВСЕ активные задачи одним запросом**
```bash
curl -s -X GET "https://api.singularity-app.com/v2/task?includeRemoved=false&includeArchived=false" \
  -H "accept: application/json" \
  -H "Authorization: Bearer 34c737d2-5237-438b-97dc-a83ec77db36e" | \
python3 -c "
import sys, json
from collections import defaultdict
from datetime import datetime, timedelta

response = json.load(sys.stdin)
tasks = response.get('tasks', [])

# Текущая дата (начало недели)
today = datetime.now().date()
week_end = today + timedelta(days=7)

# Группируем по проектам
by_project = defaultdict(lambda: {'week': [], 'later': [], 'deferred': []})
for task in tasks:
    if task.get('checked') == 1:
        continue  # Пропускаем выполненные
    
    project_id = task.get('projectId', 'No Project')
    start = task.get('start')
    deferred = task.get('deferred', False)
    
    task_info = {
        'id': task['id'],
        'title': task['title'],
        'start': start,
        'priority': task.get('priority', 1)
    }
    
    if deferred and not start:
        by_project[project_id]['deferred'].append(task_info)
    elif start:
        task_date = datetime.fromisoformat(start.replace('Z', '+00:00')).date()
        if task_date <= week_end:
            by_project[project_id]['week'].append(task_info)
        else:
            by_project[project_id]['later'].append(task_info)
    else:
        by_project[project_id]['later'].append(task_info)

print(json.dumps(dict(by_project), indent=2, ensure_ascii=False, default=str))
"
```

**Шаг 2: Для каждого проекта вывести ВСЕ задачи**

⚠️ **НЕ пропускай секцию "Позже" даже если там много задач!**

**Шаг 3: Формат для каждого проекта (markdown)**

```markdown
**🚗 [Название проекта]** (X задач всего)

📅 На эту неделю (DD.MM - DD.MM):
- [ ] [название задачи] (DD.MM)
- [ ] [название задачи] (DD.MM)

📋 Позже:
- [ ] [название задачи] (DD.MM)
- [ ] [название задачи] (DD.MM)

⏳ Когда-нибудь:
- [ ] [название задачи]
- [ ] [название задачи]

**Обзор:** [краткий анализ]
**Рекомендации:** [советы]
```

**Шаг 4: Порядок вывода**
1. Проекты с задачами на текущую неделю (сортировка по количеству задач)
2. Проекты только с задачами "позже"
3. Проекты только с задачами "когда-нибудь"
4. НЕ выводить проекты без задач (экономия места)

**Шаг 4.4: Прогноз погоды**

⚠️ **НЕ однострочный прогноз!** Нужен прогноз ПО ДНЯМ на всю неделю.

**Шаг 1: Получить город из настроек**
- Город из `config/settings.yaml` → `user.city`

**Шаг 2: WebSearch для прогноза погоды**
```python
WebSearch(query=f"погода {city} прогноз на неделю декабрь 2025")
```

**Шаг 3: Формат (ОБЯЗАТЕЛЬНО):**
```markdown
## ☔ ПРОГНОЗ ПОГОДЫ (Минск, 23-29 дек)

- Пн 23.12: -5°C...0°C, облачно
- Вт 24.12: -8°C...-3°C, снег ← самый холодный день
- Ср 25.12: -4°C...-1°C, переменная облачность
- Чт 26.12: -2°C...+1°C, ясно
- Пт 27.12: -3°C...0°C, облачно с прояснениями
- Сб 28.12: -6°C...-2°C, снег
- Вс 29.12: -5°C...-1°C, пасмурно
```

**ВАЖНО:**
- КАЖДЫЙ день отдельной строкой
- Температурный диапазон (мин...макс)
- Условия (осадки, облачность)
- Выделять экстремальные дни стрелкой ←

**Шаг 4.5: Новости**
- Источники из `config/settings.yaml` → `news.sources`
- **Требования:**
  - В запросах указывай текущий год и месяц
  - Только новости за последние 7 дней
  - Каждая новость с прямой ссылкой
  - **20-30 новостей** по категориям
  - **ОБЯЗАТЕЛЬНО: дайджест с выводами в конце**

#### Детальный алгоритм для "Новости и события"

⚠️ **КРИТИЧНО:** Нужно 20-30 новостей + дайджест с выводами!

**Шаг 1: Получить текущую дату**
```bash
date "+%Y-%m-%d %A"
```

**Шаг 2: ОТДЕЛЬНЫЕ запросы WebSearch по категориям (минимум 6-7 запросов!)**

```python
# 1. Политика Беларусь
WebSearch(query="Беларусь политика законы изменения январь 2026")

# 2. Экономика и бизнес
WebSearch(query="Беларусь экономика бизнес предприятия январь 2026")

# 3. Финансы, курсы валют, банки
WebSearch(query="Беларусь курс доллар рубль банки кредиты январь 2026")

# 4. Налоги и законодательство
WebSearch(query="Беларусь налоги законы изменения с 1 января 2026")

# 5. Цены, инфляция, тарифы
WebSearch(query="Беларусь цены тарифы ЖКХ бензин продукты январь 2026")

# 6. Международные отношения
WebSearch(query="Беларусь Россия санкции международные отношения январь 2026")

# 7. Город и инфраструктура
WebSearch(query="Минск транспорт метро дороги инфраструктура январь 2026")
```

**Шаг 3: Для КАЖДОЙ важной новости — WebFetch для получения деталей**

Если новость важная (влияет на финансы, законы, цены) — открой ссылку и прочитай детали!

**Шаг 4: Формат в markdown**

```markdown
## 📰 НОВОСТИ И СОБЫТИЯ

### 💰 Финансы и курсы валют
- [Заголовок новости](url) — Источник
  _Краткое содержание: ..._
- [Заголовок новости 2](url2) — Источник

### 📋 Налоги и законодательство  
- [Изменения с 1 января](url) — Источник
  _Что изменилось: ..._

### 🏛️ Политика
- [Новость](url) — Источник

### 💡 Экономика и бизнес
- [Новость](url) — Источник

### 🏙️ Город и инфраструктура
- [Новость](url) — Источник

### 🌍 Международное
- [Новость](url) — Источник

---

## 📝 ДАЙДЖЕСТ: ГЛАВНЫЕ ВЫВОДЫ

⚠️ **Что изменилось и как это влияет на тебя:**

1. **Финансы:** [краткий вывод о курсах, что делать]
2. **Налоги:** [что изменилось с 1 января, нужно ли что-то делать]
3. **Цены:** [что подорожало/подешевело]
4. **Законы:** [новые правила, которые нужно знать]
5. **Рекомендации:** [конкретные действия на основе новостей]
```

**Цель:** 
- 20-30 новостей по категориям
- Краткое содержание для важных новостей
- **ДАЙДЖЕСТ с выводами — что это значит для пользователя и что делать**

**Шаг 4.6: Action items**
- Составь чеклист выводов/задач по итогам ревью
- Follow-up по предыдущей неделе
- Действия с проектами
- Задачи после обзора календаря

**Шаг 4.7: Сохранение отчета**

⚠️ **ВСЕ 12 СЕКЦИЙ должны быть в файле!**

**Путь к файлу:** `artifacts/weekly-reports/Week-YYYY-MM-DD.md`

**Формат:** Обычный markdown файл с секциями:

1. 📊 АНАЛИЗ ПРОШЛОЙ НЕДЕЛИ (DD-DD месяц)
2. ⚠️ ПРОСРОЧЕННЫЕ ЗАДАЧИ
3. 📥 ВХОДЯЩИЕ ЗАДАЧИ (без проектов)
4. 🎯 ФОКУС ЭТОЙ НЕДЕЛИ
5. 📅 ПЛАН НА НЕДЕЛЮ (DD-DD месяц)
6. 📁 ОБЗОР ПРОЕКТОВ ← ОБЯЗАТЕЛЬНА!
7. ⏳ ЗАДАЧИ "КОГДА-НИБУДЬ"
8. 📆 СОБЫТИЯ КАЛЕНДАРЯ НА 4 НЕДЕЛИ
9. ☔ ПРОГНОЗ ПОГОДЫ (Город, DD-DD месяц)
10. 📰 НОВОСТИ И СОБЫТИЯ ← ОБЯЗАТЕЛЬНА!
11. ✅ ACTION ITEMS
12. 🎯 ЗОНЫ ВНИМАНИЯ

**Шаги:**

1. Создать папку если не существует: `mkdir -p artifacts/weekly-reports`
2. Сформировать полное содержимое всех 12 секций в markdown
3. Сохранить через Write tool: `artifacts/weekly-reports/Week-DD-MM-YYYY.md`
4. Показать пользователю путь к файлу

**Пример структуры файла:**
```markdown
# Week 29.12.2025

## 📊 АНАЛИЗ ПРОШЛОЙ НЕДЕЛИ (22-28 декабря)

Завершено: 24 задачи

Breakdown по категориям:
- **Работа (clawbuster)**: 10 задач
  - code review
  - обсудить повышение зп Никите
  - ...

...

## 📁 ОБЗОР ПРОЕКТОВ

**clawbuster** (12 задач активных)
- Всего задач: 12
- На эту неделю: 5
- Ближайшие:
  - GPE-1222 доработки по фидбеку (23.12)
  - Код-ревью PR#456 (24.12)
- Статус: активно

...

## 📰 НОВОСТИ И СОБЫТИЯ

### События:
- [Программа развития 2030: рост ВВП на 15.8%](https://onliner.by/...) — Onliner
- [Курс доллара превысил 3.2 рубля](https://onliner.by/...) — Onliner

### Политика/Экономика:
- [Новость про инфляцию](https://zerkalo.io/...) — Zerkalo
...

---

🤖 Создано автоматически через Claude Code weekly-plan skill
```

**ВАЖНО:**
- Все секции полноценные (не summary!)
- Ссылки в markdown формате: `[текст](url)`
- Дословные названия задач из API

---

## Формат ответа

Структурируй ответ с эмодзи для наглядности:
- Используй чекбоксы для задач
- Выделяй важное **жирным**
- Будь лаконичен
- Группируй информацию по секциям

---

## Дополнительные материалы

Для более детальной информации об интерактивных сценариях см. [references/INTERACTIVE.md](references/INTERACTIVE.md).
