Grok Build · Subagent Resolution

AgentDefinition 與 Persona 如何合併

子 Agent 先解析可執行骨架,再把 spawn 參數、role 預設值和 Persona 預設值摺疊為運行時配置。兩套結構在不同階段生效,最終共同決定子會話。

課程目標

能區分 AgentDefinition、SubagentRole、SubagentPersona 與 EffectiveRuntimeConfig,並按字段準確判斷合併優先級。

TEACHING DIAGRAM

定義解析與運行時覆蓋是兩條輸入綫

圖中類型和函式名來自源碼,箭頭用於講解數據匯合關係。

AgentDefinition 和運行時覆蓋共同形成子 Agent AgentDefinitiontools · prompt · permission · model spawn / role / personaruntime defaults and overrides resolve_effective_overridesEffectiveRuntimeConfigprompt fragments + runtime choices child sessiondefinition 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 文本在檔案內容之前合併,再作為 <persona> 塊進入 prompt。

EffectiveRuntimeConfig:已解析結果

真實字段是 model、reasoning_effort、capability_mode、persona、persona_instructions、role_prompt、role_prompt_warning、role_name、persona_error 與 isolation。源碼中沒有 temperature、max_tokens 或 tools 字段。

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 defaultmodel、reasoning、capability 與 isolation 的 role 預設值。
03 · persona defaultmodel、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.rsREAL 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 階段的運行時輸入。優先級是逐字段級聯,準確分析要先確認該字段真實存在於哪一種結構。