← [Раздел](README.md) · [Главная](../README.md)

# Lab 04 — Hooks

## Цель

Настроить минимальный **`hooks.json`** с `sessionStart` или `afterFileEdit`, понять протокол вызова и безопасно откатить при проблемах.

## Предварительно

- [08 — Hooks](../08-hooks/README.md)
- [primery-hooks.md](../08-hooks/primery-hooks.md)
- Lab 03 в том же репо
- Node.js для `.js` хуков

## Время

~75–90 минут.

---

## Шаг 1 — Изучить эталон

Откройте:

```text
/Users/nazeebod/Projects/ECC/.cursor/hooks.json
/Users/nazeebod/Projects/ECC/.cursor/hooks/session-start.js
```

Не копируйте всё — только структуру.

---

## Шаг 2 — Учебный sessionStart

`.cursor/hooks/lab-session-start.js` (упрощённый шаблон — адаптируйте под протокол из ECC):

```javascript
#!/usr/bin/env node
// Lab 04: напоминание в stdout для harness
console.error('[lab] Режим учебного репозитория — не production');
process.exit(0);
```

`.cursor/hooks.json`:

```json
{
  "version": 1,
  "hooks": {
    "sessionStart": [
      {
        "command": "node .cursor/hooks/lab-session-start.js",
        "event": "sessionStart",
        "description": "Lab 04 session reminder"
      }
    ]
  }
}
```

---

## Шаг 3 — Проверка

1. Reload Window в Cursor.
2. Откройте **новый** Agent Chat.
3. Убедитесь, что сообщение появилось (в UI или логах — зависит от версии).

Если не работает — сравните с рабочим `session-start.js` из ECC построчно.

---

## Шаг 4 — afterFileEdit (опционально)

Скопируйте идею из `ECC/.cursor/hooks/after-file-edit.js`, но ограничьте:

- только `.py` или `.go`;
- только `prettier` / `gofmt` на один файл.

**Не** запускайте полный test suite.

Добавьте второй элемент в `hooks.json`.

---

## Шаг 5 — Негативный тест

Намеренно сломайте хук (`exit(1)`). Убедитесь, что сессия ведёт себя предсказуемо (ошибка hook). Исправьте.

---

## Шаг 6 — Связь с Hookify (теория)

В ECC выполните в **отдельном** учебном окне:

```text
/hookify-help
```

Запишите: чем declarative hookify отличается от вашего `lab-session-start.js`.

---

## Шаг 7 — Commit и cleanup

```bash
git add .cursor/hooks.json .cursor/hooks/
git commit -m "lab04: add sessionStart lab hook"
```

Если afterFileEdit мешает — отключите перед долгой работой, оставив только sessionStart.

---

## Критерии успеха

- [ ] Валидный `hooks.json`
- [ ] sessionStart срабатывает на новой сессии
- [ ] Журнал: что делали при отладке
- [ ] Нет бесконечных циклов / зависаний
- [ ] Понимание, где эталон ECC

---

## Финал практикума

Заполните `LAB-JOURNAL.md` итогом:

- самый полезный артефакт (промпт / rule / skill / hook);
- что внедрите в реальный проект первым.

---

## Самопроверка

1. Где лежит hooks.json в проекте?
2. Почему тестировали exit(1)?
3. Чем lab hook проще afterFileEdit из ECC?
4. Когда выбрать Hookify вместо raw hook?

---

## Дальше

→ [13 — Pro уровень](../13-pro-uroven/README.md)  
← [Lab 03](lab-03-skill.md)
