Grok Build · Subagent Resolution AgentDefinition 与 Persona 如何合并 子 Agent 先解析可执行骨架,再把 spawn 参数、role 默认值和 Persona 默认值折叠为运行时配置。两套结构在不同阶段生效,最终共同决定子会话。 一句话速览 拆解 Agent 定义、Persona 覆盖与最终会话行为的合并顺序 课程目标 能区分 AgentDefinition 、 SubagentRole 、 SubagentPersona 与 EffectiveRuntimeConfig ,并按字段准确判断合并优先级。
TEACHING DIAGRAM 定义解析与运行时覆盖是两条输入线 图中类型和函数名来自源码,箭头用于讲解数据汇合关系。
AgentDefinition 和运行时覆盖共同形成子 Agent
AgentDefinition tools · prompt · permission · model spawn / role / persona runtime defaults and overrides resolve_effective_overrides EffectiveRuntimeConfig prompt fragments + runtime choices child session definition filtered and rendered
四个真实结构各管什么
AgentDefinition:可版本化的 Agent 合同 从 .grok/agents/*.md 解析,真实字段包括 prompt_mode 、 tool_config 、 capability_mode 、 permission_mode 、 tools 、 isolation 、 model 、hooks 与 MCP 继承等。项目定义的发现优先级高于 user 与 bundled。
SubagentRole:按类型命中的运行时预设 role 可给出 capability、model、reasoning effort、prompt file 与默认 isolation。它由 subagent_type 查找,role prompt 在 spawn 时读取。
SubagentPersona:按名称选择的行为层 Persona 有 inline instructions、instructions file、inputs、outputs、model、reasoning effort 与 default isolation。inline 文本在文件内容之前合并,再作为
crates/codegen/xai-grok-agent/src/config.rs crates/codegen/xai-grok-agent/src/discovery.rs crates/codegen/xai-grok-subagent-resolution/src/config.rs resolve_effective_overrides
优先级需要按字段阅读
01 · spawn override 调用 task 时显式给出的 model、reasoning、capability、persona、isolation。 02 · role default model、reasoning、capability 与 isolation 的 role 默认值。 03 · persona default model、reasoning 与 isolation。Persona 不提供 capability_mode。 04 · parent / none 未命中的字段保留 None,交由下游继承父级;isolation 最终落到 None 模式。
EffectiveRuntimeConfig 之后还有 definition fallback shell 收到解析结果后,若 reasoning_effort 仍为空,会读取 AgentDefinition.effort ;若 runtime isolation 为 None 且 definition isolation 为 Worktree,也会升级为 Worktree。model 解析中,已解析的 runtime override 先于 per-agent pin、 AgentDefinition.model 与父模型继承。
失败关闭:Persona 请求了 Persona 后,找不到、内容为空或读取文件失败都会写入 persona_error 。文件 I/O 失败会提前返回默认化结果;spawn 侧看到 Persona 错误后中止创建。 软降级:role prompt role 的 prompt_file 读取失败只产生 role_prompt_warning ,其余 model、reasoning、capability 与 isolation 仍继续解析。
真实源码快照
crates/codegen/xai-grok-subagent-resolution/src/types.rs REAL SOURCE · abridged
pub struct EffectiveRuntimeConfig {
pub model: Option<String>,
pub reasoning_effort: Option<String>,
pub capability_mode: Option<SubagentCapabilityMode>,
pub persona: Option<String>,
pub persona_instructions: Option<String>,
pub role_prompt: Option<String>,
pub persona_error: Option<String>,
pub isolation: SubagentIsolationMode,
}
快照说明: 字段名与类型来自真实结构体,省略了注释和两个观测字段。上方合流图是教学化视觉,不表示源码中存在同名的单体管线类。
课堂练习:手算有效配置 spawn 指定 reasoning_effort=high 和 Persona reviewer;role 指定 model=A、capability=read-only、isolation=worktree;Persona 指定 model=B、reasoning=low、isolation=none。写出四个字段的最终值,并解释 capability 为何不会读取 Persona。
Takeaway: AgentDefinition 提供 Agent 骨架,role 与 Persona 提供 spawn 阶段的运行时输入。优先级是逐字段级联,准确分析要先确认该字段真实存在于哪一种结构。