switch_mode
switch_mode
工具使Roo能够在不同操作模式间切换,每种模式针对特定类型任务具有专用能力。当当前任务需要不同专业知识时,可以在代码、架构、问答或调试等模式间无缝转换。
参数
工具接受以下参数:
mode_slug
(必填): 要切换到的模式slug(如"code"、"ask"、"architect")reason
(可选): 切换模式的原因,为用户提供上下文
功能
该工具在当前任务更适合其他模式能力时请求模式变更。它在转换Roo的焦点和可用工具集以匹配新任务阶段需求的同时保持上下文。
使用场景
- 从信息收集过渡到代码实现时
- 从编码转向架构或设计时
- 当前任务需要仅在另一模式下可用的能力时
- 复杂项目的特定阶段需要专门专业知识时
主要特点
- 跨模式转换时保持上下文连续性
- 为模式切换建议提供清晰理由
- 所有模式变更都需要用户批准
- 强制执行特定于每个模式的工具组限制
- 基于所选模式无缝调整工具可用性
- 支持标准和自定义模式
- 在UI中显示模式切换和原因
- 使用XML风格格式指定参数
- 处理特定于某些模式的文件类型限制
限制
- 不能切换到系统中不存在的模式
- 每次模式转换都需要明确用户批准
- 切换完成前不能使用特定于模式的工具
- 模式切换后应用500ms延迟以确保变更生效
- 某些模式有文件类型限制(如架构模式只能编辑markdown文件)
- 模式保留仅适用于
new_task
功能,不适用于常规模式切换
工作原理
当调用switch_mode
工具时,遵循以下流程:
-
请求验证:
- 验证请求的模式存在于系统中
- 检查提供了
mode_slug
参数且有效 - 确认用户尚未处于请求的模式
- 确保
reason
参数(如提供)格式正确
-
模式转换准备:
- 打包模式变更请求及提供的原因
- 向用户呈现变更请求以获取批准
-
模式激活(用户批准后):
- 更新UI以反映新模式
- 基于模式的工具组配置调整可用工具
- 应用模式特定的提示和行为
- 应用500ms延迟以确保变更生效后再执行下一个工具
- 强制执行模式特定的文件限制
-
继续:
- 使用新模式的能力继续任务
- 保留之前交互的相关上下文
工具组关联
switch_mode
工具属于"modes"工具组,但也包含在"始终可用"工具列表中。这意味着:
- 无论模式的配置工具组如何,它可以在任何模式下使用
- 它与
ask_followup_question
和attempt_completion
等其他核心工具一起可用 - 当任务需求变化时,它允许在工作流的任何点进行模式转换
模式结构
系统中的每个模式都有特定结构:
slug
: 模式的唯一标识符(如"code"、"ask")name
: 模式的显示名称(如"Code"、"Ask")roleDefinition
: 模式的专用角色和能力customInstructions
: 可选模式特定指令,指导行为groups
: 模式可用的工具组,带有可选限制
模式能力
核心模式提供以下专用能力:
- 代码模式:专注于编码任务,完全访问代码编辑工具
- 架构模式:专用于系统设计和架构规划,仅限于编辑markdown文件
- 问答模式:优化用于回答问题并提供信息
- 调试模式:配备用于系统化问题诊断和解决
自定义模式
除核心模式外,系统支持特定于项目的自定义模式:
- 可以定义具有特定启用工具组的自定义模式
- 可以指定自定义角色定义和指令
- 系统首先检查自定义模式,然后回退到核心模式
- 相同slug的自定义模式定义优先于核心模式
文件限制
不同模式可能有特定文件类型限制:
- 架构模式:只能编辑匹配
.md
扩展名的文件 - 尝试编辑受限文件类型会导致
FileRestrictionError
- 这些限制有助于强制模式间适当的关注点分离
使用示例
- 讨论新功能时,Roo从问答模式切换到架构模式以帮助设计系统结构。
- 在架构模式完成架构规划后,Roo切换到代码模式以实现设计的功能。
- 开发过程中遇到错误时,Roo从代码模式切换到调试模式进行系统化故障排除。
使用示例
切换到代码模式进行实现:
<switch_mode>
<mode_slug>code</mode_slug>
<reason>需要基于我们讨论的架构实现登录功能</reason>
</switch_mode>
切换到架构模式进行设计:
<switch_mode>
<mode_slug>architect</mode_slug>
<reason>需要在实现前设计系统架构</reason>
</switch_mode>
切换到调试模式进行故障排除:
<switch_mode>
<mode_slug>debug</mode_slug>
<reason>需要系统化诊断认证错误</reason>
</switch_mode>
切换到问答模式获取信息:
<switch_mode>
<mode_slug>ask</mode_slug>
<reason>需要回答关于已实现功能的问题</reason>
</switch_mode>