AI News HubLIVE
站内改写

Show HN:防止並行AI編碼會話互相覆蓋交接檔案

一個開源工具透過檔案內所有權標記和PreToolUse鉤子,阻止並行AI編碼會話意外覆蓋彼此的交接檔案,解決會話間衝突問題。

文章情報

工程師中級

要點

  • 交接檔案首行包含會話ID作為所有權標記,鉤子在寫入前驗證標記匹配。
  • 覆蓋寫入、編輯和Shell重定向三種方式都被保護,防止繞過。
  • 初始寫入會失敗,但返回會話ID供模型複製後重試,實現一次握手。
  • 支援Claude Code和Gemini CLI兩種工具架構,且設計為故障安全模式。

為什麼重要

這條新聞值得關注,因為交接檔案首行包含會話ID作為所有權標記,鉤子在寫入前驗證標記匹配。

技術影響

可能影響模型選型、推理成本、產品能力和評測基準。

許多AI編碼助手提供“交接”功能,將當前會話的狀態儲存到Markdown檔案中,以便在壓縮或新會話後恢復上下文。然而,現有工具很少解決一個關鍵問題:並行會話的衝突覆蓋。當兩個會話同時操作同一倉庫,或者在一臺機器上恢復會話而另一臺機器上有後臺代理執行時,交接檔案會被互相覆蓋,導致上下文丟失。

一個名為“claude-handoff-guard”的開源專案透過創新的檔案內所有權機制解決了這一問題。其核心思想是:每個交接檔案的第一行是一個所有權標記,包含建立該檔案的會話ID。這個標記隨檔案在Git中的移動而存在,無需額外的側車鎖檔案。

實現的關鍵在於一個PreToolUse鉤子,它在每次檔案寫操作前讀取當前會話的ID,並與磁碟上檔案內容中的標記以及即將寫入內容中的標記進行比較。如果不匹配,則阻止寫入。有趣的是,模型本身無法直接獲取其會話ID,因此首次寫入新交接檔案時會故意失敗,並在失敗訊息中返回會話ID,提示模型將其作為第一行插入後重試。這樣,每次新檔案只需一次失敗握手即可建立所有權。

防護覆蓋所有檔案變更途徑:寫入操作驗證新內容中的標記,編輯操作檢查磁碟上的標記,Shell重定向(如>、>>、tee、sed -i)也被攔截。同時,該鉤子支援Claude Code和Gemini CLI兩種工具架構,防止只保護一種而忽略另一種。

專案還包含其他輔助鉤子:會話啟動時列出現有交接檔案並檢測分組重疊;停止時提醒使用者若沒有交接檔案則提醒一次;Git預提交鉤子阻止包含兩個會話交接檔案的提交。此外,提供了遷移指令碼和測試套件。

設計哲學強調“故障安全”,即所有鉤子捕獲內部錯誤並返回0,因此鉤子的bug不會阻塞會話。使用者可以透過環境變數或臨時檔案繞過限制,但繞過行為會被記錄以供審計。

專案作者坦誠其侷限性:只能防止無意覆蓋,無法阻止人為故意覆蓋;不檢查檔名中的令牌與真實分支匹配(跨裝置恢復時故意如此);存在極小的TOCTOU競爭條件。專案採用MIT許可證開源。