JavaRush /Курсы /Claude Code SELF /Настраиваем hook на практике

Настраиваем hook на практике

Claude Code SELF
8 уровень , 4 лекция
Открыта

1. Сборка: вешаем хук через агента

Лёха только что водил его за руку — показывал на примерах, как настраивается hook, как журнал пишется сам, как комп отзывается голосом. Это была работа мастера. А теперь Тёма собирает свой хук начисто и сам — с Саней, от пустой настройки до живого журнала. На руках у него всё нужное: спека HOOK_SPEC с тремя графами, модель «событие → действие» и понимание, что вешать хук надо не руками в конфиге, а словами через агента.

У него уже есть живые артефакты вчерашнего дня — Earthquake Radar и крипто-тикер, рядом лежат игры с прошлых уровней, тот же Тетрис. Вокруг них он крутит follow-up-задачи руками, и внешнего следа «что и когда просил» нет. Сейчас он повесит хук, который будет вести этот журнал сам.

В конфиг Тёма даже не лезет — ставит хук словами, как привык:

Повесь hook: на каждый мой запрос дописывай его со временем в requests.log.

— Давай, Сань, как в спеке расписано, — бросает он вслед. — Событие, действие, куда писать — всё там.

Саня по этой фразе и вешает настоящий hook. Кладёт скрипт-обработчик .claude/hooks/log-prompt.sh и прописывает событие UserPromptSubmit в .claude/settings.json:

{
  "hooks": {
    "UserPromptSubmit": [
      { "hooks": [ { "type": "command", "command": ".claude/hooks/log-prompt.sh" } ] }
    ]
  }
}

Событие — «Тёма отправил запрос». Действие — записать время и сам запрос в requests.log. Та самая стрелочка, только теперь не на бумажке, а живой настройкой. Тёма проверяет, что хук встал:

/hooks       # в списке должен быть наш UserPromptSubmit

UserPromptSubmit виден в списке — хук на месте, можно работать как обычно.

2. Журнал пишется сам

Тёма специально берёт не выдуманные команды, а живые follow-up-задачи — те самые, что мучили его утром. Просит подправить блок тикера. Просит на радаре сдвинуть порог. И не отрываясь смотрит на файл.

Он жмёт Enter на первом запросе. Короткая пауза — та самая, пока не разберёшь, пошло дело или вхолостую. Файл requests.log раскрыт под боком, и Тёма нет-нет да зыркнет на него краем глаза. А потом в журнале сама проступает строка: время, его запрос. Он её не печатал. Не открывал файл, не дописывал, пальцем не шевелил — взялась и проявилась.

— Опа, — вырывается у него.

Жмёт второй запрос — вторая строка падает следом, тоже сама. Третий — третья. Он специально гоняет запросы чаще, чем нужно, просто чтоб смотреть, как файл растёт без единого его движения, будто кто-то невидимый ведёт за него протокол. Само собой ложатся ровно те строки, что пишет скрипт, — время и текст запроса, как есть:

[14:32] вернуть блок тикера к утреннему варианту
[14:41] на радаре поднять порог магнитуды до 3.0
[14:55] тикеру цвет фона на тёмный

А пометки «на чём сошлись» Тёма потом дописывает к нужным строкам сам, когда решение принято, — хук их не пишет, он только кладёт запрос. Получается два слоя: авто-строка от скрипта плюс ручная пометка о решении.

[14:32] вернуть блок тикера к утреннему варианту
        → решили: формат "BTC $XXXXX · обновлено HH:MM"

Тёма открывает журнал, проводит пальцем по строкам — и утренней возни как не бывало. Не надо больше надеяться, что голова удержит разговор. Вот он, журнал: что просил, когда, какими словами — лёг сам; а где надо, рядом его же рукой помечено, на чём сошлись. Открыл — прочитал. Никакого угадывания.

— Был бы у меня такой утром, — хмыкает он, — тот блок тикера за десять секунд нашёл бы.

3. Автоматика работает без напоминаний

Тёма откидывается на спинку — и вдруг застывает на полпути. Что-то не сходится.

— Стоп, — говорит он вслух, ни к кому. — А я ж вообще про этот журнал забыл. Сразу, как Саня его воткнул. Сидел тикер правил, радар крутил — и ни разу про него не вспомнил.

Он наклоняется к экрану обратно, будто проверить — а вдруг привиделось. Открывает requests.log. Строки на месте, все до одной, ровным столбиком, время к времени. Он листает их пальцем сверху вниз — и пересчитывает в голове свои сегодняшние запросы. Сходится. Ни одной не потерял.

— Так это ж… — он медлит, складывая. — Я ж его не вёл. Я про него забыл. А он есть.

И тут его будто под дых бьёт. Утром-то было ровно наоборот: забыл — значит, потеряно, угадывай теперь, какой блок был вчера, злись на свою дырявую башку. А сейчас он забыл точно так же — и не потерял ничего.

— Это что, — говорит он медленно, сам себе не веря, — выходит, можно забыть — и чтоб не пропало?

Он откидывается обратно, теперь уже до конца, и расплывается.

— Вот это кайф. Самое слабое моё место — что забываю всё, — а оно теперь даже не моё. Оно вон, в файле. Раньше забыл — значит просрал. Теперь забыл — а оно само записалось.

Ухмыляется собственной хитрости: ничего ж толком не сделал — а протокол сам себя ведёт. Красиво устроился, думает он, не понимая ещё, чьё это красиво.

4. Сколько стоит каждое срабатывание

Войдя во вкус, Тёма тут же хочет ещё:

— Сань, раз так легко — давай, чтоб при каждом follow-up сама собиралась короткая сводка из логов и последних правок.

Саня вешает и это — поверх ядра, как сладкое сверху, не как вторая обязательная победа. Тёму несёт, он бы сейчас навесил десяток таких хуков и не считал.

Лёха роняет спокойно:

— Ты только держи в голове одну вещь. Каждое срабатывание — это работа, а работа жжёт ресурс модели. Навесишь полсотни хуков — будут молотить фоном, даже когда ты в игрушки рубишься. Запас пока большой, не парься. Но не «вешай всё подряд и не думай».

— Запас большой, не парюсь, — выхватывает Тёма ровно эту половину. Про цену пропускает — он же гений лени, какие тут лимиты, чем больше само, тем лучше.

Олег, мимо проходя, ворчит своё:

— Дашь системе волю — она тебе наворотит дел без спросу, потом сам же и разгребай.

— Дядь Олег, ты себя слышишь? — Тёма аж сияет. — «Сама наворотит дел». Так это ж мечта! Я-то как раз и хочу, чтоб без спросу работала, мне меньше шевелиться. Ты мне сейчас не пугалку выдал, а рекламу.

5. Настроил один раз — работает всегда

Вечером, когда Тёма уже в чистом кайфе автономности, в чат с Артём2036 падает строка — и опять не целая, в чёрных кляксах под конец, будто кто-то выгрыз ей хвост:

Артём2036
в сети

— «настроил и забыл» — лучшая фраза. Пока однажды не станет худшей. В тот день ███████████ намолотит вхолостую, а считать будет ████ — чужие деньги — ██████████████████, и ты вспомнишь, что ████ █████████.

— Ты, который один раз настроил, ушёл пить чай, и █████████ за всё разом.

— «Лучшая фраза» — так и есть, — Тёма улыбается, цепляя первую, целую половину. — Прям про сегодня.

А дальше строка снова уходит в труху — половину слов словно маркером замазали. Тёма щурится, выуживает из каши два уцелевших: «чужие деньги». К чему это? У него-то всё своё, ноутбук да игрушки, никаких чужих денег и в помине. Он пожимает плечом — мало ли что канал лепит, — и пробегает остаток как красивый довесок, изящную фигуру речи в духе чата с собой из будущего. Хмыкает, закрывает чат. Артём2036, как обычно, ничего не разжёвывает.

В том, что день удался, Тёма уверен до самых пяток. Уносит он одно чистое послевкусие: можно настроить — и забыть. Система работает сама, в тех самых местах, где раньше всё держалось на нём. Картинку с утренним такси, у которого тикал счётчик в пустой машине, он за весь день так и не вспоминает.

Он захлопывает крышку ноута. Завтра разберётся, если что. А этот день запомнится одним: впервые что-то крутится за него само, пока он занят совсем другим, — и от этого внутри тепло и щекотно, как от маленькой удавшейся хитрости.

1
Задача
Claude code, 8 уровень, 4 лекция
Недоступна
Review документации внутри Claude CLI
Review документации внутри Claude CLI
1
Задача
Claude code, 8 уровень, 4 лекция
Недоступна
Короткая docs review rubric для AI-generated документации
Короткая docs review rubric для AI-generated документации
1
Опрос
Документация и evidence-сигналы, 8 уровень, 4 лекция
Недоступен
Документация и evidence-сигналы
Документация и evidence-сигналы
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ