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許可證開源。