.agents/skills/heterogeneous-agent/SKILL.md
Use this skill when the bug or feature lives in the external CLI agent pipeline, not the normal server-side agent runtime.
apps/desktop/src/main/modules/heterogeneousAgent/drivers/packages/heterogeneous-agents/src/adapters/heteroAgentRawLine transport, window.__HETERO_AGENT_TRACE, or executeHeterogeneousAgentmessage.id boundaries, missing tool_result, TodoWrite state drift, or subagent thread routingheteroAgentRawLineHeterogeneousAgentEventexecuteHeterogeneousAgent persists assistant/tool messages and forwards stream eventscreateGatewayEventHandler hydrates the UIagent-tracing or context-engine debuggingapps/desktop/src/main/controllers/HeterogeneousAgentCtr.tsapps/desktop/src/main/modules/heterogeneousAgent/drivers/claudeCode.tsapps/desktop/src/main/modules/heterogeneousAgent/drivers/codex.tspackages/heterogeneous-agents/src/adapters/claudeCode.tspackages/heterogeneous-agents/src/adapters/codex.tssrc/store/chat/slices/aiChat/actions/heterogeneousAgentExecutor.tssrc/store/chat/slices/aiChat/actions/__tests__/heterogeneousAgentExecutor.test.tsexecuteHeterogeneousAgent exposes window.__HETERO_AGENT_TRACE.persistToolBatch, persistToolResult, step transitions, and subagent routing.ToolCallPayload.id.message.id are one turn, not multiple turns.tool_result lives in type: 'user' events, not assistant events.message_delta.usage is authoritative; do not trust echoed usage on every assistant block.persistToolBatch must pre-register assistant tools[] before creating tool messages.parentId equal to the owning assistant and tool_call_id equal to the tool id.tool_result must resolve an existing toolMsgIdByCallId.toolMsgIdByCallId map at main step boundaries.message.id changes.type: 'user' tool_result blocks are being ignored because the code only inspects assistant events.pluginState.todos is being attached at tool-result time.parent_tool_use_id handling and whether subagent chunks are being forwarded to the main gateway handler.newStep or an equivalent turn-change signal.persistToolBatch Phase 1 ran before tool message creation.tool_result for unknown toolCallId and missing result_msg_id backfill.