10|Claude Code与Copilot:公开机制、可验证行为与未知内部
目标:能比较真实产品的上下文、委派和权限,而不把不同产品面、不同版本混为一谈。证据是2026-10-17读取的官方页面,不代表未来版本保持不变。
本章目录
沿着对象与状态理解本章
公开能力、观察到的行为与不可见内部应分栏记;没有公开证据的实现不补猜。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
把一个Agent任务拆成真正发生的几轮
同一句用户任务,为什么可能调用模型不止一次?
LLM生成下一步提议,宿主执行获准的动作,把结果再交给LLM。这是外层任务循环;每次模型调用内部还要经历逐Token生成。外层的一轮工具行动不等于内部生成一个Token,两种“循环”不能混用。
输入与适用条件:构造的只读教学任务:文件config.txt含timeout=30。泳道展示职责边界,不声称调用了真实商业API;数据和动作顺序固定。
1 / 8 · 1. 用户任务:读config.txt中的timeout
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
模型尚未看到磁盘文件。先区分用户给的任务与环境真实内容。
未读取默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
模型可以借助工具获得新证据,而不把一切都塞入参数。
怎样实现
按请求、校验、执行、结果回填、继续决策组织循环。
可能的代价与误解
忘记回填工具结果会让模型重复请求;把输出文本当执行证明会误报完成。
如何判断是否做对
对照每轮模型输入和工具日志,确认结果与call_id匹配。
1. 比较对象必须先明确
Claude Code CLI、IDE中的聊天、Copilot CLI、GitHub托管编码Agent,并非同一个运行环境。某项工具、Skill、记忆或MCP功能在一个产品面可用,不能自动推到另一个。比较模型能力时,还要控制实际模型、可用工具、网络、仓库索引、权限和执行环境,否则观察到的是整套系统差异。
官方文档公开了Claude Code的循环、上下文构成、自动清理与压缩、子Agent和记忆机制;Copilot CLI自定义Agent文档公开了profile与工具配置。两者并未提供所有内部Prompt和服务实现。对未公开部分,应写“未公开/未测”,而不是根据一次输出猜出固定算法。[N20][N21][N22]
2. 上下文不是只有聊天记录
Claude Code公开说明其上下文包含会话、工具结果、项目指令、记忆和按需加载内容,并存在清理旧工具输出与会话压缩机制。技能可先加载描述、使用时再读取内容。工具定义的发现方式也可能随产品实现变化,不能把一个旧版本的工具Token成本当作恒定值。[N20]
工程上要区分“文件已存在于项目”“工具已经读过”“目前仍在模型上下文”“被保存在外部记忆”四种状态。一个大文件先被读过,经过压缩后可能只剩摘要;后续需要精确代码时,应重新读取原始位置,而不是要求模型凭摘要恢复源码。
对多目录仓库,还应检查规则加载作用域。自动记忆与人工维护的项目指令具有不同生命周期,不能因为名字都含memory就视为同一权威。当前源码和用户明确要求应能纠正过期经验,而不是被历史摘要永久压住。
3. 子Agent不应被笼统描述为“完整继承”或“完全空白”
Claude Code文档描述独立子上下文,也存在fork当前会话的方式;委派模式不同,初始上下文不同。主Agent最终得到什么返回内容、工具调用是否留在子上下文、技能是否预加载,都需要按具体配置核实。[N21]
Copilot CLI的自定义profile包含描述、提示、可选工具列表和MCP配置;文档说明未限定工具时可以访问可用工具集合。但“可用工具”仍受宿主配置、连接和权限影响,不代表系统里任何MCP服务都自动登录可用。[N22]
从工程角度可拆成三层:工具发现决定看见哪些名称,Agent配置决定允许请求哪些工具,执行权限决定一次具体调用能否成功。模型选中工具是第四层。只修其中一层不能保证最终调用发生。
4. 一套低成本、可复查的宿主行为探针
本书没有在用户本机运行Codex、Claude或Copilot。下面是读者可自行执行的实验设计,不能当成已测结果:建立无秘密的样例仓库,根目录和子目录分别放一条无害、可辨认的规则;用同一简单任务在不同cwd启动;记录版本、加载提示与输出。然后显式调用一个只读自定义Agent,比较它能看到的工具和规则。
探针不应让模型仅回答“我已经加载了技能”。应设置必须使用该规则才能满足的可验证结果,例如生成一个规定键名的JSON,但同时避免把该键名直接泄露到用户任务中。即使结果符合,也只能作为间接证据;若宿主支持加载日志或上下文显示,应结合更直接证据。
压缩探针可以在长任务早期设置明确约束,中间加入正常工作记录,触发受支持的压缩,再让Agent继续一个依赖该约束的任务。还要保留未压缩对照、不同位置与重复试验。单次回忆成功不等于任何长任务都安全。
5. 权限与检查点的误区
一些工具提供文件编辑回退或会话恢复,但不应推断它能撤销外部邮件、远程部署或数据库写入。文件checkpoint、会话历史、执行日志与远程世界是不同状态空间。第08章的unknown状态在真实产品里同样需要考虑。
配置“只读审查”也要检查工具能力。如果审查Agent能执行任意Shell,实际权限可能超过文字描述。应由执行器限制,而不是只写一句“不修改文件”。另一方面,不必对每次正常读文件都要求人工批准;用边界清晰的沙箱可以减少审批疲劳。
6. 面向rd-skills这类扩展层的最佳取舍
扩展层应该增加宿主欠缺的专业知识与准确路由,而不是重复实现宿主已有的会话、工具、持久化和权限系统。先确认具体失败发生在skill描述、加载边界、专业内容、返回证据还是宿主自身。若正确技能已可见但内容泛泛,继续优化router不会解决专业质量问题。
一个高价值改动的例子:某技能在明确不相关任务误加载,添加适用边界及反例,并在误加载与必须加载任务上共同验证。一个低价值改动的例子:因为担心任何任务遗漏,默认加载所有专业资料,再额外建立多个路由Agent审查。后者同时增加上下文、延迟与冲突,必须有非常明确的实测收益才能成立。
7. 比较结论应该如何书写
严谨结论应写成:“在某版本CLI、某仓库、某权限与工具配置下,任务集X观察到Y;未测试托管版或其他模型。”不能写成“Claude总是这样、Copilot永远那样”。产品行为会变,可信工程知识要能区分稳定原理和版本事实。
本章验收:能够为一次技能未生效列出至少三个相互竞争的解释,并设计最少额外调用来区分它们。优先获取可观察配置和运行证据,避免通过模型自述或不断增加规则来猜原因。
黑箱产品实验:只改一项指令来源
输入与条件。准备同一仓库同一任务,A运行在仓库指令缺失时,B只新增只读规则文件,其余工具权限与模型配置不变。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1记录输入条件 | 版本、表面、规则位置和发现日志 | 保证能解释差异。 |
| 2执行A/B | 观察是否读取规则以及是否提出写动作 | 不只看最终答复是否客气。 |
| 3加入执行边界 | 工具权限始终只读 | 避免为了测试而实际产生越权副作用。 |
| 4解释结果 | B提出写动作减少 | 只能说明这组条件下行为变化,不揭示闭源内部Prompt全文。 |
| 5重复 | 相同任务多次与相邻任务对比 | 区分偶然采样和稳定影响。 |
把过程连起来。公开文档与黑箱行为实验可以互补,但不能由一次行为推断全部内部实现。
边界与反例。这是实验设计而非已执行的商业产品测试,没有虚构胜率。