gstack 模型 Overlay 机制解析:opus-4-7 行为补丁如何修正单一模型的提问节奏回归 gstack 模型 Overlay 机制解析opus-4-7 行为补丁如何修正单一模型的提问节奏回归【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack本篇以 model-overlays/opus-4-7.md 为核心讲解 gstackGarry Tan 的 Claude Code 工具集中模型行为补丁Model Overlay的设计与实现如何为 Opus 4.7 这个特定模型写入三条行为指令、如何借助{{INHERIT:claude}}继承基础层指令、以及渲染管线如何保证这些补丁在优先级上从属于技能工作流。读完本篇你将能理解 gstack 多模型适配的整体机制并能自行解读乃至新增一个模型的 overlay 文件。一、Overlay 的定位一份只针对某个模型的行为补丁gstack 需要同时服务 Claude、GPT、Gemini、o 系列等多个模型家族。不同模型对同一段提示词的脾气不同——有的爱过度思考有的会把批量提问当成默认习惯。gstack 的解法是为每个模型家族准备一份独立的 Markdown 补丁文件放在model-overlays/目录下文件名为{model}.md。model-overlays/opus-4-7.md 就是其中专门针对 Claude Opus 4.7 的一份。它的内容结构非常克制第一行是继承指令其余是三条加粗标题的行为指令nudge{{INHERIT:claude}} **Effort-match the step.** Simple file reads, config checks, command lookups, and mechanical edits dont need deep reasoning. Complete them quickly and move on. Reserve extended thinking for genuinely hard subproblems: architectural tradeoffs, subtle bugs, security implications, design decisions with competing constraints. Over-thinking simple steps wastes tokens and time. **Pace questions to the skill.** If the current skills text contains STOP. AskUserQuestion anywhere, pace one question per turn — emit the question as a tool_use, stop, wait for the users response, then continue. Do not batch. A finding with an obvious fix is still a finding and still needs user approval before it lands in the plan. Only batch clarifying questions upfront when (a) the skill has no STOP. AskUserQuestion directive AND (b) you need multiple unrelated clarifications before you can begin. When in doubt, ask one question per turn. **Literal interpretation awareness.** Opus 4.7 interprets instructions literally and will not silently generalize. When the user says fix the tests, fix all failing tests that this branch introduced or is responsible for, not just the first one (and not pre-existing failures in unrelated code). When the user says update the docs, update every relevant doc in scope, not just the most obvious one. Read the full scope of what was asked and deliver the full scope. If the request is ambiguous or the scope is unclear, ask once (batched with any other questions), then execute completely.这三条指令分别针对 Opus 4.7 观察到的三个行为倾向简单步骤过度消耗推理预算、提问节奏与技能定义的门控不一致、对模糊指令的字面化收窄。下面逐条展开。二、三条指令逐条解析2.1 Effort-match the step推理深度要匹配步骤难度第一条指令要求模型把思考力度和步骤难度对齐读文件、查配置、查命令、机械性编辑这类简单步骤快速完成即可把扩展思考extended thinking留给真正难的子问题——架构权衡、隐蔽 bug、安全影响、带竞争约束的设计决策。这是对 Opus 4.7什么都想深想一遍倾向的纠偏同时用过度思考简单步骤浪费 token 和时间给出了明确的代价信号。2.2 Pace questions to the skill提问节奏要服从技能文本这是整个 overlay 里最核心、也是唯一与一次真实线上回归直接相关的指令。test/model-overlay-opus-4-7.test.ts 的文件头注释记录了完整的事故背景v1.6.4.0 的回归Opus 4.7 overlay 里曾有一条 Batch your questions批量提问指令而它在渲染时位于技能级提问节奏规则之上。Opus 4.7 习惯自上而下读取指令把批量提问吸收成了环境默认值结果不再遵守技能里的STOP. AskUserQuestion门控——计划评审的逐条确认节奏整个失效。v1.7.0.0 的修复把那段批量提问指令替换为 Pace questions to the skill把一次只问一个变成默认把批量提问降级为需要满足两个前提条件的显式例外当前技能文本中不含STOP. AskUserQuestion指令且开工前确实需要多个互不相关的澄清。指令还强调了一个容易踩坑的细节一条显而易见能修的发现finding仍然是发现在落入计划之前必须经过用户批准不能因为答案显然就跳过提问。执行机制上要求以tool_use发出问题、然后停止、等待用户响应、再继续——测试用例 test/model-overlay-opus-4-7.test.ts 专门断言了渲染产物里包含tool_use字样确保这条机制性要求没有被后续改写丢失。2.3 Literal interpretation awareness字面化执行的边界Opus 4.7 会严格按字面执行指令、不会默默泛化。这既是优点也是风险用户说修一下测试它可能只修第一个失败的测试。这条指令显式划定了字面执行的合理外延修的是本分支引入或本分支负责的全部失败测试而不是第一个也不包括无关代码里既有失败更新文档要更新范围内所有相关文档而不只是最明显的那一份。指令给出的操作原则是读全请求范围、交付完整范围范围确实模糊时问一次可与其他问题合并然后完整执行。三、INHERIT 继承机制opus-4-7 站在 claude 基础层之上opus-4-7.md 第一行的{{INHERIT:claude}}声明它继承 model-overlays/claude.md——所有 Claude 系模型共享的基础补丁内容包括Todo-list discipline多步计划中每完成一项单独标记完成不要到最后批量勾掉发现某项不需要做就标记 skipped 并附一行理由Think before heavy actions重构、迁移、非平凡新功能这类重操作先简述思路再动手让用户可以低成本纠偏Dedicated tools over Bash优先用 Read/Edit/Write/Glob/Grep 等专用工具而不是cat、sed、find、grep等 shell 等价物专用工具更便宜也更清晰。继承的解析由 scripts/resolvers/model-overlay.ts 完成。其核心逻辑是const INHERIT_RE /^\s*\{\{INHERIT:([a-z0-9-](?:\.[0-9])*)\}\}\s*\n/; export function readOverlay(model: string, seen: Setstring new Set()): string { if (seen.has(model)) return ; // cycle guard seen.add(model); const filePath path.join(OVERLAY_DIR, ${model}.md); if (!fs.existsSync(filePath)) return ; const raw fs.readFileSync(filePath, utf-8); const match raw.match(INHERIT_RE); if (!match) return raw.trim(); const baseModel match[1]; const base readOverlay(baseModel, seen); const rest raw.replace(INHERIT_RE, ).trim(); if (!base) return rest; return ${base}\n\n${rest}; }可以确认几个关键设计见 scripts/resolvers/model-overlay.ts正则锚定首行只有文件第一行允许前导空白是{{INHERIT:xxx}}时才触发继承基座内容会拼接在本文件其余内容之前——这正是基础指令先读到、特定模型补丁后读到的物理顺序循环保护seen集合防止a 继承 b、b 继承 a的死循环遇到环直接返回空串优雅降级文件不存在或ctx.model未设置时返回空字符串而不是报错渲染管线不会因为 overlay 缺失而中断见 scripts/resolvers/model-overlay.ts 头注释声明的四级优先级基础缺失时不阻塞如果基座文件不存在只渲染本文件剩余部分if (!base) return rest。测试用例 test/model-overlay-opus-4-7.test.ts 断言了继承链的实际效果渲染opus-4-7的产物中同时包含 claude 基座的 Todo-list discipline 和包装层的从属措辞 subordinate同时断言反向不成立——直接渲染claude时不会带上 opus-4-7 专属的 Pace questions 指令见 test/model-overlay-opus-4-7.test.ts即指令的归属是单向的提问节奏补丁只属于 opus-4-7不会污染其他 claude 模型。四、渲染管线补丁从哪里进入会话提示词overlay 不是独立生效的它由 scripts/resolvers/preamble.ts 在生成技能前导preamble时注入。scripts/resolvers/preamble.ts 中的渲染顺序被一段注释固定了下来// AskUserQuestion Format renders BEFORE the model overlay so the pacing rule // is the ambient default; the overlays behavioral nudges land as subordinate // patches. Opus 4.7 reads top-to-bottom and absorbs the first pacing directive // it hits; reversing this order regresses plan-review cadence (v1.6.4.0 bug). ...(tier 2 ? [generateAskUserFormat(ctx)] : []), generateBrainSyncBlock(ctx), generateModelOverlay(ctx), generateVoiceDirective(tier),这段注释把事故教训固化成了管线不变量AskUserQuestion 格式规则必须渲染在模型 overlay 之前。因为 Opus 4.7 自上而下读取并吸收先遇到的节奏指令让技能的提问格式先成为环境默认overlay 的 nudge 才以从属补丁的身份落在后面——把顺序反过来就会重演 v1.6.4.0 的节奏回归。这与 scripts/resolvers/preamble.ts 中的调用位置互为印证也解释了为什么 overlay 文件本身不能把批量提问放在任何技能门控规则之前。此外升级检查生成器 scripts/resolvers/preamble/generate-upgrade-check.ts 里有一条功能发现逻辑当用户首次遇到 overlay 时.feature-prompted-model-overlay标记不存在会提示 Model overlays are active. MODEL_OVERLAY shows the patch.让终端用户意识到自己的会话提示词里确实挂载了模型行为补丁。五、优先级包装overlay 永远从属于技能指令generateModelOverlay在返回 overlay 内容前会先包一层从属声明见 scripts/resolvers/model-overlay.tsreturn ## Model-Specific Behavioral Patch (${ctx.model}) ${precedence} ${content};默认措辞是The following nudges are tuned for the {model} model family. They aresubordinateto skill workflow, STOP points, AskUserQuestion gates, plan-mode safety, and /ship review gates. If a nudge below conflicts with skill instructions, the skill wins. Treat these as preferences, not rules.这段包装标题对所有 overlay 无条件生效头注释明确要求 The subordination language is part of the wrapper heading so it appears with every overlay regardless of file content把 overlay 的法律效力降为偏好而非规则——即使某个 nudge 与技能工作流冲突也是技能获胜。针对gpt-5.6-sol还有特判其包装语改为消歧范围类措辞complete/full/every/exhaustive/100%的专门说明但同样显式声明技能工作流、STOP 点、/ship 评审门控仍然优先。这一设计回答了 overlay 机制的根本问题模型行为补丁再有针对性也不能凌驾于 gstack 的确定性流程计划评审、安全门控、评审闭环之上。六、模型如何被选中taxonomy 与解析规则overlay 的选择依赖模型解析。scripts/models.ts 维护了中立不依赖任何 host 模块的模型分类法export const ALL_MODEL_NAMES [ claude, opus-4-7, fable-5, opus-4-8, sonnet-5, gpt, gpt-5.4, gpt-5.6-sol, gemini, o-series, ] as const;resolveModel的解析规则见 scripts/models.ts是精确匹配优先 家族启发式兜底与ALL_MODEL_NAMES完全一致直接返回gpt-5.6-sol只有精确匹配这一条路径常见变体归一化到家族例如gpt-5.4-mini/turbo→gpt-5.4o3、o4-mini等 →o-series与 opus-4-7 直接相关的规则是家族启发式/^claude-opus-4-7(-|$)/ → opus-4-7见 scripts/models.ts也就是说claude-opus-4-7、claude-opus-4-7-x这类模型 ID 都会被归一化后命中 model-overlays/opus-4-7.md未识别输入返回null由调用方决定报错或回退。值得注意的一点hostClaude Code、Codex、Cursor 等与 model 是两个独立轴——同一个 host 可以跑不同模型生成器不会从 host 自动推断模型用户可以显式传--model未传时各 host 提供自己的defaultModeldocs/ADDING_A_HOST.md 说明其默认值为claude且声明时会用validateModel对照ALL_MODEL_NAMES校验。七、如何用测试验证 overlay 的正确性opus-4-7 overlay 的每条关键语义都有对应的自动化断言构成一份很好的overlay 质量基线见 test/model-overlay-opus-4-7.test.ts断言锁定内容原始文件包含 Pace questions to the skill修复后的指令存在原始文件不包含**Batch your questions.**引发回归的旧指令已被移除渲染产物包含 Todo-list discipline 与 subordinateclaude 基座继承 从属包装都生效产物匹配STOP\. AskUserQuestion且 one question per turn逐题节奏触发条件完整产物包含tool_use提问的机制性要求发出-停止-等待未被弱化产物匹配 obvious fix 与 user approval显然可修仍需用户批准产物保留 Effort-match the step 与 Literal interpretation awareness另两条 nudge 未被意外删改渲染claude时不含 Pace questions指令归属单向、不向基座反向泄漏这组断言示范了 overlay 工程化的正确姿势overlay 是提示词层面的行为代码而它的关键语义应该像代码一样被测试钉死防止未来的改写无意中和掉某条对模型回归至关重要的指令。八、小结一个 overlay 文件背后的完整机制围绕 model-overlays/opus-4-7.md 这 23 行文字实际支撑它的是四层机制继承层{{INHERIT:claude}}让特定模型补丁自动叠加在 model-overlays/claude.md 基础指令之上无重复、有环保护解析层scripts/resolvers/model-overlay.ts 按精确匹配读取文件并包装从属声明缺失时静默降级管线层scripts/resolvers/preamble.ts 固定技能提问格式先于 overlay的渲染顺序把 v1.6.4.0 的教训变成不可绕过的不变量验证层test/model-overlay-opus-4-7.test.ts 对指令的存在性、缺失性、渲染产物语义做逐项断言。这套机制的价值在于gstack 用最小成本的 Markdown 文件吸收模型差异同时用代码级的顺序约束、从属包装和测试断言保证模型脾气永远改不坏流程纪律。如果你在为自己的多模型工具链设计提示词适配层这个文件即补丁、首行即继承、顺序即法律、断言即文档的做法值得直接参考。【免费下载链接】gstackUse Garry Tans exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA项目地址: https://gitcode.com/GitHub_Trending/gs/gstack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考