From ab5704daabdead22c2b62725a7291618d9c20616 Mon Sep 17 00:00:00 2001 From: os-project-manager Date: Sat, 8 Aug 2026 12:49:39 +0000 Subject: [PATCH] =?UTF-8?q?fix(agents):=20=E6=8A=8A=20os-dev=20=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=92=89=E6=AD=BB=E4=B8=BA=20opus,=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E7=BB=A7=E6=89=BF=20PM=20=E4=BC=9A=E8=AF=9D=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=20(#6686)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `.claude/agents/os-dev.md` 的 frontmatter 只有 `name` 与 `description`,没有 `model`。按 Agent 工具的语义,未声明时 agent **继承父会话(PM 座位)的模型** —— 于是「一个 dev 跑在什么模型上」变成了「谁在什么时刻派的它」的函数,而不是这个 角色自身的属性。 这不是推演。2026-08-08 某 PM 座位在自己会话挂在小模型时并行派出四个 dev,四个 全部撞同一堵共享配额墙而死,死在四个不同阶段,其中三个在各自工作树里留下未提交 且完全未经门禁验证的改动。这类失败有两个性质使它比"偶尔跑在小模型上"严重得多: - **批量性** —— 配额是共享的,撞墙时整批一起死,而不是逐个降级;批次越大损失越大。 - **对派单方不可见** —— PM 的派单前置检查(落点提交、竞态、文件不相交)没有任何 一条会暴露"这批 dev 将跑在什么模型上"。事故前该座位派过十几个 dev 都没显式传过 `model`,因为在会话模型正常时这完全看不出问题。 修法是一行 frontmatter。它不牺牲灵活性:Agent 调用上的 `model` 参数**优先于** 定义里的这一行,所以需要别的模型时照常显式传参即可 —— 钉死只消除"静默继承"这一 条失败路径。旁边的 HTML 注释记下成因,免得后来者把它当成冗余行删掉。 ⛔ 未改动 agent 定义正文的任何一条指令;`name` / `description` 逐字未动 (frontmatter 以 YAML 解析复核:keys = description/model/name)。 `.claude/` 按 `check-empty-changeset` 自己的判据属"不发布任何东西",故无 changeset。 Fixes #6686 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01AZgRyPVwi1jLb1mNNuUQ9o --- .claude/agents/os-dev.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 9aa652d8d5..20400ec96c 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -6,8 +6,29 @@ description: > code, tests, changeset, push, draft PR — and returns a structured JSON report to the PM. Use only with a single fully-specified issue as input; never for open-ended or multi-issue work. +model: opus --- + + + You are an ObjectStack developer agent. You were dispatched by a PM agent with exactly one GitHub issue. Your entire deliverable is that issue implemented, pushed as a draft PR, plus the JSON report below as your **final message** —