<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Hook on Tarragon</title><link>https://tarrragon.github.io/blog/tags/hook/</link><description>Recent content in Hook on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Wed, 04 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/hook/index.xml" rel="self" type="application/rss+xml"/><item><title>用 Hook 系統把開發規範變成自動執行的基礎設施</title><link>https://tarrragon.github.io/blog/record/%E7%94%A8-hook-%E7%B3%BB%E7%B5%B1%E6%8A%8A%E9%96%8B%E7%99%BC%E8%A6%8F%E7%AF%84%E8%AE%8A%E6%88%90%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C%E7%9A%84%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/record/%E7%94%A8-hook-%E7%B3%BB%E7%B5%B1%E6%8A%8A%E9%96%8B%E7%99%BC%E8%A6%8F%E7%AF%84%E8%AE%8A%E6%88%90%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C%E7%9A%84%E5%9F%BA%E7%A4%8E%E8%A8%AD%E6%96%BD/</guid><description>&lt;h3 id="從一個社群文章開始">從一個社群文章開始&lt;/h3>
&lt;p>社群裡有人分享了幾篇關於 Claude Code Hook 的文章，看完第一個反應是：「我低估了 hook 能做的事情。」&lt;/p>
&lt;p>我知道 hook 的存在，但一直把它當成「跑幾個簡單檢查」的輔助工具。那幾篇文章讓我意識到，hook 可以是完整的品質控制基礎設施——在每個關鍵時機介入，執行那些「應該要做但忘記做」的檢查。&lt;/p></description><content:encoded><![CDATA[<h3 id="從一個社群文章開始">從一個社群文章開始</h3>
<p>社群裡有人分享了幾篇關於 Claude Code Hook 的文章，看完第一個反應是：「我低估了 hook 能做的事情。」</p>
<p>我知道 hook 的存在，但一直把它當成「跑幾個簡單檢查」的輔助工具。那幾篇文章讓我意識到，hook 可以是完整的品質控制基礎設施——在每個關鍵時機介入，執行那些「應該要做但忘記做」的檢查。</p>
<h3 id="hook-的執行時機">Hook 的執行時機</h3>
<p>Claude Code Hook 有五個觸發點：<code>SessionStart</code>、<code>UserPromptSubmit</code>、<code>PreToolUse</code>、<code>PostToolUse</code>、<code>Stop</code>，涵蓋整個開發互動的生命週期。</p>
<p>有了這個框架，問題就變成：哪些規範應該在哪個時機點執行？</p>
<h3 id="我們建立了哪些-hook">我們建立了哪些 Hook</h3>
<h4 id="session-啟動檢查">Session 啟動檢查</h4>
<p>每次 session 開始時自動確認：git 遠端是否有需要同步的變更、開發環境依賴是否完整、工作日誌狀態。這些檢查不阻止啟動，只是讓開發者一開始就有完整的情境。</p>
<h5 id="任務逃避偵測">任務逃避偵測</h5>
<p>這是我們設計中比較有趣的一個 hook。它在每次 prompt 提交時執行，掃描內容裡是否出現「太複雜先跳過」、「暫時不處理」這類詞彙，同時也會檢查行為模式：程式碼變更了但測試沒有對應變更、技術債務累積超過閾值等。一旦偵測到逃避行為，會建立一個 block 標記檔案，後續所有工具呼叫都會被阻止，直到問題被正視。</p>
<h6 id="程式異味即時偵測">程式異味即時偵測</h6>
<p>每次檔案編輯後（<code>PostToolUse</code>），我們會即時掃描變更的程式碼。函數超過 30 行、巢狀超過 4 層、參數超過 5 個、依賴數超過 10 個，這些都會觸發記錄並建議重構。這個 hook 採用非阻塞設計——發現問題時記錄，但不中斷開發流程。</p>
<h6 id="版本推進建議">版本推進建議</h6>
<p>在 Claude 完成回應時（<code>Stop</code>），hook 會分析當前的工作狀態：有沒有未提交的變更、工作日誌有沒有標記完成、TodoList 系列是否達成。根據這些狀態，自動建議接下來應該做小版本推進還是繼續開發。</p>
<h6 id="文件同步提醒">文件同步提醒</h6>
<p>程式碼變更後，hook 根據檔案類型判斷哪些文件需要同步更新。API 異動對應 API 文件，架構異動對應架構文件，這類規則很難靠人記，但 hook 記得。</p>
<h3 id="一個反覆遇到的事故">一個反覆遇到的事故</h3>
<p>hook 開發過程中出過同一個事故不只一次。</p>
<p>Claude Code hook 系統的設計是：任何寫入 <code>stderr</code> 的輸出都會被視為 hook error 顯示給使用者。Python 的 <code>logging</code> 模組預設輸出到 stderr，所以即使 hook 正常執行，只要有 logging 輸出，UI 上就會冒出 hook error 警告。</p>
<p>這個問題反覆出現，最後系統性地修復，確立了一條規則：hook 禁止寫入 stderr，所有輸出必須走 stdout。現在這條規則寫進方法論，新 hook 都有對應的驗證：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">grep -r <span class="s2">&#34;sys\.stderr&#34;</span> .claude/hooks/ --include<span class="o">=</span><span class="s2">&#34;*.py&#34;</span></span></span></code></pre></div><p>這個指令應該永遠返回空結果。</p>
<h3 id="模組化的演進">模組化的演進</h3>
<p>剛開始每個 hook 腳本都是獨立的，讀取輸入、處理邏輯、輸出結果各自實作。問題很明顯：讀取 hook 輸入、輸出決策結果這些通用邏輯，在每個腳本裡都重複了一遍。</p>
<p>後來重構引入了共用模組。<code>.claude/lib/</code> 底下現在有幾個核心模組：<code>hook_io.py</code> 負責標準化 I/O，<code>hook_logging.py</code> 負責日誌，<code>config_loader.py</code> 載入配置，<code>git_utils.py</code> 封裝 git 操作。</p>
<p>帶來兩個好處：腳本結構變得簡潔，開發者只需要專注判斷邏輯；共用模組可以寫獨立的單元測試，以前 hook 的正確性很難驗證，現在有了。</p>
<h3 id="幾個設計原則">幾個設計原則</h3>
<p><strong>非阻塞優先</strong>。大部分品質檢查不該阻止開發流程，而是記錄、追蹤、提示。只有真正關鍵的違規——任務逃避、阻止狀態——才完全阻斷操作。</p>
<p><strong>漸進式強制</strong>。從警告到記錄到追蹤到阻止，給開發者理解和修正的機會，不是一刀切拒絕。</p>
<p><strong>可觀測性</strong>。hook 系統自己也需要被監控。有一個 performance monitor hook 專門追蹤其他 hook 的執行時間，超過 5 秒視為需要立即優化。</p>
<p><strong>配置外部化</strong>。品質規則的閾值、代理人分派規則，全部放在 YAML 配置檔，不硬編碼在腳本裡。需要調整只改配置。</p>
<h3 id="現在的感受">現在的感受</h3>
<p>把規範寫進文件和寫進 hook，是完全不同的感受。</p>
<p>寫進文件的規範靠人記。寫進 hook 的規範，在每個關鍵時機自動執行，開發者甚至可以不知道它存在——但規範確實在發生效用。品質基線從依賴個人紀律，變成由系統保證。</p>]]></content:encoded></item><item><title>Claude Code Hook 系統 Exit Code 實驗</title><link>https://tarrragon.github.io/blog/record/claude-code-hook-%E7%B3%BB%E7%B5%B1-exit-code-%E5%AF%A6%E9%A9%97/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/record/claude-code-hook-%E7%B3%BB%E7%B5%B1-exit-code-%E5%AF%A6%E9%A9%97/</guid><description>&lt;h2 id="研究背景">研究背景&lt;/h2>
&lt;p>在開發 Book Overview App 的過程中，我設計了一套完整的 Hook 系統防護體系，目的是&lt;strong>防止開發過程中的逃避行為和確保AI的工作品質&lt;/strong>。&lt;/p>
&lt;h3 id="-hook-防護體系設計起因">🔸 Hook 防護體系設計起因&lt;/h3>
&lt;p>AI會有逃避行為，以完成任務指標為優先而捨棄程式品質或者直接修改測試。&lt;/p>
&lt;p>我設計了以下幾種防止停止和強制繼續的 Hook 機制：&lt;/p>
&lt;h4 id="-check-todospy---todowrite-完成度檢查">&lt;strong>🔹 check-todos.py - TodoWrite 完成度檢查&lt;/strong>&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 防止未完成工作的會話結束&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">todos_pending&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">todos_in_progress&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;continue&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;stopReason&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Incomplete todos detected&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔹 &lt;strong>目的&lt;/strong>: 防止有未完成 TodoWrite 任務時意外停止&lt;/li>
&lt;li>🔹 &lt;strong>機制&lt;/strong>: 檢查 transcript 中的 TodoWrite 工具狀態&lt;/li>
&lt;li>🔹 &lt;strong>效果&lt;/strong>: 強制繼續工作直到所有對話任務完成&lt;/li>
&lt;/ul>
&lt;h4 id="-check-work-logsh---工作日誌完成度檢查">&lt;strong>🔹 check-work-log.sh - 工作日誌完成度檢查&lt;/strong>&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 當工作狀態為進行中時，exit 2 阻止停止&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">2&lt;/span> &lt;span class="c1"># 阻止會話結束，要求繼續工作&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔹 &lt;strong>目的&lt;/strong>: 確保當前版本的工作確實完成才允許停止&lt;/li>
&lt;li>🔹 &lt;strong>機制&lt;/strong>: 分析工作日誌的完成指標和技術債務狀況&lt;/li>
&lt;li>🔹 &lt;strong>效果&lt;/strong>: 避免「假性完成」，確保工作品質&lt;/li>
&lt;/ul>
&lt;h4 id="-check-next-objectivessh---版本系列目標檢查">&lt;strong>🔹 check-next-objectives.sh - 版本系列目標檢查&lt;/strong>&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 當版本系列仍在進行中時，exit 2 阻止停止&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">2&lt;/span> &lt;span class="c1"># 防止版本系列中途放棄&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔹 &lt;strong>目的&lt;/strong>: 防止版本系列開發中途放棄&lt;/li>
&lt;li>🔹 &lt;strong>機制&lt;/strong>: 檢查 todolist.md 中的版本系列完成度&lt;/li>
&lt;li>🔹 &lt;strong>效果&lt;/strong>: 確保版本系列目標達成才允許推進&lt;/li>
&lt;/ul>
&lt;h4 id="-check-5w1h-compliancepy---決策品質檢查">&lt;strong>🔹 check-5w1h-compliance.py - 決策品質檢查&lt;/strong>&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 當 5W1H 分析不合規時，阻止 TodoWrite&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>&lt;span class="s2">&amp;#34;decision&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;block&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;reason&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;5W1H analysis required&amp;#34;&lt;/span>&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔹 &lt;strong>目的&lt;/strong>: 防止逃避性思考和粗糙決策&lt;/li>
&lt;li>🔹 &lt;strong>機制&lt;/strong>: PreToolUse 階段攔截並檢查 5W1H 完整性&lt;/li>
&lt;li>🔹 &lt;strong>效果&lt;/strong>: 強制深度思考，杜絕逃避行為&lt;/li>
&lt;/ul>
&lt;h3 id="-遇到的邏輯衝突問題">🔸 遇到的邏輯衝突問題&lt;/h3>
&lt;p>在開發過程中，發現了奇怪的狀況：&lt;/p>
&lt;p>&lt;strong>原問題&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>check-todos.py&lt;/code> 顯示 &amp;ldquo;All todos completed successfully.&amp;rdquo;&lt;/li>
&lt;li>同時系統又顯示 &amp;ldquo;Stop hook prevented continuation&amp;rdquo; 訊息&lt;/li>
&lt;li>我的問題是：已完成所有 todos 為何還阻止停止？這訊息是誰吐出來的？&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>根本原因&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>不同 Hook 腳本檢查不同的 todo 來源（會話 vs 專案）&lt;/li>
&lt;li>會話的任務已結束，但是有其他hook觸發了避免停止的機制&lt;/li>
&lt;/ul>
&lt;h3 id="設計思路">設計思路&lt;/h3>
&lt;p>&lt;strong>防護體系的核心理念&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>多層防護&lt;/strong>：從對話層、工作層、版本層、決策層建立完整防護&lt;/li>
&lt;li>&lt;strong>零逃避容忍&lt;/strong>：任何逃避行為都會被自動檢測和阻止&lt;/li>
&lt;li>&lt;strong>品質強制&lt;/strong>：不符合品質標準的工作不允許繼續&lt;/li>
&lt;li>&lt;strong>使用者指引&lt;/strong>：被阻止時提供明確的修正指引和下一步行動&lt;/li>
&lt;/ul>
&lt;h3 id="exit-code-官方定義">Exit Code 官方定義&lt;/h3>
&lt;p>根據 Claude Code 官方文件，Hook 腳本的 Exit Code 具有特定含義：&lt;/p>
&lt;h4 id="exit-0---成功執行">&lt;strong>Exit 0&lt;/strong> - 成功執行&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">0&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔸 &lt;strong>正常成功執行&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>允許 Claude Code 繼續操作&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>不會產生任何阻止行為&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>用途&lt;/strong>: 檢查通過、條件滿足、正常完成&lt;/li>
&lt;/ul>
&lt;h4 id="exit-1---一般錯誤">&lt;strong>Exit 1&lt;/strong> - 一般錯誤&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">1&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔸 &lt;strong>非阻塞性錯誤&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>操作仍可繼續&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>表示&lt;/strong>: 有問題但不嚴重&lt;/li>
&lt;li>🔸 &lt;strong>用途&lt;/strong>: 輕微問題、建議性警告&lt;/li>
&lt;/ul>
&lt;h4 id="exit-2---阻止停止-關鍵">&lt;strong>Exit 2&lt;/strong> - 阻止停止 (關鍵!)&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">2&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔸 &lt;strong>阻止 Claude Code 停止會話&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>顯示 stderr 內容給 Claude&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>強制要求繼續工作&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>用途&lt;/strong>: 工作未完成、需要繼續開發&lt;/li>
&lt;li>🔸 &lt;strong>注意&lt;/strong>: 這是「阻止停止」而非「阻止繼續」&lt;/li>
&lt;/ul>
&lt;h4 id="exit-3---嚴重錯誤">&lt;strong>Exit 3+&lt;/strong> - 嚴重錯誤&lt;/h4>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="nb">exit&lt;/span> &lt;span class="m">3&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>🔸 &lt;strong>嚴重錯誤狀態&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>通常阻止繼續&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>自定義錯誤類型&lt;/strong>&lt;/li>
&lt;li>🔸 &lt;strong>用途&lt;/strong>: 需要立即處理的問題&lt;/li>
&lt;/ul>
&lt;h2 id="exit-2-的真正定義">Exit 2 的真正定義&lt;/h2>
&lt;h3 id="語意澄清">語意澄清&lt;/h3>
&lt;p>&lt;strong>🔸 錯誤理解&lt;/strong>:&lt;/p></description><content:encoded><![CDATA[<h2 id="研究背景">研究背景</h2>
<p>在開發 Book Overview App 的過程中，我設計了一套完整的 Hook 系統防護體系，目的是<strong>防止開發過程中的逃避行為和確保AI的工作品質</strong>。</p>
<h3 id="-hook-防護體系設計起因">🔸 Hook 防護體系設計起因</h3>
<p>AI會有逃避行為，以完成任務指標為優先而捨棄程式品質或者直接修改測試。</p>
<p>我設計了以下幾種防止停止和強制繼續的 Hook 機制：</p>
<h4 id="-check-todospy---todowrite-完成度檢查"><strong>🔹 check-todos.py - TodoWrite 完成度檢查</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 防止未完成工作的會話結束</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="k">if</span> <span class="n">todos_pending</span> <span class="ow">or</span> <span class="n">todos_in_progress</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">    <span class="n">output</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&#34;continue&#34;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&#34;stopReason&#34;</span><span class="p">:</span> <span class="s2">&#34;Incomplete todos detected&#34;</span><span class="p">}</span></span></span></code></pre></div><ul>
<li>🔹 <strong>目的</strong>: 防止有未完成 TodoWrite 任務時意外停止</li>
<li>🔹 <strong>機制</strong>: 檢查 transcript 中的 TodoWrite 工具狀態</li>
<li>🔹 <strong>效果</strong>: 強制繼續工作直到所有對話任務完成</li>
</ul>
<h4 id="-check-work-logsh---工作日誌完成度檢查"><strong>🔹 check-work-log.sh - 工作日誌完成度檢查</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 當工作狀態為進行中時，exit 2 阻止停止</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">exit</span> <span class="m">2</span>  <span class="c1"># 阻止會話結束，要求繼續工作</span></span></span></code></pre></div><ul>
<li>🔹 <strong>目的</strong>: 確保當前版本的工作確實完成才允許停止</li>
<li>🔹 <strong>機制</strong>: 分析工作日誌的完成指標和技術債務狀況</li>
<li>🔹 <strong>效果</strong>: 避免「假性完成」，確保工作品質</li>
</ul>
<h4 id="-check-next-objectivessh---版本系列目標檢查"><strong>🔹 check-next-objectives.sh - 版本系列目標檢查</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 當版本系列仍在進行中時，exit 2 阻止停止</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">exit</span> <span class="m">2</span>  <span class="c1"># 防止版本系列中途放棄</span></span></span></code></pre></div><ul>
<li>🔹 <strong>目的</strong>: 防止版本系列開發中途放棄</li>
<li>🔹 <strong>機制</strong>: 檢查 todolist.md 中的版本系列完成度</li>
<li>🔹 <strong>效果</strong>: 確保版本系列目標達成才允許推進</li>
</ul>
<h4 id="-check-5w1h-compliancepy---決策品質檢查"><strong>🔹 check-5w1h-compliance.py - 決策品質檢查</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 當 5W1H 分析不合規時，阻止 TodoWrite</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">{</span><span class="s2">&#34;decision&#34;</span><span class="p">:</span> <span class="s2">&#34;block&#34;</span><span class="p">,</span> <span class="s2">&#34;reason&#34;</span><span class="p">:</span> <span class="s2">&#34;5W1H analysis required&#34;</span><span class="p">}</span></span></span></code></pre></div><ul>
<li>🔹 <strong>目的</strong>: 防止逃避性思考和粗糙決策</li>
<li>🔹 <strong>機制</strong>: PreToolUse 階段攔截並檢查 5W1H 完整性</li>
<li>🔹 <strong>效果</strong>: 強制深度思考，杜絕逃避行為</li>
</ul>
<h3 id="-遇到的邏輯衝突問題">🔸 遇到的邏輯衝突問題</h3>
<p>在開發過程中，發現了奇怪的狀況：</p>
<p><strong>原問題</strong>:</p>
<ul>
<li><code>check-todos.py</code> 顯示 &ldquo;All todos completed successfully.&rdquo;</li>
<li>同時系統又顯示 &ldquo;Stop hook prevented continuation&rdquo; 訊息</li>
<li>我的問題是：已完成所有 todos 為何還阻止停止？這訊息是誰吐出來的？</li>
</ul>
<p><strong>根本原因</strong>:</p>
<ul>
<li>不同 Hook 腳本檢查不同的 todo 來源（會話 vs 專案）</li>
<li>會話的任務已結束，但是有其他hook觸發了避免停止的機制</li>
</ul>
<h3 id="設計思路">設計思路</h3>
<p><strong>防護體系的核心理念</strong>：</p>
<ul>
<li><strong>多層防護</strong>：從對話層、工作層、版本層、決策層建立完整防護</li>
<li><strong>零逃避容忍</strong>：任何逃避行為都會被自動檢測和阻止</li>
<li><strong>品質強制</strong>：不符合品質標準的工作不允許繼續</li>
<li><strong>使用者指引</strong>：被阻止時提供明確的修正指引和下一步行動</li>
</ul>
<h3 id="exit-code-官方定義">Exit Code 官方定義</h3>
<p>根據 Claude Code 官方文件，Hook 腳本的 Exit Code 具有特定含義：</p>
<h4 id="exit-0---成功執行"><strong>Exit 0</strong> - 成功執行</h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">exit</span> <span class="m">0</span></span></span></code></pre></div><ul>
<li>🔸 <strong>正常成功執行</strong></li>
<li>🔸 <strong>允許 Claude Code 繼續操作</strong></li>
<li>🔸 <strong>不會產生任何阻止行為</strong></li>
<li>🔸 <strong>用途</strong>: 檢查通過、條件滿足、正常完成</li>
</ul>
<h4 id="exit-1---一般錯誤"><strong>Exit 1</strong> - 一般錯誤</h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">exit</span> <span class="m">1</span></span></span></code></pre></div><ul>
<li>🔸 <strong>非阻塞性錯誤</strong></li>
<li>🔸 <strong>操作仍可繼續</strong></li>
<li>🔸 <strong>表示</strong>: 有問題但不嚴重</li>
<li>🔸 <strong>用途</strong>: 輕微問題、建議性警告</li>
</ul>
<h4 id="exit-2---阻止停止-關鍵"><strong>Exit 2</strong> - 阻止停止 (關鍵!)</h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">exit</span> <span class="m">2</span></span></span></code></pre></div><ul>
<li>🔸 <strong>阻止 Claude Code 停止會話</strong></li>
<li>🔸 <strong>顯示 stderr 內容給 Claude</strong></li>
<li>🔸 <strong>強制要求繼續工作</strong></li>
<li>🔸 <strong>用途</strong>: 工作未完成、需要繼續開發</li>
<li>🔸 <strong>注意</strong>: 這是「阻止停止」而非「阻止繼續」</li>
</ul>
<h4 id="exit-3---嚴重錯誤"><strong>Exit 3+</strong> - 嚴重錯誤</h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nb">exit</span> <span class="m">3</span></span></span></code></pre></div><ul>
<li>🔸 <strong>嚴重錯誤狀態</strong></li>
<li>🔸 <strong>通常阻止繼續</strong></li>
<li>🔸 <strong>自定義錯誤類型</strong></li>
<li>🔸 <strong>用途</strong>: 需要立即處理的問題</li>
</ul>
<h2 id="exit-2-的真正定義">Exit 2 的真正定義</h2>
<h3 id="語意澄清">語意澄清</h3>
<p><strong>🔸 錯誤理解</strong>:</p>
<ul>
<li>&ldquo;Stop hook prevented continuation&rdquo; = 阻止繼續工作</li>
</ul>
<p><strong>🔸 正確理解</strong>:</p>
<ul>
<li>&ldquo;Stop hook prevented continuation&rdquo; = 阻止了「停止會話」這個行為</li>
<li>實際效果在我腳本觸發的原因：當前會話還有todo清單未完成，強制繼續工作，不允許停止會話</li>
</ul>
<h3 id="實際應用場景">實際應用場景</h3>
<p>專案中的 Exit 2 使用案例：</p>
<h4 id="check-work-logsh"><strong>check-work-log.sh</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 當工作狀態為 &#34;IN_PROGRESS&#34; 時</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="k">if</span> <span class="o">[[</span> <span class="nv">$WORK_STATUS</span> <span class="o">==</span> <span class="s2">&#34;IN_PROGRESS&#34;</span> <span class="o">]]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;工作進行中，建議完成後再推進&#34;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="c1"># 輸出詳細說明到 stderr</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    cat &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="s">&lt;&lt;EOF
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="s">🔸 版本推進暫停 - 當前工作尚未完成
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="s">🔸 停止原因：
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="s">• 工作日誌顯示工作仍在進行中
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="s">• 完成度指標不足
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="s">• todolist.md 中有待辦任務
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="s">🔸 建議的 TodoWrite 任務：
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="s">請執行以下工作項目...
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="nb">exit</span> <span class="m">2</span>  <span class="c1"># 阻止停止，要求繼續工作</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="k">fi</span></span></span></code></pre></div><h4 id="check-next-objectivessh"><strong>check-next-objectives.sh</strong></h4>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 當版本系列狀態為 &#34;IN_PROGRESS&#34; 時</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="k">case</span> <span class="s2">&#34;</span><span class="nv">$SERIES_STATUS</span><span class="s2">&#34;</span> in
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="s2">&#34;IN_PROGRESS&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;版本系列仍在進行中&#34;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="c1"># 提供具體的待辦任務資訊</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        cat &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="s">&lt;&lt;EOF
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="s">🔸 版本推進暫停 - 當前版本系列仍在進行中
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="s">🔸 部分待完成任務範例：
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="s">• 修復UI測試中的類型問題
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="s">• 更新ViewModel層錯誤處理適配
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="s">🔸 建議的 TodoWrite 任務：
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="s">繼續版本系列開發...
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl">        <span class="nb">exit</span> <span class="m">2</span>  <span class="c1"># 阻止停止，要求繼續版本開發</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="k">esac</span></span></span></code></pre></div><h2 id="-hook-系統邏輯衝突解決方案">🔸 Hook 系統邏輯衝突解決方案</h2>
<h3 id="問題診斷">問題診斷</h3>
<p><strong>衝突場景</strong>:</p>
<ul>
<li><code>check-todos.py</code> 檢查 TodoWrite 工具（會話級別）</li>
<li>其他 Hook 腳本檢查 <code>todolist.md</code>（專案級別）</li>
<li>結果：TodoWrite 完成但 todolist.md 仍有待辦事項</li>
</ul>
<h3 id="解決策略">解決策略</h3>
<h4 id="方案一hook-腳本提供-todowrite-建議"><strong>方案一：Hook 腳本提供 TodoWrite 建議</strong></h4>
<p>在返回 <code>exit 2</code> 的 Hook 腳本中：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 檢查 todolist.md 中的未完成任務</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nv">PENDING_TODOS</span><span class="o">=</span><span class="k">$(</span>grep -c <span class="s2">&#34;\[ \]&#34;</span> <span class="s2">&#34;</span><span class="nv">$PROJECT_ROOT</span><span class="s2">/docs/todolist.md&#34;</span> 2&gt;/dev/null <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;0&#34;</span><span class="k">)</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="c1"># 在 stderr 中提供 TodoWrite 建議</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">cat &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="s">&lt;&lt;EOF
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="s">🔸 建議的 TodoWrite 任務：
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="s">請執行以下 TodoWrite 來管理具體工作項目：
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="s">TodoWrite([
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="s">  {&#34;content&#34;: &#34;完成當前版本核心開發工作&#34;, &#34;status&#34;: &#34;pending&#34;, &#34;activeForm&#34;: &#34;完成當前版本核心開發工作&#34;},
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="s">  {&#34;content&#34;: &#34;執行完整測試確保100%通過率&#34;, &#34;status&#34;: &#34;pending&#34;, &#34;activeForm&#34;: &#34;執行完整測試確保100%通過率&#34;}
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="s">])
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="s">EOF</span></span></span></code></pre></div><h4 id="方案二統一狀態檢查邏輯"><strong>方案二：統一狀態檢查邏輯</strong></h4>
<p>確保所有 Hook 腳本檢查相同的狀態來源，或者建立狀態同步機制。</p>
<h2 id="實際演練">實際演練</h2>
<h3 id="exit-code-選擇原則">Exit Code 選擇原則</h3>
<ul>
<li>🔸 <strong>Exit 0</strong>: 一切正常，可以繼續</li>
<li>🔸 <strong>Exit 1</strong>: 有小問題，但可以繼續</li>
<li>🔸 <strong>Exit 2</strong>: 工作未完成，<strong>禁止停止</strong>，必須繼續</li>
<li>🔸 <strong>Exit 3+</strong>: 嚴重問題，需要立即處理</li>
</ul>
<h3 id="hook-腳本設計模式">Hook 腳本設計模式</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="c1"># 🔸 檢查狀態</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">check_work_status<span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="c1"># 實作狀態檢查邏輯</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="c1"># 🔸 根據狀態決定 exit code</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="k">case</span> <span class="s2">&#34;</span><span class="nv">$WORK_STATUS</span><span class="s2">&#34;</span> in
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="s2">&#34;COMPLETED&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;工作已完成，可推進版本&#34;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">        <span class="nb">exit</span> <span class="m">0</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="s2">&#34;MOSTLY_COMPLETED&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;基本完成，建議檢查後推進&#34;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">        <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="s2">&#34;IN_PROGRESS&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;工作進行中，建議完成後再推進&#34;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">
</span></span><span class="line"><span class="ln">21</span><span class="cl">        <span class="c1"># 🔸 提供詳細的使用者指引</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">        cat &gt;<span class="p">&amp;</span><span class="m">2</span> <span class="s">&lt;&lt;EOF
</span></span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="s">🔸 停止原因說明
</span></span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="s">🔸 需要採取的行動
</span></span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="s">🔸 建議的 TodoWrite 任務
</span></span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">
</span></span><span class="line"><span class="ln">28</span><span class="cl">        <span class="nb">exit</span> <span class="m">2</span>  <span class="c1"># 阻止停止</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">    *<span class="o">)</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">        <span class="nb">echo</span> <span class="s2">&#34;工作未完成，需要繼續開發&#34;</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">        <span class="nb">exit</span> <span class="m">3</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">        <span class="p">;;</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="k">esac</span></span></span></code></pre></div><h3 id="使用者體驗優化">使用者體驗優化</h3>
<ul>
<li><strong>清楚的錯誤訊息</strong>: 使用 stderr 輸出詳細說明</li>
<li><strong>具體的行動指引</strong>: 告訴使用者需要做什麼</li>
<li><strong>TodoWrite 整合</strong>: 提供可執行的任務建議</li>
<li><strong>狀態一致性</strong>: 確保不同檢查機制的邏輯一致</li>
</ul>
<h2 id="-實際測試結果">🔸 實際測試結果</h2>
<h3 id="測試案例--check-work-logsh">測試案例 : check-work-log.sh</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ ./.claude/scripts/check-work-log.sh
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="c1"># 返回 exit 3，stderr 顯示：</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">🔸 版本推進暫停 - 工作未開始或缺乏完成指標
</span></span><span class="line"><span class="ln">4</span><span class="cl">🔸 停止原因：
</span></span><span class="line"><span class="ln">5</span><span class="cl">• 工作日誌缺乏完成指標 <span class="o">(</span><span class="nv">0</span> <span class="o">=</span> 0<span class="o">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">• todolist.md 中有 <span class="m">240</span> 個待辦任務
</span></span><span class="line"><span class="ln">7</span><span class="cl">
</span></span><span class="line"><span class="ln">8</span><span class="cl">🔸 建議的 TodoWrite 任務：
</span></span><span class="line"><span class="ln">9</span><span class="cl">請執行以下 TodoWrite 開始系統化工作...</span></span></code></pre></div><h3 id="測試案例--check-next-objectivessh">測試案例 🔸: check-next-objectives.sh</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">$ ./.claude/scripts/check-next-objectives.sh
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="c1"># 返回 exit 2，stderr 顯示：</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">🔸 版本推進暫停 - 當前版本系列仍在進行中
</span></span><span class="line"><span class="ln">4</span><span class="cl">🔸 部分待完成任務範例：
</span></span><span class="line"><span class="ln">5</span><span class="cl">• 修復UI測試中的類型問題
</span></span><span class="line"><span class="ln">6</span><span class="cl">• 更新ViewModel層錯誤處理適配
</span></span><span class="line"><span class="ln">7</span><span class="cl">
</span></span><span class="line"><span class="ln">8</span><span class="cl">🔸 建議的 TodoWrite 任務：
</span></span><span class="line"><span class="ln">9</span><span class="cl">請執行以下 TodoWrite 繼續版本系列開發...</span></span></code></pre></div><h2 id="-效果評估">🔸 效果評估</h2>
<h3 id="問題解決成果">問題解決成果</h3>
<ul>
<li>🔸 <strong>邏輯一致性</strong>: Hook 系統不再產生矛盾訊息</li>
<li>🔸 <strong>使用者體驗</strong>: 清楚知道為什麼被阻止和需要做什麼</li>
<li>🔸 <strong>工作流程</strong>: TodoWrite 與 todolist.md 狀態同步</li>
</ul>
<h3 id="關鍵學習">關鍵學習</h3>
<p>🔸 <strong>Exit 2 的真實含義</strong>: 阻止停止，要求繼續工作
🔸 <strong>stderr 的重要性</strong>: Claude Code 會顯示 stderr 給使用者
🔸 <strong>狀態檢查一致性</strong>: 不同檢查機制需要協調
🔸 <strong>使用者指引</strong>: 提供可執行的具體建議比抽象說明更有效</p>
<h2 id="後續改善方向">後續改善方向</h2>
<ul>
<li><strong>Hook 腳本標準化</strong>: 建立統一的錯誤處理和訊息格式</li>
<li><strong>狀態同步機制</strong>: 建立 TodoWrite 與 todolist.md 的雙向同步</li>
<li><strong>使用者體驗測試</strong>: 收集真實使用場景的反饋</li>
<li><strong>文件完善</strong>: 將這些經驗整理成團隊開發規範</li>
</ul>
<h2 id="-參考資源">🔸 參考資源</h2>
<ul>
<li><a href="https://docs.claude.com/en/docs/claude-code/hooks-guide">Claude Code Hooks Guide</a></li>
<li><a href="https://docs.claude.com/en/docs/claude-code/hooks">Claude Code Hook Events</a></li>
<li><a href="https://www.reddit.com/r/ClaudeAI/comments/1now8n7/cc_hook_that_made_my_life_easier_today">reddit網友分享 在有todo未完成的情況下用hook偵測會話轉階段，強迫AI繼續工作不要停下來</a></li>
</ul>
<hr>
]]></content:encoded></item></channel></rss>