文件精准读写与工具权限

给 Claude Code 发一句 Hi 会发生什么 提到过,Claude Code 每轮对话都会给模型带上一份工具列表(tools 数组)。

文件操作是 Claude Code 里调用最频繁的工具,由三个工具承担:Read 读文件,Edit 编辑文件,Write 写文件。

读写文件看起来是最简单的操作,但让一个 LLM 来做,会碰到几个棘手的问题:

  • 模型可能产生幻觉,没读过一个文件就直接去改,凭想象编造文件内容把原文件搞乱
  • 模型读完一个文件之后,用户可能在编辑器里改了同一个文件,模型再来写就会把用户的改动覆盖掉
  • 一个 500 行的文件只改一行,如果每次都让模型重新输出完整的 500 行,token 消耗太大

Claude Code 围绕这三个问题做了一套状态管理机制。这篇先看工具描述里的设计,再拆解背后的实现。