← All Articles

Seeing Like an Agent: How We Design Tools in Claude Code — 精读笔记

Thariq Shihipar · Original

核心命题

给 Agent 设计工具,关键不是”做最强的工具”,而是做匹配模型当前能力的工具。能力变了,工具也要跟着变。设计方法论不是一次性正确,而是持续观察模型输出、持续迭代。

“You learn to see like an agent.” — 你学会像 Agent 一样看。

四个案例

1. AskUserQuestion — 同一需求的三次迭代

需求:提升 Claude 向用户提问的能力(elicitation),降低用户回答摩擦。

迭代 方案 结果 失败原因
v1 给 ExitPlanTool 加 questions 参数 失败 一个工具承载两个语义(“已决定” + “有疑问”),模型困惑
v2 特殊 Markdown 格式输出问题 失败 自由文本格式不稳定,模型经常漂移
v3 独立工具 + 模态框阻塞 成功 语义清晰,模型”喜欢”调用

关键洞察: - 一个工具不应承载语义矛盾的两个功能 - 结构化输出的责任放在 tool schema 上,不要放在 prompt engineering 上 - 模型对工具有”偏好”——设计得好的工具模型会自然倾向调用;模型不理解怎么调用的工具,设计再好也白搭

2. Todos → Tasks — 工具也有保质期

核心教训:“As model capabilities increase, the tools that your models once needed might now be constraining them.”

实用建议:只支持少量能力相近的模型,工具设计可以聚焦。

3. 搜索界面 — 从”喂上下文”到”自己找上下文”

演化路径:RAG 预索引 → Grep 工具自搜 → Skills 渐进式披露(progressive disclosure)

关键转变:上下文应该是模型自己找的,不是被塞给它的。模型越聪明,给它搜索工具的 ROI 越高。Skills 引入了递归文件引用机制,让模型沿引用链逐层发现上下文。

4. Claude Code Guide 子 Agent — 不加工具也能扩能力

Claude Code 约 20 个工具,团队经常审视每个是否必要。加新工具的门槛高,因为每多一个选项就多一份模型的认知负担。

解决”Claude 不了解自身功能”的问题: - 塞 system prompt → 上下文腐蚀 ✗ - 给文档链接自查 → 大段文档涌入主上下文 ✗ - 子 Agent 代查,只传答案回来 → 主上下文干净 ✓

设计原则提炼

  1. 工具要匹配模型能力形状:不是做最强的工具,是做模型用得顺的工具
  2. 模型偏好是验证标准:模型”喜欢”调用 = 设计成功;模型不理解怎么调用 = 设计失败
  3. 工具有保质期:定期审视,模型变强后曾经有用的工具可能变成约束
  4. 认知负担最小化:能不加工具就不加,用渐进式披露(子 Agent / Skills)代替
  5. 让模型主动构建上下文:给搜索工具比塞上下文更好
  6. 一个工具一个语义:不要让一个工具承载矛盾的功能

亮点

缺失

关联