@@ -25,7 +25,7 @@ import { ToolRouter } from "./tools/router.js";
2525import { SkillLoader } from "./tools/skills/loader.js" ;
2626import { SkillResolver } from "./tools/skills/resolver.js" ;
2727import { autoRefreshModels } from "./models/sync.js" ;
28- import { readMcpConfigs } from "./mcp/config.js" ;
28+ import { readMcpConfigs , readSubagentNames } from "./mcp/config.js" ;
2929import { McpClientManager } from "./mcp/client-manager.js" ;
3030import { buildMcpToolHookEntries , buildMcpToolDefinitions } from "./mcp/tool-bridge.js" ;
3131import { createOpencodeClient } from "@opencode-ai/sdk" ;
@@ -92,6 +92,7 @@ export function buildAvailableToolsSystemMessage(
9292 lastToolMap : Array < { id : string ; name : string } > ,
9393 mcpToolDefs : any [ ] ,
9494 mcpToolSummaries ?: McpToolSummary [ ] ,
95+ subagentNames : string [ ] = [ ] ,
9596) : string | null {
9697 const parts : string [ ] = [ ] ;
9798
@@ -132,6 +133,12 @@ export function buildAvailableToolsSystemMessage(
132133 parts . push ( lines . join ( "\n" ) ) ;
133134 }
134135
136+ if ( subagentNames . length > 0 ) {
137+ parts . push (
138+ `When calling the task tool, set subagent_type to one of: ${ subagentNames . join ( ", " ) } . Do not omit this parameter.`
139+ ) ;
140+ }
141+
135142 return parts . length > 0 ? parts . join ( "\n\n" ) : null ;
136143}
137144
@@ -628,7 +635,8 @@ async function ensureCursorProxyServer(workspaceDirectory: string, toolRouter?:
628635 const toolLoopGuard = createToolLoopGuard ( messages , TOOL_LOOP_MAX_REPEAT ) ;
629636 const boundaryContext = createBoundaryRuntimeContext ( "bun-handler" ) ;
630637
631- const prompt = buildPromptFromMessages ( messages , tools ) ;
638+ const subagentNames = readSubagentNames ( ) ;
639+ const prompt = buildPromptFromMessages ( messages , tools , subagentNames ) ;
632640 const model = boundaryContext . run ( "normalizeRuntimeModel" , ( boundary ) =>
633641 boundary . normalizeRuntimeModel ( body ?. model ) ,
634642 ) ;
@@ -1092,7 +1100,8 @@ async function ensureCursorProxyServer(workspaceDirectory: string, toolRouter?:
10921100 const toolLoopGuard = createToolLoopGuard ( messages , TOOL_LOOP_MAX_REPEAT ) ;
10931101 const boundaryContext = createBoundaryRuntimeContext ( "node-handler" ) ;
10941102
1095- const prompt = buildPromptFromMessages ( messages , tools ) ;
1103+ const subagentNames = readSubagentNames ( ) ;
1104+ const prompt = buildPromptFromMessages ( messages , tools , subagentNames ) ;
10961105 const model = boundaryContext . run ( "normalizeRuntimeModel" , ( boundary ) =>
10971106 boundary . normalizeRuntimeModel ( bodyData ?. model ) ,
10981107 ) ;
@@ -2058,7 +2067,11 @@ export const CursorPlugin: Plugin = async ({ $, directory, worktree, client, ser
20582067
20592068 async "experimental.chat.system.transform" ( input : any , output : { system : string [ ] } ) {
20602069 if ( ! toolsEnabled ) return ;
2061- const systemMessage = buildAvailableToolsSystemMessage ( lastToolNames , lastToolMap , mcpToolDefs , mcpToolSummaries ) ;
2070+ const subagentNames = readSubagentNames ( ) ;
2071+ const systemMessage = buildAvailableToolsSystemMessage (
2072+ lastToolNames , lastToolMap , mcpToolDefs , mcpToolSummaries ,
2073+ subagentNames ,
2074+ ) ;
20622075 if ( ! systemMessage ) return ;
20632076 output . system = output . system || [ ] ;
20642077 output . system . push ( systemMessage ) ;
0 commit comments