Claude Code в действии

Реальные сценарии: рефакторинг, генерация тестов, работа с большими репозиториями.

22 уроков, первые 3 бесплатно. Полный доступ: 1490 руб.

Уроки курса

  1. Introduction
  2. What is a coding assistant?
  3. Claude Code in action
  4. Claude Code setup
  5. Project setup
  6. Adding context
  7. Making changes
  8. Course satisfaction survey
  9. Controlling context
  10. Custom commands
  11. MCP servers with Claude Code
  12. Github integration
  13. Introducing hooks
  14. Defining hooks
  15. Implementing a hook
  16. Gotchas around hooks
  17. Useful hooks!
  18. Another useful hook
  19. The Claude Code SDK
  20. Quiz on Claude Code
  21. Summary and next steps
  22. What you'll learn

Another useful hook

Помимо хуков PreToolUse и PostToolUse, рассмотренных в этом курсе, существуют и другие хуки:

Что может сбить с толку

Вот что может сбить с толку:

  1. Входные данные stdin для ваших команд будут меняться в зависимости от типа выполняемого хука (PreToolUse, PostToolUse, Notification и т.д.)
  2. Содержащийся в них tool_input будет отличаться в зависимости от вызванного инструмента (в случае хуков PreToolUse и PostToolUse).

Пример входных данных для хука PostToolUse

Например, вот образец входных данных stdin для хука, где хук — это PostToolUse, который отслеживал использование инструмента TodoWrite. Для справки, это инструмент, который Claude использует для отслеживания задач.

{
"session_id": "9ecf22fa-edf8-4332-ae85-b6d5456eda64",
"transcript_path": "<path_to_transcript>",
"hook_event_name": "PostToolUse",
"tool_name": "TodoWrite",
"tool_input": {
"todos": [{ "content": "write a readme", "status": "pending", "priority": "medium", "id": "1" }]
},
"tool_response": {
"oldTodos": [],
"newTodos": [{ "content": "write a readme", "status": "pending", "priority": "medium", "id": "1" }]
}
}

Пример входных данных для хука Stop

А для сравнения, вот пример входных данных для хука Stop:

{
"session_id": "af9f50b6-f042-4773-b3e2-c3a4814765ce",
"transcript_path": "<path_to_transcript>",
"hook_event_name": "Stop",
"stop_hook_active": false
}

Как вы видите, входные данные stdin для вашей команды будут значительно отличаться в зависимости от хука (PreToolUse, PostToolUse, Stop и т.д.) и используемого matcher (в случае PreToolUse и PostToolUse). Это может усложнить написание хуков — вы можете не знать точную структуру входных данных для вашей команды!

Создание вспомогательного хука

Чтобы справиться с этой проблемой, попробуйте создать вспомогательный хук следующим образом:

"PostToolUse": [ // Or "PreToolUse" or "Stop", etc
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "jq . > post-log.json"
}
]
},
]

Обратите внимание на предоставленную команду. Она запишет входные данные для этого хука в файл post-log.json, что позволит вам точно проверить, что было бы передано вашей команде! Это значительно упрощает понимание того, какие данные должна проверять ваша команда.