
oh-my-openagent 为 Claude Opus 5 定制 Sisyphus Prompt Family从模型探测、工厂路由到真实 opencode 线上验证的完整实践【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent在 oh-my-openagent 项目中Sisyphus Agent 的提示词是按模型家族prompt family逐一烘焙的新模型接入后必须保证请求发出时携带的是该模型专属的提示词同时不能破坏既有家族的回归稳定性。本文以仓库内 opencode-qa.md 记录的 QA 证据为主线完整还原claude-opus-5Sisyphus prompt family 是如何通过模型探测detector→ 工厂路由factory routing→ 提示词本体prompt body三层改动接入并在真实 opencode v1.18.4 隔离 XDG 沙箱 本地假 LLM 服务器环境下完成端到端验证的。读完本文你将掌握Opus 5 提示词家族的设计差异点五个自省计数器、委托门控、语调偏好提醒、resolveSisyphusPromptFamily与isClaudeOpus5Model的源码级路由原理以及一套可复用的假 LLM 捕获 隔离沙箱 回归断言验证方法论。背景为什么 Opus 5 需要单独的 Prompt FamilySisyphus 是 oh-my-openagent 中的主执行 Agent其完整系统提示词并非一份通用文本而是按模型家族分别烘焙的。在 sisyphus-agent-factory.ts 中SisyphusPromptFamily联合类型枚举了当前支持的全部家族kimi-k3、kimi-k2-7、kimi-k2-6、gpt-5-5、gpt-5-4、claude-fable-5、claude-opus-5、claude-opus-4-8、claude-opus-4-7、glm-5-2、grok-4以及兜底的fallback。resolveSisyphusPromptFamily(model)是唯一的家族判定入口按优先级依次匹配if (isClaudeOpus5Model(model)) return claude-opus-5; if (isClaudeOpus48Model(model)) return claude-opus-4-8; if (isClaudeOpus47Model(model)) return claude-opus-4-7;接入 Opus 5 之前anthropic/claude-opus-5会一路落到fallback——即被当作未知模型处理使用通用 fallback 提示词。QA 证据 routing-before-after.txt 清楚地记录了这一路由变化BEFORE (dev tip 346a054bc): anthropic/claude-opus-5 - fallback AFTER (worktree): anthropic/claude-opus-5 - claude-opus-5 anthropic/claude-opus-4-8 - claude-opus-4-8路由从fallback提升为专属家族claude-opus-5而最近的既有家族claude-opus-4-8路由保持不变——这正是本次改动要同时保证的正向接入 回归稳定两个目标。第一层改动模型探测Detector家族判定的底层依赖模型探测函数。在 model-family-detectors.ts 中isClaudeOpus5Model的实现与 4.7/4.8 家族保持同一套归一化策略export function isClaudeOpus5Model(model: string): boolean { const modelName extractModelName(model).toLowerCase().replaceAll(., -) return modelName.includes(claude-opus-5) }其中extractModelName会先剥离provider/前缀如anthropic/、openai/只取斜杠后段再将点号归一化为连字符。这套归一化使以下模型 ID 写法全部命中输入模型 ID归一化结果是否命中claude-opus-5anthropic/claude-opus-5claude-opus-5✅claude-opus-5-0claude-opus-5-0✅includes 子串匹配claude-opus-5.0claude-opus-5-0✅claude-opus-5[1m]带[1m]后缀同上✅claude-opus-4-8claude-opus-4-8❌不包含claude-opus-5另外同文件中isClaudeOpus47OrLaterModel使用正则CLAUDE_OPUS_VERSION_RE /claude-opus-(\d)(?:-(\d))?/解析主次版本覆盖 4.7 的请求面判断如 adaptive thinkingQA 文档中提到的 major-only 4.7 coverage 即指这一逻辑。这些 detector 边界用例由 model-family-detectors.test.ts 与omo-opencode侧的 sisyphus-agent-factory.test.ts 以单元测试形式钉死。第二层改动工厂路由Factory Routing探测命中后createSisyphusAgent(model, ...)依据resolveSisyphusPromptFamily的结果进入对应分支见 sisyphus-agent-factory.tscase claude-opus-5: return buildClaudeSisyphusAgentConfig( MODE, model, buildClaudeOpus5SisyphusPrompt(model, agents, tools, skills, categories, useTaskSystem), );buildClaudeSisyphusAgentConfig是 Claude 家族共用的 AgentConfig 构造器负责把提示词本体、工具分类结果categorizeTools与动态收集的可用 Agent / Skill / Category 清单组装成 opencode SDK 的AgentConfig。注意resolveSisyphusPromptFamily同时也是运行时提示词协调器runtime prompt reconciler的单一事实来源当 TUI 运行时模型解析出的家族与配置时不一致时会据此重建烘焙好的提示词体对应 issue #5297/#5316 的处理。这也解释了为什么 QA 文档强调detector factory routing prompt body三件套缺一不可——单改提示词文本而不改路由运行时仍可能落到错误的家族。第三层改动Opus 5 提示词本体Prompt Body提示词本体实现在 claude-opus-5.ts其设计原则在文件头注释中明确写出以 Opus 4.8 的骨架为基础仅针对 Anthropic 官方 Prompting Claude Opus 5 指南中记录的行为差异进行调优。核心差异如下维度Opus 4.8 处理Opus 5 处理范围控制抑制过度询问over-askingSCOPE CONSTRAINT 取代Opus 5 不偏保守而是过度执行会擅自扩展范围、添加未请求步骤需显式校准deliver what was asked, at the scope intended委托策略DEFAULT BIAS: DELEGATE默认倾向委托DELEGATION CAP 反转DELEGATE BY DOMAIN AND SIZE, NOT BY DEFAULT仅按专业领域或真正独立的大块工作委托并显式禁止用子 Agent 复核自己的工作验证行为需要推动验证OVER-VERIFICATION 移除Opus 5 自带自验证证据门evidence gates保留但只跑一次删除重复验证脚手架叙述节奏默认输出偏长一句话开场ONE-SENTENCE OPENER、工具调用间保持安静、结论优先收尾外加结尾tone_preference提醒Anthropic 对长系统提示词的推荐做法字面遵循4.7/4.8 继承保留LITERAL FOLLOWING计数器要求对 every / all / for each 全部生效线上真实捕获的self_knowledge段落见 captured-system-prompt-excerpt.txt完整呈现了五个计数器——LITERAL FOLLOWING、SCOPE EXPANSION、OVER-DELEGATION、OVER-VERIFICATION、LONG RESPONSES外加DELEGATE BY DOMAIN AND SIZE, NOT BY DEFAULT、EVIDENCE, NOT ASSERTION、ONE-SENTENCE OPENER等关键指令。提示词还沿用了 Claude 家族共享的 XML 标签锚点、Phase 0/1/2A/2B/2C/3 心智模型以及来自 dynamic-agent-prompt-builder.ts 的动态构建助手buildAgentIdentitySection、buildDelegationTable、buildOracleSection等确保与其他 Claude 变体内容同步。端到端 QA真实 opencode 隔离沙箱 假 LLM改动完成后QA 证据的核心主张是驱动了真实生产路径真实 opencode v1.18.4 从本分支源码加载插件file://.../packages/omo-opencode/src/index.ts解析会话模型运行时提示词协调器选定家族最终在真实出站 LLM 请求中观察到烘焙好的提示词——全程没有真实 API 调用。测试环境构建qa-run.sh完整脚本见 qa-run.sh关键环节如下隔离 XDG 沙箱用mktemp -d创建临时根目录分别导出HOME、XDG_DATA_HOME、XDG_CONFIG_HOME、XDG_CACHE_HOME、XDG_STATE_HOME并设置OPENCODE_DISABLE_AUTOUPDATE1、OPENCODE_DISABLE_MODELS_FETCH1保证测试期间 opencode 不联网、不落真实用户数据。假 LLM 服务器capture-fake-llm.mjs与 qa-run.sh 同目录在随机端口启动本地 OpenAI Responses 兼容服务捕获每一个请求体到/tmp/opus5-qa/captures/。沙箱内 opencode 配置写入$XDG_CONFIG_HOME/opencode/opencode.jsonc内容如下{ plugin: [file://${WORKTREE}/packages/omo-opencode/src/index.ts], model: openai/claude-opus-5, provider: { openai: { options: { apiKey: fake-key, baseURL: http://127.0.0.1:${PORT}/v1, timeout: 30000 }, models: { claude-opus-5: { tool_call: true, limit: { context: 200000, output: 8192 } }, claude-opus-4-8: { tool_call: true, limit: { context: 200000, output: 8192 } } } } }, permission: { bash: allow } }同时写入oh-my-openagent.json将 explore/librarian 子 Agent 的模型指到openai/claude-opus-5使整个提示词动态组装链路走 Opus 5 家族。探测命令对两个模型各跑一次真实opencode run非交互模式、JSON 输出、120 秒超时opencode run /dev/null OPUS5PROBE reply with anything --agent sisyphus -m openai/claude-opus-5 --format json opencode run /dev/null OPUS48PROBE reply with anything --agent sisyphus -m openai/claude-opus-4-8 --format json观察结果qa-run-output.txt假 LLM 捕获到的真实请求体qa-run-output.txt中call-02-claude-opus-5.json98,960 字节系统提示词 38,417 字符携带You are **Claude Opus 5**、五个自省计数器、DELEGATE BY DOMAIN AND SIZE, NOT BY DEFAULT、结尾tone_preference提醒且不包含You are **Claude Opus 4.8**call-04-claude-opus-4-8.json97,824 字节携带You are **Claude Opus 4.8**与DEFAULT BIAS: DELEGATE行且不包含Opus 5 身份标识。脚本用grep -qF对捕获文件执行了 8 条 wire 断言正例与反例各半 1 条隔离断言断言期望结果Opus 5 请求携带 Opus 5 身份1PASSOpus 5 请求携带委托门控指令1PASSOpus 5 请求携带结尾 tone_preference1PASSOpus 5 请求携带 over-verification 计数器1PASSOpus 5 请求不携带 4.8 身份0PASSOpus 4.8 请求仍携带 4.8 身份1PASSOpus 4.8 请求不携带 Opus 5 身份0PASSOpus 4.8 请求保留 delegate-bias 行1PASS真实 opencode DB 未被触碰21932 → 21932PASS最终输出QA_RESULTPASS。值得注意的是call-01与call-03是 gpt-5.4-nano 的小请求约 2.5KB说明 Sisyphus 动态提示词组装链路中还有低阶模型参与如规划/摘要环节但它们不携带 Opus 家族身份不影响本次断言。隔离性证明与全量门禁QA 文档强调了两类额外证据隔离证明真实~/.local/share/opencode/opencode.db会话数在每次运行前后恒为 21932real-db-session-count-before/after证明沙箱未污染真实用户数据每次运行结束后沙箱目录被整体删除sandbox-removed...。全量门禁bun test全仓 12,146 个用例全部通过bun-test-full-suite-tail.txtbun run typechecktsgo全包退出码 0。注意 QA 文档使用的 opencode 版本为 v1.18.4、dev tip 为346a054bc这些版本前提应作为复现时的对照基准。为什么这套 QA 是充分的QA 文档的 Why it is enough 一节给出了判定依据本次改动本质是提示词家族新增detector factory routing prompt body而 QA 恰好覆盖了这三者协同的完整生产路径——真实 opencode 从本分支源码启动插件 → 解析会话模型 → 运行时提示词协调器选定家族 → 在真实出站请求中观察到烘焙后的提示词同时对新家族正向和最近既有家族回归双向验证。Detector 边界用例claude-opus-5、claude-opus-5-0、claude-opus-5.0、[1m]后缀、4.7 主版本覆盖则由model-core的单元测试钉死构成单元级钉死 端到端 wire 级实证的双层防线。安全与留档边界What was omittedQA 全程不涉及任何真实密钥沙箱内使用fake-key假 API Key 指向 localhost 假 LLM未复制任何认证文件完整的 98KB 级捕获文件仅保留在/tmp如/tmp/opus5-qa/captures/证据目录内只留存三样东西——测试脚本qa-run.sh、运行日志qa-run-output.txt以及承载关键信息的提示词摘录captured-system-prompt-excerpt.txt。如果你希望在本仓库复现此验证只需在本地检出对应分支参照 qa-run.sh 中的沙箱与环境变量设置搭建隔离环境切勿在真实 HOME 或带真实凭据的环境下执行。小结Claude Opus 5 的 Sisyphus 接入是一次教科书式的提示词家族落地isClaudeOpus5Model完成归一化探测model-family-detectors.tsresolveSisyphusPromptFamily完成路由提升sisyphus-agent-factory.tsbuildClaudeOpus5SisyphusPrompt完成行为差异调优claude-opus-5.ts最后由 qa-run.sh 用假 LLM 捕获 隔离沙箱 双向 wire 断言证明改动在真实 opencode 上按预期工作、且不破坏既有 4.8 家族。这套探测归一化 → 单一事实源路由 → 家族化提示词 → 端到端实证的链路同样适用于后续任何新模型家族的接入与回归验证。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考