# Нейро-босс — гайд пользователя

Личный AI-органайзер, который живёт в мессенджере (Telegram и ВКонтакте) и помогает
держать ритм дня, фокус и честный взгляд на себя со стороны. Данные хранятся в Google
Таблице, вся работа — через чат с ботом.

---

## 1. Зачем это — кейсы и польза

Короткие сценарии: *ситуация → что делаешь → что получаешь.*

### 🕘 Ритм дня без силы воли
Бот сам, с заданным интервалом, задаёт короткий вопрос («Что сделал, чтобы стало лучше?»).
Ты отвечаешь одной фразой — и день сам собой обрастает записями.
**Польза:** внешний ритм вместо самодисциплины; к вечеру есть честная лента дня, а не пустота.

### ⭐ Фокус на главном (ГЗД)
Утром помечаешь ⭐ 3–5 главных задач на сегодня — они собираются в отдельный компактный
экран `/gzd`, разложенный по времени суток. Днём тапом отмечаешь выполненное.
**Польза:** управление вниманием там, где внимание и так живёт — в мессенджере. Видно, что
двигается, а что висит; ментор сам замечает, если что-то в ГЗД зависло без движения.

### 🪞 Честное зеркало (анализ дня)
Бот в роли «Босса» читает твои записи и задачи за день и выдаёт короткий честный разбор —
без лести. Приходит в заданное время (по умолчанию 15:00 и 21:00) или по запросу.
**Польза:** взгляд со стороны, которого обычно неоткуда взять. Замечаешь, где сам себе врёшь.

### ⏱ Фокус-сессия
«Таймер на 25 минут» — и бот удержит тебя в фокусе: напомнит в начале, подтолкнёт к концу,
а в награду отдаст обещанный тобой приз.
**Польза:** помодоро прямо в чате, без отдельного приложения; система не даёт «уплыть».

### ✍️ Поймать мысль на лету
`/note_add` — записать мысль/факт в журнал без всякого вопроса. Текстом или голосом.
**Польза:** идея не теряется; всё в одном месте с остальным днём.

### ⚡️ Внести что угодно одним символом
Не нужно вспоминать команду: `.` — заметка, `..` — идея, `...` — задача, `....` — Золотые
Часы, `?` — в Inbox, `,` — вопрос к Claude.
**Польза:** захват за одно движение, пока мысль не улетела. Ничего не теряется по дороге
к нужной команде.

### 🥇 Честный счёт целевых часов
`.... 90 Писал лендинг (nboss)` — и час учтён. Вечером видно, сколько реально ушло
в работу над проектами, а не в ощущение занятости.
**Польза:** факт вместо самообмана; видно перекос — какой проект съедает время, а какой
стоит месяц.

### 💬 AI-собеседник в нужной роли
Выбираешь роль (психолог, штурмовик идей, собеседник) — и просто пишешь. Бот отвечает
в этой роли и помнит контекст последних сообщений.
**Польза:** быстрый разговор под задачу без переключения на другой сервис.

### 🎲 Микро-награда за отчёт
За каждый ответ в журнал бот подкидывает неожиданный факт-«вкусняшку».
**Польза:** приятная петля «сделал отчёт → получил интересное»; тянет возвращаться.

### 📧 Итоги дня на почту
Утром на следующий день приходит письмо с разбором вчера и рекомендациями.
**Польза:** день закрывается осмысленным итогом, а не растворяется.

---

## 2. Функционал по модулям

### 📋 Бортовой журнал (ядро)
Бот с интервалом присылает случайный вопрос из твоего набора (лист **Msgs**). Твой ответ
(текст или голос) сохраняется в лист **Journal** с датой-временем.
- Вопрос **общий на все твои аккаунты**: пришёл в Telegram и VK одновременно. Кто первый
  ответил — вопрос закрывается для всех, копии обновляются на «✅ Уже ответили».
- В течение дня вопросы **не повторяются**, пока не кончится весь список.
- Интервал настраивается: `/dnevnik_interval_set`.

### ✍️ Свободная запись — `/note_add`
Запись в журнал **без вопроса**. Бот просит прислать сообщение, ты шлёшь текст или голос —
попадает в Journal с пометкой «АВТОР» в колонке вопроса.

### ⚡️ Быстрый ввод символами (без команд)
Самый быстрый способ что-то внести: начать сообщение со служебного символа. Работает
в любой момент, **раньше любых режимов ожидания** — даже если бот ждёт ответ на вопрос.

| Пишешь | Что происходит |
|---|---|
| `. текст` | Заметка в журнал с меткой **АВТОР** (то же, что `/note_add`) |
| `.. текст` | Идея в журнал с меткой **ИДЕЯ** (то же, что `/idea_add`) |
| `... текст` | Создать задачу в списке дня (то же, что `/task_add`) |
| `.... N текст (код)` | **Золотые Часы задним числом:** N минут на проект `код` |
| `? текст` | Закинуть задачу в **Inbox** (то же, что `/inbox`) |
| `, текст` | Реплика в диалог с Claude (то же, что `/deep`) |
| `,, текст` | Начать **новый** диалог с Claude с этой реплики |
| `===` | Последние записи ИДЕЯ/АВТОР (то же, что `/idea_list`) |
| `====` | Последние записи Дневника Стратега (то же, что `/ds_list`) |
| `-` | Отменить текущий ввод (то же, что `/cancel`) |

**Точек ровно столько, сколько указано** — 1, 2, 3 или 4. Обычное многоточие в середине
текста бот не трогает, потому что смотрит только на начало строки.

**Задача без точек.** Если сообщение начинается с метки приоритета — эмодзи (`❗️`, `💰`,
`🔄`…) или текстового кода (`(!!!)`, `($)`, `RE`…) — бот создаёт задачу сразу, префикс
`...` не нужен. На телефоне эмодзи из «недавних» набрать быстрее, чем код.

**Про `....` (Золотые Часы) — важные детали:**
- **После четырёх точек обязателен пробел**, дальше число минут: `.... 70 текст (bud)`.
  Написание слитно (`....70`) не сработает — сообщение уйдёт как обычный текст.
- Код проекта — в скобках в конце, необязателен: без него бот попросит выбрать проект.
- **Можно вносить несколько записей одним сообщением** — каждая строка с `....` станет
  отдельной записью:
```
.... 70 Тлф Сергей, хорошая конверсия с рассылок (bud)
.... 30 Пост в ТаймШколу (pr)
.... 180 Сделал лидмагнит «ТАЙМ-пульс» (iik)
```
- **Префикс нужен на каждой строке.** В отличие от задач, где список вводится сплошным
  текстом, здесь первая строка не задаёт формат для остальных. Строки без `....`
  не вносятся, но и не теряются молча — бот перечислит их в ответе:
```
⚠️ Не внесено — нет «....» в начале строки:
— 30 Пост в ТаймШколу (pr)
— 180 Лидмагнит (iik)
```

### 📬 Inbox — захват задач без засорения дня
Список главных задач — линза внимания на сегодня, а не свалка. Поэтому всё пойманное
на бегу падает в отдельный лист **Inbox**, а в день переезжает только осознанно.
- `/inbox` или `? текст` — закинуть задачу (текстом или голосом). Одно движение.
- Бот **разбирает строку на колонки**: `? (!!!) Позвонить юристу (nboss)` ляжет в Inbox
  тремя ячейками — описание, приоритет, проект. Разбирать руками не нужно.
- `/inbox_list` — показать Inbox страницами (кнопка «Ещё»).
- **Перенос в день:** в таблице отмечаешь галочку «В работу» → строки переезжают
  в список дня. Бот проверяет каждые **15 минут**, `/inbox_sync` — забрать немедленно.
- `/inbox_del 2 5 7` — удалить строки по номерам из `/inbox_list`.

### 📚 Дневник Стратега — `/ds_edit`, `/ds_list`
Структурированная запись дня по шаблону **Утро / Хроника / Вечер** (в отличие от свободной
заметки). Бот присылает шаблон, ты заполняешь и отправляешь одним сообщением — запись
уходит в Journal с меткой «ДС».
- Открыть бланк — иконка 📚 в панели `/bar`.
- `/ds_list` или `====` — последние записи.
- `/ds_edit` — изменить сам шаблон (пункты хранятся в листе **Prompts**, не в коде,
  поэтому меняются из чата без перезапуска бота).

### ✅ Главные задачи дня — `/task_list`
Чек-лист задач на сегодня.
- **Telegram:** интерактивный список. Тап по задаче переключает «выполнено/нет». Выполненные
  помечаются ✅ и тонут вниз. Кнопки «➕ Добавить», «🙈 Скрыть выполненные».
- **VK:** пронумерованный текстовый список. Чтобы отметить/снять — пришли номера через пробел
  (напр. `1 3 5`). Кнопок нет из-за ограничений VK.
- **Добавление:** `/task_list` при пустом списке попросит прислать задачи (каждая с новой
  строки); либо сразу `/task_list Текст задачи`.
- **Удаление:** `/task_del` (покажет список с номерами и ждёт) или `/task_del 2 5 7` сразу.
- **Группировка по меткам** в начале текста задачи — помеченные всплывают наверх в заданном
  порядке, внутри группы по алфавиту:
  `🔄 (RE)` · `💰 ($)` · `🟢 (!!)` · `🟡 (!)` · `⛔️ (-)` · `❗️ (!!!)`.
- Каждое выполнение пишется в Journal строкой «ГлавЗадачи → ✅ текст».
- Список **постоянный**: задачи живут в нём, пока не отметишь выполненными или не удалишь —
  сам по себе он по дате не чистится.
- **Редактирование:** `/task_edit` — изменить текст задачи по номеру.
- `[Nд]` рядом с задачей — она висит невыполненной уже N дней. Порог настраивается
  через `/task_bad_period_set`.

**Два вида списка** (переключается кнопкой «Вид» или командой, настройка общая):
- `/task_list_simple` — обычный плоский список, сортировка по меткам приоритета.
- `/task_list_proj` — задачи сгруппированы по проектам под плашками-заголовками.
- `/task_list_text` — тот же список одним текстовым сообщением, без кнопок: удобно
  читать, копировать и пересылать.

**Разделитель-листалка.** `/line_edit` задаёт строки-разделители внутри списка (например,
периоды дня), `/line_clear` — убирает их.

### ⭐ ГЗД — главные задачи дня — `/gzd`
Выделение приоритета внутри общего списка `/task_list`: не отдельный список, а метка ⭐
на самых важных задачах дня, вынесенных в отдельный компактный экран.
- `/gzd` — кнопочный вид, тап переключает выполнено/нет так же, как в `/task_list`.
- `/gzd_text` — текстовый вид, без обрезки под кнопку. Номера задач в нём — те же, что
  в общем списке, можно сразу использовать в `/gzd_remove <номер>` без похода за ним
  в `/task_list_text`.
- `/gzd_add` — добавить задачу сразу с меткой ⭐ (двухшаговый диалог: сначала текст,
  потом, если нужно, время и приоритет).
- `/gzd_remove <номер>` — снять метку ⭐ с задачи, саму задачу не удаляет.
- `/gzd_new` — быстро завести новую ⭐-задачу с нуля.
- Тап по заголовку зоны ГЗД (средней из трёх) в кнопочном виде открывает `/gzd_text`.
- Шапка кнопочного `/gzd` показывает статистику Золотых Часов — та же сводка, что и
  в заголовке `/task_list`.

**Три зоны по времени задачи** (время внутри текста, как в обычных задачах —
`09:00 Позвонить клиенту`):
- **Запускатель** — 00:00–12:14, утренний блок.
- **ГЗД (фокус дня)** — 12:15–22:59, а также все задачи без указанного времени.
- **Засыпатель** — 23:00–23:59, вечерний блок.

Задача остаётся в списке `/task_list` как обычно — метка ⭐ только добавляет её
в `/gzd`/`/gzd_text`, отдельного хранилища для ГЗД нет.

**История переходов внутри дня.** В конце `/gzd_text` (и в данных, которые видит
ментор — см. ниже) может появиться блок «История ГЗД за сутки»: что появилось и что
пропало из ГЗД, с меткой времени, с начала текущих суток ГЗД (сутки для этого счёта
начинаются в 04:00, не в полночь — в это время расписание дня ещё не сформировано).
Блок появляется только при реальных изменениях состава, не на каждое обращение.

### 🎯 Режим фокуса — `/focus_on`
Скрывает всё, кроме одной задачи: тапаешь задачу — остальные пропадают с экрана.
Только Telegram (в VK список текстовый, тапать нечего). Выход — `/focus_off`.
Фокус **не сбрасывается** действиями, которые ему не мешают: `/timer`, `/idea_add`,
`/note_add`, `/cancel`. Любая другая команда выводит из фокуса.

### 🚀 Кнопка ПУСК — `/pusk`
Заготовленный заранее текст выхода из ступора: пишешь его в спокойном состоянии, а в
момент «не могу начать» просто жмёшь `/pusk` и читаешь. `/pusk_edit` — заменить текст,
`/pusk_clear` — очистить.

### 🔎 Блиц-анализ плана дня — `/task_analiz`
AI смотрит на список задач и критикует **формулировки**: где задача расплывчата, где это
на самом деле проект, а не задача, где не видно первого шага. Не про день целиком —
только про то, как задачи записаны.

### 🔍 Анализ дня («Босс»)
Бот в заданное время (по умолчанию 15:00 и 21:00 по твоему часовому поясу, меняется
`/boss_time_set`) или по `/boss` вручную (кнопка 📣 на панели) берёт записи журнала за сегодня,
выполненные и зависшие задачи + описание проектов (лист **Projects**) и через AI даёт короткий
честный разбор в роли из промпта `daily_boss` (лист **Prompts**).
- Если за день ещё нет записей — присылает лёгкий пинок «готовься».
- Разборы сохраняются и идут в утренний дайджест.

### 🧠 AI-роли и свободный диалог
- `/role_set` — выбрать роль (промпты из листа **Prompts**). Когда роль активна, любое обычное
  сообщение (не команда, не ответ на вопрос журнала) уходит в AI в этой роли, с учётом
  контекста последних N сообщений (N задаётся в Prompts).
- `/ask вопрос` — разовый вопрос к AI **без учёта роли и контекста**.
- Ответы AI очищаются от markdown-разметки.

### 🧠 Глубокий анализ — `/deep`
Разговор с Claude о серьёзном: разобрать ситуацию, продумать стратегию, покопаться
в проблеме. В отличие от `/ask` (разовый вопрос без памяти) **держит контекст диалога**.
- `/deep текст` или просто `, текст` — реплика в текущий диалог.
- `/deep_new` или `,, текст` — начать заново, забыв предыдущий контекст.
- `/deep_topic` — показать текущую тему `/deep` (сейчас заведена только «общая» —
  задел на будущее, если появятся отдельные тематические диалоги).
- Модель и глубину рассуждений задают `/ai_model` (sonnet/opus/haiku) и `/ai_effort`
  (low/medium/high).

### 🤖 AI-провайдеры и модели
- `/providers` — список провайдеров (✅ активный, 🔑 есть ключ, ❌ нет ключа).
- `/provider_set название` — переключить активного провайдера.
- `/ai_model`, `/ai_effort` — модель Claude и уровень рассуждений. **В режиме ментора**
  меняют настройки ментора, **вне его** — глобальные, которыми пользуются `/deep`,
  разбор дня и почтовый дайджест. Бот прямо пишет в ответе, что именно поменял.

### ⏱ Таймер фокуса — `/timer`
Обратный отсчёт для фокус-сессии.
- Пресеты: `3 5 7 10 15 20 25 35 45 60` минут + «🎁 Назначить приз».
- **Один таймер за раз** (на аккаунт). Попытка запустить второй → предложит отменить текущий.
- Промежуточные напоминания по хитрой схеме: кластер в начале (удержать), веха в середине,
  нарастающий спринт в конце. Все промежуточные сообщения **сами исчезают** из чата в финале,
  остаётся только «⌛️ Отсчёт закончен» + приз.
- Переживает перезапуск бота.
- Отмена: кнопка «❌ Отменить текущий» или `/timer cancel`.

### 🥇 Золотые Часы — `/zch_start`, `/zch_stop`
Личный трекер целевой осознанной деятельности, отдельно от задач-галочек. Золотой Час —
любой отрезок времени, который вы сами так назвали, с привязкой к проекту.
- `/zch_start код_проекта` — старт (без аргумента — кнопки выбора проекта); `/zch_stop` —
  финиш с подсчётом длительности. Новый старт при уже идущем ЗЧ авто-завершает текущий.
- **Активный интервал глобальный** — общий на все каналы (Telegram и VK), в отличие от
  таймера, который личный на аккаунт.
- **Задним числом — основной способ внесения:** `.... N текст (код)` — четыре точки,
  **пробел**, минуты, описание, код проекта в скобках. Пример: `.... 70 Тлф Сергей (bud)`.
  Несколькими строками в одном сообщении — несколько записей сразу (см. «Быстрый ввод
  символами»).
- Статистика в заголовке `/task_list`: `🥇 2.1•18•93•327` (часы за 24ч•неделю•год•всё
  время). Кнопка «🏆 Итого» — та же сводка плюс разбивка по проектам.
- `/zch_stats` — статистика с разбивкой по проектам; `/zch` — статус текущего интервала.
- `/zch_del` — удалить ошибочную запись по номеру.
- Код проекта — из листа **Projects** в Google Sheets (колонка «Код»). Те же коды
  использует канва проектов.
- Каждый завершённый интервал пишется и во внутреннюю базу (для статистики), и в лист
  **Journal** с меткой «ЗОЛОТО». Ежедневный снимок сводки уходит в лист **Gold** —
  копится исторический ряд.

### 🎲 Факты-«вкусняшки» — `/fact`
Несколько наборов коротких фактов: `classic` (~700, 8 тем), `biz` (~300, бизнес) и `pirozhki`
(~4500 пирожков — четверостиший в четыре строки). Новые наборы появляются сами, как только
файл добавлен на сервер.
- Появляется **автоматически** после ответа в журнал и после `/note_add` — карточкой-цитатой
  с меткой темы и кнопкой «🎲 Ещё факт».
- `/fact` — получить факт в любой момент.
- `/factstats` — метрики показов (всего, по источнику, по темам, по аккаунтам).
- `/facts_off` / `/facts_on` — выключить и вернуть автопоказ (сам `/fact` продолжает работать).
- `/facts_set` — выбор наборов **кнопками**: у каждого набора галочка ✅/⬜ и число фактов,
  тап включает или выключает набор, карточка обновляется на месте. Включено несколько —
  факты идут вперемешку, набор выбирается поровну среди включённых. «Все наборы» включает
  всё сразу. Хотя бы один набор остаётся включённым. Выбор общий для всех пользователей бота.
  - Текстом то же самое: `/facts_set pirozhki` (один набор), `/facts_set classic+biz`
    (вперемешку), `/facts_set all`, `/facts_set +biz` (добавить), `/facts_set -classic` (убрать).
- **Темы не идут подряд:** две последние показанные вам темы пропускаются, поэтому «Афера»
  или «Переговоры» не выпадут три раза за минуту. Внутри одного набора с одной темой
  (пирожки) чередования нет — там и так одна тема.

### 📧 Email-дайджест
Утром на следующий день приходит письмо: разбор вчерашнего дня + рекомендации (промпт
`mail_digest_prompt`) и полный список записей журнала за вчера.
- `/senddigest` — отправить вручную для проверки.
- Тема письма: «Шаг N | Итоги за вчера, ДАТА, деньнедели» (N — сквозной счётчик).

### 📰 Утренние тех-новости
Каждое утро отдельным сообщением в Telegram, через 5 минут после email-дайджеста —
короткая (до 1000 знаков) выжимка технологических новостей, в двух частях: (1) новости
об ИИ от крупных компаний, (2) примеры запусков малых и средних компаний/стартапов.
Заголовки берутся из нескольких англоязычных RSS-лент (Hacker News, TechCrunch и её
раздел Startups, The Verge), сама сводка — перевод и сжатие этих заголовков ИИ, не его
собственные знания (у модели нет доступа к интернету, поэтому источник фактов — только
RSS). Если для одной из частей в лентах не нашлось подходящих новостей — так и
сказано в сводке, без выдумывания. Если ни одна лента не ответила — сообщение просто
не приходит в это утро, без ошибки.
- `/news_off` / `/news_on` — выключить и вернуть утреннюю авторассылку (разовый
  запрос `/news` продолжает работать в любом случае).
- `/news` — получить такую же выжимку в любой момент, не дожидаясь утра.

### 🔮 Я +2 года — `/ps1`
Короткая карточка о том, куда вас ведут сегодняшние дни, в двух вариантах: **«Будет плохо»**
и **«Будет хорошо»**. Это сцена из жизни через два года (утро или вечер, одна телесная деталь
и одна деталь из жизни), а не отчёт с цифрами. Облегчённая версия идеи «Промпта судьбы».
- Основа прогноза — не один день, а его отношение к обычному уровню за последние 14 дней:
  выполненные главные задачи и Золотые Часы. Считает это код, а не ИИ. Если вчера было
  хуже обычного, карточка прямо говорит, что один плохой день ещё не траектория.
- «Будет хорошо» опирается на уровень, который у вас уже случался в лучшие дни, а не на
  воображаемый идеал. «Будет плохо» не обвиняет: боль идёт от привычки и равнодушия.
- Детали берутся из досье **About_me** и журнала. Чем точнее досье (цели, вес, проекты), тем
  живее карточка. В шапке показывается число дней до целевой даты (по умолчанию 01.10.2028,
  меняется настройкой `ps1_target_date` в формате ГГГГ-ММ-ДД).
- `/ps1` — получить карточку сейчас (ответ занимает до двух минут).
- **Утренняя рассылка:** каждый день в 08:00 по иркутскому времени, без звука.
  `/ps1_off` / `/ps1_on` — выключить и вернуть авторассылку (ручной `/ps1` работает всегда).
- Текст задаётся промптом `ps1_prompt` в листе **Prompts**: тон и правила правятся в таблице,
  без изменения кода. Если строки нет, используется встроенный промпт.

### 🎙 Голосовые сообщения
Распознаются в первую очередь **облачным движком** (Groq Whisper); если он недоступен —
тихий откат на офлайн-движок (Vosk) на сервере, без ошибки для пользователя. Голос
работает везде, где ждётся текст: ответ в журнал, `/note_add`, `/ask`, добавление задач,
приз для таймера.

### 🌙 Режим и расписание
- `/tishina_on` — период тишины (кнопки-пресеты или вручную `/tishina_on 23 8`). В тишину
  журнал и анализ дня молчат.
- `/tishina_off` — быстро выключить тишину.
- `/pause` / `/resume` — пауза и возобновление (журнал **и** анализ дня вместе).
- `/day_ping_pause` / `/day_ping_resume` — пауза **только** автоматического анализа дня,
  вопросы журнала продолжают приходить.
- `/dnevnik_interval_set` — интервал вопросов журнала (кнопкой или числом).
- `/boss_time_set 14:00 18:00` — точное время автоматического анализа дня (до 12 времён через
  пробел; без аргументов покажет текущие). В тишину и на паузе автозапуск пропускается, ручной
  `/boss` — нет.
- `/ping_max_set 30` — минимальный зазор (в минутах, по умолчанию 30) между любыми двумя
  автосообщениями: вопросами журнала и инициативами ментора. Если вопросы журнала вдруг
  перестали приходить, а пауза и тишина не включены, — проверьте этот зазор. Анализ дня,
  ГЗД-напоминания и пуш-напоминания по задачам его не учитывают.
- `/timezone_set +5` (или `+5:30`) — часовой пояс. Действует на всю копию бота — все
  твои аккаунты в ней; тестерские копии настраиваются отдельно.
- `/msg_source classic|biz` — откуда брать вопросы журнала: лист **Msgs** (классические)
  или **Msgs_biz** (новые, разбитые по периодам дня).

### 🧹 Чистота ленты — `/uborka`
Служебные сообщения бота (подтверждения «✅ Добавлено», подсказки, промежуточные пинги)
помечены как временные. `/uborka` удаляет их пачкой, оставляя в чате только содержательное.
Висящий без ответа вопрос журнала снимается сам через 6 часов.

### ⏳ Сброс после разрыва — `/reset_gap`
Долгий перерыв в работе (отпуск, болезнь, просто выпали из режима) не должен встречать
стеной «просроченных» задач и старых пуш-напоминаний — это шум, а не сигнал. `/reset_gap`
обнуляет счётчик зависания у всех активных задач (сами задачи не трогает), чистит историю
снимков ГЗД внутри суток и гасит уже сработавшие push-напоминания.

Если реальная работа с задачами (добавление, правка, удаление, отметка выполненным —
кнопкой или командой) не велась 3 и более дней, бот сам предложит тот же сброс при первом
возврате: пришлёт вопрос с кнопками «✅ Да, начать заново» / «❌ Нет, оставить как есть» —
никогда не сбрасывает молча. Просмотр списка задач (`/task_list`, `/gzd_text`, `/zch_stats`
и подобные) не считается «возвращением к работе» и не сбрасывает счётчик разрыва.

### 🎛 Панель быстрого доступа — `/bar`
Строка иконок частых действий (заметка, идея, Дневник Стратега, старт/стоп Золотых Часов
и т.д.) — вместо набора команд. Подпись кнопки Золотых Часов меняется на лету в
зависимости от того, идёт ли сейчас интервал. `/bar off` — убрать панель.
В VK `/bar` показывает меню сообщества.

### 📖 Библиотека гайдов — `/biblio`
Гайды и инструкции прямо в чате, с оглавлением и переходом по главам — длинные тексты
бот дробит на части автоматически.

### 📱 Два канала — Telegram и ВКонтакте
Один бот, оба канала одновременно. Логика одна, но подача разная: в Telegram богаче
(интерактивные кнопки), в VK проще (текст + числа), из-за ограничений VK на клавиатуры.
- `/vkmenu` — показать клавиатуру-меню в VK.
- `/status` — сводка текущего состояния (провайдер, роль, интервалы, тишина, ждётся ли ответ).

### 🗂 Данные в Google Sheets
Всё хранится в одной таблице, листы:
- **Journal** — записи (дата-время · вопрос · ответ). Сюда же попадают заметки (АВТОР),
  идеи (ИДЕЯ), Дневник Стратега (ДС) и Золотые Часы (ЗОЛОТО).
- **Msgs** — банк вопросов журнала (колонка A — текст, B — дата последнего показа).
- **Msgs_biz** — альтернативный банк вопросов, по периодам дня (`/msg_source biz`).
- **Inbox** — захваченные задачи: описание · приоритет · проект · галочка «В работу».
- **Tasks** — выгрузка активных задач и просрочек (обновляется каждые 30 минут).
- **Gold** — ежедневные снимки сводки Золотых Часов, исторический ряд.
- **Prompts** — роли: название · текст промпта · размер контекстного окна. Служебные
  промпты `daily_boss`, `mail_digest_prompt` и `coach_prompt` в список ролей не попадают.
- **Projects** — описание проектов (идёт в анализ дня и дайджест).
- **History** — выгруженная история диалогов с ролями (`/exporthistory`).
- **About_me** — досье о вас: разделы и содержание. Читает ментор и почтовый дайджест,
  правится из чата командой `/about_me`.
- **Coach_memory** — память ментора: дата · тип · текст · проект · статус. Пишет ментор,
  править можно руками.

Таблицу можно править прямо в Google — бот подхватит на следующем обращении.

### 💾 Автоматический бэкап
Каждую ночь бот сам делает снимок всех данных — все листы таблицы (Journal, Msgs,
Inbox, Tasks, Gold, Prompts, Projects, History, About_me, Coach_memory) в один JSON-файл
и копию локального файла настроек (`data/state.db`) — и сохраняет на сервере в
`data/backups/`. Хранится 30 дней, файлы старше автоматически удаляются.
- `/backup_now` — сделать снимок сразу, не дожидаясь ночи (например, перед рискованной
  правкой данных).
- Восстановление из бэкапа — не автоматическое: JSON нужно вручную (или скриптом)
  залить обратно в таблицу, `state.db` — просто подменить файлом-копией и перезапустить
  бота. Обратитесь к автору бота, если это когда-нибудь понадобится.
- **По вторникам и пятницам** дополнительно уходит ZIP-архив свежего снимка на почту —
  тот же адрес, что у email-дайджеста. Это защита на случай полной аварии сервера
  (не только порчи данных на месте): если VPS выйдет из строя целиком, копия данных
  всё равно останется у вас в почте. **Важно:** архив содержит не только данные, но и
  секретные ключи доступа бота (`.env`, `google_creds.json`) и отправляется БЕЗ
  дополнительного шифрования ZIP-паролем — при компрометации почтового ящика
  содержимое архива станет доступно тому, кто получит к нему доступ. Это осознанно
  принятый компромисс ради простоты, а не недосмотр.

### 🚨 Сторож сервисов
Бот сам следит за внешними сервисами и сообщает, когда что-то сломалось и когда
починилось — по одному сообщению на событие, без повторов каждые 5 минут.
- **Telegram** — проверяется раз в 5 минут; тревога после двух неудач подряд. Раз Telegram
  недоступен, предупреждение приходит **письмом** (адрес email-дайджеста) и в VK, если он
  подключён. О восстановлении — уже в Telegram.
- **Почта** — если письмо (дайджест, архив бэкапа) не ушло.
- **Ночной бэкап** и **архив бэкапа на почту** — если снимок или отправка не удались.
- **Голос** — если основной сервис распознавания (Groq) недоступен и голосовые идут через
  запасной, менее точный.
- Отдельно, как и раньше: Google Sheets (переход на локальный кэш) и авторизация Claude.

Сам бот не может сообщить, что упал он сам или сервер. Для этого есть внешний наблюдатель:
бот раз в 5 минут ставит отметку «жив», адрес `https://api.neuro-boss.ru/api/bot-alive`
показывает её свежесть, а сервис UptimeRobot проверяет этот адрес снаружи и шлёт тревогу
на почту и в Telegram, если сервер не отвечает или отметка старше 15 минут.

### 🧭 Ментор

Обычные роли (`/role_set`) — быстрый разговор с коротким контекстом: роль знает только
свой промпт и несколько последних реплик. «Ментор» устроен иначе и работает по умолчанию —
это важнейший модуль системы: собеседник с полным доступом к вашим данным, долговременной
памятью и правом первым начинать разговор.

#### Что ментор знает

Перед каждым ответом бот выгружает ваши данные в файлы папки `coach_context/` на сервере
(обновляется каждые 30 минут и принудительно перед каждым ответом):

| Файл | Содержимое |
|---|---|
| `about_me.md` | досье: кто вы, цели, победы, принципы, сильные и слабые стороны |
| `projects.md` | проекты: суть, статус, цели на 2 недели, оба блокера («дело» и «голова») |
| `journal_30d.md` | бортовой журнал за 30 дней: вопросы бота и ваши ответы, включая записи Дневника Стратега (метка «ДС») — здесь же ищутся выполненные главные задачи (строки «ГлавЗадачи → ✅ текст») |
| `golden_hours.md` | Золотые Часы: сводка и разбивка по проектам |
| `tasks.md` | активные главные задачи и просрочки — весь список, вторичный источник |
| `focus.md` | ГЗД — главные задачи дня прямо сейчас (Запускатель/ГЗД/Засыпатель) и история переходов за сутки — приоритетный источник для Оскара/Потапенко, читается первым при любом ответе |
| `memory.md` | память ментора: наблюдения, договорённости, гипотезы прошлых разговоров |
| `canvas.md` | задачи из канвы проектов Obsidian |

Claude читает эти файлы сам инструментом Read и берёт под конкретную реплику только
нужное — не весь объём каждый раз. **Какие файлы видны — зависит от активного голоса.**
Оскар и Потапенко видят все восемь, `focus.md` для них приоритетный (`tasks.md` —
только когда его недостаточно). Стратег (см. ниже) `tasks.md`/`focus.md`/`canvas.md`
вообще не видит — они не упоминаются в его подсказке файлов, чтобы разговор о смыслах
не сваливался в списки дел.

**Границы того, что ментор помнит.** Журнал — только последние 30 дней (`journal_30d.md`),
старше — ничего не видно, если только факт не осел в `Coach_memory` или в досье. Сам
разговор с ментором — скользящее окно последних 40 реплик (`persona_dialog`), не весь
чат целиком; более старое за пределами окна для него как будто не существовало, если
не стало отдельной записью в памяти. Единственная постоянная память — лист **Coach_memory**
(см. ниже): то, что ментор сам счёл нужным сохранить дольше одного разговора.

#### Память — лист Coach_memory

Всё, что стоит помнить дольше одного разговора — договорённости, наблюдения о поведении,
гипотезы — ментор записывает в лист **Coach_memory** вашей таблицы сам, не спрашивая после
каждой реплики: вопрос «записать?» ломает живой разговор. Память общая для всех голосов —
Потапенко видит, что записал Оскар, Стратег видит записи обоих, и наоборот.
- `/coach_memory` — посмотреть последние записи.
- Править — прямо в таблице, бот подхватит на следующем обращении.
- `/coach_new` — начать разговор с чистого листа (и общую историю, и служебную ленту
  инициативы). Память при этом **не трогается** — теряется только нить текущего разговора.

#### Голоса — Оскар, Потапенко и Стратег

У ментора три сменных «голоса» — Оскар (`/oscar`, по умолчанию), Потапенко (`/potap`)
и Стратег (`/strateg`). Это не разные собеседники: разговор общий (общая лента, общая
память), переключение голоса не начинает его заново — меняется только интонация,
метод ответа и то, какие данные голос вообще смотрит. Какой голос активен сейчас —
видно в `/status`, строка «Ментор».

- **Оскар и Потапенко** — про текущие задачи и продуктивность: приоритет — ГЗД
  (`focus.md`), метод — давить на разрыв между словами и делом.
- **Стратег** — принципиально другой фокус: не задачи, а смыслы, стратегия, свойства
  личности. Не видит `tasks.md`/`focus.md`/`canvas.md` вовсе (см. «Что ментор знает»
  выше) — если вы заговорите о конкретной задаче, возвращает разговор к тому, что за
  ней стоит. Источники — досье, проекты, Золотые Часы, журнал (включая Дневник
  Стратега).

**Технически** каждый голос — файл `persona/oscar.md` / `persona/potap.md` /
`persona/strateg.md` на сервере, с пятью секциями (порядок в файле не важен —
сборщик промпта читает файл целиком):

| Секция | Смысл |
|---|---|
| `## Identity` | кто это — явно фиксирует, что это ролевая модель, созданная вами, а не биография реального человека |
| `## Voice` | как звучит — стиль речи, длина фраз, тон; здесь же явно прописано обращение на «ты» — единственное исключение из общего правила бота «всегда на вы», и требование держать характер даже когда чего-то не хватает. У Оскара/Потапенко здесь же приоритет ГЗД (специфика их фокуса, не общая для всех голосов) |
| `## Method` | как ведёт разговор — на что давит, о чём спрашивает, куда клонит |
| `## Principles` | конкретные убеждения этого голоса — заполняете сами |
| `## Light` | 1-2 строки для лёгкого режима — минимальная метка голоса, пишется отдельно вручную |

Правила поведения, действительно общие для ВСЕХ голосов (честность без лести, право
поднимать неудобное, краткость ответа, как записывать в память) — отдельный файл
`persona/technology.md`. Приоритет ГЗД в нём НЕ живёт — это специфика Оскара/Потапенко,
прописана в их персональных файлах, поэтому Стратег его не наследует.

Файлы правятся прямо на сервере (не через чат) и требуют деплоя, чтобы изменения вступили
в силу. Если файл персоны разросся сверх бюджета (2500 токенов, оценка приблизительная) —
команда переключения (`/oscar`/`/potap`/`/strateg`) предупредит об этом отдельной строкой
в ответе, но не заблокирует переключение.

**Добавить новый голос** — не через команду бота, вручную:
1. Создать `persona/<имя>.md` с теми же пятью секциями.
2. Зарегистрировать в словаре `PERSONAS` в `persona.py` (ключ, имя, путь к файлу).
3. Добавить команду `/<имя>` в `main.py` по образцу `/oscar`/`/potap`/`/strateg`,
   вписать в `content/commands.md`.
4. Если голос не должен видеть файлы про задачи (как Стратег) — добавить исключение
   в `coach_context.context_files_hint()` и в текстовые напоминания `coach.py`.
5. Задеплоить.

#### Фото-сопровождение

Изредка (случайный шанс 15% на каждый ответ, независимо от предыдущих — не счётчик
«каждый N-й», хотя в среднем получается примерно раз в 6-7 ответов) реплика или
инициатива ментора сопровождается фотографией активного голоса — отдельным сообщением, без подписи, перед текстом ответа.
Только в Telegram. Фото берутся случайно из папки `persona/photos/<голос>/` на сервере
(`oscar/`, `potap/`, `strateg/`) — наполняете сами, можно несколько разных фото на
голос, вплоть до нескольких «лиц» у одной персоны. Пустая папка — фото для этого
голоса просто никогда не выпадает, не ошибка.

#### Два режима ответа

Короткий обмен внутри дня («сделал задачу», «супер, что дальше») ментор ведёт налегке —
без полного раскрытия личности, это быстрее и дешевле. Полный режим (с характером и
методом голоса целиком, базой знаний и правилами памяти) включается сам на репликах
длиннее 150 символов (обычно так и получается при надиктовке голосом) или вручную —
если в реплике встречаются подряд три буквы «п» в любом регистре, например отдельное
слово «ппп». Это осознанный ручной оверрайд: если короткая реплика на деле требует
внимательного разбора («мне плохо»), допишите «ппп», и ментор ответит полным голосом.
История разговора (последние 40 реплик) доступна в обоих режимах одинаково — экономия
только на личности, базе знаний и правилах памяти, не на контексте.

#### База знаний — папка knowledge/

Общая для обоих голосов подборка конспектов/методичек на сервере (`knowledge/*.md`).
В промпте полного режима ментор видит только список файлов с кратким описанием (первая
строка файла) — полное содержимое читает инструментом Read, только если тема реплики
совпадает, не на каждый ответ. В лёгком режиме подсказка не подставляется вовсе.
Наполнение — ваша задача, файлы добавляются на сервере вручную.

#### Инициатива

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

| Повод | Когда срабатывает |
|---|---|
| Просроченная договорённость | запись в Coach_memory с истёкшим сроком |
| Тишина по денежным проектам | несколько дней без Золотых Часов (порог — `coach_money_silence_days`, по умолчанию 3) |
| Перекос часов | явный перекос Золотых Часов за неделю в один проект |
| Застоявшаяся задача | задача висит невыполненной дольше обычного |
| Замерший статус проекта | статус не менялся неделями (порог — `coach_stale_status_weeks`, по умолчанию 3; остановленные осознанно проекты `⛔️` пропускаются) |
| Тишина в журнале | нет записей за N часов активного дня (порог — `coach_silence_hours`, по умолчанию 6) |

Отдельно вечером — проверка записей дня на признаки срыва.

**Отдельный, более частый канал — ГЗД watch-детектор.** Раз в 15 минут (а не раз в час)
проверяются три повода конкретно про ГЗД, приоритетно и в обход общего троттлинга
автосообщений:

| Повод | Когда срабатывает |
|---|---|
| ГЗД пуст после тайм-чека | утренний тайм-чек отмечен выполненным больше часа назад, а список ГЗД так и остался пустым |
| Застоявшаяся ⭐-задача | ⭐-задача висит невыполненной 3+ дня |
| Зона не закрыта | наступила следующая зона (Запускатель→ГЗД→Засыпатель), а в предыдущей ещё остались невыполненные ⭐-задачи |

Инициатива ограничена: не больше 4 сообщений в сутки (`coach_daily_limit`), не чаще раза
в 4 часа (`coach_min_gap_hours`), тихие часы соблюдаются, один и тот же повод не
поднимается чаще раза в 2 дня (`coach_reason_cooldown_days`; у ГЗД-поводов отдельный,
короче — 5 часов), а если вы не ответили на прошлое сообщение — следующее придёт не
раньше чем через сутки. Срочный повод (просроченная сегодня договорённость, признак
срыва) пробивает суточный лимит, но не пробивает выключенную инициативу, паузу или
кулдаун своего же повода.

Под инициативным сообщением в Telegram две кнопки: «⏸ Всё +1 час» — общая пауза,
ментор молчит целиком, любые поводы; «🔇 Это +1 день» — точечное заглушение конкретного
повода на сутки, остальные темы продолжают работать. Обе кнопки, помимо действия,
закрывают текущее сообщение как отвеченное — тот же повод не поднимется повторно
при следующей проверке. Заглушение никак не связано с фактическим состоянием
задачи — если вы выполните её позже, ментор просто не станет упоминать это сам
в течение заглушённого срока; спросить его самому можно в любой момент, заглушение
касается только его собственной инициативы. Выключить инициативу целиком —
`/coach_off`, вернуть — `/coach_on`. Все пороги — настройки в базе, меняются напрямую
на сервере (не через команду бота).

#### Досье

`/about_me` показывает разделы листа About_me и даёт заменить текст любого из них прямо
из чата, текстом или голосом.

#### Ссылки в сообщениях

Если в реплике есть ссылка — на Google Docs/Sheets/Slides или обычную веб-страницу —
ментор сам скачивает содержимое и читает его перед ответом. Одна ссылка на реплику
максимум, до 20 000 знаков документа: не задачник для чтения библиотек, несколько
документов присылайте отдельными репликами. Если ссылка недоступна боту (например,
доступ к документу не открыт) — ментор видит текст ошибки и сам скажет вам, что нужно
расшарить.

#### Модель

Ментор работает на Claude Sonnet с effort medium — это его собственная пара настроек,
отдельная от глобальной. В режиме ментора `/ai_model` и `/ai_effort` меняют именно её
и прямо пишут об этом в ответе; вне режима — глобальную, которой пользуются `/deep`,
разбор дня и почтовый дайджест.

#### Чего ментор не делает

Он ничего не меняет в ваших данных: не ставит и не закрывает задачи, не пишет в журнал,
не трогает проекты и канву. Единственное, что появляется по его инициативе —
записи в Coach_memory.

#### Если Claude недоступен

На ваш вопрос ответит резервная модель — коротко и без полного контекста, с явной
пометкой. Инициативные сообщения в это время не приходят вовсе: плохой ментор хуже
отсутствующего.

#### Техническое устройство (для справки)

- История разговора — таблица `persona_dialog` в SQLite на сервере, общая для всех
  голосов (не привязана к сессии Claude CLI — не течёт при смене провайдера).
- Активный голос — настройка `active_persona` в базе, по умолчанию `oscar`.
- Модуль детекторов инициативы — `coach_watch.py`: шесть «классических» поводов
  (`detect`) и три ГЗД-повода (`detect_gzd`); проверяет данные, ничего сам не
  отправляет — решение об отправке и рассылку делает планировщик (`_coach_watch_job`
  раз в час, `_gzd_watch_job` раз в 15 минут).
- Сборка промпта, вызов Claude, резервная модель — `coach.py`.
- Реестр голосов и файлы личности — `persona.py`, `persona/*.md`, `persona/technology.md`.
- Витрина данных для Claude (файлы `coach_context/*.md`) — `coach_context.py`; история
  переходов ГЗД внутри суток хранится в таблице `gzd_snapshot_log`, суточный ключ
  считается со сдвигом на 04:00 (`_gzd_day_key`).

---

## 3. Справочник команд

### Быстрый ввод без команд

| Символ | Что делает |
|---|---|
| `. текст` | Заметка в журнал (АВТОР) |
| `.. текст` | Идея в журнал (ИДЕЯ) |
| `... текст` | Создать задачу |
| `.... N текст (код)` | Золотые Часы задним числом (после точек — пробел!) |
| `? текст` | Захват задачи в Inbox |
| `, текст` / `,, текст` | Реплика к Claude / новый диалог |
| `===` / `====` | Идеи и заметки / записи Дневника Стратега |
| `-` | Отменить ввод |
| `❗️`, `(!!!)`, `💰`, `RE`… в начале | Сразу создать задачу с этой меткой |

### Команды

| Команда | Что делает |
|---|---|
| `/start` | Приветствие и список команд |
| `/status` | Текущий провайдер, роль, интервалы, тишина, состояние |
| `/about` | О проекте и инструкции |
| `/coach_new` | Ментор: начать разговор заново (память сохраняется) |
| `/oscar` | Ментор: голос Оскара |
| `/potap` | Ментор: голос Потапенко |
| `/strateg` | Ментор: голос Стратега (смыслы и стратегия, не задачи) |
| `/coach_memory` | Ментор: показать последние записи памяти о вас |
| `/coach_on` / `/coach_off` | Ментор: включить или выключить инициативу |
| `/about_me` | Досье: править разделы листа About_me |
| `/task_list` | Главные задачи дня (чек-лист); `/task_list текст` — добавить одну |
| `/task_list_text` | Список задач текстом, без кнопок |
| `/task_list_simple` | Вид списка: обычный, без группировки |
| `/task_list_proj` | Вид списка: группировка по проектам |
| `/gzd` | ГЗД — главные задачи дня (кнопочный вид, три зоны по времени) |
| `/gzd_text` | ГЗД текстом, без обрезки под кнопку |
| `/gzd_add` | Добавить задачу сразу с меткой ⭐ (ГЗД) |
| `/gzd_remove номер` | Снять метку ⭐, задачу не удаляет |
| `/gzd_new` | Быстро завести новую ⭐-задачу |
| `/task_add` | Быстро добавить задачу |
| `/task_del` | Удалить задачу(и) по номеру; без аргумента покажет список |
| `/task_edit` | Изменить текст задачи по номеру |
| `/task_analiz` | Блиц-анализ плана дня (критика формулировок) |
| `/line_edit`, `/line_clear` | Строки-разделители в списке задач / очистить |
| `/inbox` | Закинуть задачу в Inbox (то же, что `? текст`) |
| `/inbox_list` | Показать Inbox |
| `/inbox_sync` | Перенести отмеченные «В работу» в список дня |
| `/inbox_del 2 5` | Удалить строки Inbox по номерам |
| `/focus_on`, `/focus_off` | Режим фокуса (только Telegram) |
| `/pusk`, `/pusk_edit`, `/pusk_clear` | Кнопка ПУСК — заготовленный текст выхода из ступора |
| `/timer` | Таймер фокуса (пресеты + приз); `/timer 25`, `/timer cancel`, `/timer prize` |
| `/zch_start код`, `/zch_stop`, `/zch` | Золотые Часы: старт/финиш/статус |
| `/zch_stats` | Статистика Золотых Часов по проектам |
| `/zch_del` | Удалить запись Золотых Часов по номеру |
| `.... N текст (код)` | Золотые Часы задним числом — основной способ внесения |
| `/fact` | Случайный факт из базы |
| `/factstats` | Метрики показов фактов |
| `/facts_on`, `/facts_off` | Включить/выключить автопоказ фактов |
| `/facts_set` | Наборы фактов: кнопки выбора, можно несколько вперемешку |
| `/note_add` | Запись в журнал без вопроса (текст/голос) |
| `/idea_add`, `/idea_list` | Идея в журнал / последние идеи-заметки |
| `/ds_edit`, `/ds_list` | Дневник Стратега: шаблон / последние записи |
| `/ask вопрос` | Разовый вопрос к AI без учёта роли и контекста |
| `/deep текст` | Глубокий анализ Claude с памятью диалога (то же, что `, текст`) |
| `/deep_new` | Начать новый диалог с Claude (то же, что `,, текст`) |
| `/deep_topic` | Темы `/deep` (сейчас только «общая» — другие пока не заведены) |
| `/ai_model`, `/ai_effort` | Модель Claude и глубина рассуждений |
| `/role_set название` | Сменить роль для свободного диалога |
| `/boss` | Запустить анализ дня прямо сейчас |
| `/senddigest` | Отправить email-дайджест вручную |
| `/exporthistory` | Выгрузить историю диалогов в лист History |
| `/providers` | Список AI-провайдеров |
| `/provider_set название` | Сменить провайдера |
| `/dnevnik_interval_set мин` | Интервал вопросов журнала |
| `/boss_time_set 14:00 18:00` | Время автоматического анализа дня |
| `/task_bad_period_set дни` | Порог, после которого задача считается зависшей |
| `/ping_max_set минуты` | Минимальный зазор между автосообщениями бота (общий троттлинг) |
| `/timezone_set +5` | Часовой пояс (можно `+5:30`) |
| `/msg_source classic\|biz` | Источник вопросов журнала: лист Msgs или Msgs_biz |
| `/pause`, `/resume` | Пауза/возобновление журнала и анализа дня |
| `/day_ping_pause`, `/day_ping_resume` | Пауза только автоанализа дня (вопросы идут) |
| `/tishina_on` | Период тишины (кнопки или `23 8`) |
| `/tishina_off` | Быстро выключить тишину |
| `/bar` | Панель быстрого доступа (иконки частых действий) |
| `/biblio` | Библиотека гайдов прямо в чате |
| `/uborka` | Убрать служебные сообщения из чата |
| `/reset_gap` | Обнулить просрочку задач и историю ГЗД после долгого перерыва |
| `/ps1` | Карточка «Я +2 года»: «Будет плохо» и «Будет хорошо» |
| `/ps1_off`, `/ps1_on` | Выключить/включить утреннюю рассылку карточки (08:00 по Иркутску) |
| `/vkmenu` | Показать клавиатуру-меню в VK |
| `/cancel` | Сбросить текущий вопрос/режим ожидания |

---

## 4. Неочевидное поведение системы

Список того, что легко понять неправильно.

- **Вопрос журнала — один на все аккаунты.** Он приходит и в Telegram, и в VK, и на все
  Telegram-аккаунты сразу. Ответил с одного — на остальных вопрос закрывается («Уже ответили»).
  Это не баг и не «повтор»: пока никто не ответил, копия честно висит везде.
- **Активная роль (`/role_set`) — глобальная, одна на всех.** Сменил роль с одного аккаунта —
  сменилась для всех. История диалога хранится по роли.
- **Таймер, наоборот, личный** — только в том аккаунте, что запустил. Разные аккаунты могут
  крутить свои таймеры параллельно.
- **Золотые Часы, в отличие от таймера, глобальные** — один активный интервал сразу на все
  каналы. Начали в Telegram — завершить можно из VK, это одно и то же «сейчас идёт».
- **Факт-награда** приходит только тому, кто ответил, а не всем.
- **`/pause` останавливает и журнал, и анализ дня** — не только вопросы.
- **Смена провайдера (`/provider_set`) живёт до перезапуска бота.** После рестарта берётся
  значение из настроек (`.env`).
- **«Уже спрашивали сегодня» считается локально**, а не по таблице — поэтому вопросы не
  повторяются в течение дня даже при сетевых сбоях.
- **Задачи — только на сегодня.** Невыполненное вчера не переносится автоматически.
- **Метки задач сортируют список**, но не меняют текст: помеченные `🔄/💰/🟢/🟡/⛔️/❗️`
  всплывают наверх группами.
- **Дайджест берёт не весь день, а окно в 10 дней** — все записи журнала и анализы,
  попавшие в это окно, без лимита на их число внутри. В само письмо при этом идёт
  полный список записей.
- **Таймерные пинги удаляются пачкой в конце.** Пока таймер идёт, они висят в чате как
  свежие напоминания; финальное «Отсчёт закончен» остаётся.
- **Факты не повторяются, пока не покажется весь пул набора** (700+ фактов в `classic`) —
  «мешок без возврата», а не окно последних N показов; прогресс переживает перезапуск бота.
  У каждого набора свой учёт: при смеси наборов один набор может пойти по второму кругу
  раньше другого (в маленьком `biz` круг короче, чем в `pirozhki`).
- **Расписание переживает перезапуск.** Если поменять интервалы через переменные окружения
  (а не командой) — новые значения применятся только после сброса базы расписания. Для анализа
  дня `DAY_PING_TIMES` работает так же: только при первом создании задачи, дальше действует
  последнее время из `/boss_time_set`.
- **VK беднее по кнопкам** намеренно: у VK жёсткие лимиты на клавиатуры, поэтому задачи там —
  нумерованный текст, таймер — текстовые команды. Функционально всё то же.
- **Голос = текст.** Любой шаг, где ждётся текст, принимает и голосовое — оно распознаётся
  и обрабатывается так же.
- **Символы быстрого ввода сильнее режимов ожидания.** Если бот ждёт ответ на вопрос
  журнала, а вы шлёте `... купить билеты` — это станет задачей, а не ответом. Точки
  проверяются раньше всех состояний, чтобы быть по-настоящему мгновенными.
- **После `....` обязателен пробел.** `.... 70 текст` работает, `....70 текст` — нет:
  сообщение уйдёт как обычный текст, Золотой Час не запишется.
- **Префикс `....` нужен на каждой строке списка.** Привычка от задач (поставить символы
  один раз в начале) здесь не работает: первая строка не задаёт формат для остальных.
  Строки без префикса не вносятся, но бот их перечислит — потерять запись незаметно нельзя.
- **Inbox — не список дня.** Захваченное туда не попадает в задачи само: нужно отметить
  «В работу» в таблице. Это защита фокуса, а не лишний шаг.
- **`/deep` помнит диалог, `/ask` — нет.** И темы `/deep` не мешают друг другу: у каждой
  свой контекст, переключение туда-обратно ничего не стирает.
- **`/ai_model` и `/ai_effort` работают в двух режимах.** В режиме ментора меняют настройки
  ментора, вне его — глобальные (`/deep`, разбор дня, дайджест). Бот пишет в ответе, что
  именно поменял.
- **Часовой пояс — на всю копию бота**, а не на аккаунт. Тестерские копии настраиваются
  каждая отдельно.
- **`/day_ping_pause` ≠ `/pause`.** Первая глушит только автоматический разбор дня,
  вопросы журнала продолжают приходить. Вторая останавливает и то, и другое.
- **ГЗД — не отдельный список, а метка на задачах общего списка.** Снять ⭐ (`/gzd_remove`)
  не значит удалить задачу — она остаётся в `/task_list`, просто пропадает из `/gzd`.
- **Сутки для истории ГЗД считаются с 04:00, не с полуночи.** Ответ в 02:30 ещё относится
  ко вчерашним суткам ГЗД — иначе точкой отсчёта стало бы время, когда список только
  пуст, потому что вы спите.
- **ГЗД-повод инициативы заглушается на сутки независимо от факта выполнения задачи.**
  Заглушение — это «не поднимай эту тему сам столько-то времени», а не отслеживание
  состояния: выполнили задачу после заглушения — ничего чинить не нужно, при следующей
  проверке повод просто перестанет находиться сам.
- **Стратег не видит задачи не потому, что забыли добавить — это осознанная граница.**
  `tasks.md`/`focus.md`/`canvas.md` физически лежат на диске (общий экспорт для всех
  голосов), но в подсказке файлов для Стратега их нет: спросите его про конкретную
  задачу — он ответит, что не видит списков, и, скорее всего, спросит, зачем вам эта
  задача вообще.
- **Ментор не видит этот чат с Claude Code.** Это два независимых процесса без общего
  контекста — правки файлов персон/промптов повлияют на следующий ответ ментора, но
  сам факт разговора здесь в его память не попадает.
- **Ментор помнит не всё и не всегда.** Журнал — только 30 дней, сам диалог с ним —
  скользящее окно из последних 40 реплик. Постоянно — только то, что он сам записал
  в Coach_memory.
- **Разрыв в работе засчитывается только по правкам задач, не по просмотру.** Открыть
  `/task_list` или `/gzd_text` не «возвращает к работе» в глазах детектора разрыва —
  нужна реальная правка (добавить/изменить/удалить задачу, отметить выполненной, ГЗД,
  Золотые Часы). Кнопки в списке задач считаются наравне с командами.
