Хуки Claude Code
Без хуков всё работает: сессии видны, лента обновляется. Хуки добавляют три вещи, которые иначе не получить.
Сообщение видно сразу. CLI дописывает промпт в транскрипт только со следующим ответом агента, поэтому на длинном ответе отправленное сообщение как будто пропадает. Хук UserPromptSubmit присылает его сразу.
Видно, чем занята чужая сессия. Про сессию из терминала api знает только то, что уже дописано в транскрипт, — пока идёт вызов, она выглядит молчащей. PreToolUse и PostToolUse приносят текущий вызов, и в шапке ленты появляется «⚙ Bash(…)», как у своих чатов.
Ответ на вопрос чужой сессии. Если claude в терминале задал вопрос, вызов инструмента висит в его процессе. Дописать ответ в JSONL нельзя — это лог, CLI из него ничего не читает. Зато хук выполняется тем же процессом, поэтому его вывод и есть канал для ответа.
Настройка
В ~/.claude/settings.json:
{
"hooks": {
"PostToolUse": [
{ "hooks": [{ "type": "command", "command": "/var/www/clauder/scripts/claude-hook.sh" }] }
],
"Stop": [
{ "hooks": [{ "type": "command", "command": "/var/www/clauder/scripts/claude-hook.sh" }] }
],
"UserPromptSubmit": [
{ "hooks": [{ "type": "command", "command": "/var/www/clauder/scripts/claude-hook.sh" }] }
],
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{
"type": "command",
"timeout": 900,
"command": "sh /var/www/clauder/scripts/claude-question-hook.sh"
}
]
}
]
}
}Путь к скриптам — из вашего клона. У приложения они лежат рядом с ним; точный путь показывает раздел «Хуки Claude Code» в настройках.
Зачем Stop
Уведомлениям. У сессии из терминала нет ни run-а агента, ни собственного статуса, и без хука никто не узнает, что ответ закончился.
Он же вместе с PostToolUse забирает сообщения, написанные такой сессии из Clauder: без них написанное так и висит пузырём — доставить его больше нечем.
Куда слать события
Задаётся в самом Clauder — раздел «Хуки Claude Code» в настройках, по одному адресу на строку.
Рядом часто живут api в докере и приложение без докера, и событие нужно обоим: хук разошлёт его во все перечисленные Clauder-ы. Иначе второй о сессии не узнает, и ответить на её вопрос оттуда будет нечем.
Перехват вопросов
Перехват включается на конкретную сессию — кнопка «📥 перехватывать вопросы» в шапке чата, пункт под «⋮» в приложении. Пока выключен, вопрос уходит в обычный интерактивный UI, и терминал не ломается.
Перехваченный вопрос ждёт без срока
Сессия в терминале стоит, пока на вопрос не ответят из Clauder, не нажмут «Пропустить» или не выключат перехват. Оставлять включённый перехват на чужой сессии без присмотра не стоит.