apps/docs/docs/features/boomerang-tasks.mdx
Boomerang Tasks (also known as subtasks or task orchestration) allow you to break down complex projects into smaller, manageable pieces using the built-in 🪃 Orchestrator Mode (aka Boomerang Mode). Think of it like delegating parts of your work to specialized assistants. Each subtask runs in its own context, often using a different Roo Code mode tailored for that specific job (like 💻 Code, 🏗️ Architect, or 🪲 Debug). The Orchestrator mode manages this process.
:::info Orchestrator Mode is Built-In
The 🪃 Orchestrator mode (previously achieved via a custom "Boomerang Mode") is now a built-in mode specifically designed to orchestrate workflows by breaking down tasks and delegating them to other modes. You no longer need to create a custom mode for this functionality.
Learn more about Built-in Modes. :::
When in the 🪃 Orchestrator mode (aka Boomerang Mode), Roo analyzes a complex task and suggests breaking it down into a subtask1.
The parent task (in Orchestrator mode) pauses, and the new subtask begins in a different, specialized mode2.
When the subtask's goal is achieved, Roo signals completion.
The parent task resumes with only the summary3 of the subtask. The parent uses this summary to continue the main workflow.
Boomerang Tasks provide a powerful way to manage complex development workflows directly within Roo Code, leveraging specialized modes for maximum efficiency.
:::tip Keep Tasks Focused Use subtasks (delegated via Orchestrator mode) to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one. :::
The Orchestrator mode is intentionally limited to focus on high-level workflow management. Giving it the ability to read files by default causes the context to become filled with file reads, hampering its ability to remain focused on orchestration. The design philosophy is that subtasks should handle the detailed work and return only the necessary information (via their completion summaries) for the orchestrator to delegate further tasks effectively.
This limitation helps prevent context poisoning, where irrelevant or excessive information contaminates the model's active context, leading to degraded performance and task deviation.
You can customize the Orchestrator mode to add capabilities like file reading by following the configuration precedence system:
{
"customModes": [
{
"slug": "orchestrator",
"name": "🪃 Orchestrator",
"roleDefinition": "You are Roo, a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.",
"customInstructions": "Your role is to coordinate complex workflows by delegating tasks to specialized modes. As an orchestrator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized modes.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project. \n * A statement that these specific instructions supersede any conflicting general instructions the subtask's mode might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.",
"groups": [
"read"
],
"source": "global"
}
]
}
:::warning Adding capabilities to the Orchestrator mode should be done thoughtfully. The limited default capabilities help maintain focus on orchestration rather than implementation details. :::
This context is passed via the message parameter of the new_task tool when the Orchestrator mode delegates the task. ↩
The mode for the subtask is specified via the mode parameter of the new_task tool during initiation by the Orchestrator mode. ↩
This summary is passed via the result parameter of the attempt_completion tool when the subtask finishes. ↩