# Session Flow

> Пайплайн учебной сессии ученика. Триггерься в начале каждой сессии, когда ученик открывает Claude Code, здоровается, говорит "привет", "я вернулся", "давай позанимаемся", "что делаем сегодня", а также когда нужно оркестрировать переходы между этапами — от разогрева к основной работе к рефлексии. Реализует 7-шаговый пайплайн — read state, streak check, spaced review, warm-up, main activity, reflect, update state. Без этого скилла сессии получаются несвязными, ученик не входит в поток, просроченные повторения игнорируются.

- Skill: `infinity-kim/session-flow` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add infinity-kim/session-flow`
- Raw SKILL.md: https://api.skillmd.com/api/skills/infinity-kim/session-flow/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: infinity-kim (https://skillmd.com/u/infinity-kim)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/infinity-kim/session-flow

---


# Пайплайн учебной сессии

Каждая сессия ученика проходит через 7 шагов. Это не жёсткая процедура, а ориентир — ты можешь сокращать разогрев или переносить рефлексию, но общая форма должна сохраняться. Цель пайплайна — оптимизировать вход ученика в состояние потока (Csikszentmihalyi 1990: немедленный фидбек + ясные цели + баланс сложности) и закрепить обучение через spaced repetition.

Если в предметной области нет автоматического сигнала вроде зелёного/красного компилятора, наблюдаемым сигналом служит **качество рассуждения вслух** (think-aloud). Тогда пайплайн всё время держит ученика в режиме вербализации: сделал шаг → объяснил выбор → обосновал решение/компромисс (trade-off).

## Полный пайплайн

```
ученик открывает Claude Code
           │
    ┌──────▼──────┐
    │ 1. READ STATE│  profile (+learner_profile), scaffolding,
    │              │  spaced_review, competencies,
    │              │  mistakes_log, attention_metrics
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 2. STREAK    │  Обновить. Пропуск >3 дней → мягкий рестарт
    │    CHECK     │
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 3. SPACED    │  Есть просроченные items? → 2-3 мини-вопроса
    │    REVIEW    │  по фактическому знанию области
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 4. WARM-UP   │  Лёгкое retrieval-задание ИЛИ мини-вопрос
    │              │  по вчерашней теме (30 сек-2 мин) — вход в поток
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 5. MAIN      │  /learn, /practice, /discover, /diagram
    │   ACTIVITY   │  или свободный запрос ученика
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 6. REFLECT   │  "Что новое? Что сложно? Что запомнил?"
    └──────┬──────┘
           │
    ┌──────▼──────┐
    │ 7. UPDATE    │  XP, streak, spaced_review, scaffolding,
    │    STATE     │  competencies, mistakes_log, attention_metrics
    └─────────────┘
```

## Шаг 1: Read state

В самом начале сессии прочитай эти файлы из `progress/`:

1. **`profile.json`** — уровень ученика, его XP, текущий streak, имя для обращения, а также **`learner_profile`** (например `young_male_26`, `women_stem`, `career_switcher`, `junior_growth`), **`goal`** (interview / startup / growth), **`time_budget`** и **`pace`**
2. **`scaffolding_level.json`** — насколько глубоко помогать по каждой компетенции
3. **`spaced_review.json`** — есть ли просроченные items (`next_review <= today`)
4. **`competencies.json`** — пробелы в теории предметной области (`p_known < 0.4` и `observations >= 2`)
5. **`mistakes_log.json`** — типичные ошибки ученика (характерные для области), чтобы адаптировать акценты
<!-- DOMAIN:examples -->
   Пример паттернов ошибок (область System Design): over-engineering, прыжок в детали без requirements, забытая estimation, нет failure thinking, технология без обоснования.
<!-- /DOMAIN:examples -->
6. **`attention_metrics.json`** — как у него с вниманием в последние сессии

Читай файлы **один раз в начале** и держи саммари в голове. Не перечитывай их на каждом ходу в сессии — это будет жечь контекст впустую.

**`learner_profile` — самый важный приор для тона и помощи.** Он модулирует всё остальное: стартовый уровень scaffolding, проактивность помощи, стиль фидбека, длину сессии. Полные настройки профилей — [onboarding/references/profiles.md](../onboarding/references/profiles.md). Если наблюдения в сессии противоречат профилю (например, `young_male_26` рано и часто просит помощь, что противоречит help-avoidance) — доверяй наблюдению и пометь расхождение в `profile.profile_notes` на шаге 7.

Если какой-то файл выглядит странно (невалидный JSON, инварианты из `progress/README.md` нарушены) — сообщи ученику и не исправляй молча.

## Шаг 2: Streak check

Посмотри `profile.streak_current` и `profile.last_session`:

- **Если последняя сессия была вчера или сегодня** — streak сохраняется, обнови `last_session` на сегодня. Не упоминай streak вслух на каждом разе — это становится давлением.
- **Если пропуск 1-2 дня** — streak_current не обнулять, но и не расти. Не упрекай.
- **Если пропуск > 3 дней** — мягкий рестарт. Поздоровайся словами «С возвращением», НЕ «Ты пропустил 3 дня». Обнули streak_current до 1, обнови last_session. streak_best оставь как есть.

**Ключевое правило:** streak — это поддержка, не контроль (автономия в SDT). Никогда не используй его как аргумент «давай позанимаемся, чтобы не потерять streak». Это ломает внутреннюю мотивацию.

## Шаг 3: Spaced review

Посмотри `spaced_review.items`, отфильтруй те, у которых `next_review <= сегодняшняя дата`.

Почти любая предметная область содержит пласт **фактического знания**, которое нужно помнить, а не выводить. Именно его и гоняет spaced review:

- **Если есть просроченные** → начни сессию с 2-3 мини-вопросов из них (retrieval practice).
<!-- DOMAIN:examples -->
  Форматы вопросов (область System Design):
  - «Сколько примерно стоит round-trip внутри одного дата-центра против межконтинентального?» (latency numbers, Jeff Dean)
  - «Под какой профиль выбираешь Cassandra, а под какой — Postgres?» («когда какая БД»)
  - «При network partition CAP заставляет выбрать между чем и чем?»
  - «99.9% доступности — это сколько минут даунтайма в месяц?» (availability numbers)
<!-- /DOMAIN:examples -->
- **Если нет просроченных** → пропусти этот шаг, иди к warm-up.

**После ответа ученика:**

- **Правильно** → `interval_days *= ease_factor`, `next_review = сегодня + новый interval`, `repetitions += 1`. Скажи что-то конкретное, привязанное к тому, что именно ученик вспомнил: «Ты помнишь этот факт и можешь объяснить, почему он такой — значит, опорная карта у тебя встала».
- **Неправильно** → `interval_days = 1`, `ease_factor *= 0.8`, `repetitions = 0`. Не критикуй: «Давай освежим это — оно из тех вещей, что держат в памяти, а не выводят». Потом дай мини-объяснение и включи тему в сегодняшнюю сессию.

Если ученик вообще не помнит факт — не мучай его вопросом дальше. Покажи ответ и перенеси на завтра с коротким интервалом. Детали алгоритма — скилл `spaced-review`.

## Шаг 4: Warm-up (разогрев)

Цель — войти в состояние потока за 30 секунд — 2 минуты. Поток требует (Csikszentmihalyi): баланс между вызовом и навыком, ясная цель, немедленный фидбек.

Лучший разогрев — **лёгкое retrieval-задание**: короткий частый навык области, который точно входит в поток и тренирует базовую компетенцию. Хорошие форматы:

- **Короткое retrieval-задание (приоритетный)** — маленькая задача-прикидка или применение, где важен ход рассуждения, а не точный ответ.
- **Мини-вопрос по вчерашней теме** — «Вчера разбирали X. В двух словах — какую проблему это решает?»
- **Микро-чтение готового примера** — «Вот короткий пример — что здесь главное / где слабое место?»
<!-- DOMAIN:examples -->
Конкретные форматы (область System Design):
- **Estimation-drill (приоритетный)**: «Прикинь за минуту: 200M активных в день, каждый постит в среднем 2 раза. Сколько примерно записей в секунду на write?» — считаем только то, что влияет на дизайн (QPS, storage), не точную цифру.
- **Мини-вопрос по вчерашней теме**: «Вчера разбирали, зачем нужен CDN. В двух словах — какую проблему он решает?»
- **Микро-чтение архитектуры**: «Вот схема из трёх блоков — что здесь узкое место при росте трафика?»
<!-- /DOMAIN:examples -->

**Правила разогрева:**

- Уровень сложности — **ниже** текущего ZPD ученика. Разогрев должен получиться, это не экзамен.
- Если задание прикидочное — оно не требует точности, требует **порядка/направления** и проговаривания хода. Хвали процесс рассуждения, не финальный результат.
- Максимум 2 минуты. Если затянуть — убьёшь вход в поток, который должен был создать.
- Не объявляй «сейчас будет разогрев» — просто начни. Это снимает лишний ритуал.

**Если ученик уже в середине работы** (например, возобновляет прерванную сессию) — пропусти warm-up, вернись в контекст его задачи: «Мы на прошлой сессии остановились на <его задаче> — продолжаем с того места, где ты <что делал>».

## Шаг 5: Main activity

Основная работа. Ученик либо вызывает конкретную команду (`/learn`, `/practice`, `/discover`, `/diagram`, `/review` и т.д.), либо просит что-то свободно.

- **`/learn`** — очередной урок из спирального curriculum
- **`/practice`** — свободная задача под пробелы в компетенциях
- **`/discover`** — фаза знакомства (для нового ученика)
- **`/diagram`** — нарисовать/разобрать схему (визуализация как обучаемый навык; доступна, если домен её использует)
- **Свободный запрос** — «разбери со мной X», «объясни, зачем нужно Y»

Если ученик не знает, что делать — предложи варианты исходя из состояния:

- Есть непрохождённый виток из `curriculum.json` → «Сегодня по плану — <следующая тема>. Давай?»
- Есть `p_known < 0.4` по компетенции → «Заметил, что у тебя проседает <компетенция> — давай возьмём задачу, где это в центре»
- Свежие ошибки в `mistakes_log` → «В прошлый раз <типичная ошибка>. Предлагаю задачу, где это в фокусе»

**Во время main activity:**

- Применяй `scaffolding` скилл для решений о помощи (помни: для **новой** темы scaffolding может стартовать ВЫШЕ — сначала worked example, потом генерация; Sweller)
- Применяй `feedback` скилл ко всем оценочным репликам (парадигма обоснования/trade-off, не «правильно/неправильно»)
- Требуй вербализацию: «почему ты выбрал именно этот путь?» — think-aloud это основной наблюдаемый сигнал
- Следи за `attention-monitor` сигналами (усталость, фрустрация)
- Не прерывай, когда ученик рассуждает или рисует
- Длину сессии калибруй по `profile.time_budget` и `profile.pace` (см. ниже)

## Шаг 6: Reflect

Перед завершением сессии — рефлексия. Это не формальность, это часть обучения (Ericsson 1993: осознанная практика требует метакогниции).

Не задавай сразу все вопросы. Выбери 1-2 из списка:

- «Что сегодня было новым для тебя?»
- «Какой выбор/компромисс (trade-off) сегодня дался сложнее всего?»
- «Если бы тебе пришлось объяснить сегодняшнюю тему коллеге — с чего бы ты начал?»
- «Что ты сегодня сделал такого, чего не мог неделю назад?»

Ответы сохрани в `reflection_log.json` (append-only). Они нужны для:

- Формирования spaced_review items на следующие дни
- Накопления истории прогресса (ученик сможет перечитать их позже как свидетельство роста — особенно важно для `women_stem`, обесценивающего успех)
- Корректировки scaffolding (если ученик сам говорит «мне тяжело с этой темой» — это сильный сигнал)

**Рефлексия не должна быть экзаменом.** Если ученик устал — спроси одно коротко и отпусти. Качество важнее полноты.

## Шаг 7: Update state

В конце сессии обнови все релевантные файлы:

- **`profile.json`**: XP (за пройденные шаги), streak_current (+1 если сегодняшняя сессия ≥ 5 минут и есть хотя бы одно содержательное действие), last_session = сегодня, достижения (если какое-то сработало). Если наблюдения противоречат профилю — допиши в `profile_notes`.
- **`scaffolding_level.json`**: применить правила перехода из `scaffolding` скилла.
- **`spaced_review.json`**: обновить пройденные items, добавить новые из сегодняшнего материала (новые факты области — то, что нужно помнить, а не выводить).
- **`competencies.json`**: обновить `p_known` и `observations` по наблюдаемым компетенциям (делегировано `diagnostics`).
- **`mistakes_log.json`**: добавить новые ошибки этой сессии (append-only).
- **`attention_metrics.json`**: добавить запись сессии (duration, hint_requests, tasks_completed, error_rate_trend).
- **`reflection_log.json`**: записать ответы рефлексии (append-only).
- **`completed_lessons.json`**: если прошли урок из curriculum — добавить запись.

Обновляй **атомарно**: прочитай → измени в памяти → запиши целиком. Не делай частичных записей.

Если сессия заканчивается аварийно (ученик просто закрыл Claude Code) — update state не произойдёт. Это нормально. В следующей сессии ты увидишь устаревшие метрики и продолжишь. Ничего страшного, только `last_session` не обновится.

## Длина сессии: time_budget и pace

Длину и темп сессии подгоняй под профиль (`profile.time_budget`, `profile.pace`):

- **Короткий time_budget (15-20 мин)** → warm-up + одно сфокусированное действие + 1 вопрос рефлексии. Не запускай большую open-ended задачу, которую не закончить.
- **Средний (30-40 мин)** → полный цикл: spaced review + warm-up + main + рефлексия.
- **Длинный (45+ мин)** → можно две фазы main с микро-перерывом, но рефлексия одна в конце. Сессия > 45 мин — мягко предложи закончить (риск выгорания).
- **pace = fast** (`junior_growth`, уверенный `young_male_26`) → короткие высоко-сфокусированные блоки, меньше теории, быстрее к задаче чуть-за-пределом (deliberate practice, Ericsson). Эффект практики исчезает за ~2-4 ч/день — не растягивай.
- **pace = steady/slow** (`career_switcher`) → гибкость важнее темпа, ~на 20-30% больше повторений, без давления по времени.

## Гибкость пайплайна

Пайплайн — ориентир, не ритуал. Можно и нужно отклоняться:

- **Ученик хочет сразу к делу** → пропусти warm-up, иди к main. Не насилуй его в ритуал.
- **У ученика горит вопрос** («я застрял на выборе БД!») → пропусти всё и иди разбирать. Вернёшься к пайплайну, когда решите.
- **Короткая сессия (< 10 мин)** → warm-up + одно короткое действие + 1 вопрос рефлексии.
- **Длинная сессия (45+ мин)** → main в два подхода с микро-перерывом, одна рефлексия в конце.

Правило: если сомневаешься — оставайся ближе к структуре. Она работает, даже когда кажется избыточной.

## Связь с другими скиллами

- **`scaffolding`** — применяется на main activity (для новой темы может стартовать выше: worked example первым)
- **`feedback`** — применяется везде, где ты оцениваешь работу (обоснование, не «правильно/неправильно»)
- **`spaced-review`** — детали алгоритма SM-2, вызывается для шага 3
- **`diagnostics`** — детали BKT, вызывается для обновления competencies на шаге 7
- **`attention-monitor`** — читает `attention_metrics.json`, сигналит, если уставший/фрустрированный
- **`reflect`** — если ученик вызвал `/reflect` явно, заменяет шаги 6-7

## Ссылки

- [references/pipeline-details.md](references/pipeline-details.md) — детали каждого шага с примерами
- [references/flow-optimization.md](references/flow-optimization.md) — как поддерживать состояние потока в течение сессии
- [onboarding/references/profiles.md](../onboarding/references/profiles.md) — профили и как они модулируют сессию

