Command Code的coding agent通过优化文件读取策略(精确行范围、避免无用的minified行全量加载),每月节省数十亿Token,降低推理成本。
2026 年 8 月 9 日,Ahmad Awais 在 X 上分享了一篇关于 Command Code(他的编程 Agent)中 read 工具的深度分析。声称很大:read 工具每月节省数十亿个 token。这篇完整的文章现在位于 Command Code 文档中。
这篇文章是我对那篇帖子的总结,用简单的英文写成。如果你做 Agent 开发,或者只是使用 Agent,这些经验都很有价值。
编程 Agent 时时刻刻都在读取文件。每次编辑都从一次读取开始。每次搜索结果都变成一次读取。一次规划步骤会打开三个文件。Command Code 每月大约有 5000 万次读取。
每次读取都要消耗 token。如果一次读取带入了 500 个无用 token,那一个月就是 250 亿个无用 token。更糟糕的是,这些 token 会留在对话中,之后每一轮都会再次计费。
这就是为什么编程 Agent 感觉烧钱。账单主要是读取,而不是什么巧妙的推理。
可以把 read 工具想象成编译器。它把文件转化为模型的上下文。里面的每一个小选择都是一次 token 决策,重复数百万次。
Claude Code 的 read 工具很简单。要求它读取一个 3000 行的文件,它就返回全部 3000 行。要求读取一个包含 3900 字符的单行压缩文件,它就返回整行。没有任何限制。
这对 Claude Code 是可行的,因为它的模型足够强大,可以忽略噪音。它靠烧更多 token 来完成任务。
Command Code 运行在开源模型上。那些模型处理不了杂乱的读取。用户也要为每个 token 付费。所以 Command Code 必须少花 token。这一条约束倒逼了下面的所有设计决策。
不是一条限制,而是三条。每个文件最多 2000 行、每次读取最多 128 KB、每行最多 2000 字符。每条限制各挡一类坏文件:大文件、宽文件、单行压缩文件。
用清晰的提示替代沉默。如果文件是空的,它会说"file is empty"。如果读取超出了末尾,它会说"try a smaller offset"。模型知道发生了什么、接下来该做什么,于是停止猜测和重试。
对棘手的文件名自动重试。macOS 给截图起的名字包含特殊字符,看起来正常实则不然。工具在放弃前会重试 7 个版本的名称。
输入错误时的"Did you mean?"。如果文件没找到,它会给出接近的匹配建议。这能捕捉到像 AGENT.md 和 AGENTS.md 这样的失误。
拒绝危险文件。它不会读取 /dev/zero 或 /dev/urandom。这些文件永不结束,读取它们会让 Agent 永远挂起。
使用后过期的缓存。如果同一个文件被读取了两次,第二次读取会返回一条简短备注。但这条备注在一次使用后就会移除,所以模型永远不会指向过时的上下文。
图片是压缩而非丢弃。一张 4K 截图会被逐步压缩直到适合大小。工具也会告诉模型压缩后的新尺寸,这样点击图片时仍然能指向正确位置。
Notebook 变成干净的文档。原始的 .ipynb 文件是杂乱的 JSON。工具返回带标签的单元格,并把图表作为图片附加,这样一个大表格就不会把整个读取预算吃光。
Command Code 将自己的 read 工具与其他九个主流框架做了对比:Claude Code、OpenCode、Cline、Kilo、Codex、Grok、Hermes、pi 和 OpenClaw。大多数都有基本的限制。但很少有额外功能:文件名重试、清晰的恢复消息、或危险文件拦截。
这些额外功能不会在演示中出现。它们在长会话进行到第九个小时、一次读取失败且模型需要一条退路时,才真正发挥作用。
一个坦诚的说明:文章说基准测试本身是由 AI 生成的,人类审核很少,作者预期有一些错误。read 工具本身经过了一打工程师在整个发布周期中的审查。
给你的工具加上恢复消息。工具失败时应该说明发生了什么、以及接下来发什么。沉默会让模型去猜。
修复不可见的失败。如果一个问题对模型是不可见的,要在工具里修复它,而不是在 prompt 里修。
先检查便宜的东西。限制、输入检查、和危险路径的拦截名单可以阻止昂贵的循环。
约束是一种特性。被迫节省 token 促使 Command Code 打造了一个更好的工具。
我的看法:read 工具看起来很无聊,但它是一个 Agent 框架中最重要的部分。这篇文章是我见过的最好的一篇解释为什么的文章。
你首先会检查 Agent 框架中的哪个工具?我会从那个返回空结果的工具开始。