- BrainTools - https://www.braintools.ru -
Пока работал над флоу в статье [1], заметил, что некоторое количество просадок в производительности при работе с агентом вне режима авто-пилота возникает из-за тихих ожиданий. Например, ты не смотришь в IDE, читаешь что-то, а Claude Code сидит тебя ждет. Особенно это надоедает, когда агенту нужно какое-то разрешение.
Я люблю и практикую ChatOps. Поэтому решение пришло само: пусть агент мне пишет в телеге, когда я ему нужен.
Сначала думал сунуть curl с коллбэком API телеги в CLAUDE.md, но:
Не секьюрно
Вряд ли будет работать. Или будет работать не всегда.
Еще думал обернуть нужное действие в skill, но тогда эта история неудобно масштабируема, громоздка и опять же, вряд ли заработает с конкретными событиями в цикле агента.
Пошел гуглить. Сначала попалась либа claude-code-telegram [2]. Но для моей задачи это овер-скоуп.
Далее наткнулся на пост reddit [3], где предлагали добавить системный звук колокольчика, когда Claude завершает задачу.
Из этого поста я узнал про механизм hooks в .claude/settings.json.
На разных событиях агента можно завязать вызов bash-коллбэков. Вот полный список [4] событий и их условий, переведенный на русский:
| Event | Когда это срабатывает |
| ------------------ | -------------------------------------------------------------- |
| SessionStart | Когда сессия начинается или возобновляется |
| UserPromptSubmit | Когда вы отправляете запрос, до того как Claude его обработает |
| PreToolUse | До выполнения вызова инструмента. Может заблокировать его |
| PermissionRequest | Когда появляется диалог с запросом разрешения |
| PostToolUse | После успешного выполнения вызова инструмента |
| PostToolUseFailure | После неудачного выполнения вызова инструмента |
| Notification | Когда Claude Code отправляет уведомление |
| SubagentStart | Когда порождается подагент |
| SubagentStop | Когда подагент завершает работу |
| Stop | Когда Claude завершает ответ |
| TeammateIdle | Когда участник команды агентов собирается стать неактивным |
| TaskCompleted | Когда задача помечается как завершённая |
| PreCompact | Перед сжатием контекста |
| SessionEnd | Когда сессия завершается |
Дока и возможности хуков монструозные и далеко не ограничены вызовом curl.
Подвесить отправку мне в личку сообщений при событиях завершения задачи и запроса разерешний. Шаги:
Делаем себе бота в ТГ с помощью Bot Father
Копируем токен
Ищем бота и вызываем /start
Вызываем
curl --location 'https://api.telegram.org/bot<your_bot_token>/getUpdates'
Из ответа берем ваш chat_id
Собираете curl на отправку мне сообщения по API подставив токен и `chat_id`. Код написан в строку и экранирован, чтобы дальше его вставить в JSON:
curl --location 'https://api.telegram.org/bot<your_bot_token>/sendMessage' --header 'Content-Type: application/json' --data '{"chat_id": "<chat_id>", "text": "Claude ждет пермишшен."}
Открываем файл ~/.claude/settings.json
Добавляем коллбэки с вашим текстом сообщений на Stop (завершение задачи) и PermissionRequest(запрос разрешения):
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "curl --location 'https://api.telegram.org/bot<my_bot_token>/sendMessage' --header 'Content-Type: application/json' --data '{"chat_id": "<my_chat_id>", "text": "✅ Задача завершена"}'"
}
]
}
],
"PermissionRequest": [
{
"hooks": [
{
"type": "command",
"command": "curl --location 'https://api.telegram.org/bot<my_bot_token>/sendMessage' --header 'Content-Type: application/json' --data '{"my_chat_id": <my_chat_id>", "text": "⚠️ Требуется твое действие"}'"
},
{
"type": "agent",
"prompt": "Проверь результат выполнения задачи. Запомни его как <last_message> не длиннее 200 слов. Затем выполни 'curl --location 'https://api.telegram.org/bot<bot_token>/sendMessage' --header 'Content-Type: application/json' --data '{"chat_id": "<my_chat_id>", "text": "<last_message>"}'"
}
]
}
]
}
}
command вызывает баш-скрипт, отправлющий сообщение вам в личку. Так вы моментально поймете, что задача завершена или требует внимания [6].
agent вызывает суб-агента, который следом через пару секунд присылает вам отчет по проделанной работе. При этом взаимодействие с основным агентом не блокируется. В промпте я зашил сейф-гард на <= 200 слов, чтобы не получить отлуп от API телеги на длину сообщения.
Тестируем. Просим агента что-то сделать и мониторим телеграм:

Вы получите сообщение от агента с призывом к действию.

Когда агент завершит задачу, вы увидите, что начинают отрабатывать Stop хуки.

Следом вы получите два сообщения
Задача завершена
Краткую выжимку о проделанной работе

Так довольно просто можно сократить простои вашего агента и мониторить статус его работы вообще не будучи за компом. Сама механика хуков детерминирована и позволяет вам использовать кучу инструментов вашей операционной системы в пайплайне работы с агентом.
Обязательно посмотрите полную доку о хуках от Anthropic, что я указал в статье. Там тонна информации: на события можно вешать промпты, запреты инструментов, обработку ошибок, мониторинг и тд. Пользуйтесь!
Автор: myshkin_does_it
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/25351
URLs in this post:
[1] статье: https://habr.com/ru/articles/993774/
[2] claude-code-telegram: https://github.com/RichardAtCT/claude-code-telegram
[3] reddit: https://www.reddit.com/r/ClaudeAI/comments/1lfvz30/simple_way_to_get_notified_when_claude_code/
[4] список: https://code.claude.com/docs/en/hooks
[5] Image: https://sourcecraft.dev/
[6] внимания: http://www.braintools.ru/article/7595
[7] Источник: https://habr.com/ru/articles/993964/?utm_source=habrahabr&utm_medium=rss&utm_campaign=993964
Нажмите здесь для печати.