delegate_to_subagents
Delegate development tasks to specialized autonomous agents for parallel or sequential execution, enabling team-based AI development workflows.
Instructions
Delegate tasks to Goose CLI subagents for autonomous development
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The development task to delegate to subagents | |
| agents | Yes | Array of subagents to create | |
| execution_mode | No | How to execute the subagents | parallel |
| working_directory | No | Working directory for the subagents (defaults to current directory) |
Implementation Reference
- src/index.js:172-209 (handler)The primary handler function that implements the delegate_to_subagents tool. It parses input arguments, generates a delegation prompt, spawns Goose CLI processes for the specified subagents, tracks the session, and returns a response with session ID.async delegateToSubagents(args) { const { task, agents, execution_mode = 'parallel', working_directory = process.cwd() } = args; const sessionId = uuidv4(); // Ensure Goose alpha features are enabled process.env.ALPHA_FEATURES = 'true'; try { // Create the delegation prompt for Goose const delegationPrompt = this.createDelegationPrompt(task, agents, execution_mode); // Execute Goose with the delegation prompt const gooseProcess = await this.executeGoose(delegationPrompt, working_directory, sessionId); this.activeSubagents.set(sessionId, { task, agents, execution_mode, status: 'running', startTime: new Date(), process: gooseProcess }); return { content: [ { type: 'text', text: `Successfully delegated task to ${agents.length} subagents in ${execution_mode} mode.\n\nSession ID: ${sessionId}\nTask: ${task}\n\nSubagents created:\n${agents.map(agent => `- ${agent.role}: ${agent.instructions}`).join('\n')}\n\nUse get_subagent_results with session_id "${sessionId}" to retrieve results when complete.` } ] }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Failed to delegate to subagents: ${error.message}` ); } }
- src/index.js:44-85 (schema)Input schema defining the parameters for the delegate_to_subagents tool, including task, agents array, execution mode, and working directory.inputSchema: { type: 'object', properties: { task: { type: 'string', description: 'The development task to delegate to subagents' }, agents: { type: 'array', items: { type: 'object', properties: { role: { type: 'string', description: 'Agent role (e.g., backend_developer, frontend_developer, qa_engineer)' }, instructions: { type: 'string', description: 'Specific instructions for this agent' }, recipe: { type: 'string', description: 'Optional recipe name to use for this agent' } }, required: ['role', 'instructions'] }, description: 'Array of subagents to create' }, execution_mode: { type: 'string', enum: ['parallel', 'sequential'], default: 'parallel', description: 'How to execute the subagents' }, working_directory: { type: 'string', description: 'Working directory for the subagents (defaults to current directory)' } }, required: ['task', 'agents'] }
- src/index.js:41-86 (registration)Registration of the delegate_to_subagents tool in the ListTools response, including name, description, and full input schema.{ name: 'delegate_to_subagents', description: 'Delegate tasks to Goose CLI subagents for autonomous development', inputSchema: { type: 'object', properties: { task: { type: 'string', description: 'The development task to delegate to subagents' }, agents: { type: 'array', items: { type: 'object', properties: { role: { type: 'string', description: 'Agent role (e.g., backend_developer, frontend_developer, qa_engineer)' }, instructions: { type: 'string', description: 'Specific instructions for this agent' }, recipe: { type: 'string', description: 'Optional recipe name to use for this agent' } }, required: ['role', 'instructions'] }, description: 'Array of subagents to create' }, execution_mode: { type: 'string', enum: ['parallel', 'sequential'], default: 'parallel', description: 'How to execute the subagents' }, working_directory: { type: 'string', description: 'Working directory for the subagents (defaults to current directory)' } }, required: ['task', 'agents'] } },
- src/index.js:144-169 (registration)Tool call request handler registration with switch case dispatching 'delegate_to_subagents' to its handler function.this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { switch (name) { case 'delegate_to_subagents': return await this.delegateToSubagents(args); case 'create_goose_recipe': return await this.createGooseRecipe(args); case 'list_active_subagents': return await this.listActiveSubagents(); case 'get_subagent_results': return await this.getSubagentResults(args); default: throw new McpError( ErrorCode.MethodNotFound, `Unknown tool: ${name}` ); } } catch (error) { throw new McpError( ErrorCode.InternalError, `Error executing ${name}: ${error.message}` ); } });
- src/index.js:211-229 (helper)Helper function that generates the prompt sent to Goose CLI for delegating the task to specified subagents.createDelegationPrompt(task, agents, execution_mode) { const agentDescriptions = agents.map(agent => { let description = `${agent.role} with instructions: "${agent.instructions}"`; if (agent.recipe) { description += ` using recipe "${agent.recipe}"`; } return description; }).join(', '); const executionPhrase = execution_mode === 'parallel' ? 'in parallel simultaneously' : 'sequentially one after another'; return `Use ${agents.length} subagents working ${executionPhrase} to complete this task: "${task}". Create these specialized subagents: ${agentDescriptions}. Each subagent should work independently on their assigned part of the task. Provide a comprehensive summary of all results when complete.`; }