| name | lesson |
| description | Открыть очередное занятие из персонального руководства (daily/YYYY-MM-DD.md, fallback assignments/) и провести его в чате с пилотом. Используй когда пилот говорит «начнём занятие», «открой занятие», «давай заниматься», «/lesson» — или в личке утром после доставки. Парный скилл: /lesson-close — закрытие занятия с метаданными в workbook/. |
/lesson — провести занятие из персонального руководства
⚡ Алгоритм, не диалог. Шаги 1-6 последовательно. Диалог только в шагах 4-5 (Урок→Вопрос→Задание). Без вопросов — не начинать.
Канал доставки SC.020 v2 (VS Code): альтернатива Telegram-боту. Пилот открывает personal-guide репо в VS Code → видит сегодняшний daily/YYYY-MM-DD.md → запускает Claude Code → /lesson → проходит занятие → /lesson-close → коммит в workbook/. Push webhook → Activity Hub → ЦД → Портной корректирует.
When to use
Открыть очередное занятие из персонального руководства (daily/YYYY-MM-DD.md, fallback assignments/) и провести его в чате с пилотом. Используй когда пилот говорит «начнём занятие», «открой занятие», «давай заниматься», «/lesson» — или в личке утром после доставки. Парный скилл: /lesson-close — закрытие занятия с метаданными в workbook/.
Контракт скилла
- Вход: репо
personal-guide (плоское имя, под аккаунтом пилота) с файлом дневного задания. Портной (через /personal-guide-render или ИИ-агент-носитель WP-149 Block D) пишет в daily/YYYY-MM-DD.md (primary). Старая локация — assignments/YYYY-MM-DD.md — оставлена как fallback для обратной совместимости.
- Выход: проведённое занятие — три экрана в чате (Урок → Вопрос → Задание) + созданный/обновлённый
workbook/YYYY-MM-DD.md со скелетом ответов. Сам коммит — в /lesson-close.
- Время: 15-30 мин (зависит от глубины задания).
- Не делает: не оценивает ответы (Оценщик R12 — отдельный РП), не пишет в ЦД (Activity Hub после webhook), не запускает по расписанию.
Algorithm
Шаг 1. Прочитать файл дневного задания
- Определи дату: аргумент скилла или сегодня (
date +%Y-%m-%d).
- Поиск файла по приоритету:
- (a)
daily/YYYY-MM-DD.md — основная локация (что пишет /personal-guide-render)
- (b)
assignments/YYYY-MM-DD.md — fallback (legacy nomenclature по SC.020 v2 spec)
- Если файл не найден ни там, ни там:
- Проверь репо:
git remote -v содержит personal-guide? Если нет — сообщи пилоту: «Я не вижу репо personal-guide. Открой его в VS Code или выполни /personal-guide-start.»
- Проверь вчерашний
daily/<вчера>.md. Если есть — предложи: «На сегодня дневное задание ещё не сгенерировано. Портной не отработал утренний рендер. Откроем вчерашнее?»
- Если и вчерашнего нет — предложи: «В репо нет ни одного
daily/*.md. Запусти /personal-guide-render — Портной сгенерирует свежее под твой текущий профиль.»
- Прочитай файл целиком (
Read). Ожидаемая структура:
---
date: YYYY-MM-DD
stage: 2-5
bottleneck: W|M1|M2|M3|M4
theme: <название темы>
element_id: M-NNN | PRACTICE.NNN | METHOD.NNN
depth: 1-4
duration_min: 15-30
---
...
...
...
...
Если структура отличается — работай по факту, не требуй идеала. Минимум: должна быть тема и хотя бы одна из секций Урок/Вопрос/Задание.
Шаг 2. Объявить занятие (роль Навигатора)
Открой одним сообщением:
📖 Занятие на <дата>
Тема: <theme>
Ступень: <stage> · Bottleneck: <bottleneck>
Время: ~<duration_min> мин
<Содержимое секции «Зачем сегодня» из assignment>
Готов? Скажи «давай» или «дальше» — пойдём по занятию.
Жди ответа пилота. Без ответа — не продолжать.
Шаг 3. Урок (теория)
Отправь содержимое секции ## Урок из assignment-файла. Не пересказывай — копируй как есть (Портной уже адаптировал под ступень и стиль). После урока — один вопрос:
«Понятно? Скажи "да" / задай вопрос / попроси пример. Когда готов — пойдём к вопросу».
Жди ответ. Если задан уточняющий вопрос — ответь, используя mcp__claude_ai_IWE__knowledge_search если нужно. Не выходи за рамки темы урока.
Шаг 4. Вопрос (понимание)
Отправь секцию ## Вопрос. Это проверка понимания, не задание. Жди свободный ответ пилота. После ответа:
- НЕ оценивай корректность развернуто (это работа Оценщика). Один акценный комментарий: «Понял. Услышал X — отметил.» или «Уточнение: <одна мысль>».
- Запомни ответ для шага 6 (записать в workbook).
Шаг 5. Задание (практика)
Отправь секцию ## Задание. Структура задания зависит от ступени:
- Ступень 2-3: конкретное действие на сегодня/неделю с критерием выполнено
- Ступень 4-5: моделирование (заполнить таблицу: роли / стейкхолдеры / целевые системы / РП)
После задания пилот может:
- выполнить сразу в чате — приму ответ, помечу в workbook
- отложить — пометить «to-do» в workbook со сроком из задания
- переформулировать — обсудить переформулировку, итог в workbook
Жди реплики пилота. Без неё — не закрывать.
Шаг 6. Подготовить workbook-скелет
Создай (или дополни) файл workbook/YYYY-MM-DD.md через Write со структурой:
---
date: YYYY-MM-DD
assignment_ref: daily/YYYY-MM-DD.md
theme: <скопировать из assignment>
element_id: <скопировать из assignment>
stage: <скопировать>
bottleneck: <скопировать>
started_at: <ISO timestamp начала>
status: in_progress
---
<ответ пилота из шага 4>
<копия задания из assignment>
<ответ пилота из шага 5; если отложено — поле "to-do до <дата>">
<если пилот говорил «запиши» / попроси одну фразу о том, что важно зафиксировать>
НЕ коммить сейчас. Финальный коммит = задача /lesson-close (запускается после того, как пилот скажет «закрываем», «всё», «закончили»).
Сообщи пилоту:
✅ Workbook-файл готов: workbook/<дата>.md (статус: in_progress). Когда захочешь закрыть занятие — скажи «закрываем», запущу /lesson-close — он зафиксирует metadata и сделает коммит.
Граничные случаи
| Ситуация | Действие |
|---|
| Пилот хочет пропустить вопрос | Записать skipped: true в workbook, перейти к заданию |
| Пилот хочет пропустить задание | Записать skipped: true, занятие считается «прочитано, не сделано». В /lesson-close это передаётся в Activity Hub как lesson_partial |
| Пилот молчит >10 мин в середине | Не «толкать». Скажи: «Окей, пауза. Когда вернёшься — продолжим с шага N. Workbook сохранён частично.» |
Файл assignment отсутствует и /personal-guide-render не помогает | Сообщи: «Сегодня assignment не сгенерирован, Портной не отработал. Это известная проблема — записал. Хочешь, разберём вчерашнее занятие?» |
| Пилот хочет поднять тему за пределами assignment | Не уходи в сторону. Скажи: «Это интересно, но не сегодняшнее занятие. Запишу как fleeting-note для Note-Review.» — и предложи использовать mcp__claude_ai_IWE__personal_write для записи. |
Связь с другими механизмами
/personal-guide-render — создаёт daily/<дата>.md (через personal_write MCP) до этого скилла. ИИ-агент-носитель Портного (WP-149 Block D, в будущем) будет писать туда же.
/lesson-close — финальный коммит + триггер push в GitHub → webhook → Activity Hub → sync_one_user_to_dt (WP-301 Ф4).
- Оценщик (R12) — после push в
workbook/ отдельно оценивает качество ответа против can-do; работает асинхронно.
- Канал-альтернатива: Telegram (
engines/tailor/bot_adapter.py + splitting WP-301 Ф1) — для пилотов без VS Code.
Антипаттерны
- ❌ Не оценивать ответы развернуто — это работа R12 Оценщика
- ❌ Не уходить за рамки темы урока — даже если интересно
- ❌ Не «выпрашивать» ответ — если пилот молчит, дай паузу
- ❌ Не редактировать assignment-файл — он source-of-truth от Портного
- ❌ Не коммитить сразу — финальный коммит в
/lesson-close после явного «закрываем»