{"id":477607,"date":"2026-04-27T11:10:32","date_gmt":"2026-04-27T11:10:32","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=477607"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=477607","title":{"rendered":"Hooks \u0432 LLM-\u0430\u0433\u0435\u043d\u0442\u0430\u0445: \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c, \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6a\/2f\/e6\/6a2fe6d9a741ae2c3d97e1d7b233916e.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/6a\/2f\/e6\/6a2fe6d9a741ae2c3d97e1d7b233916e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/6a\/2f\/e6\/6a2fe6d9a741ae2c3d97e1d7b233916e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h3>TL;DR<\/h3>\n<p>Hooks \u2014 \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0438 \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0430\u0433\u0435\u043d\u0442\u0430 (Claude Code, GitHub Copilot CLI, VS Code Agent Mode), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u0448 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u044c \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0445\u0443\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u043e \u043e\u0434\u0438\u043d \u2014 <code>PreToolUse<\/code> \u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0439: \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u043f\u0440\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0430\u0448\u0438 gates (lint, typecheck, secrets-scan), \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 IO, \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0439\u0441 forced-lint gate, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f Claude Code (\u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0442\u044b\u0439 \u043d\u0430\u0431\u043e\u0440: ~26 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0442\u0438\u043f\u044b \u0445\u0443\u043a\u043e\u0432 <code>command<\/code>\/<code>http<\/code>\/<code>prompt<\/code>\/<code>agent<\/code>, matchers). \u041a\u0430\u043a\u0438\u0435-\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 Copilot CLI \u0438 VS Code Agent Mode \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u2014 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0447\u0442\u043e-\u0442\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441.<\/p>\n<h3>1. \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u0443\u043a\u0438<\/h3>\n<p>LLM\u2011\u0430\u0433\u0435\u043d\u0442\u044b \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, by design. \u041c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043b\u0438\u043d\u0442\u0435\u0440\u0430, \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u0442\u043e\u043a\u0435\u043d\u0430 \u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u201cAI lies pathologically\u201d. \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044d\u0442\u043e \u0442\u0435\u0440\u043f\u0438\u043c\u043e, \u0434\u043b\u044f production\u2011\u043a\u043e\u0434\u0430 \u2014 \u043d\u0435\u0442.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0445\u0443\u043a\u0438 \u2014 \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0430\u0433\u0435\u043d\u0442\u0430 \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u0434\u043e\u043c. \u0412\u0430\u0448 shell-\u0441\u043a\u0440\u0438\u043f\u0442 (\u0438\u043b\u0438 HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0438\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 sub-agent) \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u0441\u0442\u0430\u0440\u0442 \u0441\u0435\u0441\u0441\u0438\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 prompt, \u0434\u043e tool call, \u043f\u043e\u0441\u043b\u0435 tool call, \u0437\u0430\u043f\u0443\u0441\u043a sub-agent, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u043e\u0434\u043d\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c; \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u2014 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0430\u0433\u0435\u043d\u0442\u0430 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442.<\/p>\n<p>\u0425\u0443\u043a\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 Claude Code, GitHub Copilot CLI \u0438 VS Code Agent Mode. \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0432\u0435\u0437\u0434\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f, \u043d\u043e \u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0438 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c Claude Code.<\/p>\n<p>\u041d\u0430\u0434\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0430\u043a\u0446\u0435\u043d\u0442 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d <code>PreToolUse<\/code> gate \u043d\u0430 ESLint \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043a-\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435.<\/p>\n<h3>2. \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0430\u0433\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0445\u0443\u043a\u0430\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0430\u0442 \u0441 \u0430\u0433\u0435\u043d\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u043d\u0435 \u201c\u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442\u201d, \u0430 \u0446\u0438\u043a\u043b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b3\/d7\/70\/b3d7706378697eae1bb8d0f17589b778.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/b3\/d7\/70\/b3d7706378697eae1bb8d0f17589b778.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/b3\/d7\/70\/b3d7706378697eae1bb8d0f17589b778.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0410\u0433\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e loop.<\/strong> \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c tool calls. \u041d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 tool calls \u2014 \u0430\u0433\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u0439 \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 response.<\/p>\n<\/li>\n<li>\n<p><strong>Sub-agent \u2014 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430.<\/strong> \u0412\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0438 reasoning \u0438 \u0441\u0432\u043e\u0438 tool calls, \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e prompt\u2019\u043e\u0432.<\/strong> \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 prompt \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 agent loop, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d.<\/strong> \u041f\u0440\u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043a \u043b\u0438\u043c\u0438\u0442\u0443 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e (compaction) \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0442\u043e\u0447\u043a\u0430 \u0445\u0443\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u0446\u0438\u043a\u043b \u0442\u043e\u0447\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0445\u0443\u043a\u043e\u0432 (Claude Code):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7f\/63\/51\/7f6351ee631ebd6c5646ceaca51d0881.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/7f\/63\/51\/7f6351ee631ebd6c5646ceaca51d0881.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/7f\/63\/51\/7f6351ee631ebd6c5646ceaca51d0881.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0445\u0443\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437: <code>SessionStart<\/code> \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b, <code>UserPromptSubmit<\/code> \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0430\u0448 prompt, <code>PreToolUse<\/code>\/<code>PostToolUse<\/code> \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call (\u0430 \u0438\u0445 \u0437\u0430 \u043e\u0434\u0438\u043d prompt \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438).<\/p>\n<h3>3. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/h3>\n<p>\u0412 Claude Code \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 26 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041d\u0438\u0436\u0435 \u2014 \u0441\u0430\u043c\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435; \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 \u0432 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0435 (<a href=\"https:\/\/docs.claude.com\/en\/docs\/claude-code\/hooks\">en<\/a>, <a href=\"https:\/\/code.claude.com\/docs\/ru\/hooks\">ru<\/a>).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u043e\u0431\u044b\u0442\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u0433\u0434\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0430\u0441\u0442\u043e\u0442\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u043e\u0436\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c (exit 2)?<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 use case<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SessionStart<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0440\u0442 \u0438\u043b\u0438 resume \u0441\u0435\u0441\u0441\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 \u0440\u0430\u0437<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 (\u0442\u043e\u043b\u044c\u043a\u043e <code>additionalContext<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439\/\u0441\u0442\u0435\u043a\u0430\/\u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UserPromptSubmit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0436\u0434\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 prompt<\/p>\n<\/td>\n<td>\n<p align=\"left\">N \u0440\u0430\u0437<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u0435 prompt, guardrails \u043d\u0430 \u0432\u0432\u043e\u0434<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PreToolUse<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434 tool call<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Gates: lint, secrets, policy<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PostToolUse<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e tool call<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 (\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 top-level <code>decision: \"block\"<\/code> \u0441 reason)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0443\u0434\u0438\u0442, \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b, \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PostToolUseFailure<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435 \u0443\u043f\u0430\u0432\u0448\u0435\u0433\u043e tool call<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043f. \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430, \u0440\u0435\u0442\u0440\u0430\u0439-\u0445\u0438\u043d\u0442\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PermissionRequest<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043a\u0430\u0437\u0430\u043d \u0434\u0438\u0430\u043b\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0432\u0442\u043e-allow\/deny \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PermissionDenied<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">Tool call \u043e\u0442\u043a\u043b\u043e\u043d\u0451\u043d auto-mode \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 (\u043d\u043e \u043c\u043e\u0436\u043d\u043e <code>retry: true<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SubagentStart<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c sub-agent<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 sub-agent<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 sub-agent\u2019\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SubagentStop<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 sub-agent<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 sub-agent<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong> (\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0431\u043e\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0433\u0435\u0439\u0442 \u00ab\u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0441\u044f, \u043f\u043e\u043a\u0430 \u0442\u0435\u0441\u0442\u044b \u043a\u0440\u0430\u0441\u043d\u044b\u0435\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Stop<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0433\u0435\u043d\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0445\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 \u0440\u0430\u0437 \u043d\u0430 \u0445\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong> (\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043d\u0435 \u0434\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>StopFailure<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0441 API-\u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043b\u0435\u0440\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 rate-limit\/billing<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PreCompact<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0434\u043e \u0441\u0436\u0430\u0442\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PostCompact<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0434\u043e\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>InstructionsLoaded<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d <code>CLAUDE.md<\/code> \/ <code>.claude\/rules\/*.md<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0443\u0434\u0438\u0442, compliance-\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>CwdChanged<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (direnv-style)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>FileChanged<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 (<code>.env<\/code>, \u043a\u043e\u043d\u0444\u0438\u0433\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Notification<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \/ idle<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0444\u0430\u043a\u0442\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f (Slack, \u0437\u0432\u0443\u043a)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SessionEnd<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 \u0440\u0430\u0437<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u0447\u0451\u0442 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440, cleanup<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (<code>TaskCreated<\/code>\/<code>TaskCompleted<\/code>, <code>TeammateIdle<\/code>, <code>ConfigChange<\/code>, <code>WorktreeCreate<\/code>\/<code>WorktreeRemove<\/code>, <code>Elicitation<\/code>\/<code>ElicitationResult<\/code>) \u2014 \u0431\u043e\u043b\u0435\u0435 \u0443\u0437\u043a\u0438\u0435; \u0441\u043c. \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441.<\/p>\n<p>\u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0443\u043a\u0438 \u201c\u043c\u043e\u0433\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>PreToolUse<\/code> \u2014 \u0442\u043e\u0447\u043a\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0442\u0440\u0430\u044f (\u0430\u0433\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0441\u043d\u043e\u0432\u0430). <code>Stop<\/code>\/<code>SubagentStop<\/code> \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0445\u043e\u0434\u0430 (\u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c), \u043d\u043e \u043d\u0435 tool call. <code>SessionStart<\/code>\/<code>SessionEnd<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <code>additionalContext<\/code> \u0438 \u043d\u0435 \u0443\u043c\u0435\u044e\u0442 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c.<\/p>\n<blockquote>\n<p><strong>Copilot CLI:<\/strong> \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u2014 \u0432\u0441\u0435\u0433\u043e 6 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0438\u043c\u0435\u043d\u0430 \u0432 camelCase: <code>sessionStart<\/code>, <code>sessionEnd<\/code>, <code>userPromptSubmitted<\/code>, <code>preToolUse<\/code>, <code>postToolUse<\/code>, <code>errorOccurred<\/code>. \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e <code>preToolUse<\/code>. \u041c\u0430\u043f\u043f\u0438\u043d\u0433: <code>UserPromptSubmit<\/code> \u2194 <code>userPromptSubmitted<\/code>, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438. <code>errorOccurred<\/code> \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0432 Claude Code \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 (\u0443 Claude \u2014 <code>PostToolUseFailure<\/code>, <code>StopFailure<\/code>, <code>Notification<\/code>).<\/p>\n<p><strong>VS Code Agent Mode:<\/strong> \u00abchat hooks\u00bb \u2014 preview-\u0444\u0438\u0447\u0430, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u043b\u0438\u0437\u043e\u043a \u043a Copilot CLI; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u043b\u044f \u0441\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 VS Code.<\/p>\n<\/blockquote>\n<h3>4. \u041c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412 Claude Code \u0445\u0443\u043a\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u043b\u044e\u0447\u043e\u043c <code>hooks<\/code> \u0432 <code>.claude\/settings.json<\/code> (project-level, \u0435\u0434\u0435\u0442 \u0432 git) \u0438\u043b\u0438 <code>~\/.claude\/settings.json<\/code> (global). \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433:<\/p>\n<pre><code class=\"json\">{  \"hooks\": {    \"UserPromptSubmit\": [      {        \"hooks\": [          {            \"type\": \"command\",            \"command\": \"\\\"$CLAUDE_PROJECT_DIR\\\"\/.claude\/hooks\/log-prompt.sh\"          }        ]      }    ]  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<ul>\n<li>\n<p>\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 \u044d\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u044b \u0445\u0443\u043a\u043e\u0432, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u043c <code>matcher<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>matcher<\/code> \u2014 \u0444\u0438\u043b\u044c\u0442\u0440 (\u0441\u043c. \u043d\u0438\u0436\u0435), \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d; \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u2014 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u0451.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>hooks<\/code> \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e handlers; \u043d\u0430 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0412 Claude Code \u0432\u0441\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u043e\u0434 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 handlers \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f <strong>\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e<\/strong>, \u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 (\u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u2014 \u0434\u043b\u044f <code>command<\/code>-\u0445\u0443\u043a\u043e\u0432, \u043f\u043e URL \u2014 \u0434\u043b\u044f <code>http<\/code>) \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><code>type: \"command\"<\/code> \u2014 \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0442\u0438\u043f (\u0435\u0441\u0442\u044c \u0435\u0449\u0451 <code>http<\/code>, <code>prompt<\/code>, <code>agent<\/code>, \u0441\u043c. \u00a76).<\/p>\n<\/li>\n<li>\n<p><code>command<\/code> \u2014 shell-\u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041d\u0430 Windows \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 PowerShell (<code>\"shell\": \"powershell\"<\/code>) \u0438\u043b\u0438 bash \u043f\u043e\u0434 WSL.<\/p>\n<\/li>\n<li>\n<p><code>timeout<\/code> \u2014 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0414\u0435\u0444\u043e\u043b\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0445\u0443\u043a\u0430: <code>command<\/code> \u2014 600 \u0441, <code>prompt<\/code> \u2014 30 \u0441, <code>agent<\/code> \u2014 60 \u0441. \u0414\u043b\u044f <code>PreToolUse<\/code> gates \u043b\u0443\u0447\u0448\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c: \u043e\u0434\u0438\u043d \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0445\u0443\u043a \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 tool call.<\/p>\n<\/li>\n<li>\n<p><code>$CLAUDE_PROJECT_DIR<\/code> \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0435\u0437 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435 <code>matcher<\/code> (\u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u2014 \u00ab\u0444\u0438\u043b\u044c\u0442\u0440\u00bb) \u2014 \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0430 Claude Code. \u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442\u0441\u044f \u2014 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u043e\u0431\u044b\u0442\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">matcher \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u043d\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0440<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PreToolUse<\/code>, <code>PostToolUse<\/code>, <code>PostToolUseFailure<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u043c\u044f tool<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"Bash\"<\/code>, <code>\"Edit|Write\"<\/code>, <code>\"mcp__memory__.*\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SessionStart<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"startup\"<\/code>, <code>\"resume\"<\/code>, <code>\"clear\"<\/code>, <code>\"compact\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Notification<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0438\u043f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"permission_prompt\"<\/code>, <code>\"idle_prompt\"<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>SubagentStart<\/code>, <code>SubagentStop<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0438\u043f \u0430\u0433\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\"Explore\"<\/code>, <code>\"Plan\"<\/code>, \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UserPromptSubmit<\/code>, <code>Stop<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">matcher \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 (\u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, <code>_<\/code>, <code>|<\/code>) \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a; \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u2014 \u043a\u0430\u043a regex. \u0411\u0435\u0437 matcher \u0445\u0443\u043a \u043d\u0430 <code>PreToolUse<\/code> \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call (Read, Glob, Grep, Bash, \u2026) \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p><strong>\u0413\u0434\u0435 \u043b\u0435\u0436\u0430\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0438:<\/strong><\/p>\n<pre><code>Claude Code:  Project: .claude\/settings.json (\u0435\u0434\u0435\u0442 \u0432 git)          .claude\/settings.local.json (\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u044b, \u043d\u0435 \u0432 git)  Global:  ~\/.claude\/settings.json  Plugin:  ${CLAUDE_PLUGIN_ROOT}\/.claude-plugin\/plugin.json<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<blockquote>\n<p><strong>Copilot CLI:<\/strong> \u043a\u043e\u043d\u0444\u0438\u0433 \u0436\u0438\u0432\u0451\u0442 \u0432 <code>.github\/hooks\/<\/code> (project) \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 JSON-\u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>.github\/hooks\/copilot-cli-policy.json<\/code>) \u0441 \u043f\u043e\u043b\u0435\u043c <code>version: 1<\/code> \u0438 \u0431\u043b\u043e\u043a\u043e\u043c <code>hooks<\/code> \u043f\u043e\u0434 camelCase-\u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041f\u043e\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u2014 <code>bash<\/code> (\u0438\u043b\u0438 <code>powershell<\/code>), \u043f\u043b\u044e\u0441 <code>cwd<\/code>, <code>timeoutSec<\/code>. \u042d\u0442\u043e <strong>\u0434\u0440\u0443\u0433\u0430\u044f<\/strong> \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b \u0441 Claude Code.<\/p>\n<\/blockquote>\n<h3>5. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 command-\u0445\u0443\u043a \u2014 \u044d\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 <strong>stdin<\/strong> \u043a\u0430\u043a JSON \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c JSON \u0432 <strong>stdout<\/strong> (\u0438\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 exit code).<\/p>\n<p><strong>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 (Claude Code, \u043e\u0431\u0449\u0438\u0435 \u043f\u043e\u043b\u044f):<\/strong><\/p>\n<pre><code class=\"json\">{  \"session_id\": \"abc123\",  \"transcript_path\": \"\/path\/to\/chat\/transcript.jsonl\",  \"cwd\": \"\/Users\/me\/projects\/my-app\",  \"permission_mode\": \"default\",  \"hook_event_name\": \"UserPromptSubmit\",  \"prompt\": \"\u0421\u0434\u0435\u043b\u0430\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f auth\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u044f, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443:<\/p>\n<ul>\n<li>\n<p><code>UserPromptSubmit<\/code> \u2192 <code>prompt<\/code><\/p>\n<\/li>\n<li>\n<p><code>PreToolUse<\/code> \u2192 <code>tool_name<\/code>, <code>tool_input<\/code>, <code>tool_use_id<\/code><\/p>\n<\/li>\n<li>\n<p><code>PostToolUse<\/code> \u2192 <code>tool_name<\/code>, <code>tool_input<\/code>, <code>tool_response<\/code>, <code>tool_use_id<\/code><\/p>\n<\/li>\n<li>\n<p><code>SessionStart<\/code> \u2192 <code>source<\/code>, <code>model<\/code><\/p>\n<\/li>\n<\/ul>\n<p><code>transcript_path<\/code> \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441: \u0432 \u043d\u0451\u043c \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0447\u0430\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u043c JSONL, \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 tool calls, \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 reasoning.<\/p>\n<p><strong>\u0412\u044b\u0445\u043e\u0434.<\/strong> \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0445 \u043f\u0443\u0442\u0438:<\/p>\n<p><strong>\u041f\u0443\u0442\u044c A \u2014 exit code:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Exit code<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>0<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0441\u043f\u0435\u0445. Stdout \u043a\u0430\u043a JSON \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f; \u0434\u043b\u044f <code>UserPromptSubmit<\/code>\/<code>SessionStart<\/code> \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>2<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/strong> Stderr \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0433\u0435\u043d\u0442\u0443 (\u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u2014 \u0434\u043b\u044f \u043d\u0435-\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439). \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0434\u0440\u0443\u0433\u043e\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435-\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. Stderr \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0445\u0443\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u26a0\ufe0f <strong>\u0412\u0430\u0436\u043d\u043e:<\/strong> \u0432 Claude Code exit code 1 \u2014 <strong>\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442<\/strong> (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Unix-\u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0438). \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c tool call, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 exit code 2.<\/p>\n<p><strong>\u041f\u0443\u0442\u044c B \u2014 JSON \u0432 stdout:<\/strong><\/p>\n<pre><code class=\"json\">{  \"hookSpecificOutput\": {    \"hookEventName\": \"PreToolUse\",    \"permissionDecision\": \"deny\",    \"permissionDecisionReason\": \"ESLint errors must be fixed first\",    \"additionalContext\": \"...\"  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><code>additionalContext<\/code> \u2014 <code>SessionStart<\/code>, <code>UserPromptSubmit<\/code>, <code>PostToolUse<\/code> (\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442).<\/p>\n<\/li>\n<li>\n<p><code>permissionDecision: \"allow\"|\"deny\"|\"ask\"|\"defer\"<\/code> + <code>permissionDecisionReason<\/code> \u2014 <code>PreToolUse<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>updatedInput<\/code> \u2014 <code>PreToolUse<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b tool call.<\/p>\n<\/li>\n<li>\n<p><code>decision: \"block\"<\/code> + <code>reason<\/code> \u2014 <code>Stop<\/code>, <code>SubagentStop<\/code>, <code>PostToolUse<\/code> (\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435).<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 bash \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 JSON \u2014 <code>jq<\/code>. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u0443\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 prompt \u0438 \u043f\u0438\u0448\u0435\u0442 \u0432 \u043b\u043e\u0433:<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env bashset -euo pipefailINPUT=$(cat)PROMPT=$(echo \"$INPUT\" | jq -r '.prompt')echo \"[$(date -Iseconds)] $PROMPT\" &gt;&gt; \"$CLAUDE_PROJECT_DIR\/.claude\/session.log\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 <strong>stdin<\/strong>, \u043d\u0435 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <code>cat<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>jq -r<\/code> \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u043c\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><code>set -euo pipefail<\/code> \u043b\u043e\u0432\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c output \u043b\u0443\u0447\u0448\u0435 \u0442\u043e\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 <code>jq<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c:<\/p>\n<pre><code class=\"bash\">jq -n --arg ctx \"$VALUE\" \\  '{hookSpecificOutput: {hookEventName: \"SessionStart\", additionalContext: $ctx}}'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u043b\u0430\u0433 <code>--arg<\/code> \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 <code>$VALUE<\/code> \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u044e\u0442 JSON.<\/p>\n<blockquote>\n<p><strong>Copilot CLI:<\/strong> payload \u2014 <code>{timestamp, cwd, ...}<\/code> (timestamp \u0447\u0438\u0441\u043b\u043e\u043c, \u043d\u0435 ISO), \u0434\u043b\u044f <code>preToolUse<\/code> \u2014 <code>toolName<\/code> \u0438 <code>toolArgs<\/code> (JSON-\u0441\u0442\u0440\u043e\u043a\u0430, \u0430 \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442). \u0412\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u2014 \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435: <code>{\"permissionDecision\": \"deny\", \"permissionDecisionReason\": \"...\"}<\/code>, \u0431\u0435\u0437 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 <code>hookSpecificOutput<\/code>.<\/p>\n<\/blockquote>\n<h3>6. \u041e\u0442 inline-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0443 (\u0438 \u043a http\/prompt\/agent)<\/h3>\n<p>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 <code>\"command\": \"echo hello\"<\/code> \u043f\u0440\u044f\u043c\u043e \u0432 JSON \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Hello World. \u0414\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u043e\u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0435\u0435 \u043b\u0443\u0447\u0448\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (Claude Code):<\/p>\n<pre><code>.claude\/  settings.json  hooks\/    common\/             \u2190 \u043e\u0431\u0449\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b (jq helpers, parse_input)    session-start\/    pre-tool-use\/    post-tool-use\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433:<\/p>\n<pre><code class=\"json\">{  \"hooks\": {    \"UserPromptSubmit\": [      {        \"hooks\": [          {            \"type\": \"command\",            \"command\": \"\\\"$CLAUDE_PROJECT_DIR\\\"\/.claude\/hooks\/log-prompt.sh\",            \"timeout\": 10          }        ]      }    ]  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>$CLAUDE_PROJECT_DIR<\/code> \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d Claude Code.<\/p>\n<p>\u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <strong>\u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>permission denied<\/code> \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435:<\/p>\n<pre><code class=\"bash\">chmod +x .claude\/hooks\/**\/*.sh<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0413\u0434\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0445\u0443\u043a\u043e\u0432.<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Claude Code CLI:<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0441 <code>claude --debug<\/code>, \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 stderr \u0445\u0443\u043a\u043e\u0432 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 debug-\u043b\u043e\u0433. \u0414\u043b\u044f \u043d\u0435-\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0434\u043b\u044f \u0445\u0443\u043a\u043e\u0432, \u0443\u043f\u0430\u0432\u0448\u0438\u0445 \u0441 \u043d\u0435-2 exit code, \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 stderr \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043a\u0430\u043a <code>hook error<\/code> \u2014 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u0435\u0437 <code>--debug<\/code>. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 <code>settings.json<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 file watcher\u2019\u043e\u043c; \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>\/hooks<\/code> \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 read-only \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0445\u0443\u043a\u043e\u0432 (\u0443\u0434\u043e\u0431\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u043d\u0444\u0438\u0433 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b\u0441\u044f). \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u2014 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0435\u0441\u0441\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><strong>VS Code Agent Mode:<\/strong> Output panel \u2192 \u043a\u0430\u043d\u0430\u043b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 Claude Code \/ Copilot. \u0422\u0443\u0434\u0430 \u043f\u0430\u0434\u0430\u044e\u0442 stdout\/stderr \u0445\u0443\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>Copilot CLI:<\/strong> \u0432 UI \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f; \u043f\u0438\u0448\u0438\u0442\u0435 \u043b\u043e\u0433 \u0432 \u0444\u0430\u0439\u043b \u0441\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0422\u0438\u043f\u044b \u0445\u0443\u043a\u043e\u0432 (Claude Code)<\/h4>\n<p><code>type: \"command\"<\/code> \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439, \u043d\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412 Claude Code \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0442\u0440\u0438 \u0442\u0438\u043f\u0430.<\/p>\n<p><code><strong>type: \"http\"<\/strong><\/code> \u2014 POST-\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442. \u041f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0445\u0443\u043a\u0430 \u0443\u0436\u0435 \u0436\u0438\u0432\u0451\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 policy-\u0441\u0435\u0440\u0432\u0435\u0440, security-gateway):<\/p>\n<pre><code class=\"json\">{  \"type\": \"http\",  \"url\": \"http:\/\/localhost:8080\/hooks\/pre-tool-use\",  \"timeout\": 30,  \"headers\": { \"Authorization\": \"Bearer $MY_TOKEN\" },  \"allowedEnvVars\": [\"MY_TOKEN\"]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>allowedEnvVars<\/code> \u2014 \u0431\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0432 <code>headers<\/code>. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f <code>$MY_TOKEN<\/code> \u043d\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0443\u0442\u0435\u0447\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 env.<\/p>\n<p><code><strong>type: \"prompt\"<\/strong><\/code> \u2014 \u043e\u0442\u0434\u0430\u0451\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u043c\u0443 LLM-\u0432\u044b\u0437\u043e\u0432\u0443 (\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c):<\/p>\n<pre><code class=\"json\">{  \"type\": \"prompt\",  \"prompt\": \"\u042d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430? $ARGUMENTS\",  \"timeout\": 30}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>$ARGUMENTS<\/code> \u2014 placeholder, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f payload \u0445\u0443\u043a\u0430. \u0423\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0447\u0451\u0442\u043a\u0438\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a (\u00ab\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 production-\u043a\u043e\u0434?\u00bb), \u0433\u0434\u0435 regex \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p><code><strong>type: \"agent\"<\/strong><\/code> \u2014 \u0442\u043e \u0436\u0435, \u043d\u043e \u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c sub-agent (\u0435\u0441\u0442\u044c Read\/Grep\/Glob), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c. \u0421\u0430\u043c\u044b\u0439 \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0438 \u0441\u0430\u043c\u044b\u0439 \u0443\u043c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0434\u043b\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0433\u0434\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0435 \u0445\u0443\u043a\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439; <code>http<\/code>\/<code>prompt<\/code>\/<code>agent<\/code> \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u043b\u0438 \u0435\u0439 \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430.<\/p>\n<h3>7. \u041f\u0440\u0438\u043c\u0435\u0440 \u21161: \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 SessionStart<\/h3>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u2014 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u043e\u0442 tool calls \u0437\u0430 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>\u0411\u0435\u0437 \u0445\u0443\u043a\u0430 \u0432\u044b \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0435 \u00ab\u043a\u0430\u043a\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Node \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f?\u00bb \u2014 \u0430\u0433\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 bash tool call (<code>node --version<\/code>), \u0434\u043e\u0436\u0434\u0451\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442 \u0442\u043e\u043a\u0435\u043d\u044b \u0438 \u0432\u0440\u0435\u043c\u044f. \u0421 \u0445\u0443\u043a\u043e\u043c \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 <code>get-env.sh<\/code>:<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env bashset -euo pipefailNODE_VERSION=$(node --version 2&gt;\/dev\/null || echo \"not installed\")GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2&gt;\/dev\/null || echo \"not a repo\")CONTEXT=\"Node.js: ${NODE_VERSION}Git branch: ${GIT_BRANCH}OS: $(uname -s)\"jq -n --arg ctx \"$CONTEXT\" \\  '{hookSpecificOutput: {hookEventName: \"SessionStart\", additionalContext: $ctx}}'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0431\u0435\u0437 resume \u2014 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043e matcher\u2019\u043e\u043c):<\/p>\n<pre><code class=\"json\">{  \"hooks\": {    \"SessionStart\": [      {        \"matcher\": \"startup\",        \"hooks\": [          {            \"type\": \"command\",            \"command\": \"\\\"$CLAUDE_PROJECT_DIR\\\"\/.claude\/hooks\/get-env.sh\"          }        ]      }    ]  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ol>\n<li>\n<p><code>hookEventName<\/code> \u0432 output \u2014 \u0438\u043c\u0435\u043d\u043d\u043e <code>SessionStart<\/code>, \u0430 \u043d\u0435 \u0438\u043c\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><code>permissionDecision<\/code> \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 <code>SessionStart<\/code> \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0447\u0435\u0440\u0435\u0437 <code>jq --arg<\/code>, \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u043e\u043a. \u0418\u043d\u0430\u0447\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 \u043a\u0430\u0432\u044b\u0447\u043a\u0430 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 <code>git rev-parse<\/code> \u0441\u043b\u043e\u043c\u0430\u0435\u0442 JSON.<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0421 \u0445\u0443\u043a\u043e\u043c vs \u0431\u0435\u0437.<\/strong> \u0411\u0435\u0437: \u0430\u0433\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442 tool call, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 bash, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d round-trip \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u0421 \u0445\u0443\u043a\u043e\u043c: \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u0443\u0436\u0435 \u0432\u043b\u0438\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430 \u0441\u0435\u0441\u0441\u0438\u0438 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043a\u0443\u043c\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u0430.<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0451 \u0441\u0442\u043e\u0438\u0442 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>SessionStart<\/code>:<\/p>\n<ul>\n<li>\n<p>Project rules (stack, \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, style guide).<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 sprint goal \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u0438\u043a\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 ADR \u0438 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a feature flags, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0434\u0435\u0448\u0451\u0432\u0430\u044f, \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u0430\u044f \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445 tool calls.<\/p>\n<p><strong>\u0411\u043e\u043d\u0443\u0441: \u044d\u043a\u0441\u043f\u043e\u0440\u0442 ENV \u0447\u0435\u0440\u0435\u0437 <\/strong><code><strong>CLAUDE_ENV_FILE<\/strong><\/code><strong>.<\/strong> \u0412 <code>SessionStart<\/code>-\u0445\u0443\u043a\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>CLAUDE_ENV_FILE<\/code> \u2014 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430, \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>export<\/code>-\u0441\u0442\u0440\u043e\u043a\u0438. \u0412\u0441\u0451, \u0447\u0442\u043e \u0442\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0451\u0442, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0445\u0432\u0430\u0447\u0435\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 Bash tool calls \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u0423\u0434\u043e\u0431\u043d\u043e \u00ab\u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c\u00bb \u0430\u0433\u0435\u043d\u0442\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 (\u043f\u0443\u0442\u044c \u043a <code>node_modules\/.bin<\/code>, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 Node \u0447\u0435\u0440\u0435\u0437 <code>nvm<\/code>, credentials-\u043f\u0440\u043e\u0444\u0438\u043b\u044c), \u043d\u0435 \u0437\u0430\u0448\u0438\u0432\u0430\u044f \u0438\u0445 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u044b:<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env bashset -euo pipefailif [ -n \"${CLAUDE_ENV_FILE:-}\" ]; then  echo 'export PATH=\"$PATH:.\/node_modules\/.bin\"' &gt;&gt; \"$CLAUDE_ENV_FILE\"  echo 'export AWS_PROFILE=dev' &gt;&gt; \"$CLAUDE_ENV_FILE\"fi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0430\u0436\u043d\u043e: <code>&gt;&gt;<\/code>, \u0430 \u043d\u0435 <code>&gt;<\/code> \u2014 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 <code>SessionStart<\/code>-\u0445\u0443\u043a\u0438.<\/p>\n<h3>8. \u041f\u0440\u0438\u043c\u0435\u0440 \u21162: \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 gates \u0447\u0435\u0440\u0435\u0437 PreToolUse<\/h3>\n<p>\u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e\u0434\u043d\u043e \u2014 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u044e\u0434\u0430.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/strong> \u0410\u0433\u0435\u043d\u0442 \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434. \u041b\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u0427\u0435\u043b\u043e\u0432\u0435\u043a \u043d\u0435 \u0434\u0432\u0438\u043d\u0435\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0431\u0435\u0440\u0451\u0442 red squiggly \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430. \u0410\u0433\u0435\u043d\u0442 \u043f\u043e\u0442\u043e\u043f\u0430\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435: \u0442\u0443\u043f\u043e \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u043c\u0435\u0442\u0438\u0442 \u043a\u0430\u043a \u00ab\u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u00bb, \u0434\u043e\u043f\u0438\u0448\u0435\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u0444\u0430\u0439\u043b, \u043e\u0442\u0440\u0430\u043f\u043e\u0440\u0442\u0443\u0435\u0442 \u043e\u0431 \u0443\u0441\u043f\u0435\u0445\u0435. \u0412\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0447\u0430\u0441\u0430, \u043a\u043e\u0433\u0434\u0430 CI \u0443\u043f\u0430\u0434\u0451\u0442.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435.<\/strong> <code>PreToolUse<\/code> \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c <code>tool call<\/code> \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u0430 \u0432 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 gate: \u0435\u0441\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0435 \u043b\u0438\u043d\u0442\u0438\u0442\u0441\u044f \u2014 tool call \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f, \u0430\u0433\u0435\u043d\u0442 \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043d\u043e\u0432\u0430.<\/p>\n<p><strong>\u0421\u0445\u0435\u043c\u0430:<\/strong><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b0\/b1\/2a\/b0b12a867aab56d2dd3a450d8231cec4.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/b0\/b1\/2a\/b0b12a867aab56d2dd3a450d8231cec4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/b0\/b1\/2a\/b0b12a867aab56d2dd3a450d8231cec4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0426\u0438\u043a\u043b \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0430\u0433\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 lint.<\/p>\n<p><strong>\u041a\u043e\u043d\u0444\u0438\u0433 \u0441 matcher<\/strong> \u2014 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 settings, \u0441\u043a\u0440\u0438\u043f\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043b\u0438\u043d\u0442:<\/p>\n<pre><code class=\"json\">{  \"hooks\": {    \"PreToolUse\": [      {        \"matcher\": \"Write|Edit\",        \"hooks\": [          {            \"type\": \"command\",            \"command\": \"\\\"$CLAUDE_PROJECT_DIR\\\"\/.claude\/hooks\/pre-tool-lint.sh\",            \"timeout\": 30          }        ]      }    ]  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>matcher: \"Write|Edit\"<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0445\u0443\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u2014 \u043d\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>Bash<\/code>, <code>Read<\/code> \u0438\u043b\u0438 <code>Glob<\/code>. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 <code>tool call<\/code> \u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443.<\/p>\n<p><strong>\u0421\u043a\u0440\u0438\u043f\u0442 <\/strong><code><strong>pre-tool-lint.sh<\/strong><\/code> (Claude Code, \u0447\u0435\u0440\u0435\u0437 JSON-\u0432\u044b\u0432\u043e\u0434):<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env bashset -euo pipefailINPUT=$(cat)FILE_PATH=$(echo \"$INPUT\" | jq -r '.tool_input.file_path \/\/ empty')CONTENT=$(echo \"$INPUT\" | jq -r '.tool_input.content \/\/ .tool_input.new_string \/\/ empty')# \u041b\u0438\u043d\u0442\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e JS\/TS \u2014 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043ccase \"$FILE_PATH\" in  *.js|*.jsx|*.ts|*.tsx) ;;  *)    jq -n '{hookSpecificOutput: {hookEventName: \"PreToolUse\", permissionDecision: \"allow\"}}'    exit 0    ;;esac# ESLint \u0447\u0435\u0440\u0435\u0437 stdin \u2014 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0435\u0449\u0451 \u043d\u0435\u0442.# printf (\u0430 \u043d\u0435 echo) \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \\n\/\\t \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430.# Exit code ESLint = \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0441\u0442\u0438\u043d\u044b (0 \u2014 \u0447\u0438\u0441\u0442\u043e, 1 \u2014 errors, 2 \u2014 \u043a\u043e\u043d\u0444\u0438\u0433 \u0441\u043b\u043e\u043c\u0430\u043d).LINT_OUTPUT=$(printf '%s' \"$CONTENT\" | npx --no-install eslint --stdin --stdin-filename \"$FILE_PATH\" --format compact 2&gt;&amp;1) &amp;&amp; LINT_STATUS=0 || LINT_STATUS=$?if [ \"$LINT_STATUS\" -ne 0 ]; then  REASON=\"ESLint errors must be fixed before writing ${FILE_PATH}:${LINT_OUTPUT}\"  jq -n --arg reason \"$REASON\" \\    '{hookSpecificOutput: {hookEventName: \"PreToolUse\", permissionDecision: \"deny\", permissionDecisionReason: $reason}}'  exit 0fijq -n '{hookSpecificOutput: {hookEventName: \"PreToolUse\", permissionDecision: \"allow\"}}'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p><code>tool_input.file_path<\/code> \u0438 <code>tool_input.content<\/code> \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f payload Claude Code. \u0414\u043b\u044f <code>Edit<\/code> \u00ab\u043d\u043e\u0432\u0430\u044f\u00bb \u0447\u0430\u0441\u0442\u044c \u043b\u0435\u0436\u0438\u0442 \u0432 <code>new_string<\/code> (\u043d\u0435 <code>content<\/code>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u0430. \u0412\u0430\u0436\u043d\u043e: \u0434\u043b\u044f <code>Edit<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 (replacement text), \u043e\u043d \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u2014 ESLint \u043d\u0430 \u043d\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 gate \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0432\u0435\u0448\u0430\u0442\u044c \u043d\u0430 <code>Write<\/code> (\u0446\u0435\u043b\u044b\u0439 \u0444\u0430\u0439\u043b), \u0430 \u0434\u043b\u044f <code>Edit<\/code> \u2014 \u0434\u0435\u043b\u0430\u0442\u044c <code>PostToolUse<\/code> \u0441 \u043b\u0438\u043d\u0442\u043e\u043c \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435.<\/p>\n<\/li>\n<li>\n<p>ESLint \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>--stdin<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0435\u0449\u0451 \u043d\u0435\u0442: tool call \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d, \u043c\u044b \u043b\u0438\u043d\u0442\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0430\u0433\u0435\u043d\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c. <code>printf '%s'<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>echo<\/code> \u2014 \u0447\u0442\u043e\u0431\u044b <code>\\n<\/code>\/<code>\\t<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b shell.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u0441\u0442\u0438\u043d\u044b \u2014 exit code ESLint: <code>0<\/code> \u2014 \u0447\u0438\u0441\u0442\u043e, <code>1<\/code> \u2014 errors, <code>2<\/code> \u2014 \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f. \u041f\u0430\u0440\u0441\u0438\u0442\u044c <code>--format compact<\/code> \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439 (\u00ab\u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043b\u043e\u0432\u043e Error\u00bb) \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e: \u0441\u043b\u043e\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0438 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u043f\u0440\u043e warnings.<\/p>\n<\/li>\n<li>\n<p><code>permissionDecision: \"deny\"<\/code> + <code>permissionDecisionReason<\/code> \u2014 \u044d\u0442\u043e \u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u043e\u0442\u0432\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e Claude Code \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442. \u0422\u0435\u043a\u0441\u0442 <code>permissionDecisionReason<\/code> \u043f\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u044f\u043c\u043e \u0432 reasoning \u0430\u0433\u0435\u043d\u0442\u0430, \u0438 \u043e\u043d \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>Exit code 0 \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON. \u0425\u0443\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u00abdeny\u00bb \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0435\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 exit 2<\/strong> \u2014 \u043a\u043e\u0440\u043e\u0447\u0435, \u0431\u0435\u0437 JSON:<\/p>\n<pre><code class=\"bash\">LINT_OUTPUT=$(printf '%s' \"$CONTENT\" | npx --no-install eslint --stdin --stdin-filename \"$FILE_PATH\" --format compact 2&gt;&amp;1) &amp;&amp; LINT_STATUS=0 || LINT_STATUS=$?if [ \"$LINT_STATUS\" -ne 0 ]; then  printf 'ESLint errors must be fixed before writing %s:\\n%s\\n' \"$FILE_PATH\" \"$LINT_OUTPUT\" &gt;&amp;2  exit 2fi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Exit code 2 + stderr \u2192 \u0430\u0433\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0442\u043e \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0443. \u0423\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b <code>updatedInput<\/code> \u0438\u043b\u0438 <code>additionalContext<\/code> \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><strong>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/strong> \u0430\u0433\u0435\u043d\u0442 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>firebase-admin.ts<\/code>, \u0445\u0443\u043a \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c lint-\u043e\u0448\u0438\u0431\u043e\u043a, \u0430\u0433\u0435\u043d\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0438\u0434\u0451\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043f\u0440\u0430\u0432\u0438\u0442, \u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0441\u043d\u043e\u0432\u0430, \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435, \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u0442 \u2014 \u0438 \u0442\u0430\u043a \u0434\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043b\u043e\u0433\u0435 \u0432\u0438\u0434\u043d\u043e 4\u20136 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0438\u043d\u0442\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u043d\u0430 CI.<\/p>\n<p><strong>\u0422\u0435\u0437\u0438\u0441.<\/strong> <code>PreToolUse<\/code> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 AI \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a: \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u043c \u043e\u0442 red squiggly. \u041d\u0435\u043b\u044c\u0437\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0444\u0430\u0439\u043b\u0443, \u043f\u043e\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0435 \u0447\u0438\u0441\u0442. \u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0430\u0433\u0435\u043d\u0442\u0430 \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u00ab\u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f\u00bb \u0432 \u0440\u0435\u0436\u0438\u043c \u00ab\u043e\u0431\u044f\u0437\u0430\u043d\u00bb.<\/p>\n<p><strong>\u0411\u043e\u043d\u0443\u0441: <\/strong><code><strong>updatedInput<\/strong><\/code><strong> \u2014 \u0442\u0438\u0445\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/strong> \u041a\u0440\u043e\u043c\u0435 <code>allow<\/code>\/<code>deny<\/code>\/<code>ask<\/code> <code>PreToolUse<\/code> \u0443\u043c\u0435\u0435\u0442 \u0435\u0449\u0451 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <code>tool_input<\/code> \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u2014 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0435 <code>updatedInput<\/code> \u0432 <code>hookSpecificOutput<\/code>. \u041f\u0440\u0438\u043c\u0435\u0440: \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>--dry-run<\/code> \u043a \u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 <code>prettier<\/code> \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0436\u0435 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435:<\/p>\n<pre><code class=\"bash\">FORMATTED=$(printf '%s' \"$CONTENT\" | npx --no-install prettier --stdin-filepath \"$FILE_PATH\")jq -n --arg file \"$FILE_PATH\" --arg content \"$FORMATTED\" '{  hookSpecificOutput: {    hookEventName: \"PreToolUse\",    permissionDecision: \"allow\",    updatedInput: { file_path: $file, content: $content }  }}'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>updatedInput<\/code> \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0421 <code>allow<\/code> \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a auto-approve, \u0441 <code>ask<\/code> \u2014 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0443\u0436\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p><strong>\u0426\u0435\u043f\u043e\u0447\u043a\u0438 gates.<\/strong> \u041d\u0430 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 <code>matcher<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e handlers \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0438 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>deny<\/code>. \u041f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f typescript-\u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>ESLint \u2014 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 style.<\/p>\n<\/li>\n<li>\n<p><code>tsc --noEmit<\/code> \u2014 \u0442\u0438\u043f\u044b.<\/p>\n<\/li>\n<li>\n<p>Secrets scan (regex \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b).<\/p>\n<\/li>\n<li>\n<p>Targeted unit tests \u0434\u043b\u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f (\u0447\u0435\u0440\u0435\u0437 <code>tsc<\/code>\/<code>jest --findRelatedTests<\/code>).<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 handler \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <code>hooks<\/code> \u043f\u043e\u0434 \u043e\u0434\u043d\u0438\u043c matcher\u2019\u043e\u043c. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e precedence <code>deny &gt; defer &gt; ask &gt; allow<\/code> \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b <strong>\u043b\u044e\u0431\u043e\u0439<\/strong> gate \u0432\u0435\u0440\u043d\u0443\u043b <code>deny<\/code>, \u0438 tool call \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 gates \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u043f\u043e wall-time: \u043e\u0431\u0449\u0438\u0439 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u0435\u043d \u0441\u0430\u043c\u043e\u043c\u0443 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0438\u0437 \u043d\u0438\u0445, \u0430 \u043d\u0435 \u0441\u0443\u043c\u043c\u0435.<\/p>\n<blockquote>\n<p><strong>Copilot CLI:<\/strong> \u0438\u0434\u0435\u044f \u0442\u0430 \u0436\u0435, \u043d\u043e JSON-\u0432\u044b\u0432\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043f\u043e\u043b\u044f <code>permissionDecision<\/code>\/<code>permissionDecisionReason<\/code> \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u0431\u0435\u0437 <code>hookSpecificOutput<\/code>. \u0418 \u043f\u043e\u043b\u044f payload \u2014 <code>toolName<\/code> \/ <code>toolArgs<\/code> (\u0433\u0434\u0435 <code>toolArgs<\/code> \u2014 JSON-\u0441\u0442\u0440\u043e\u043a\u0430, \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0440\u0430\u0437 <code>jq fromjson<\/code>). \u0415\u0449\u0451 \u043d\u044e\u0430\u043d\u0441: \u0438\u0437 \u0442\u0440\u0451\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>permissionDecision<\/code> (<code>\"allow\"<\/code>, <code>\"deny\"<\/code>, <code>\"ask\"<\/code>) \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>\"deny\"<\/code> \u2014 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u0443\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c, \u043d\u043e \u043d\u0435 \u0430\u0432\u0442\u043e-\u043e\u0434\u043e\u0431\u0440\u0438\u0442\u044c.<\/p>\n<\/blockquote>\n<h3>9. \u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b<\/h3>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u0432\u0443\u0445.<\/p>\n<p><strong>Policy enforcement (<\/strong><code><strong>PreToolUse<\/strong><\/code><strong> + matcher \u043d\u0430 <\/strong><code><strong>Bash<\/strong><\/code><strong>).<\/strong> \u0417\u0430\u043f\u0440\u0435\u0442 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 (<code>rm -rf<\/code>, <code>curl \u2026 | sh<\/code>, <code>chmod 777<\/code>). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c: \u0434\u043e\u0441\u0442\u0430\u0451\u043c <code>tool_input.command<\/code>, \u0441\u0432\u0435\u0440\u044f\u0435\u043c \u0441 blacklist, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>deny<\/code>. \u041f\u043e\u043b\u0435 <code>if<\/code> \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 Claude Code \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430: <code>\"if\": \"Bash(rm *)\"<\/code>.<\/p>\n<p><strong>Secrets guard (<\/strong><code><strong>PreToolUse<\/strong><\/code><strong> \u043d\u0430 <\/strong><code><strong>Write|Edit<\/strong><\/code><strong>).<\/strong> Regex \u043f\u043e <code>tool_input.content<\/code> (<code>AKIA[0-9A-Z]{16}<\/code>, <code>sk-[A-Za-z0-9]{32,}<\/code>, <code>-----BEGIN PRIVATE KEY-----<\/code> \u0438 \u0442. \u043f.). \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0430\u0433\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443: \u00ab\u0442\u043e\u043a\u0435\u043d \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d, \u0432\u044b\u043d\u0435\u0441\u0438 \u0432 env\u00bb.<\/p>\n<p><strong>\u0410\u0443\u0434\u0438\u0442 \u0438 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f (<\/strong><code><strong>PostToolUse<\/strong><\/code><strong>).<\/strong> \u041f\u0438\u0448\u0435\u043c \u0432 JSONL \u043b\u043e\u0433: <code>{tool_name, duration_ms, success, files_touched}<\/code>. \u041f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443 \u2014 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 tool calls \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u044e\u0442\u0441\u044f, \u0433\u0434\u0435 \u0430\u0433\u0435\u043d\u0442 \u0431\u0443\u043a\u0441\u0443\u0435\u0442.<\/p>\n<p><strong>\u0410\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<\/strong><code><strong>PostToolUse<\/strong><\/code><strong>).<\/strong> \u041f\u043e\u0441\u043b\u0435 <code>Write<\/code>\/<code>Edit<\/code> \u0444\u0430\u0439\u043b\u0430 <code>src\/auth\/login.ts<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <code>jest --findRelatedTests src\/auth\/login.ts<\/code>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0435\u0440\u0435\u0437 <code>additionalContext<\/code> \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 reasoning \u0430\u0433\u0435\u043d\u0442\u0430.<\/p>\n<p><strong>\u00ab\u041d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0441\u044f, \u043f\u043e\u043a\u0430 \u0442\u0435\u0441\u0442\u044b \u043a\u0440\u0430\u0441\u043d\u044b\u0435\u00bb (<\/strong><code><strong>Stop<\/strong><\/code><strong>).<\/strong> \u0425\u0443\u043a \u043d\u0430 <code>Stop<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>npm test<\/code>; \u0435\u0441\u043b\u0438 \u0443\u043f\u0430\u043b\u043e \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>{\"decision\": \"block\", \"reason\": \"Tests are failing: ...\"}<\/code> \u0438\u043b\u0438, \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0441 <code>exit 2<\/code> \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 stderr. \u0410\u0433\u0435\u043d\u0442 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0445\u043e\u0434, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442. \u0422\u043e \u0436\u0435 \u0434\u043b\u044f <code>SubagentStop<\/code> \u2014 \u0433\u0430\u0440\u0430\u043d\u0442, \u0447\u0442\u043e delegated \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<p><strong>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 (<\/strong><code><strong>PreCompact<\/strong><\/code><strong>).<\/strong> \u041f\u0435\u0440\u0435\u0434 \u0441\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0430\u0436\u043d\u043e\u0435 (\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0430\u0441\u043a\u0430, \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f) \u0432 \u0444\u0430\u0439\u043b, \u0430 \u043f\u043e\u0441\u043b\u0435 \u2014 <code>SessionStart<\/code> (\u043d\u0430 <code>source: \"compact\"<\/code>) \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041f\u0440\u0435\u0435\u043c\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 (<\/strong><code><strong>SessionEnd<\/strong><\/code><strong>).<\/strong> \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0448\u043b\u0451\u043c \u0432 Slack \u0441\u0432\u043e\u0434\u043a\u0443: \u00ab\u0441\u0434\u0435\u043b\u0430\u043d\u043e X tool calls, Y denied, Z \u043e\u0448\u0438\u0431\u043e\u043a\u00bb. \u0418\u043b\u0438 \u043f\u0438\u0448\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 Linear\/Jira \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u0433\u0435\u043d\u0442 \u0437\u0430\u043a\u0440\u044b\u043b \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p><strong>Sub-agent control (<\/strong><code><strong>SubagentStart<\/strong><\/code><strong>).<\/strong> \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0434\u0430\u0433\u0435\u043d\u0442\u043e\u0432; matcher \u043f\u043e \u0442\u0438\u043f\u0443 \u0434\u0430\u0451\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e (<code>\"matcher\": \"Plan|Explore\"<\/code>).<\/p>\n<p>\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432: \u043f\u0430\u0440\u0441\u0438\u043c <code>payload<\/code> \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>JSON<\/code> \u0438\u043b\u0438 <code>exit 2<\/code>.<\/p>\n<h3>10. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 edge cases<\/h3>\n<p>\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p><strong>\u0427\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/strong> <code>SessionStart<\/code>, <code>SessionEnd<\/code>, <code>Notification<\/code>, <code>SubagentStart<\/code>, <code>PostToolUseFailure<\/code> \u2014 <code>exit 2<\/code> \u043d\u0435 \u0434\u0430\u0451\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, stderr \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u041f\u043e\u043b\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u2014 \u0432 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0435 <code>hooks<\/code>.<\/p>\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/strong> <code>PreToolUse<\/code> \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>tool call<\/code> (\u043f\u043e\u0441\u043b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <code>matcher<\/code>). \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a <code>ESLint<\/code>\/<code>tsc<\/code> \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434\u0443-\u0434\u0432\u0435, \u0438 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 gates \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 write \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439. \u0420\u0435\u0448\u0435\u043d\u0438\u044f: \u043a\u044d\u0448 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (<code>matcher<\/code> + \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0443\u0442\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438), \u0432\u044b\u043d\u043e\u0441 \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432 <code>PostToolUse<\/code> \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.<\/p>\n<p><strong>Async \u0438 timeout.<\/strong> \u041f\u043e\u043b\u0435 <code>timeout<\/code> (\u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0445\u0443\u043a\u0430. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c <code>async: true<\/code> (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0444\u043e\u043d\u0435, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f) \u0438 <code>asyncRewake: true<\/code> (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0444\u043e\u043d\u0435, \u043f\u0440\u043e\u0431\u0443\u0434\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430, \u0435\u0441\u043b\u0438 \u0445\u0443\u043a \u0432\u044b\u0448\u0435\u043b \u0441 <code>exit 2<\/code>). \u0423\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u044b \u0432 \u0444\u043e\u043d\u0435, \u0430\u0433\u0435\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442; \u0442\u0435\u0441\u0442\u044b \u0443\u043f\u0430\u043b\u0438 \u2014 \u0431\u0443\u0434\u0438\u043c \u0438 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c.<\/p>\n<p><strong>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/strong> \u041d\u0430 Windows \u0431\u0435\u0437 WSL \u043d\u0443\u0436\u0435\u043d <code>\"shell\": \"powershell\"<\/code> \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 <code>powershell<\/code>. \u041b\u0438\u0431\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0432\u0430 handler\u2019\u0430 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u043f\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043b\u0438\u0431\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0430 <code>Python\/Node<\/code>.<\/p>\n<p><strong>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f CLI \u0438 IDE.<\/strong> \u0412 Claude Code CLI \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 <code>settings.json<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 file watcher\u2019\u043e\u043c; <code>\/hooks<\/code> \u2014 \u044d\u0442\u043e read-only browser \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0415\u0441\u043b\u0438 \u0445\u0443\u043a \u044f\u0432\u043d\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0432\u0430\u043b\u0438\u0434\u0435\u043d, \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e. \u0412 IDE-\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p><strong>Race conditions \u043c\u0435\u0436\u0434\u0443 handlers.<\/strong> \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e handlers \u043d\u0430 \u043e\u0434\u043d\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 Claude Code \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0434\u0432\u0430 \u043f\u0438\u0448\u0443\u0442 \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u2014 race. \u041b\u0438\u0431\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0439\u0442\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c\u0438 (<code>&gt;&gt;<\/code> + <code>flock<\/code> \u043d\u0430 Linux).<\/p>\n<p><strong>\u0412\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/strong> \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0439\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0445\u0443\u043a\u043e\u0432 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 CLI\/IDE, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 CI-job\u2019\u043e\u0439.<\/p>\n<h3>11. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0445\u0443\u043a \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433 \u0445\u0443\u043a\u0430 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 (<code>.claude\/settings.json<\/code>, <code>.github\/hooks\/<\/code>), \u0442\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 prompt \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e, \u043a\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Claude Code \u0438\u043b\u0438 Copilot CLI. \u041f\u0440\u044f\u043c\u0430\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f \u2014 <code>.git\/hooks\/<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>Supply chain-\u0440\u0438\u0441\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0424\u043e\u0440\u043a \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0445\u0443\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 <code>~\/.ssh\/id_rsa<\/code>.<\/p>\n<\/li>\n<li>\n<p>PR \u0432 open-source \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u00ab\u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e\u0439\u00bb \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0432 <code>.claude\/hooks\/scripts\/<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0445\u0443\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 <code>~\/.claude\/settings.json<\/code>.<\/p>\n<\/li>\n<li>\n<p>HTTP-\u0445\u0443\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0438\u0445\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e <code>tool_input<\/code> \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0440:<\/p>\n<ol>\n<li>\n<p><strong>Code review \u0445\u0443\u043a\u043e\u0432 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/strong> \u041b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 <code>.claude\/<\/code>, <code>.github\/hooks\/<\/code> \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0432\u044c\u044e\u0435\u0440 \u0438\u0437 security.<\/p>\n<\/li>\n<li>\n<p><strong>CI-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430.<\/strong> Pipeline-\u0448\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u044d\u0442\u0438\u0445 \u043f\u0443\u0442\u044f\u0445 \u0431\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e label\u2019\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 project vs global.<\/strong> Project-\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u2014 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e hostile, global \u2014 \u0432\u0430\u0448\u0435 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u041d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0439\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434.<\/strong> \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 helper-\u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 allow-list; \u0432\u0441\u0435 \u0445\u0443\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0435\u0433\u043e, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 bash.<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0443\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u0440\u0435\u043f\u043e.<\/strong> \u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u044b\u043c <code>claude<\/code> \u0432 \u0447\u0443\u0436\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u044c\u0442\u0435 <code>\"disableAllHooks\": true<\/code> \u0432 \u0441\u0432\u043e\u0438\u0445 user- \u0438\u043b\u0438 local-settings, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 <code>.claude\/settings.json<\/code> \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435 \u0445\u0443\u043a\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: <code>disableAllHooks<\/code> \u0443\u0432\u0430\u0436\u0430\u0435\u0442 managed settings hierarchy \u2014 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 managed-\u0445\u0443\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 managed policy.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 HTTP-\u0445\u0443\u043a\u0438.<\/strong> \u0414\u043b\u044f <code>type: \"http\"<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 <code>allowedEnvVars<\/code> (\u0431\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 headers\/url). \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e <code>$VAR<\/code> \u0432 headers \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u2014 \u044d\u0442\u043e \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0443\u0442\u0435\u0447\u043a\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><code><strong>permission_mode<\/strong><\/code><strong> \u0432 payload.<\/strong> \u0425\u0443\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c (<code>default<\/code>, <code>bypassPermissions<\/code>, <code>acceptEdits<\/code>, \u2026). \u041c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <code>bypassPermissions<\/code> \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0442\u044c gates \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 managed settings.<\/strong> \u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 Claude Code \u0443\u043c\u0435\u0435\u0442 \u0444\u043b\u0430\u0433 <code>allowManagedHooksOnly<\/code> \u2014 \u043e\u043d \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 user\/project\/plugin-\u0445\u0443\u043a\u0438, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u0438 \u0438\u0437 managed policy. \u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0438\u0437 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0433\u043e <code>enabledPlugins<\/code> \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e IT \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0440\u0435\u0432\u044c\u044e \u00ab\u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435\u00bb \u0445\u0443\u043a\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u0442\u0430 \u0436\u0435 \u0433\u0438\u0433\u0438\u0435\u043d\u0430, \u0447\u0442\u043e \u0441 <code>.git\/hooks<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0432\u043a\u0438 \u0432\u044b\u0448\u0435: \u0445\u0443\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432\u0430\u0448 prompt \u0438 transcript.<\/p>\n<h3>12. Hooks vs \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b<\/h3>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0443\u0432\u0438\u0434\u0435\u0432\u0448\u0438\u0439 \u0445\u0443\u043a\u0438, \u043f\u0443\u0442\u0430\u0435\u0442 \u0438\u0445 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0432 <code>CLAUDE.md<\/code>\/<code>AGENTS.md<\/code> \u0438 \u0441 MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. \u042d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b.<\/p>\n<p><strong>Hooks vs <\/strong><code><strong>CLAUDE.md<\/strong><\/code><strong> \/ <\/strong><code><strong>AGENTS.md<\/strong><\/code><strong> \/ system prompt.<\/strong> \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00ab\u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0438\u043d\u0442\u0443\u0439 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e\u00bb. \u0410\u0433\u0435\u043d\u0442 \u0435\u0451 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c. \u041d\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442. \u0425\u0443\u043a \u2014 \u044d\u0442\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 gate: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 tool call, \u043f\u043e\u043a\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e. \u041f\u0440\u0430\u0432\u0438\u043b\u043e: \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u044d\u0442\u043e \u0445\u0443\u043a. \u0415\u0441\u043b\u0438 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u00ab\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0435\u043b\u0430\u0439 \u0442\u0430\u043a\u00bb \u2014 <code>CLAUDE.md<\/code>.<\/p>\n<p><strong>Hooks vs MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u044b.<\/strong> MCP \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 tools, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0430\u0433\u0435\u043d\u0442\u0443. \u00ab\u0414\u0430\u0439 \u0430\u0433\u0435\u043d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Jira\u00bb \u2014 MCP. Hooks \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0442 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u00ab\u041d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438 tool call \u0431\u0435\u0437 lint\u00bb \u2014 \u0445\u0443\u043a. \u041e\u043d\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b: MCP-tool \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432 <code>PreToolUse<\/code> gate (matcher <code>\"mcp__jira__.*\"<\/code>), \u0438 \u0441\u0430\u043c MCP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435.<\/p>\n<p><strong>Hooks vs \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 tools.<\/strong> Tool \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u043c \u043f\u043e \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u0425\u0443\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u0432\u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0430\u0433\u0435\u043d\u0442\u0430. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0430\u0433\u0435\u043d\u0442 \u0441\u0430\u043c \u043c\u043e\u0433 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c ESLint \u043a\u0430\u043a tool \u2014 \u044d\u0442\u043e tool. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b ESLint \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e, \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0430\u0433\u0435\u043d\u0442\u0430 \u2014 \u044d\u0442\u043e \u0445\u0443\u043a.<\/p>\n<p>\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0432\u044b\u0431\u043e\u0440\u0430:<\/p>\n<pre><code>\u041d\u0443\u0436\u043d\u043e \u00ab\u0430\u0433\u0435\u043d\u0442 \u043e\u0431\u044f\u0437\u0430\u043d\u00bb            \u2500\u25ba hooks (PreToolUse)\u041d\u0443\u0436\u043d\u043e \u00ab\u0430\u0433\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442\u00bb             \u2500\u25ba custom tool \/ MCP\u041d\u0443\u0436\u043d\u043e \u00ab\u0430\u0433\u0435\u043d\u0442 \u0437\u043d\u0430\u0435\u0442\u00bb             \u2500\u25ba system prompt \/ CLAUDE.md \/ SessionStart inject\u041d\u0443\u0436\u043d\u043e \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u2500\u25ba MCP<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>13. \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435.<\/p>\n<p><strong>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0445\u0443\u043a\u043e\u0432 (Claude Code):<\/strong><\/p>\n<ul>\n<li>\n<p><code>SessionStart<\/code> (matcher <code>\"startup\"<\/code>) \u2192 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f stack, \u0432\u0435\u0440\u0441\u0438\u0439, \u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0439, \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 feature flags.<\/p>\n<\/li>\n<li>\n<p><code>PreToolUse<\/code> (matcher <code>\"Write|Edit\"<\/code>) \u2192 lint + typecheck gate (\u0433\u043b\u0430\u0432\u043d\u044b\u0439, \u043f\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u2014 \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u0435).<\/p>\n<\/li>\n<li>\n<p><code>PreToolUse<\/code> (matcher <code>\"Bash\"<\/code>, <code>if: \"Bash(rm *)\"<\/code>) \u2192 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<\/li>\n<li>\n<p><code>PostToolUse<\/code> (matcher <code>\"Write|Edit\"<\/code>) \u2192 targeted unit tests \u043d\u0430 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (<code>async: true<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p><code>Stop<\/code> \u2192 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 (\u043d\u0435 \u0434\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 CI \u043a\u0440\u0430\u0441\u043d\u044b\u0439).<\/p>\n<\/li>\n<li>\n<p><code>SessionEnd<\/code> \u2192 \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0432\u043e\u0434\u043a\u0438 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/strong><\/p>\n<pre><code>.claude\/  settings.json  hooks\/    common\/               \u2190 \u043e\u0431\u0449\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b (jq helpers, parse_input)    session-start\/    pre-tool-use\/    post-tool-use\/    stop\/  README.md               \u2190 \u043a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0445\u0443\u043a\u0438, \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>Onboarding:<\/strong> \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0432 \u0440\u0435\u043f\u043e \u2014 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0445\u0443\u043a\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 gates \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043a\u0430\u043a \u0438\u0445 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e (<code>\"disableAllHooks\": true<\/code> \u0432 <code>.claude\/settings.local.json<\/code>), \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p><strong>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433.<\/strong> \u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438: \u0441\u043a\u043e\u043b\u044c\u043a\u043e tool calls \u0432 \u0434\u0435\u043d\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e denied, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0415\u0441\u043b\u0438 denied-rate \u0440\u0430\u0441\u0442\u0451\u0442 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u043d\u0435 \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043b\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u043b\u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/p>\n<p><strong>\u041f\u043b\u0430\u043d \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.<\/strong> \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e. \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0445\u0443\u043a\u0438 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 CLI\/IDE \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 CI-job\u2019\u043e\u0439; \u0441\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043b\u0435\u0439 \u0432 release notes.<\/p>\n<p><strong>\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u043f\u0435\u0440\u0435\u0434 \u043c\u0435\u0440\u0436\u0435\u043c:<\/strong><\/p>\n<ul>\n<li>\n<p>[ ] \u0425\u0443\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d (Claude Code: <code>claude --debug<\/code>).<\/p>\n<\/li>\n<li>\n<p>[ ] \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d <code>$CLAUDE_PROJECT_DIR<\/code>, \u0430 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>[ ] \u041f\u043e\u0434\u043e\u0431\u0440\u0430\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 <code>matcher<\/code> (\u0445\u0443\u043a \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043b\u0438\u0448\u043d\u0438\u0445 tool calls).<\/p>\n<\/li>\n<li>\n<p>[ ] \u0423\u043a\u0430\u0437\u0430\u043d <code>timeout<\/code> (\u0434\u043b\u044f <code>PreToolUse<\/code> \u2014 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u2264 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442 \u0445\u0443\u043a\u0430, \u2264 500 ms \u043e\u0442 \u043b\u0451\u0433\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a).<\/p>\n<\/li>\n<li>\n<p>[ ] \u0415\u0441\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u00ab\u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u0434\u0430\u0435\u0442\u00bb.<\/p>\n<\/li>\n<li>\n<p>[ ] \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 README.<\/p>\n<\/li>\n<li>\n<p>[ ] Security-\u0440\u0435\u0432\u044c\u044e\u0435\u0440 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b.<\/p>\n<\/li>\n<\/ul>\n<h3>14. \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0438\u0437 \u0442\u0440\u0451\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432:<\/p>\n<ol>\n<li>\n<p><strong>\u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0430\u0433\u0435\u043d\u0442\u0430<\/strong> \u2014 \u044d\u0442\u043e loop reasoning+tool calls, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c sub-agent loop \u0438 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0425\u0443\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 IO<\/strong> \u2014 stdin JSON \u043d\u0430 \u0432\u0445\u043e\u0434, stdout JSON \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 (\u0438\u043b\u0438 exit 2 + stderr), <code>jq<\/code> \u043a\u0430\u043a \u043b\u0438\u043d\u0433\u0432\u0430-\u0444\u0440\u0430\u043d\u043a\u0430. \u041a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u0445\u0443\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u2014 \u0441\u0432\u0435\u0440\u044f\u0439\u0442\u0435\u0441\u044c \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><code><strong>PreToolUse<\/strong><\/code><strong> \u2014 \u0441\u0430\u043c\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f.<\/strong> <code>permissionDecision: \"deny\"<\/code> (\u0438\u043b\u0438 <code>exit 2<\/code>) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u043e\u043a\u0430 \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432\u0430\u043c threshold \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e production-\u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u00ab\u0443\u043c\u043d\u043e\u0441\u0442\u0438\u00bb \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u043e \u0438 \u043e\u0442 gates, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438. \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u2014 <code>PreToolUse<\/code> \u0441 ESLint, \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u043d\u0430 <code>Write|Edit<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u0430\u043a \u0430\u0433\u0435\u043d\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0431\u0438\u0442\u044c \u2014 \u0432\u044b \u043f\u043e\u0439\u043c\u0451\u0442\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0445\u0443\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 AI-\u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0435. \u0418 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0440\u0443\u0434\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0430\u0433\u0435\u043d\u0442\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c<\/h3>\n<ul>\n<li>\n<p>Completely understand hooks in less than 20 minutes \u2014 <a href=\"https:\/\/www.youtube.com\/watch?v=03CfGf9iw_U\">https:\/\/www.youtube.com\/watch?v=03CfGf9iw_U<\/a><\/p>\n<\/li>\n<li>\n<p>Claude Code Hooks Reference (en) \u2014 <a href=\"https:\/\/docs.claude.com\/en\/docs\/claude-code\/hooks\">https:\/\/docs.claude.com\/en\/docs\/claude-code\/hooks<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u2014 Claude Code Hooks Guide \u2014 <a href=\"https:\/\/docs.claude.com\/en\/hooks-guide\">https:\/\/docs.claude.com\/en\/hooks-guide<\/a><\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f GitHub Copilot CLI \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u0432\u043e \u0432\u0440\u0435\u0437\u043a\u0430\u0445; \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u2014 <a href=\"https:\/\/docs.github.com\/en\/copilot\/reference\/hooks-configuration\">https:\/\/docs.github.com\/en\/copilot\/reference\/hooks-configuration<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1028570\/\">https:\/\/habr.com\/ru\/articles\/1028570\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TL;DRHooks \u2014 \u044d\u0442\u043e \u0442\u043e\u0447\u043a\u0438 \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0430\u0433\u0435\u043d\u0442\u0430 (Claude Code, GitHub Copilot CLI, VS Code Agent Mode), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u0448 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0434\u0435\u043b\u044c \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0445\u0443\u043a\u043e\u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u043e \u043e\u0434\u0438\u043d \u2014 PreToolUse \u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0439: \u043e\u043d \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0433\u0435\u043d\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u043f\u0440\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0430\u0448\u0438 gates (lint, typecheck, secrets-scan), \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c.\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 IO, \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0439\u0441 forced-lint gate, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043c. \u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f Claude Code (\u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0442\u044b\u0439 \u043d\u0430\u0431\u043e\u0440: ~26 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0442\u0438\u043f\u044b \u0445\u0443\u043a\u043e\u0432 command\/http\/prompt\/agent, matchers). \u041a\u0430\u043a\u0438\u0435-\u0442\u043e \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 Copilot CLI \u0438 VS Code Agent Mode \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u2014 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0447\u0442\u043e-\u0442\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441.1. \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u0443\u043a\u0438LLM\u2011\u0430\u0433\u0435\u043d\u0442\u044b \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, by design. \u041c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043b\u0438\u043d\u0442\u0435\u0440\u0430, \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u0442\u043e\u043a\u0435\u043d\u0430 \u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u201cAI lies pathologically\u201d. \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044d\u0442\u043e \u0442\u0435\u0440\u043f\u0438\u043c\u043e, \u0434\u043b\u044f production\u2011\u043a\u043e\u0434\u0430 \u2014 \u043d\u0435\u0442.\u041f\u043e \u0441\u0443\u0442\u0438, \u0445\u0443\u043a\u0438 \u2014 \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0430\u0433\u0435\u043d\u0442\u0430 \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u0434\u043e\u043c. \u0412\u0430\u0448 shell-\u0441\u043a\u0440\u0438\u043f\u0442 (\u0438\u043b\u0438 HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0438\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 sub-agent) \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u0441\u0442\u0430\u0440\u0442 \u0441\u0435\u0441\u0441\u0438\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 prompt, \u0434\u043e tool call, \u043f\u043e\u0441\u043b\u0435 tool call, \u0437\u0430\u043f\u0443\u0441\u043a sub-agent, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u0412 \u043e\u0434\u043d\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c; \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u2014 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0430\u0433\u0435\u043d\u0442\u0430 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442.\u0425\u0443\u043a\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 Claude Code, GitHub Copilot CLI \u0438 VS Code Agent Mode. \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0432\u0435\u0437\u0434\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f, \u043d\u043e \u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0438 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c Claude Code.\u041d\u0430\u0434\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0430\u043a\u0446\u0435\u043d\u0442 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d PreToolUse gate \u043d\u0430 ESLint \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043a-\u043b\u0438\u0441\u0442 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435.2. \u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0430\u0433\u0435\u043d\u0442\u0430\u0427\u0442\u043e\u0431\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0445\u0443\u043a\u0430\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0430\u0442 \u0441 \u0430\u0433\u0435\u043d\u0442\u043e\u043c \u2014 \u044d\u0442\u043e \u043d\u0435 \u201c\u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442\u201d, \u0430 \u0446\u0438\u043a\u043b:\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:\u0410\u0433\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e loop. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c tool calls. \u041d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 tool calls \u2014 \u0430\u0433\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u0439 \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 response.Sub-agent \u2014 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u0442\u0438\u043f\u0430. \u0412\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0438 reasoning \u0438 \u0441\u0432\u043e\u0438 tool calls, \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430.\u0421\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e prompt\u2019\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 prompt \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 agent loop, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f.\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d. \u041f\u0440\u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043a \u043b\u0438\u043c\u0438\u0442\u0443 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e (compaction) \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0442\u043e\u0447\u043a\u0430 \u0445\u0443\u043a\u0430.\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u0446\u0438\u043a\u043b \u0442\u043e\u0447\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0445\u0443\u043a\u043e\u0432 (Claude Code):\u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0445\u0443\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437: SessionStart \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b, UserPromptSubmit \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0430\u0448 prompt, PreToolUse\/PostToolUse \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call (\u0430 \u0438\u0445 \u0437\u0430 \u043e\u0434\u0438\u043d prompt \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438).3. \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u0412 Claude Code \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 26 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041d\u0438\u0436\u0435 \u2014 \u0441\u0430\u043c\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435; \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 \u0432 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u0435 (en, ru).\u0421\u043e\u0431\u044b\u0442\u0438\u0435\u041a\u043e\u0433\u0434\u0430\u0427\u0430\u0441\u0442\u043e\u0442\u0430\u041c\u043e\u0436\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c (exit 2)?\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 use caseSessionStart\u0421\u0442\u0430\u0440\u0442 \u0438\u043b\u0438 resume \u0441\u0435\u0441\u0441\u0438\u04381 \u0440\u0430\u0437\u041d\u0435\u0442 (\u0442\u043e\u043b\u044c\u043a\u043e additionalContext)\u0418\u043d\u044a\u0435\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439\/\u0441\u0442\u0435\u043a\u0430\/\u043a\u043e\u043d\u0432\u0435\u043d\u0446\u0438\u0439UserPromptSubmit\u041a\u0430\u0436\u0434\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 promptN \u0440\u0430\u0437\u0414\u0430\u041e\u0431\u043e\u0433\u0430\u0449\u0435\u043d\u0438\u0435 prompt, guardrails \u043d\u0430 \u0432\u0432\u043e\u0434PreToolUse\u041f\u0435\u0440\u0435\u0434 tool call\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call\u0414\u0430Gates: lint, secrets, policyPostToolUse\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e tool call\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call\u041d\u0435\u0442 (\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 top-level decision: &#171;block&#187; \u0441 reason)\u0410\u0443\u0434\u0438\u0442, \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b, \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044fPostToolUseFailure\u041f\u043e\u0441\u043b\u0435 \u0443\u043f\u0430\u0432\u0448\u0435\u0433\u043e tool call\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0414\u043e\u043f. \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430, \u0440\u0435\u0442\u0440\u0430\u0439-\u0445\u0438\u043d\u0442\u044bPermissionRequest\u041f\u043e\u043a\u0430\u0437\u0430\u043d \u0434\u0438\u0430\u043b\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u0414\u0430\u0410\u0432\u0442\u043e-allow\/deny \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044fPermissionDeniedTool call \u043e\u0442\u043a\u043b\u043e\u043d\u0451\u043d auto-mode \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442 (\u043d\u043e \u043c\u043e\u0436\u043d\u043e retry: true)\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0433\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044cSubagentStart\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c sub-agent\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 sub-agent\u041d\u0435\u0442\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 sub-agent\u2019\u0430SubagentStop\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 sub-agent\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 sub-agent\u0414\u0430 (\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c)\u0421\u0431\u043e\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0433\u0435\u0439\u0442 \u00ab\u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0441\u044f, \u043f\u043e\u043a\u0430 \u0442\u0435\u0441\u0442\u044b \u043a\u0440\u0430\u0441\u043d\u044b\u0435\u00bbStop\u0410\u0433\u0435\u043d\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0445\u043e\u04341 \u0440\u0430\u0437 \u043d\u0430 \u0445\u043e\u0434\u0414\u0430 (\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c)\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043d\u0435 \u0434\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438StopFailure\u0425\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0441 API-\u043e\u0448\u0438\u0431\u043a\u043e\u0439\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0410\u043b\u0435\u0440\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 rate-limit\/billingPreCompact\u041f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u0414\u0430\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0434\u043e \u0441\u0436\u0430\u0442\u0438\u044fPostCompact\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0434\u043e\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442InstructionsLoaded\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d CLAUDE.md \/ .claude\/rules\/*.md\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0410\u0443\u0434\u0438\u0442, compliance-\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043aCwdChanged\u0421\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (direnv-style)FileChanged\u0418\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u0420\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 (.env, \u043a\u043e\u043d\u0444\u0438\u0433\u0438)Notification\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \/ idle\u041f\u043e \u0444\u0430\u043a\u0442\u0443\u041d\u0435\u0442\u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f (Slack, \u0437\u0432\u0443\u043a)SessionEnd\u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u04381 \u0440\u0430\u0437\u041d\u0435\u0442\u041e\u0442\u0447\u0451\u0442 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440, cleanup\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (TaskCreated\/TaskCompleted, TeammateIdle, ConfigChange, WorktreeCreate\/WorktreeRemove, Elicitation\/ElicitationResult) \u2014 \u0431\u043e\u043b\u0435\u0435 \u0443\u0437\u043a\u0438\u0435; \u0441\u043c. \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441.\u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0443\u043a\u0438 \u201c\u043c\u043e\u0433\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u201d. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, PreToolUse \u2014 \u0442\u043e\u0447\u043a\u0430 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0442\u0440\u0430\u044f (\u0430\u0433\u0435\u043d\u0442 \u0432\u0438\u0434\u0438\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0441\u043d\u043e\u0432\u0430). Stop\/SubagentStop \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0445\u043e\u0434\u0430 (\u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c), \u043d\u043e \u043d\u0435 tool call. SessionStart\/SessionEnd \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e additionalContext \u0438 \u043d\u0435 \u0443\u043c\u0435\u044e\u0442 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c.Copilot CLI: \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u2014 \u0432\u0441\u0435\u0433\u043e 6 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0438\u043c\u0435\u043d\u0430 \u0432 camelCase: sessionStart, sessionEnd, userPromptSubmitted, preToolUse, postToolUse, errorOccurred. \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e preToolUse. \u041c\u0430\u043f\u043f\u0438\u043d\u0433: UserPromptSubmit \u2194 userPromptSubmitted, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438. errorOccurred \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0432 Claude Code \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 (\u0443 Claude \u2014 PostToolUseFailure, StopFailure, Notification).VS Code Agent Mode: \u00abchat hooks\u00bb \u2014 preview-\u0444\u0438\u0447\u0430, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0431\u043b\u0438\u0437\u043e\u043a \u043a Copilot CLI; \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u043b\u044f \u0441\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 VS Code.4. \u041c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u0412 Claude Code \u0445\u0443\u043a\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u043b\u044e\u0447\u043e\u043c hooks \u0432 .claude\/settings.json (project-level, \u0435\u0434\u0435\u0442 \u0432 git) \u0438\u043b\u0438 ~\/.claude\/settings.json (global). \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433:{  &#171;hooks&#187;: {    &#171;UserPromptSubmit&#187;: [      {        &#171;hooks&#187;: [          {            &#171;type&#187;: &#171;command&#187;,            &#171;command&#187;: &#171;\\&#187;$CLAUDE_PROJECT_DIR\\&#187;\/.claude\/hooks\/log-prompt.sh&#187;          }        ]      }    ]  }}\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u2014 \u044d\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u044b \u0445\u0443\u043a\u043e\u0432, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u043c matcher.matcher \u2014 \u0444\u0438\u043b\u044c\u0442\u0440 (\u0441\u043c. \u043d\u0438\u0436\u0435), \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d; \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u2014 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u0451.\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 hooks \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e handlers; \u043d\u0430 \u043e\u0434\u043d\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0412 Claude Code \u0432\u0441\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u043e\u0434 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 handlers \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 (\u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u2014 \u0434\u043b\u044f command-\u0445\u0443\u043a\u043e\u0432, \u043f\u043e URL \u2014 \u0434\u043b\u044f http) \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f.type: &#171;command&#187; \u2014 \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0442\u0438\u043f (\u0435\u0441\u0442\u044c \u0435\u0449\u0451 http, prompt, agent, \u0441\u043c. \u00a76).command \u2014 shell-\u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u041d\u0430 Windows \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 PowerShell (&#171;shell&#187;: &#171;powershell&#187;) \u0438\u043b\u0438 bash \u043f\u043e\u0434 WSL.timeout \u2014 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0414\u0435\u0444\u043e\u043b\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0445\u0443\u043a\u0430: command \u2014 600 \u0441, prompt \u2014 30 \u0441, agent \u2014 60 \u0441. \u0414\u043b\u044f PreToolUse gates \u043b\u0443\u0447\u0448\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c: \u043e\u0434\u0438\u043d \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0445\u0443\u043a \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 tool call.$CLAUDE_PROJECT_DIR \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0435\u0437 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439.\u041f\u043e\u043b\u0435 matcher (\u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u2014 \u00ab\u0444\u0438\u043b\u044c\u0442\u0440\u00bb) \u2014 \u043a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0430 Claude Code. \u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442\u0441\u044f \u2014 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:\u0421\u043e\u0431\u044b\u0442\u0438\u0435matcher \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u043d\u0430\u041f\u0440\u0438\u043c\u0435\u0440PreToolUse, PostToolUse, PostToolUseFailure\u0438\u043c\u044f tool&#187;Bash&#187;, &#171;Edit|Write&#187;, &#171;mcp__memory__.*&#187;SessionStart\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a&#187;startup&#187;, &#171;resume&#187;, &#171;clear&#187;, &#171;compact&#187;Notification\u0442\u0438\u043f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f&#187;permission_prompt&#187;, &#171;idle_prompt&#187;SubagentStart, SubagentStop\u0442\u0438\u043f \u0430\u0433\u0435\u043d\u0442\u0430&#187;Explore&#187;, &#171;Plan&#187;, \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445UserPromptSubmit, Stopmatcher \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 (\u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, _, |) \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a; \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u2014 \u043a\u0430\u043a regex. \u0411\u0435\u0437 matcher \u0445\u0443\u043a \u043d\u0430 PreToolUse \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 tool call (Read, Glob, Grep, Bash, \u2026) \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.\u0413\u0434\u0435 \u043b\u0435\u0436\u0430\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0438:Claude Code:  Project: .claude\/settings.json (\u0435\u0434\u0435\u0442 \u0432 git)          .claude\/settings.local.json (\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0432\u0435\u0440\u0440\u0430\u0439\u0434\u044b, \u043d\u0435 \u0432 git)  Global:  ~\/.claude\/settings.json  Plugin:  ${CLAUDE_PLUGIN_ROOT}\/.claude-plugin\/plugin.jsonCopilot CLI: \u043a\u043e\u043d\u0444\u0438\u0433 \u0436\u0438\u0432\u0451\u0442 \u0432 .github\/hooks\/ (project) \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 JSON-\u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, .github\/hooks\/copilot-cli-policy.json) \u0441 \u043f\u043e\u043b\u0435\u043c version: 1 \u0438 \u0431\u043b\u043e\u043a\u043e\u043c hooks \u043f\u043e\u0434 camelCase-\u0438\u043c\u0435\u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041f\u043e\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u2014 bash (\u0438\u043b\u0438 powershell), \u043f\u043b\u044e\u0441 cwd, timeoutSec. \u042d\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b \u0441 Claude Code.5. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430\u041a\u0430\u0436\u0434\u044b\u0439 command-\u0445\u0443\u043a \u2014 \u044d\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 stdin \u043a\u0430\u043a JSON \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c JSON \u0432 stdout (\u0438\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 exit code).\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 (Claude Code, \u043e\u0431\u0449\u0438\u0435 \u043f\u043e\u043b\u044f):{  &#171;session_id&#187;: &#171;abc123&#187;,  &#171;transcript_path&#187;: &#171;\/path\/to\/chat\/transcript.jsonl&#187;,  &#171;cwd&#187;: &#171;\/Users\/me\/projects\/my-app&#187;,  &#171;permission_mode&#187;: &#171;default&#187;,  &#171;hook_event_name&#187;: &#171;UserPromptSubmit&#187;,  &#171;prompt&#187;: &#171;\u0421\u0434\u0435\u043b\u0430\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f auth&#187;}\u041f\u043e\u043b\u044f, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443:UserPromptSubmit \u2192 promptPreToolUse \u2192 tool_name, tool_input, tool_use_idPostToolUse \u2192 tool_name, tool_input, tool_response, tool_use_idSessionStart \u2192 source, modeltranscript_path \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441: \u0432 \u043d\u0451\u043c \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0447\u0430\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u043c JSONL, \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 tool calls, \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 reasoning.\u0412\u044b\u0445\u043e\u0434. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0445 \u043f\u0443\u0442\u0438:\u041f\u0443\u0442\u044c A \u2014 exit code:Exit code\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u04350\u0423\u0441\u043f\u0435\u0445. Stdout \u043a\u0430\u043a JSON \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f; \u0434\u043b\u044f UserPromptSubmit\/SessionStart \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u04422\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. Stderr \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-477607","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=477607"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/477607\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=477607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=477607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=477607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}