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许可证开源。