Summary: This guide introduces a "foolproof switch" for Claude Code to avoid inefficient full-file reads. By combining prompt rules in CLAUDE.md and a Python hook script, it enforces progressive disclosure: first grep for structure, then read targeted sections with offset/limit parameters. This reduces token usage and improves accuracy.
场景说明
当 Claude Code 读取代码时,常常会倾向于直接读取整个文件。如果文件特别大(比如超过 5000 行),将这些内容全部塞进上下文会导致效率低下。
什么是"渐进式披露"?
这就像人类程序员接手新项目时的做法:不会一开始就通读 10 万行代码,而是先查看目录结构(ls),再搜索关键字(grep),最后只打开相关的几十行代码(read)。
Anthropic 的文档也一直强调这一点:先让模型通过搜索定位,再通过切片读取。
但在实际运行时,Claude Code 往往"太勤快",直接读取整个文件。因此,我们需要为它设置一个"防呆开关"。
Hook 工作机制
这是一个在 PreToolUse 阶段(工具调用前)进行拦截的 Python 脚本。它配合项目中的 CLAUDE.md 提示词,共同引导 Claude Code 进行精确的上下文读取。
核心逻辑
方案由两部分组成:
- 提示词规则
:在 CLAUDE.md中明确文件读取策略。 - 拦截脚本
:在工具调用前检查参数,并强制模型遵循策略。
为什么这个方法有效?
这利用了 LLM 的一个特性:它们会认真对待"报错信息"。当工具调用失败并返回明确的"推荐路径"时,Claude Code 会立即自我修正,从而被拉回"渐进式披露"的最佳实践路径。
如何配置
你需要准备两个部分:
项目根目录下的规则文件( CLAUDE.md或AGENTS.md)。实际执行拦截的 Python 脚本。
提示词(CLAUDE.md)
将以下内容添加到你的项目提示词文件中,以指导 Claude Code 的读取策略。
中文版本
文件读取策略
强制规则:每次调用 Read 工具时必须指定 offset 和 limit 参数,禁止使用默认值。
读取流程
- 侦察
:先用 Grep了解文件结构,或定位目标关键词行号。 - 精准打击
:使用 offset+limit精确读取目标区域。 - 扩展
:如果需要更多上下文,再调整 offset继续读取。
目标:保持上下文精准、最小化。若不遵守,工具调用将被 Hook 拦截。
English Version
File Reading Strategy
MANDATORY RULE: Every Read tool call MUST specify offset and limit parameters. Default full-file reads are prohibited for non-trivial files.
Workflow
- Recon
: Use Grepfirst to understand structure or locate keywords. - Surgical Read
: Use offset+limitto read only the relevant section. - Expand
: Adjust offsetto read more context only if strictly necessary.
Goal: Keep context precise and minimal. Violations will be blocked by the PreToolUse hook.
Hook(Python 脚本)
你可以从相关 GitHub 仓库获取该 Hook 文件,并配置到 Claude Code 中(如果不熟悉,也可以直接将文件交给 Claude Code 协助配置)。
https://github.com/Cedriccmh/cc-read-limit-hook
脚本虽然稍长,但逻辑简单:检查文件大小 → 检查参数 → 决定放行、自动修正或报错拦截。
效果
配置完成后,Claude Code 的行为模式将发生变化:
虽然增加了一步交互,但上下文极其干净。 Token 消耗大幅降低。 代码修改的准确率反而提高。
没有评论:
发表评论