Repository navigation
摩擦:复杂度预算把按需加载的 references/ 当常驻字节计价,使官方 progressive disclosure 在本仓变成「绕过预算」 #10
Description
主要领域:领域/横向
原始观察与影响
给 orchestrated-collaboration 补一条判据时撞到两层摩擦,第二层是结构性的。
第一层(本次触发点):第零节与第三节都以「Orca 不可用」作分支判据,但全文没有一处定义如何测出它——可用性实际由人工声明。APS 的 references/pre-action-gates.md G1 已经规定「会改变行动的能力/工具状态主张,有低成本安全探针则实测」,本 Skill 自身没有执行这条门。
第二层(本 Issue 正题):要按 G1 补上判据,就得让执行者知道用什么探针。但 resource-closeout-does-not-copy-cli-list 用 mustNotContain 钉死了「Skill 内不出现具体 CLI 命令」,唯一允许的是发现入口 orca skills get orchestration --full。第一版补出来的步骤因此是「先实测,再读指南」——探针方法在下一步才读到,执行者到第一步就卡住。该顺序矛盾现有测试测不出来(只校验字符串与字节,不校验可执行性),本次已靠把「读指南」与「实测」合并为同一步就地解决,未新增任何引用文件。
但这个解法只在探针足够简单、能塞进一行时成立,不具一般性:一旦判据需要多步或分支(例如先判运行面就绪、再判是否存在已连接的远端 runtime、失败分支各自不同),主合同就只剩两条路——要么写进具体命令(撞 mustNotContain),要么新增 references/(撞预算)。下一条稍复杂的判据就会同时撞上这两堵墙,所以这里请求的是口径裁决,不是本次改动的放行。
按 Anthropic 官方 Agent Skills 架构,这个矛盾的标准解法是把具体探针放进 Level 3 的 references/:主合同保持工具无关,执行者按需读取可执行细节。但本仓 complexityBudget.corpusMaxUtf8Bytes 把 SKILL.md 与 references/*.md 合并计价,并在注释里把这条路径定义为「否则把正文挪进 references 就能绕过」。结果是:官方推荐的修法在本仓被判为绕过预算,而预算已经没有余量执行它。
证据与复现边界
- 时间:2026-08-17;环境:
main@ad07742,Node 24 口径(本机 v26.3.1),全部字节按 LF 规范化。 - 预算实测(复现:按
tests/workflow-routing.test.ts第 8.5 节同一算法遍历plugins/*/skills/*/SKILL.md与references/*.md):- 语料合计 208,913 / 209,000,余量 87 字节。
- 其中
SKILL.md合计 149,413 字节,references/*.md合计 59,581 字节 —— 28.5% 的预算花在按官方模型「未触发即不进上下文」的字节上。
- 官方口径(
https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview):Level 1 metadata(name+description)常驻系统提示;Level 2SKILL.md正文仅在触发时加载;Level 3 引用文件按需读取。原文:「until a Skill is triggered, only its name and description occupy context.」 - 按该模型,本仓真实常驻成本是 8 个
description(各 ≤1000 字节门,合计约 7KB),而不是 209KB。 - 闸自身的口径不自洽:第 8.5 节只累计
references/顶层*.md,adaptive-problem-solving/references/method-registry/cards/*.md(30 张方法卡)完全不计入。也就是说「防绕过」的闸已经存在一条更大的未计价路径,当前口径既拦不住绕过,又惩罚了正当拆分。 - 本次改动的实际代价:主 Skill 21,692 → 21,775 字节(+83,已用两处置换抵扣),语料 208,996 / 209,000,全仓余量降到 4 字节。若按官方形态把探针放进 Level 3(新增一份
references/orca-runtime.md,约 1KB),当前规则下无法落地。
候选模式与替代解释
事实:预算口径把 Level 2 与 Level 3 同价;预算余量已接近零;一次补判据即耗尽余量;闸对嵌套 references 不计价。
当前解释:预算模型建立时把「Skill 语料」等同于「会被加载进上下文的字节」(第 8.5 节注释原话)。这个等式对 Level 2 成立,对 Level 3 不成立。因此预算在度量一个比真实常驻成本大一个数量级的量,副作用是任何新判据都必须先砍旧判据,且正当的 progressive disclosure 拆分得不到任何预算回报(adaptive-problem-solving 0.2.12 把主合同从 22,537 压到 8,812,语料总量并未因此下降)。
最强替代解释:预算的真实目的可能不是"控常驻上下文成本",而是"控方法资产总复杂度"——即防止资产无限膨胀、维护面失控。若如此,把 Level 3 计入是有意为之,本 Issue 的前提不成立,正确处置是维持规则并要求每次新增都置换等量旧内容。
使该模式不再成立的证据:负责人确认预算目标是总复杂度而非上下文成本;或实测显示运行端在未触发 Skill 时也会加载 references/(若成立,Level 3 与 Level 2 同价就是正确的,官方文档与实际实现不符)。后者是可低成本证伪的——在两端各起一次新会话,不触发任何 Skill,核对上下文中是否出现 references 内容。
当前处置、停止谓词与升级条件
- 已有缓解:本次改动已按现规则落地,不新增
references/,探针要求以工具无关措辞写入主合同并与读指南合并为同一步,用两处置换抵扣净增(第零节降级复述改为指向第三节;「Orca 的当前能力与本机样本」并入第三节开头)。两个符合性套件通过,语料 208,996 < 209,000。 - 已知未验证:该改动仅通过字符串与字节校验,未在任一运行端做产品行为验证(
docs/conformance.md的「产品行为」证据层级);skillLifecycle.lastVerified保持2026-08-15未动,因为本版未执行该 Skill 登记的最少复核步骤。 - 停止谓词:若负责人确认预算目标是总复杂度,则本 Issue 就地关闭为「按设计」,Orca 探针维持当前工具无关形态,顺序矛盾改由指南侧解决。
- 升级条件:若确认预算目标是上下文成本,则需要一次负责人决定——是把 Level 3 移出
corpusMaxUtf8Bytes另设独立上限,还是保留合并计价并登记一次预算例外。两条路都会改变后续每一次方法资产改动的成本,超出单次 PR 可自决范围。
关联合同与相邻范围
- 关联
tests/workflow-routing.test.ts第 8.5 节与tests/workflow-routing.json的complexityBudget。 - 关联
adaptive-problem-solving0.2.12的主合同拆分(同类操作的既有先例)。 - 本项不触碰:
descriptionBudget(1000 UTF-8 字节门有 2026-08-11 三端实测支撑,与本项无关);maxSkills与agent-control#57已登记的例外;任何运行端安装或三端指纹验收。
Activity
zaurakworks commentedon Aug 17, 2026
第一批实施回执
PR #17 已提交:
f6300a4b7384938997c09ac7bb7b742cfd99fc54。已完成:
SKILL.md、递归 L3references/**/*.md与 L2+L3 维护面分栏;corpusMaxUtf8Bytes假口径,旧 208,420/209,000 数值只作为已退役缺陷保留;验证:
git diff --check:PASS;conformance:SUCCESS;PR 当前 OPEN、MERGEABLE、非 Draft。下一批按已记录顺序审阅
github-collaboration六项。重点不是把 127KB 压小,而是逐项找出只有它承载的安全边界;普通 Agent + 明确 Issue 已覆盖的行为直接退役,不移入另一份 Skill。zaurakworks commentedon Aug 18, 2026
迁移通知:当前 Plugin/Skill 源码与双端 Marketplace 已进入
zaurakworks/agent-system。本事项仍保留原编号、正文、评论和状态;在目标仓建立明确 successor 或在 source 中完成收口前,不把迁移解释为已验收、已采用或已关闭。真实 Codex Plugin 显式/负例与 Claude 证据仍缺,因此 source archive 继续被阻塞。迁移索引:zaurakworks/agent-system#70
目标实现:https://github.com/zaurakworks/agent-system/tree/main/plugins