<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code</title>
<meta name="description" content="Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức -...">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-cau-hinh-claude-code-hooks-giup-tu-dong-dinh-dang-va-kiem-thu-code-14036.html">
<link rel="shortcut icon" href="https://www.nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-cau-hinh-claude-code-hooks-giup-tu-dong-dinh-dang-va-kiem-thu-code-14036.html">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://www.nguoicodonvn2008.info/">https://www.nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code</h1>
		<ul class="list-inline">
			<li>Chủ nhật - 18/10/2026 21:51</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-10.png" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p style="text-align:justify;"><a style="border-width:0px;color:rgb(0, 51, 153);font:inherit;margin:0px;padding:0px;text-decoration:none;" target="_blank" rel="noopener noreferrer" href="https://quantrimang.com/hoc/claude-code" data-type="internal" title="Claude Code"><span style="background-color:rgb(255,255,255);color:rgba(0,0,0,0.87);font-family:Arial, sans-serif;font-size:16px;"><span style="-webkit-text-stroke-width:0px;border-width:0px;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Claude Code</span></span></a><span style="background-color:rgb(255,255,255);color:rgba(0,0,0,0.87);font-family:Arial, sans-serif;font-size:16px;"><span style="-webkit-text-stroke-width:0px;border-width:0px;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"> hooks là cơ chế chạy một lệnh bất kỳ khi một sự kiện nhất định xảy ra, chẳng hạn khi Claude vừa chỉnh sửa file thành công. Nhờ hook, bạn có thể tự động định dạng file hoặc chạy test mà không phải nhắc Claude làm những việc đó mỗi lần. Bạn có thể tìm hiểu thêm về tính năng này trong tài liệu hooks của Anthropic.</span></span></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong bài hướng dẫn này, Quantrimang.com sẽ giúp bạn:</p><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="ebe20a48dea16aae1d87b92fa2ceee5de"><p style="text-align:justify;">Xây dựng một máy tính phí vận chuyển nhỏ.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="eb9d1e1a53b0903d6b46c5cde66bf4bd9"><p style="text-align:justify;">Tự động định dạng file cài đặt sau mỗi lần ghi.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e2f8f8e0a531a79f71f2b3cbab1ae5f31"><p style="text-align:justify;">Chạy năm bài kiểm tra sau các lần chỉnh sửa được chọn.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e59b84b774cd10f86a11dd47f84aa0b9f"><p style="text-align:justify;">Cố ý gây ra một lỗi, xem bài test nào phát hiện, rồi sửa lại code.</p></li></ul><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Ví dụ này theo dõi hai công cụ Edit và Write của Claude trên ba file được chỉ định. Lệnh shell và thao tác sửa tay trong trình soạn thảo nằm ngoài phạm vi kiểm tra. Nếu bước kiểm tra sau chỉnh sửa thất bại, thay đổi đã lưu vẫn được giữ nguyên, vì PostToolUse chỉ chạy sau khi công cụ đã thực hiện thành công.</p><div class="google-anno-skip google-anno-sc" tabindex="0" role="link" aria-label="Ráp máy tính" data-google-vignette="false" data-google-interstitial="false">&nbsp;</div><p style="text-align:justify;">&nbsp;</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>1. Claude Code hooks là gì?</strong></h2><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-3.png" alt="tự động chạy test code" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-3.png" data-i="0" data-was-processed="true" /></p><div class="adbox adsense in-article" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;" id="articleads"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_1_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Một hook nối một sự kiện với một hành động. Trong bài này, sự kiện là “Claude vừa chỉnh sửa file thành công”, còn hành động là một script cục bộ có nhiệm vụ định dạng file cài đặt, chạy test và báo kết quả.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Chúng ta dùng sự kiện PostToolUse, chạy <em style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;"><i style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">sau khi </i></em>một lần gọi công cụ thành công. Nếu cần kiểm tra <em style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;"><i style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">trước khi </i></em>công cụ chạy, hãy dùng PreToolUse. Tài liệu tham chiếu hooks của Anthropic mô tả đầy đủ các sự kiện và giới hạn của chúng.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Quy tắc thực hành rất đơn giản: phí vận chuyển là 5 USD nếu tổng đơn hàng dưới 50 USD, và 0 USD nếu từ 50 USD trở lên. Chỉ cần đổi một phép so sánh là quy tắc này bị phá vỡ, trong khi code vẫn dễ đọc và vẫn chạy được. Đây chính là loại lỗi lý tưởng để thực hành kiểm thử.</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>2. Bạn cần chuẩn bị gì?</strong></h2><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-1.png" alt="hook trong Claude Code" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-1.png" data-i="1" data-was-processed="true" /></p><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e137d0016ea05f8b95a47770438b40b3e"><p style="text-align:justify;">Bản cài đặt Claude Code mới trong terminal</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e9dde5a43f6179c63c960626c980110da"><p style="text-align:justify;">Một trình soạn thảo văn bản</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="eb2635980c4b21f3e153cb4a49120d711"><p style="text-align:justify;">js 22.17.0 trở lên</p></li></ul><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Ví dụ này dùng trình chạy test có sẵn của Node, nên bạn không cần cài thêm gói nào. Các file đã được khắc phục trong bộ kit chuẩn bị sẵn được xác minh với Node.js 24.11.1 trên macOS 26.6. Script hỗ trợ dùng sự kiện <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">test:summary</code> có cấu trúc, được ghi trong tài liệu test runner của Node 22.17.0.</p><div class="adbox in-article adsense" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;" id="articleads2"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_2_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Kiểm tra công cụ trong terminal:</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre0"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">claude --version

node --version</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Hãy dùng tài khoản Claude Code và cài đặt quyền như bình thường. Các file hook cục bộ không gọi mô hình hay mạng và không yêu cầu thêm gói thuê bao AI nào. Tuy nhiên, việc nhờ Claude tạo, sửa hoặc khắc phục file vẫn tiêu tốn hạn mức Claude Code của bạn.</p><div class="google-anno-skip google-anno-sc" tabindex="0" role="link" aria-label="Khóa học AI" data-google-vignette="false" data-google-interstitial="false">&nbsp;</div><p style="text-align:justify;">&nbsp;</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Lưu ý an toàn quan trọng:</p><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e00f9564fe62fccf33e061c403c85da20"><p style="text-align:justify;">Hãy bắt đầu trong một thư mục thực hành trống.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e83c42713bce4be438f4d64b8dce815c6"><p style="text-align:justify;">Đọc kỹ code của hook và test trước khi bật. Hook dạng lệnh chạy với toàn quyền người dùng của bạn, và test thực thi code của dự án trên máy.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e14ebcf1ed544b97e306383f0ed0052f0"><p style="text-align:justify;">Không đặt file khách hàng thật, mật khẩu hay quyền triển khai vào bài thực hành.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="eaf85ee8c8e969d252aa8c08edaa31beb"><p style="text-align:justify;">Trong phiên tương tác, Claude Code giữ lại các hook trong file settings cho đến khi bạn chấp nhận workspace trust. Hãy xem lại.claude/settings.json và cả hai file hook trước, rồi chỉ tin cậy thư mục thực hành dùng một lần này.</p></li></ul><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>3. Các lỗi thường gặp khi dùng hooks</strong></h2><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-4.png" alt="Claude Code hooks" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-4.png" data-i="2" data-was-processed="true" /></p><figure class="table content-table" style="height:621.96px;max-width:100%;width:768.011px;"><table style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-collapse:collapse;border-spacing:0px;border:0px solid rgb(0, 0, 0);color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;overflow-x:auto;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-transform:none;white-space:normal;widows:2;word-break:keep-all;word-spacing:0px;" cellspacing="3"><tbody><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Vấn đề</strong></p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Cần kiểm tra</strong></p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Hook không làm gì cả</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Dùng <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">/hooks</code>, kiểm tra workspace trust, thư mục dự án và xem lần sửa có dùng Edit hoặc Write không</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">File settings không tải được</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Dùng <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">/status</code> và kiểm tra cú pháp JSON nghiêm ngặt, kể cả dấu phẩy thừa ở cuối</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Định dạng chạy nhưng test không chạy</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Bỏ tham số <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">--format-only</code>, rồi xác nhận mục đã tải đã thay đổi</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Hook không tìm thấy Node</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Chạy node <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">--version</code> trong cùng terminal. Khởi động lại sau khi sửa cài đặt hoặc đường dẫn</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Test thất bại sau khi sửa</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Đọc câu khẳng định (assertion) bị lỗi và mã nguồn. Sửa code, không làm yếu test</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Kiểm tra bị hết thời gian hoặc không chạy được</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Coi như kiểm tra chưa hoàn tất. Điều tra trình chạy và dùng phạm vi test nhỏ hơn</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Lệnh shell đổi file mà hook không chạy</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Matcher chỉ bao phủ Edit và Write. Hãy chạy kiểm tra thủ công cho thay đổi đó</p></td></tr></tbody></table></figure><div class="adbox in-article" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;" id="articleads3"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_3_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Mẹo ghi nhật ký riêng tư: để xem chính xác Claude Code đã chạy những gì, hãy bắt đầu phiên thực hành bằng:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">claude --debug-file hook-debug.log</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Kiểm tra file log sau khi chỉnh sửa. Hãy giữ file này ở chế độ riêng tư vì log có thể chứa đường dẫn cục bộ và chi tiết công việc. Cờ này được ghi trong tài liệu CLI.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Nếu bạn dùng máy của tổ chức, họ có thể giới hạn hook nào được chạy. Hãy tuân theo chính sách đó thay vì thay đổi quyền toàn cục để ép ví dụ này chạy. Tài liệu settings giải thích về managed settings và thứ tự ưu tiên.</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>4. Hooks, permissions, Skills và mods khác nhau thế nào?</strong></h2><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-2.png" alt="tự động format code" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-2.png" data-i="3" data-was-processed="true" /></p><figure class="table content-table" style="height:326.988px;max-width:100%;width:768.011px;"><table style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-collapse:collapse;border-spacing:0px;border:0px solid rgb(0, 0, 0);color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;overflow-x:auto;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-transform:none;white-space:normal;widows:2;word-break:keep-all;word-spacing:0px;" cellspacing="3"><tbody><tr style="height:55.9961px;"><td style="border-width:1px;height:55.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Mục tiêu của bạn</strong></p></td><td style="border-width:1px;height:55.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Nên dùng</strong></p></td></tr><tr style="height:80px;"><td style="border-width:1px;height:80px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Chạy một bước kiểm tra đã biết sau khi gọi công cụ</p></td><td style="border-width:1px;height:80px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Hook trong settings (như bài này)</p></td></tr><tr style="height:54.9961px;"><td style="border-width:1px;height:54.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Quyết định Claude được dùng công cụ hoặc đường dẫn nào</p></td><td style="border-width:1px;height:54.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Quy tắc permissions</p></td></tr><tr style="height:55.9961px;"><td style="border-width:1px;height:55.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Lưu lại hướng dẫn cho một tác vụ lặp lại</p></td><td style="border-width:1px;height:55.9961px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Skill</p></td></tr><tr style="height:80px;"><td style="border-width:1px;height:80px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Thêm hộp thoại duyệt tùy chỉnh, bảng điều khiển hoặc hành vi giao diện</p></td><td style="border-width:1px;height:80px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Mod</p></td></tr></tbody></table></figure><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Anthropic ghi nhận permissions, Skills và mods là các tính năng riêng, có một số điểm giao nhau. Hãy chọn thiết lập nhỏ nhất đủ cho nhiệm vụ.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Bài hướng dẫn về Claude Code mods của chúng tôi giới thiệu một câu hỏi duyệt tùy chỉnh <em style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;"><i style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">trước </i></em>các lần sửa được chọn. Bài này thêm bước kiểm tra <em style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;"><i style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">sau </i></em>khi sửa, để bạn học và thử từng phần độc lập. Ngoài ra, hướng dẫn Claude Code Insights giúp bạn nhận ra các vấn đề lặp lại trong phiên lập trình. Khi nó chỉ ra một bước kiểm tra thường quên, bạn có thể dùng quy trình hook này để thử một cải tiến.</p><div class="google-anno-skip google-anno-sc" tabindex="0" role="link" aria-label="Khóa học Machine Learning" data-google-vignette="false" data-google-interstitial="false">&nbsp;</div><p style="text-align:justify;">&nbsp;</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>5. Các bước thực hiện Claude Hook Code</strong></h2><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 1: Tạo dự án với kết quả đúng đã biết</strong></h3><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-5.png" alt="hướng dẫn Claude Code" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-5.png" data-i="4" data-was-processed="true" /></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Tạo thư mục claude-hooks-practice, mở bằng trình soạn thảo, mở terminal trong thư mục đó và khởi động Claude Code:</p><div class="adbox adsense in-article" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_4_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">claude</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><em style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;"><i style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">Thành viên Pro có thể mở dự án chuẩn bị sẵn thay thế. Hook của dự án này chưa hoạt động cho đến khi bạn thêm cài đặt ở Bước 2. Hãy đọc README đi kèm trước khi dùng.</i></em></p><div class="blockbox" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;overflow-x:auto;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Để tự xây dựng, hãy dán yêu cầu sau cho Claude (đã dịch sang tiếng Việt, bạn có thể giữ nguyên bản tiếng Anh nếu muốn kết quả ổn định hơn):</p><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Tạo một dự án thực hành nhỏ trong thư mục trống này. Dùng Node.js và trình chạy test có sẵn. Không cài gói nào và không kết nối dịch vụ nào.</p><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Tạo <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.json</code> với hai giá trị: <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">freeShippingAt</code> là 50 và <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">standardFee</code> là 5 (số tiền USD giả định).</p><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Tạo <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.cjs</code>, xuất một hàm tên <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shippingFee </code>đọc các cài đặt đó và trả về 5 cho đơn dưới 50, hoặc 0 cho đơn từ 50 trở lên. Dùng &gt;= cho ngưỡng. Từ chối tổng âm và giá trị không phải số hữu hạn bằng RangeError.</p><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Tạo <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.test.cjs</code> với đúng năm bài test có tên: (1) cài đặt khớp chính sách vận chuyển đã thống nhất: đúng hai giá trị trên; (2) đơn dưới 50 USD phí ship 5 USD: thử đơn 49; (3) đơn đúng 50 USD được miễn phí ship: thử đơn 50; (4) đơn trên 50 USD được miễn phí ship: thử đơn 75; (5) tổng đơn không hợp lệ bị từ chối: thử -1, NaN, Infinity, “50” và null.</p><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;text-align:justify;">Dùng <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">node:test</code> và <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">node:assert/strict</code>. Không bỏ qua test nào. Giữ kết quả kỳ vọng tách biệt với phần cài đặt. Hiển thị các file để tôi xem. Chưa cấu hình hook, chưa đổi quyền, chưa triển khai gì.</p></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Xem lại ba file. File cài đặt cần chứa:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">json</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre1"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">{ &quot; freeShippingAt &quot;: 50, &quot; standardFee &quot;: 5 }</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Chạy test trong terminal trước khi thêm hook:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">node --test shipping.test.cjs</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Cả năm test phải đạt. Nếu có test lỗi, hãy sửa dự án ban đầu trước và kiểm tra kết quả kỳ vọng vẫn khớp với quy tắc vận chuyển đã nêu.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 2: Thêm hook cho dự án, bắt đầu bằng định dạng</strong></h3><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Nhờ Claude tạo hai file hook dưới đây (thành viên Pro đã có sẵn cả hai và chỉ cần xem lại):</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Tạo hai file thực hành cục bộ: <strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">.claude/hooks/after-edit.cjs</strong> và <strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">.claude/hooks/run-shipping-tests.cjs.</strong> Chỉ dùng thư viện có sẵn của Node.js. Tạo file nhưng chưa bật.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong after-edit.cjs, đọc sự kiện hook dạng JSON từ đầu vào chuẩn. Chỉ xử lý PostToolUse cho hai công cụ Edit và Write. Đọc <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">tool_input.file_path</code> và yêu cầu đường dẫn tuyệt đối. Lấy thư mục chứa hook làm gốc dự án. Chỉ xử lý ba file <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">shipping.json</strong></code>, <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">shipping.cjs</strong></code>, <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">shipping.test.cjs</strong></code>, bỏ qua các đường dẫn khác. Từ chối file thiếu, liên kết tượng trưng (symlink), liên kết cứng (hard link) và file lớn hơn 64 KB. Không quét thư mục khác.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Khi <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">shipping.json</strong></code> thay đổi, phân tích và ghi lại cùng giá trị với thụt lề hai khoảng trắng và dòng mới ở cuối. Không đụng đến định dạng JavaScript. Nếu JSON không hợp lệ, báo lỗi mà không thay thế nội dung.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Hỗ trợ <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">--format-only </code>để bỏ qua toàn bộ test. Nếu không có tham số này, định dạng xong thì chạy helper cố định <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">run-shipping-tests.cjs</code> bằng <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">process.execPath</code>, không dùng shell, giới hạn 10 giây và giới hạn đầu ra.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">run-shipping-tests.cjs</code>, dùng <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">node:test run()</code> chỉ cho <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.test.cjs</code>, đặt isolation là none và concurrency là false. Đọc các sự kiện <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">test:fail</code> và <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">test:summary</code> và in một kết quả JSON có cấu trúc. Không phân tích TAP dạng văn bản và không tìm lệnh test khác. Yêu cầu ít nhất năm test, không có test lỗi, bỏ qua, hủy hay todo.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Khi thành công, in ra JSON hook hợp lệ kèm systemMessage báo số test đạt. Khi thất bại, ghi lỗi có giới hạn và chi tiết cấu trúc ra stderr và thoát với mã 2, nói rõ chỉnh sửa đã được lưu. Không bao giờ hoàn tác chỉnh sửa, làm yếu test, tự duyệt công cụ, cài gói hay gọi mạng.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Hiển thị cả hai file và giải thích chúng đọc, thay đổi và thực thi những gì. Không sửa file settings cho đến khi tôi đồng ý.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Cấu trúc thư mục kết quả sẽ như sau:</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre2"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">claude-hooks-practice/

shipping.json

shipping.cjs

shipping.test.cjs

.claude/

hooks/

after-edit.cjs

run-shipping-tests.cjs</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Chỉ phê duyệt hai file sau khi đã đọc kỹ. Sau đó tạo <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">.claude/settings.json</code> trong thư mục thực hành với cấu hình:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">json</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre3"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">{
  &quot;hooks&quot;: {
    &quot;PostToolUse&quot;: &#91;
      {
        &quot;matcher&quot;: &quot;^(Edit|Write)$&quot;,
        &quot;hooks&quot;: &#91;
          {
            &quot;type&quot;: &quot;command&quot;,
            &quot;command&quot;: &quot;node&quot;,
            &quot;args&quot;: &#91;
              &quot;${CLAUDE_PROJECT_DIR}/.claude/hooks/after-edit.cjs&quot;,
              &quot;--format-only&quot;
            &#93;,
            &quot;timeout&quot;: 30
          }
        &#93;
      }
    &#93;
  }
}</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Đây là file settings cấp dự án. Với dự án có sẵn, hãy gộp mục mới vào cài đặt hiện tại, giữ nguyên các hook và quyền khác. Tài liệu settings giải thích sự khác nhau giữa settings cấp dự án, cục bộ, người dùng và managed.</p><div class="adbox in-article adsense" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_5_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div><span style="background-color:initial!important;color:rgb(74,74,74)!important;font-family:inherit !important;font-size:18px !important;"><span aria-label="Đây là những chủ đề liên quan đến bài viết mà bạn có thể quan tâm" tabindex="0" role="heading" aria-level="2">Khám phá thêm</span></span></div><div class="google-anno-skip goog-rentry" tabindex="0" role="link" aria-label="Sách Machine Learning" data-google-vignette="false" data-google-interstitial="false"><span style="background-color:initial!important;color:rgb(60,64,67)!important;font-family:inherit !important;font-size:18px !important;"><span title="Sách Machine Learning">Sách Machine Learning</span></span></div><div class="google-anno-skip goog-rentry" tabindex="0" role="link" aria-label="Khóa học Windows" data-google-vignette="false" data-google-interstitial="false"><span style="background-color:initial!important;color:rgb(60,64,67)!important;font-family:inherit !important;font-size:18px !important;"><span title="Khóa học Windows">Khóa học Windows</span></span></div><div class="google-anno-skip goog-rentry" tabindex="0" role="link" aria-label="Đọc Tin Công Ty" data-google-vignette="false" data-google-interstitial="false"><span style="background-color:initial!important;color:rgb(60,64,67)!important;font-family:inherit !important;font-size:18px !important;"><span title="Đọc Tin Công Ty">Đọc Tin Công Ty</span></span></div><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Giải thích cấu hình:</p><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e63683c692742a53aec5af4819c78cea2"><p style="text-align:justify;">matcher chỉ chọn hai công cụ Edit và Write, sau đó script thu hẹp xuống ba file thực hành.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="ed700bfde5ad2ab2b794c04c79929e51b"><p style="text-align:justify;">Tham số cuối --format-only khởi động script ở chế độ chỉ định dạng.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e871f28f0f276288bcc35d9d318883452"><p style="text-align:justify;">Dùng args tách riêng sẽ gọi lệnh không qua shell và để Claude Code thay đường dẫn dự án thành một tham số duy nhất, đúng như phần cấu hình hook dạng lệnh trong tài liệu.</p></li></ul><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Claude Code tự tải lại hầu hết thay đổi hook trong phiên đang chạy. Nhập /hooks và tìm mục PostToolUse của dự án. Nếu không thấy, dùng /status để tìm lỗi settings trước khi khởi động lại.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 3: Kiểm chứng việc định dạng chạy sau khi ghi file</strong></h3><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-8.png" alt="claude hook" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-8.png" data-i="5" data-was-processed="true" /></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Hãy yêu cầu Claude:</strong></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Dùng công cụ Write để lưu <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.json</code> với đúng nội dung JSON một dòng này: <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">{&quot;freeShippingAt&quot;:50,&quot;standardFee&quot;:5}</code>. Giữ nguyên helper và test. Không tự chạy trình định dạng. Dừng lại sau khi ghi để tôi kiểm tra hook đã đổi gì.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Tự mở file đã lưu. File phải có bố cục nhiều dòng, thụt lề hai khoảng trắng như ở Bước 1, với hai con số không đổi.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Script mẫu trả về <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">systemMessage</code> thành công như sau:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">&#91;after-edit&#93; Formatted shipping.json. Tests are off.</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Claude Code hiển thị systemMessage như một cảnh báo hướng tới người dùng. Đây không phải bản ghi test hay lời xác nhận gửi cho Claude, nên hãy kiểm tra cả file đã lưu chứ đừng chỉ tin vào thông báo. Bộ định dạng này chỉ xử lý file JSON cài đặt, không định dạng các file JavaScript.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong lần kiểm thử gốc với Claude Code 2.1.293, một lệnh Write thật đã kích hoạt hook chỉ định dạng này, lưu hai giá trị với thụt lề hai khoảng trắng và không làm đổi mã băm của file test.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Với dự án lớn hơn, bạn có thể dùng trình định dạng như Prettier cho nhiều ngôn ngữ. Hãy dùng phiên bản đã được xem xét, cài cục bộ và giới hạn các file nó được chạm vào. Chỉ mở rộng sau khi ví dụ nhỏ này chạy tốt. Hướng dẫn cài đặt của Prettier giải thích cách ghim nó thành phụ thuộc của dự án.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 4: Thêm bước chạy test vào cùng hook</strong></h3><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong danh sách tham số của hook, chỉ xóa --format-only. Giữ nguyên đường dẫn script và các cài đặt khác:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">json</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre4"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">&quot;args&quot; : &#91; &quot;${CLAUDE_PROJECT_DIR}/.claude/hooks/after-edit.cjs&quot; &#93;</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Dòng này chỉ là một phần cấu hình, không phải file settings hoàn chỉnh. Thành viên Pro cũng có sẵn ví dụ đầy đủ gồm định dạng và test trong thư mục thiết lập.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Kiểm tra lại <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">/hooks</code>, rồi lặp lại yêu cầu ghi JSON một dòng ở Bước 3. Claude Code sẽ hiển thị thông báo:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">&#91;after-edit&#93; PASS: 5 tests passed.</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Vì sao gộp định dạng và test vào một script? Các hook handler khớp cùng lúc sẽ chạy song song, nên đặt hai handler riêng cho định dạng và test cạnh nhau không đảm bảo việc định dạng xong trước. Gộp vào một script cho phép định dạng trước, test sau.</p><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-7.png" alt="PostToolUse" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-7.png" data-i="6" data-was-processed="true" /></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Script của chúng ta chờ các bài test nhỏ này. Với ứng dụng thật, hãy chọn một bước kiểm tra nhanh cho mỗi lần sửa và chạy các bài test dài hơn ở thời điểm rà soát phù hợp. Tránh chạy toàn bộ bộ test chậm cho mọi thay đổi nhỏ.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 5: Cố ý gây lỗi và đọc thông báo thất bại</strong></h3><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-9.png" alt="code hook claude" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-9.png" data-i="7" data-was-processed="true" /></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Hãy yêu cầu Claude:</strong></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Dùng công cụ Edit để chỉ đổi phép so sánh &gt;= thành &gt; trong <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.cjs</code>. Đây là lỗi cố ý để thử nghiệm cục bộ. Giữ nguyên cài đặt vận chuyển và cả năm bài test. Để hook chạy, báo kết quả của nó, rồi dừng lại trước khi sửa gì. Không đổi công cụ, không tắt hook và không sửa test cho qua.</p><div class="adbox in-article" style="-webkit-text-stroke-width:0px;background:rgba(248, 248, 248, 0.41);border:1px solid rgb(238, 238, 238);clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;height:auto !important;letter-spacing:normal;line-height:inherit;margin:20px auto;orphans:2;padding:0px;position:relative;text-align:center;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><div style="background-color:transparent;border-image:none;border:medium none currentcolor;display:inline-block;font:inherit;height:auto !important;margin:0px;overflow:visible;padding:0px;position:relative;visibility:visible;width:766px;" id="aswift_6_host"><div class="google-aiuf" style="align-items:center !important;border-width:0px;display:flex !important;flex-wrap:wrap !important;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:initial !important;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;gap:10px !important;height:auto !important;line-height:inherit;margin:0px;max-height:280px !important;padding:0px;place-content:center !important;width:765.994px !important;" data-google-ad-efd="true"><div class="goog-rentries"><div>&nbsp;</div></div></div></div></div><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Phiên bản lỗi vẫn cho kết quả đúng với đơn dưới 50 USD và đơn trên 50 USD. Nhưng đơn đúng 50 USD giờ bị tính phí 5 USD. Bài test cho đúng giá trị này sẽ thất bại.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Trong lần kiểm tra khi đăng nhập Claude Code 2.1.293, một lệnh Edit thật đã kích hoạt hook và tạo ra thông báo lỗi:</p><div class="codebar" style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;padding:0px;position:relative;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">&nbsp;</div><pre class="language- language-none prettyprint" style="-webkit-text-stroke-width:0px;background:rgb(244, 251, 244);border-radius:5px;border:1px solid !important;color:rgba(0, 0, 0, 0.87);display:block;font-family:Menlo, &#039;Bitstream Vera Sans Mono&#039;, &#039;DejaVu Sans Mono&#039;, Monaco, Consolas, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:14px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px 0px 16px;max-height:600px;max-width:100%;orphans:2;overflow:auto;padding:8px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;widows:2;word-spacing:0px;" id="pre5"><code class="language-plaintext" style="border-image:none;border-radius:5px;border:medium none currentcolor;color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px;padding:0px;">&#91;after-edit&#93; Tests failed: 4 passed, 1 failed, 0 skipped, 0 todo, 0 cancelled.
- orders at $50 ship free: Expected values to be strictly equal: 5 !== 0; expected: 0; actual: 5
The tool&#039;s edit has already saved. Review the failure before continuing.</code></pre><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Hook trả mã thoát 2, phép so sánh lỗi vẫn được lưu và mã băm của file test ban đầu không đổi. PostToolUse gửi phản hồi lỗi này đến Claude sau kết quả công cụ. Cách hiển thị tương tác có thể khác tùy phiên bản, vì vậy hãy kiểm tra cả code đã lưu lẫn kết quả hook.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Vì sao lỗi vẫn còn đó? Vì PostToolUse không thể hoàn tác một công cụ đã chạy xong. Hãy giữ nguyên các bài test. Nếu đổi kết quả kỳ vọng thành 5 USD, bạn chỉ đang che giấu vấn đề.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 6: Sửa code và xác minh kết quả</strong></h3><p style="text-align:justify;"><img class="lazy lightbox loaded" style="border-radius:3px;border:0px solid rgb(204, 204, 204);box-shadow:rgb(238, 238, 238) 0px 0px 1px;font:inherit;margin:0px auto;max-width:100%;padding:0px;" src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-10.png" alt="code claude hook" width="768" height="432" data-src="https://st.quantrimang.com/photos/image/2026/10/18/Claude-Hook-Code-10.png" data-i="8" data-was-processed="true" /></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Gửi yêu cầu:</strong></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Khôi phục phép so sánh &gt;= trong <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">shipping.cjs</code> bằng công cụ Edit. Giữ nguyên shipping.json và các bài test gốc. Để hook chạy và báo kết quả. Không commit, không triển khai và không đổi file khác.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Hook phải báo lại năm test đạt. Hãy kiểm tra rằng phép so sánh đã bao gồm dấu bằng, rồi chạy test độc lập:</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">node --test shipping.test.cjs</code></p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Kiểm tra cả file test và file cài đặt: chúng phải vẫn giữ chính sách vận chuyển và kết quả kỳ vọng ban đầu.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Bảng tổng kiểm toàn bộ bài thực hành:</p><figure class="table content-table" style="height:330.227px;max-width:100%;width:768.011px;"><table style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-collapse:collapse;border-spacing:0px;border:0px solid rgb(0, 0, 0);color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;margin:0px;orphans:2;overflow-x:auto;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-transform:none;white-space:normal;widows:2;word-break:keep-all;word-spacing:0px;" cellspacing="3"><tbody><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Kiểm tra</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Kết quả mong đợi</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Lưu settings thành một dòng khi bật định dạng</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Cùng giá trị được lưu thành nhiều dòng dễ đọc</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Chạy test cho máy tính phí đúng</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Năm test đạt</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Đổi phép so sánh để đúng 50 USD mất ưu đãi miễn phí</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Test mốc 50 USD thất bại: kỳ vọng 0, thực tế 5</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Xem code sau khi thất bại</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Chỉnh sửa lỗi vẫn còn</p></td></tr><tr><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Khôi phục phép so sánh gốc, không đổi test</p></td><td style="border-width:1px;padding:4px;text-align:center;"><p style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:26px;margin:10px 0px;overflow-wrap:break-word;padding:0px;">Cả năm test đạt lại</p></td></tr></tbody></table></figure><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Gói đã khắc phục lỗi của tác giả vượt qua toàn bộ 33 bài kiểm tra tích hợp cục bộ trên macOS 26.6 với Node.js 24.11.1, cùng năm bài test vận chuyển và bản demo lỗi rồi sửa được cô lập. Các kiểm tra này bao phủ định dạng, lỗi cố ý và việc sửa, test bị bỏ qua, đầu vào sai định dạng, đường dẫn không liên quan, bí danh đường dẫn, file liên kết và các trường hợp cục bộ khác.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">33 kiểm tra đó gửi JSON sự kiện hook giả lập tới các script thật. Ngoài ra, tác giả đã xác minh mục dự án trong /hooks và chạy các lệnh Write và Edit thật với Claude Code 2.1.293 trên macOS cùng Node.js 24.11.1. Định dạng hoạt động, lỗi ngưỡng cố ý bị bắt, và việc khôi phục &gt;= đưa năm test về trạng thái đạt mà không đổi các test gốc. Một lần chạy test độc lập ở terminal cũng đạt cả năm.</p><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Bước 7: Tắt hook</strong></h3><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Chỉ xóa mục lệnh này khỏi danh sách <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">PostToolUse</code> của dự án. Giữ nguyên các mục khác và cài đặt quyền. Claude Code sẽ tải lại thay đổi trong phiên đang chạy. Hãy kiểm tra <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">/hooks</code> để chắc mục đã biến mất. Chỉ khởi động lại khi trạng thái đã tải không cập nhật, sau khi bạn đã loại trừ lỗi settings.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Yêu cầu ghi lại JSON một dòng mà không nhờ Claude định dạng. Nếu không có trình định dạng nào khác đang hoạt động, file phải giữ nguyên một dòng. Bạn vẫn có thể tự chạy test vận chuyển.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Tác giả đã kiểm tra bằng phiên Claude Code mới: <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">/hooks</code> không còn hook dự án nào, lần Write kế tiếp không tạo sự kiện hook nào và JSON đã lưu vẫn nằm trên một dòng. Một lần Write file <code style="border-radius:5px;border:1px solid rgb(221, 221, 221);color:rgb(88, 37, 123);font-family:Consolas, Monaco, monospace;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0px 2px;padding:2px 8px;">notes.txt</code> không liên quan cũng bị script đã bật bỏ qua.</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Đừng tắt toàn bộ hooks chỉ để gỡ một ví dụ hướng dẫn. Các hook khác có thể là những bước kiểm tra mà nhóm của bạn đang dựa vào.</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>6. Các công cụ AI lập trình khác để tham khảo</strong></h2><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Nếu bạn muốn đối chiếu quy trình tự động hóa kiểm thử với các trợ lý khác đang phổ biến tại Việt Nam, hãy xem:</p><div class="google-anno-skip google-anno-sc" tabindex="0" role="link" aria-label="Khóa học AI" data-google-vignette="false" data-google-interstitial="false">&nbsp;</div><p style="text-align:justify;">&nbsp;</p><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e13e6d9e90bd04a8828ba6d2f8cda2960"><p style="text-align:justify;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">GitHub Copilot: </strong>gợi ý code ngay trong VS Code, JetBrains, rất quen thuộc với lập trình viên Việt.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="ebab6e9bc05567d94ea2f902a6f2ec3a6"><p style="text-align:justify;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Cursor:</strong> trình soạn thảo tích hợp AI, mạnh về sửa code theo ngữ cảnh toàn dự án.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e74745b90203d7448ae22b97c4e863a4f"><p style="text-align:justify;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">ChatGPT (OpenAI):</strong> hỗ trợ giải thích lỗi, viết test mẫu và tạo script nhỏ.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e5b44189fcfdd008c6d888f2d386eef0a"><p style="text-align:justify;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Gemini (Google): </strong>tiện khi làm việc với hệ sinh thái Google và có công cụ cho nhà phát triển qua Gemini API.</p></li><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="ee752e4235dea705f6a33bbc4e5bbe5eb"><p style="text-align:justify;"><strong style="border-width:0px;font-family:inherit;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-variant:inherit;font-variation-settings:inherit;line-height:inherit;margin:0px;padding:0px;">Windsurf, Cline:</strong> các lựa chọn khác cho lập trình có AI hỗ trợ.</p></li></ul><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Dù dùng công cụ nào, nguyên tắc chung vẫn giữ nguyên: tự động hóa bước kiểm tra, giữ nguyên bài test và luôn tự đọc lại code do AI viết.</p><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>7. Câu hỏi thường gặp</strong></h2><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Claude Code hooks là gì?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e41531858af3bd9bbbe016df9b5631dd5"><p style="text-align:justify;">Là cơ chế chạy một lệnh khi một sự kiện chọn trước xảy ra, ví dụ sau khi Claude chỉnh sửa file thành công. Bạn dùng nó để tự động định dạng, chạy test hoặc báo cáo mà không phải nhắc Claude nhiều lần.</p></li></ul><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>PostToolUse khác PreToolUse thế nào?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e09a4eb4cc376f3745594f07f83be71cd"><p style="text-align:justify;">PostToolUse chạy sau khi công cụ thành công, còn PreToolUse chạy trước khi công cụ thực hiện. Muốn chặn hoặc kiểm tra trước thì dùng PreToolUse.</p></li></ul><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Test thất bại có làm Claude tự hoàn tác thay đổi không?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="eff67c96dc1c99a2de934f37dcdfcbdd6"><p style="text-align:justify;">Không. Với PostToolUse, chỉnh sửa đã được lưu và vẫn giữ nguyên. Hook chỉ gửi phản hồi lỗi để bạn và Claude xử lý.</p></li></ul><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Hook có an toàn không?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e6418450af7fb953907a9ead1fc72aa25"><p style="text-align:justify;">Hook dạng lệnh chạy với toàn quyền người dùng của bạn. Hãy đọc kỹ code trước khi bật, chỉ tin cậy thư mục thực hành và không để dữ liệu nhạy cảm trong bài thử.</p></li></ul><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Vì sao nên gộp định dạng và test trong một script?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e96b5833e0f46a7e6b96e18e0c8638ff5"><p style="text-align:justify;">Vì các handler khớp cùng lúc chạy song song, nên hai handler riêng không đảm bảo định dạng hoàn tất trước khi test chạy.</p></li></ul><h3 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:18px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>Có nên chạy toàn bộ bộ test sau mỗi lần sửa không?</strong></h3><ul style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;clear:both;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:inherit;list-style:disc;margin:0px;orphans:2;padding:0px;text-align:start;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><li style="border-width:0px;font:inherit;margin:0px 0px 0px 30px;padding:0px;" data-list-item-id="e645fa7151e708b61618411a4c479e754"><p style="text-align:justify;">Không nên với bộ test chậm. Hãy chọn kiểm tra nhanh cho mỗi lần sửa và chạy test dài ở các điểm rà soát hợp lý.</p></li></ul><h2 style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:20px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;letter-spacing:normal;line-height:32px;margin:10px 0px;orphans:2;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;"><strong>8. Kết luận</strong></h2><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Claude Code hooks giúp biến các bước kiểm tra lặp đi lặp lại thành quy trình tự động, từ định dạng file đến chạy test ngay sau mỗi lần Claude chỉnh sửa. Qua bài thực hành máy tính phí vận chuyển, bạn đã thấy cả vòng: cấu hình hook, kiểm chứng định dạng, thêm test, gây lỗi có chủ đích, đọc thông báo thất bại rồi sửa lại mà không làm yếu bài test.</p><div class="google-anno-skip google-anno-sc" tabindex="0" role="link" aria-label="Mua app văn phòng" data-google-vignette="false" data-google-interstitial="false">&nbsp;</div><p style="text-align:justify;">&nbsp;</p><p style="-webkit-text-stroke-width:0px;background-color:rgb(255, 255, 255);border-width:0px;color:rgba(0, 0, 0, 0.87);font-family:Arial, sans-serif;font-feature-settings:inherit;font-kerning:inherit;font-language-override:inherit;font-optical-sizing:inherit;font-size-adjust:inherit;font-size:16px;font-stretch:inherit;font-style:normal;font-variant-alternates:inherit;font-variant-caps:normal;font-variant-east-asian:inherit;font-variant-emoji:inherit;font-variant-ligatures:normal;font-variant-numeric:inherit;font-variant-position:inherit;font-variation-settings:inherit;font-weight:400;letter-spacing:normal;line-height:26px;margin:10px 0px;orphans:2;overflow-wrap:break-word;padding:0px;text-align:justify;text-decoration-color:initial;text-decoration-style:initial;text-decoration-thickness:initial;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px;">Đơn giản nhất là bạn hãy nhớ ba nguyên tắc: đọc kỹ code hook trước khi bật, giữ test nguyên vẹn khi sửa lỗi và chọn bước kiểm tra nhỏ, nhanh cho mỗi lần chỉnh sửa. Hooks chỉ làm cho một bước kiểm tra nhỏ trở nên lặp lại được. Việc chọn test hữu ích, rà soát thay đổi và quyết định khi nào ứng dụng sẵn sàng cho người dùng vẫn là trách nhiệm của bạn. Nếu muốn đi xa hơn với toàn bộ quy trình phát triển có AI hỗ trợ, bạn có thể tìm hiểu các khóa như Intro to Vibe Coding của Nate Grahek, bao quát lập kế hoạch, công cụ lập trình AI, gỡ lỗi, triển khai và rủi ro về xác thực, thanh toán và khóa API.</p>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-cau-hinh-claude-code-hooks-giup-tu-dong-dinh-dang-va-kiem-thu-code-14036.html" title="Cách cấu hình Claude Code Hooks giúp tự động định dạng và kiểm thử code">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/cach-cau-hinh-claude-code-hooks-giup-tu-dong-dinh-dang-va-kiem-thu-code-14036.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://www.nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://www.nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<script src="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://www.nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://www.nguoicodonvn2008.info",
            "logo": "https://www.nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>