跨 harness 对比:与模型的协同设计
总览:这个维度的设计谱系
“与模型的协同设计”是这批 harness 里分化最剧烈的维度,因为它牵涉一个根本性的身份问题——harness 和它跑的模型是不是同一批人做的。据此先划一条主轴:
- 模型无关(model-agnostic)阵营:绝大多数 harness 属于此类,把模型当作可替换后端,通过一层 provider 抽象接入多家 API。它们的”协同设计”全部发生在推理时(prompt / 工具面 / 线协议 / 路由 / 能力探测),不触及模型权重。这一阵营内部再按抽象策略细分:走 litellm 类最小公分母垫片(SWE-agent、smolagents、Agent Zero、MetaGPT)、对每家厂商写原生 SDK 客户端(CrewAI、Hermes Agent、Trae Agent、Agno、CAMEL),或引一层能力画像/profile 做条件分支(Pydantic AI、AutoGen、deepagents)。
- 单实验室共设(co-designed)阵营:harness 与模型出自同一家,可以做到训练时双向协同——模型为 harness 的工具面/交互模式专门训练,harness 反过来把模型能力当作既定前提来简化自己。代表是 Claude Code+Claude、Codex CLI+gpt-5-codex、Cursor Composer、Devin+SWE-1.5/1.6、UI-TARS Desktop+UI-TARS VLM、Browser Use+bu-2-0、v0 composite family、Zed Zeta、OpenHands 的离线 critic、Hermes Agent(Nous 同时训模型和 harness)。
在这条主轴之上,协同设计按耦合深度从浅到深叠成几层,一个 harness 往往同时占据多层:
- 路由 / 角色分级层(最浅,但最普及):多模型选型、按子任务/角色派不同模型、会话中途升降级、reasoning-effort 旋钮。几乎人人都有。
- Prompt 家族分化层:为不同模型家族维护独立系统提示文件/片段(opencode 按 vendor 分派、Codex 逐模型
.md、MiMo Code 9 变体、Kilo Code 9+ 套、OpenHandsModelSpecificSection、AiderModelSettings)。 - 工具面适配层:按模型身份换给它不同的工具(GPT 系换
apply_patch、其余用edit/write),见 Cline、opencode、MiMo Code、Factory、Continue、Kilo Code。 - Wire-protocol / schema 层(最深的推理时协同):按 provider 差异化请求 payload 形状、schema 消毒、线协议选择(Cline
glm-thinking、Hermesgemini_schema消毒、CopilotwireApi、Open Interpreter 三种 wire)。 - 弱模型补偿层(旁支但独特):为 tool-calling 能力弱的开源模型补足结构化能力(Goose toolshim 二级模型最典型)。
- GUI / computer-use 动作空间协同(新流派):把模型输出的动作 DSL / 索引化元素接口当作与 VLM 联合演进的契约(UI-TARS Desktop、Browser Use)。
- 训练层(最深,仅共设阵营可及):模型为 harness 训练、或 harness 用自身轨迹训练辅助小模型、或直接把训练/推理栈(chat template + logprob)打通做 RL。
两个横贯全谱系的收敛信号:其一,几乎所有活跃 harness 都把 reasoning-effort / thinking-budget 当成一等旋钮暴露(Codex、Claude Code、Junie、Kiro、Amp、Factory、Augment、Copilot、OpenAI Agents SDK、DeerFlow……),而不是把它埋在通用 temperature 里;其二,一批 harness 都在建模型能力画像表 / capability flags(AutoGen ModelInfo、Pydantic AI profiles、Kimi Code ModelCapability、AgentScope context_size、DeerFlow supports_vision/thinking)当作分支依据。这是 2025–2026 推理模型普及后,harness 层达成的两个事实标准。
对比表
| Harness | 模型绑定关系 | 主要协同层次 | 代表性机制 / 证据 |
|---|---|---|---|
| Claude Code | 单实验室共设 | 训练 + prompt + 缓存 | fallbackModel 同轮自动切换;降级时剥离逐模型加密的 thinking 签名;task_budget 服务端预算需客户端在压缩后补记;围绕 Anthropic prompt-cache 计费/延迟深度工程化 |
| Codex CLI | 单实验室共设 | prompt 家族 + 工具面 | 逐模型 .md 系统提示,-codex 变体明显更精简(行为内化进权重);apply_patch 为 freeform 非 JSON 工具,配 .lark 语法解析;reasoning-effort 一等公民 |
| Cursor | 单实验室共设 | 训练(双向闭环) | Composer MoE 专门针对 harness 工具面 RL 训练;数十万沙箱 RL 环境;为”让模型感知沙箱”改 Shell 工具描述并用 Cursor Bench A/B;Instant Grep 要匹配模型高 tok/s 吞吐 |
| Devin | 单实验室共设 | 训练(需求反哺后训练) | SWE-1.5/1.6 按 harness 委派模式训练;“知道何时上报/问什么是 training problem,未来模型会带着这种来回训练”;capability router 而非 difficulty escalator |
| UI-TARS Desktop | 强绑定自家 VLM 家族 | 训练 + 动作 DSL | prompt/解析器逐 UI-TARS 版本定制(坐标格式随模型代际变);Thought/Action 动作 DSL 而非 JSON tool-call;finished()/call_user()/wait() 内置动作即 loop 控制信号 |
| Browser Use | 通用优先 + 自研微调模型 | 训练 + DOM 接口协同 | ChatBrowserUse(默认 bu-2-0,走 cloud API)+ 专用简化 prompt + request_type(agent/judge);DOM 序列化成带 [index] 的 XML,模型用 index 而非坐标操作,降低 vision 精度依赖 |
| v0 | 前沿模型可替换 + 自研辅助模型 | 训练(组合式) | Composite family:前沿模型设计为可替换组件;自研 vercel-autofixer-01(与 Fireworks RFT)负责纠错;base 模型换代其余栈不动;内部无错误率评测大幅超其自身 base 模型 |
| Zed | 通用 agent 模型无关 + 自研小模型 | 训练(编辑预测) | Zeta = Qwen2.5-Coder-7B 微调,权重 + 数据集开源;ZetaFormat 带版本号/日期的 prompt 格式史,含逐基座模型的 FIM 变体(Seed-Coder / Qwen multi-region) |
| OpenHands | 模型无关 + 自研 critic | prompt 家族 + 训练(离线 critic) | ModelSpecificSection 逐家族提示(Claude vs Gemini vs gpt-5 逐变体);openhands-critic-4b-v1.0 用生产轨迹离线训练(开放权重 + arXiv);ACPAgent 允许 Claude Code 的原生 harness 与自身通用路径并存 |
| Hermes Agent | 由模型训练团队自建 | 原生 SDK + schema 消毒 | Nous 同时训 Hermes/Nomos/Psyche 与本 harness;3 种 API 模式各有 adapter;gemini_schema.py 白名单消毒工具 schema;逐模型操作指引块(GOOGLE_MODEL_OPERATIONAL_GUIDANCE 等) |
| Goose | 模型无关 | 弱模型补偿(独有) | toolshim:为弱 tool-calling 模型(Gemma3/DeepSeek-R1/Phi-4/Llama4)挂本地二级解释器模型(默认 mistral-nemo)重解析自由文本为工具调用;toolshim 微调用历史轨迹;ACP-as-provider |
| Aider | 模型无关 | prompt/格式家族分化(最早) | ModelSettings 80+ 模型;udiff 专抗 GPT-4-Turbo 偷懒、diff-fenced 专抗 Gemini 围栏;Architect+Editor 双模型拆分(实证 SOTA) |
| Cline | 模型无关 | wire 协议 + 工具面 | glm-thinking.ts 按传输路径整形 thinking/reasoning payload;model-tool-routing.ts 按 model-ID 换 apply_patch vs editor;协同同时发生在 wire 层与工具层 |
| Roo Code | 模型无关 | 仅原生 FC + provider 特化 | 系统提示排除文本工具目录(toolsCatalog=""),全走原生 function-calling;Anthropic 深度特化(prompt caching、伪模型 ID :thinking 映射真 ID + beta 开关);跨 provider 推理内容往返持久化 |
| opencode | 模型无关 | prompt 家族 + 工具面 | provider() 按 vendor 分派系统提示(Anthropic/gpt/o-series”beast”/Codex/Gemini/Kimi/Trinity);usePatch 给部分 GPT 换 apply_patch;LLM protocol adapter 分离 provider 语义 vs 中立采样参数 |
| MiMo Code | 多 provider + 自家一等 provider | prompt/超时/token/工具面 | provider() 硬编码 9 变体系统提示;MiMo 专属超时 DEFAULT_CHUNK_TIMEOUT=480s(注释调优给 mimo-v2.5-pro 冷路径 TTFT)、MIMO_OUTPUT_TOKEN_MAX、网关错误解析;GPT 系换 apply_patch |
| Kilo Code | 多 provider + 自家 Gateway | prompt/工具面/wire | 每模型独立 system prompt(9+);transform.ts 1088 行重度 per-provider 适配(reasoning/caching/modality);edit vs apply_patch 按 family;Kilo Gateway 第一方路由 500+ 模型 |
| Factory | 多 provider + 自营开源托管 | 路由(中途升级)+ 工具 shim | Factory Router 逐会话选型 + 会话中途升级;披露 Pareto 前沿方法论与拐点;OpenAI 模型自动加 ApplyPatch shim;Droid Shield 选 Qwen 3.6 35B A3B 有成本理据 |
| Amp | 模型无关 + “不为模型兜底”哲学 | 路由(模型替换即策略) | 模式绑定具体模型并随新模型持续重分配(deep/smart/rush/Oracle 各独立追踪);read_thread subagent 换 GLM 5.2 因长上下文忠实性更好;因模型进步而下线 Handoff/IDE 脚手架 |
| Junie | 模型无关(营销卖点) | 路由 + 双模型架构 | alias→model 映射表(sonnet/opus/gpt/gemini/grok);主模型 + 自动选的同家族 fasterModel(摘要/分类/记忆抽取);/effort 六档 minimal→max |
| Kiro | 模型无关(Bedrock 接入) | 路由 + 模型感知 prompt | Auto 路由器;五档 reasoning;文档内嵌逐模型行为指导(Opus 4.8 主动标不确定性);CORAL 工具描述专门抵消 LLM 训练先验(glob/cd && 误用) |
| Augment | 模型无关(Context Engine 卖点) | 路由(缓存经济学) | 按角色分级(context-gathering 用 gemini-flash-lite、validate 用 sonnet);Prism 轻量规划器做分回合路由,“仅当收益 > ~10x 缓存驱逐成本才切” |
| Copilot | 模型无关(明确表态) | wire 协议选择 | wireApi: completions|responses,Anthropic 固定走 Messages API(讲三种线协议);eval-harness 博客把 Claude Code/Codex CLI 点名为竞品基线;reasoning-effort 固定 medium 做归一 |
| Amazon Q | 服务端驱动(模型不透明) | 路由(服务端选型) | 后端私有 RTS,紧贴 Bedrock Converse 协议;ModelInfo::from_api_model() 从后端列表取模型,/model 切换;/dev textcode 刻意放弃截图、采用全文本”面向 LLM 的 IDE” |
| Comate | 自研 ERNIE + 第三方调优 | 路由(网关代理) | 自研文心代码大模型;Auto/Max 模式在 ERNIE 与 DeepSeek/GLM/Kimi 间路由(声明”适配与效果调优”);所有模型经千帆平台网关代理 |
| Qoder | 多模型 + BYOK | 路由(按 purpose 回调) | ModelPolicyProvider 按 context.purpose(main/subagent/compact/WebFetch) 路由,返回档位或 BYOK 凭据;无自动 fallback(回调抛错则整次失败);per-request reasoningEffort |
| Kimi Code | 多 provider + 默认 Kimi | 能力画像 + wire | kosong 目录 KNOWN_WIRE_TYPES(anthropic/openai/kimi/google-genai/…);ModelCapability 标志(含 select_tools 驱动渐进式工具披露);Kimi 特有视频上传能力 |
| CodeGeeX | 强绑定 GLM 分词器家族 | 特殊 token + FIM | 围绕 <|system|>/<|user|>/<|assistant|> 及 GLM stop-token IDs(151329,151336,151338) 构建;FIM/Infilling 一等文档化特性;128K 长上下文为全仓 RAG 显式设计 |
| AutoClaw | 捆绑自家 GLM + 版本锁步 | 产品集成(能力替代工程) | 默认捆绑 GLM,v1.9.0 升级默认模型到 GLM-5.2(宣称 1M 上下文),把”模型能力替代工程化上下文管理”作为定位;无训练层协同披露 |
| SWE-agent | 模型无关(litellm) | 缓存 + parser 兜底 | CacheControlHistoryProcessor 默认给 Anthropic;Claude 3.7/Sonnet-4 的 128k 输出 beta 门控;多种 parser(xml/json/code-block)适配弱 FC 模型;convert_system_to_user 给 o1 |
| smolagents | 模型无关 | 动作表达 + 能力感知 prompt | code-blob(CodeAgent)vs JSON tool-call(ToolCallingAgent)两种动作范式,引 3 篇论文佐证代码即动作;use_structured_outputs_internally;工具 docstring 措辞按小模型(Mistral Small/Gemma 3)调优 |
| CrewAI | 模型无关(原生 SDK) | 原生客户端 + 缓存 | 每家原生 SDK 而非 litellm 垫片;supports_function_calling/stop_words/multimodal 能力探测选 ReAct vs 原生;客户端侧 stop-word 模拟;规划 LLM 默认 gpt-4o-mini 与执行 LLM 解耦 |
| Pydantic AI | 模型无关(profile 画像) | 能力画像 + typed 工具 | 三层 models/providers/profiles,能力检测用 profile 布尔 flag 而非 isinstance;_narrow_tool_call_parts 把裸 ToolCallPart 提升为 typed 子类;unless_native/with_native 本地↔原生自动切换;降级翻译 history |
| AutoGen | 模型无关(能力契约) | 能力画像分支 | ModelInfo TypedDict(vision/function_calling/json_output/structured_output/family);MagenticOne 按 structured_output vs json_output vs 无三分支兜底;名义无关实为 GPT-4o 级调优 |
| Semantic Kernel | 模型无关(薄透传) | 原生 FC 透传 | 深依赖各家原生 function-calling,SUPPORTS_FUNCTION_CALLING 标志决定循环启用;FunctionChoiceType 映射各家 tool_choice;MCP sampling 让工具借宿主 LLM |
| Agno | 模型无关(30+ adapter) | 能力探测 + 多模型分工 | Model.get_instructions_for_model 让模型反向注入自需指令;reasoning 区分原生 vs 独立 reasoning_model 步骤;compression/output/parser 各可用不同模型;call_model_with_fallback |
| CAMEL | 模型无关 + 训练侧配套 | 抽象 + datagen | BaseModelBackend + ModelFactory;ModelManager 多模型负载均衡/fallback;非严格 structured-output 走 prompt+正则;RL/datagen 侧(环境+verifier+reward model)为训练自家模型服务 |
| Letta | 模型无关 + RL 栈打通 | 训练/推理协同 | SGLangNativeAdapter 直接用 chat template 拿 token ids + per-token logprob 做多轮 RL;含 GLM4.7 tool-call 解析;V3 “No inner thoughts in kwargs” 对齐现代 native FC 模型 |
| Google ADK | 多 provider + Gemini 深协同 | 原生特性绑定 | Gemini context caching、thinking_config、native code execution、google_search grounding、Live 双向流、Interactions API 有状态多轮;GoogleLLMVariant 工具 schema 按 API 变体分叉;PlanReActPlanner 给无原生 thinking 的模型 |
| OpenAI Agents SDK | 深绑 GPT-5 + Responses | reasoning 表 + Codex 耦合 | 默认 gpt-5.4-mini;按模型名自动选 reasoning-effort 表;reasoning item 跨轮携带 + reasoning_item_id_policy 绕不变量;Sandbox agent 内建 Codex CLI prompt |
| Agent Zero | 模型无关(LiteLLM) | 多角色 + Responses 状态 | chat/utility/embedding/browser 多角色分工,杂活走便宜 utility model;Responses API 专门状态管理(含 computer-use session);JSON 工具协议靠 json_parse_dirty 不依赖原生 FC |
| GPT Pilot | 模型无关 + fast-apply 分工 | 逐 agent 路由 + Relace | AgentLLMConfig 细粒度 agent-key 映射模型/温度;Relace 专用 fast-apply 合并模型(不可用才回退整文件重写);无 FC,靠 JSON-schema-in-prompt + 稳健重试 |
| GPT Researcher | 模型无关(三档角色) | 角色分工 + prompt 族 | FAST(gpt-4o-mini)/SMART(gpt-4.1)/STRATEGIC(o4-mini) 三档;deep research 用 ReasoningEfforts.High;GranitePromptFamily 为 IBM Granite 改文档拼接;多处 json_repair 兜底 |
| Plandex | 模型无关(9 角色 model pack) | 角色分工 + 能力下调 | 9 角色异构 model pack(planner/coder/architect/builder/summarizer/…)逐步派发;GetRoleForInputTokens 大请求换大上下文变体;不支持则剥 cache-control/image;推理模型出松散块、廉价 builder 转精确 diff |
| DeerFlow | 模型无关 + 定制 provider | 定制 provider + 能力位 | claude_provider(OAuth/caching/thinking budget)、mindie_provider(昇腾)、patched 版修各家怪癖;supports_vision/thinking 决定装 view_image/降级;含小米 patched_mimo |
| deepagents | 模型无关(HarnessProfile) | profile 逐模型调优 | HarnessProfile 为 Opus/Sonnet/Haiku/Codex 设专属 profile(覆盖 prompt/工具描述/排除工具/中间件);build_model_identity_section 把模型名/上下文/不支持模态写回提示;缓存中间件无条件分层叠加 |
| QwenPaw | 声称自家 Flash 模型(未验证) | 能力学习 + 静态路由 | 建于 AgentScope ChatModelBase 之上;model_capability_cache 从真实 API 错误学 rejects_media 并后续剥离媒体;RoutingChatModel 当前为静态全局开关(内容感知路由接口留了但未实现) |
| AgentScope | 模型无关(QwenPaw 底座) | 统一契约 + formatter | ChatModelBase(含 context_size 喂压缩阈值) + 每家 FormatterBase 把统一 Msg/block 契约翻成各家 wire 格式,正是 QwenPaw 可换 provider 的原因;ModelConfig 带 fallback_model |
| Open Interpreter | 模型无关(harness 仿真) | 按模型选 harness | ”Automatic Harness Defaults”:Claude→claude-code、Kimi→kimi-cli、Qwen→qwen-code、DeepSeek→deepseek-tui;每套定制 prompt/schema/thinking;swe-agent 文本命令循环给弱 FC 模型;三种 wire |
| Qwen Code | 多 provider(含 DashScope) | 流式修复 + tagged thinking | streamingToolCallParser 手写增量 JSON 修复(覆盖 vLLM 承载的 Qwen 等不规整流);taggedThinkingParser 解析 <think>;循环阈值 TOOL_CALL_LOOP_THRESHOLD=5 刻意低于 DashScope 服务端拒绝阈值 |
| Gemini CLI | 深绑 Gemini | 降级链 + 分类路由 | flash-lite→flash→pro 静默降级;gemmaClassifierStrategy 用本地 Gemma 替代云端分类;isModernModel 门控提示按模型代际条件化(snippets vs snippets.legacy) |
| LangGraph | 模型无关(框架) | 动态模型 callable | create_react_agent 的 model 可为 (state,runtime)->model 动态 callable,对话中途换模型;结构化输出作独立图节点;core 本身不含模型专属 prompt 分支(留给用户) |
| AutoGPT | 模型无关 + Copilot 耦合 Claude | provider 特化 + 双层 | Classic:use_prefill 对 Anthropic 禁用、GPT-5 空文本 tool_calls 兼容;Copilot 层直接建于 claude_agent_sdk(“CLI refuses non-Anthropic”),另有非 SDK baseline 支持其它模型 |
| MetaGPT | 模型无关(无训练协同) | JSON 修复兜底 | 纯多 provider;JSON_REPAIR_PROMPT 用额外一次 LLM 调用修复畸形 JSON 工具输出;RoleZero 路径靠自由文本 prompting + 正则约定而非原生 FC |
| Continue | 模型无关(plug in your model) | 能力探测 + 双通道 | isModelCapable 决定给 MultiEdit(强)还是 Edit(弱)+ toolOverrides;tool-call 优先原生、弱模型走 <tool> 文本;cache 感知读 cache_read/write_tokens |
| Claude Flow | 挂 Claude Code 生命周期 | hook 路由 + 可移植 | 经 Claude Code hooks 集成(UserPromptSubmit→Q-learning routing);model alias 映当代 ID;agent_execute 按 env 回退 Anthropic→OpenRouter→Ollama |
| OpenManus | 模型无关(硬编码白名单) | 白名单能力探测 | REASONING_MODELS/MULTIMODAL_MODELS 硬编码白名单(明显偏老,gpt-4.1/claude-4/o3 未入会退化);ask/ask_with_images/ask_tool 三调用面;无路由/多模型混用 |
| Trae Agent | 多 provider(含 Doubao) | 原生工具类型 + 特化 | Anthropic 编辑/bash 借用内置工具类型(text_editor_20250429/bash_20250124),其余回退通用 schema;OpenAI strict schema 写死进 Tool 基类;实证 Claude 3.7 最强遂定为固定基座;无 Doubao 专项微调证据 |
| Warp | 模型/harness 双无关 | 路由 + provider 怪癖 | Oz “一直是多模型的”;开源后加 Kimi/MiniMax/Qwen + “auto(open)” 路由;LONG_CONTEXT_WARNING_THRESHOLD=272000(GPT-5 长上下文计费);CODEX_MODEL_MIGRATIONS_TARGET="gpt-5.4" 钉住 Codex 集成 |
| Replit Agent | 联合发布但技术细节薄 | 产品集成 | Agent v2 与 Claude 3.7 Sonnet 联合发布(无共设技术细节);明确表态 decision-time guidance 是”针对当前一代模型弱点的补偿”,预期随模型进步而弱化 |
| Anthropic 多智能体 | 单实验室(围绕已知模型行为) | 能力依赖(非权重) | 实证 token 用量解释 80% 性能方差、升级模型 > 翻倍 token 预算,遂选异构分层(Opus lead + Sonnet subagent);核心依赖 interleaved thinking;工具响应格式”要匹配训练数据分布” |
分组讨论
A. 单实验室共设:训练时双向协同(最深,最稀缺)
这是本维度的金字塔尖,只有同时掌握模型和 harness 的团队够得着。历史上最早把”harness 结构由模型行为迭代出来”讲清楚的是 Aider——它的 udiff 格式是为对抗 GPT-4-Turbo 偷懒、diff-fenced 是为迁就 Gemini 不守围栏而生,Architect+Editor 双模型拆分还拿基准分实证;但 Aider 本身并不训模型,属于”推理时被模型逼出来的结构”。
真正做到权重级双向闭环的代表是 Cursor:Composer 直接针对 Cursor Agent 自己的工具面做 RL,并且为”让模型感知沙箱”反过来改工具描述、用内部 Cursor Bench A/B——harness↔model 是双向的,不是单向”模型适配 harness”。Devin 把这条逻辑说得最直白:SWE-1.5”知道何时上报、问什么”的能力差距”是个 training problem,未来 SWE 模型会带着这种来回训练”,即 harness 的委派模式直接反哺模型后训练优先级。Claude Code 与 Claude 的协同则体现在把一堆服务端特性当既定前提消费:task_budget(服务端追踪的 agentic turn 预算)、逐模型加密的 thinking 签名(降级前必须剥离否则 400)、prompt-cache 计费/延迟模型——这些都不是通用 LLM API 能提供的。
新增的 19 个里,UI-TARS Desktop 和 Browser Use 把这条路径带进了 GUI/computer-use 领域(见 F 组),Zed Zeta(Qwen2.5-Coder-7B 微调、权重+数据集开源)、v0 的 composite family(自研 vercel-autofixer-01 纠错模型)、OpenHands 的 openhands-critic-4b(生产轨迹离线训练、开放权重+arXiv)代表一种更务实的变体:主推理模型保持可替换,只对一个窄任务小模型做训练协同。v0 甚至把”前沿模型可替换”写进设计目标(base 换代其余栈不动),这与 Cursor 的深度绑定形成有意思的对照——同为共设阵营,一个选深绑、一个选可插拔。Hermes Agent 则是”由模型训练团队(Nous)自建 harness”的样本,协同体现在围绕自家 Nous Portal 的限流/标签/schema 怪癖做适配。
B. Prompt 家族分化:最普及的推理时协同
“为不同模型家族写不同系统提示”几乎是所有认真的 coding harness 的标配。OpenHands 的 ModelSpecificSection 把逐家族甚至逐变体的微调写死进 SDK(Claude 要”快速失败别防御性编程”、Gemini 要”别过度主动”、gpt-5-codex 还补了一段它容易做错的 GitHub REST 片段);opencode 按 vendor 分派 8 类基础提示,MiMo Code 和 Kilo Code(同源 opencode 血统)各有 9 变体。Codex 的逐模型 .md 里,-codex 后缀模型的提示明显更精简,反证这些模型把 agentic 行为内化进了权重。
这一层里值得单独点出的**模型感知(非专属)**做法是 Kiro:它的 CORAL 把工具描述专门调整来抵消 LLM 从训练数据学到的先验(*.py vs **/*.py 的 glob 误用、cd X && cmd 习惯),即”知道所有模型都会犯同一个训练先验错误,就在工具描述里预防”。新增里 GPT Researcher 的 GranitePromptFamily(为 IBM Granite 改文档拼接)是同类思路的小模型版本。
C. 工具面适配:edit vs apply_patch 的行业默契
一条跨 harness 高度收敛的具体做法:给 OpenAI/GPT 系模型换上 apply_patch(或 ApplyPatch)编辑工具,其余模型用通用 edit/write。这个 pattern 在 Cline(model-tool-routing.ts)、opencode(usePatch)、MiMo Code、Kilo Code、Factory(甚至 inherit 时防御性同时注册两个)、Continue(isModelCapable 选 MultiEdit vs Edit)里反复出现,源头是 OpenAI 自己在 Codex 里把 apply_patch 定为 freeform 非 JSON 工具并配 .lark 语法。可以说这是”模型原生编辑能力差异”倒逼出的一条事实标准。Trae Agent 是另一种表现:对接 Claude 时直接借用 Anthropic 内置的 text_editor_20250429/bash_20250124 工具类型,其余 provider 回退通用 schema。
D. Wire-protocol / schema 层:最深的推理时协同
不满足于换 prompt/工具,而是按 provider 差异化请求 payload 的形状。最典型是 Cline 的 glm-thinking.ts:同一个”扩展思考”开关,原生走 Z.AI 要 thinking:{type}、经 OpenAI 兼容端点要 reasoning:{enabled},序列化随传输路径变。Hermes Agent 的 gemini_schema.py 把 OpenAI 风格工具 schema 按 Gemini 的 ~24 键白名单消毒后再发;Copilot 的 wireApi 让 harness 实际讲三种线协议(completions/responses/Anthropic Messages)。新增的 Open Interpreter 把这点做成了显式的三种 wire(Responses/Chat/Messages)+ chat-wire-compat crate,且与 harness 仿真的合法组合由 routing 严格约束。Pydantic AI 提供了这一层里最优雅的抽象:typed native tools 跨 provider 归一(_narrow_tool_call_parts 把裸 ToolCallPart 提升为 typed 子类)、unless_native/with_native 自动在本地实现与 provider 原生间切换、Model.prepare_messages 把 history 降级翻译成当前 provider 能上线的形状——把”wire 差异”收进类型系统而非散落 if。Google ADK 则是深绑单一家族的极致:Gemini 的 context caching / thinking_config / native code execution / grounding / Live 双向流 / Interactions API 全部当原生特性直接用,GoogleLLMVariant 连工具 schema 都按 Gemini API vs Vertex 分叉。
E. 弱模型补偿:让跑不动原生 FC 的模型也能当 agent
这一支专门服务开源/小模型。Goose 的 toolshim 是最激进也最独特的方案:对 tool-calling 能力弱的模型(点名 Gemma3/DeepSeek-R1/Phi-4/Llama4)完全绕过 provider 的 FC API,把工具塞进 prompt,再用一个本地二级解释器模型(默认 mistral-nemo)把自由文本重解析成正规工具调用,甚至计划用真实 Goose 轨迹微调专用 toolshim 模型——这是别家没有的”模型补偿模型”。更轻的版本是”文本命令循环 + 正则/JSON 修复”:smolagents 的 code-blob(引 3 篇论文论证代码即动作优于 JSON)、MetaGPT 的 JSON_REPAIR_PROMPT、GPT Pilot 的 JSON-schema-in-prompt + 重试、Agent Zero 的 json_parse_dirty、CAMEL/GPT Researcher 的正则+json_repair 兜底、Open Interpreter 的 swe-agent 文本命令循环,都是”假设模型输出不可靠 JSON”的现实主义设计。Qwen Code 的 streamingToolCallParser(手写增量 JSON 修复,覆盖 vLLM 承载的 Qwen 等不规整流)是同一现实的流式版本。站在这条谱系对立极点的是 Roo Code:它索性把文本工具目录从系统提示里删掉(toolsCatalog=""),硬性承诺只走原生 function-calling——赌的是”目标模型都够强”。
F. GUI / computer-use 动作空间:新流派的模型协同
新增的两个 GUI agent 把协同设计带到了动作空间层面。UI-TARS Desktop 强绑定 UI-TARS/Doubao-UI-TARS VLM 家族,prompt 与坐标解析器逐模型版本定制(ui-tars-1.0 用 <|box_start|>、doubao-1.5-20b 用 <point> 且多 press/release/navigate),模型直接输出 Thought/Action 动作 DSL 而非 JSON tool-call,finished()/call_user()/wait() 内置动作即 loop 状态机的控制信号——动作空间就是与 VLM 联合演进的契约。Browser Use 走的是互补路线:不训坐标而是把 DOM 序列化成带 [index] 的 XML,截图上叠 bounding box + index 标号,让模型用 index 而非坐标操作,大幅降低对 vision 精度的依赖(与 computer-use 纯坐标点击的关键分野),同时也有自研微调模型 ChatBrowserUse(bu-2-0) + 专用简化 prompt + request_type(agent/judge) 的服务端协同。这两条路线(训 VLM 吃坐标 vs 用索引接口绕开坐标)是 GUI agent 领域当前最实质的设计分歧。Agent Zero 也在 Responses API 里保留了 computer-use session 状态,但深度远不及前两者。
G. 路由 / 角色分级 / 能力画像:模型无关阵营的主战场
模型无关阵营把全部协同精力投在”选谁、给谁、怎么退”上。会话中途升降级是这一层的高级形态:Factory 的 Router 会在监测到任务卡住时把会话升到更强模型,还披露了 Pareto 前沿方法论与拐点选点;Claude Code 的 fallbackModel 在过载时同轮切换。按角色/子任务派不同模型几乎人人都做,但粒度差异很大:Plandex 的 9 角色异构 model pack(planner/coder/architect/builder/summarizer/…逐步派发、大请求换大上下文变体)是本组里最细的;GPT Researcher 的 FAST/SMART/STRATEGIC 三档、Augment 的 context-gathering 用 flash-lite/validate 用 sonnet、Junie 的主模型 + 同家族 fasterModel 双架构、Agent Zero/CrewAI 的 utility/planning 便宜模型分工,都是同一思路的不同粒度。Amp 把”模型替换即产品策略”做到极致:模式绑定具体模型并随新模型持续重分配,read_thread subagent 换 GLM 5.2 是因为它长上下文忠实性更好——按任务属性而非纯成本选型。Augment 的 Prism 是最深的路由披露:一个轻量规划器做分回合路由,且明确围绕 prompt-caching 经济学(“仅当收益 > ~10x 缓存驱逐成本才切”)。
能力画像表是这一阵营的另一收敛点:AutoGen 的 ModelInfo TypedDict、Pydantic AI 的 profiles、Kimi Code 的 ModelCapability、deepagents 的 HarnessProfile、DeerFlow 的 supports_vision/thinking 都把”模型能不能 X”做成结构化 flag 驱动分支。QwenPaw 的 model_capability_cache 更进一步——不是查表而是从真实 API 错误里学(学到 rejects_media 后续主动剥离媒体),是能力探测的运行时自适应变体;它建于 AgentScope 的 ChatModelBase + 每家 FormatterBase 之上,AgentScope 那套”一套 Msg 契约 × N 家 wire 格式”的解耦正是 QwenPaw 能换 provider 的底座。OpenManus 则是这一层的反面教材:硬编码的 REASONING_MODELS/MULTIMODAL_MODELS 白名单明显偏老(gpt-4.1/claude-4/o3 未入会退化),说明”手维护能力表”这条路的维护成本真实存在,也反衬 QwenPaw 运行时学习与 models.dev 目录集成(Kilo Code、Kimi Code 均用 models.dev)的价值。
H. 特定 token / 训练栈绑定:把耦合做到最底层
少数 harness 把协同做到分词器/训练栈层。CodeGeeX 围绕 GLM 分词器的特殊 token 和 stop-token IDs(151329,151336,151338)构建,FIM/Infilling 是一等文档化特性。Letta 的 SGLangNativeAdapter 是新增里最硬核的训练协同证据:直接用模型 chat template 拿 token ids + per-token logprob 做多轮 RL,含 GLM4.7 tool-call 解析,V3 类”No inner thoughts in kwargs”专为对齐现代 native FC 模型——训练与推理栈是同一套。CAMEL 的 datagen 侧(环境+verifier+reward model)同理是为训练自家模型服务的配套。
结尾:最值得借鉴的设计
1. 结构化能力画像 / profile 层(Pydantic AI 的做法最干净)。 与其在核心循环里散落 if model.startswith("claude"),不如像 Pydantic AI 那样把”provider 特有的 API 行为”放进 Provider.model_profile()、“模型内在特征”放进 profile 布尔 flag,再由 unless_native/with_native 和降级翻译统一消费。AutoGen 的 ModelInfo、deepagents 的 HarnessProfile 是同一思想的不同实现。理由:这是唯一能让”支持 N 家 provider × M 种能力”不退化成组合爆炸 if-else 的抽象,且新模型上线时改一处 profile 而非满仓库找分支;OpenManus 的过时硬编码白名单正是缺这层抽象的代价。更进一步,QwenPaw 的”从 API 错误运行时学习能力”值得叠加进来,能自愈手维护表的滞后。
2. reasoning-effort 作为跨 provider 的一等旋钮。 从 Codex/Claude Code 到 Junie/Kiro/Amp/OpenAI Agents SDK,把推理强度从通用 temperature 里拎出来、映射到各家 thinking-budget/reasoning-effort 参数、并暴露为用户/subagent 可调的档位,已是 2025–2026 的事实标准。理由:推理模型时代成本-质量的主杠杆已从”选哪个模型”部分转移到”给多大思考预算”,把它做成显式一等旋钮(而非藏在采样参数里)让 harness 能按子任务精细控成本,也让跨 harness 基准对比可以把它固定做归一(Copilot 的 eval 方法论已经这么做)。这两个设计的共性是——它们都承认”模型无关”是个需要主动工程化的目标,而非默认状态。