Skip to main content

switch_mode

switch_mode工具使Roo能够在不同操作模式间切换,每种模式针对特定类型任务具有专用能力。当当前任务需要不同专业知识时,可以在代码、架构、问答或调试等模式间无缝转换。


参数

工具接受以下参数:

  • mode_slug (必填): 要切换到的模式slug(如"code"、"ask"、"architect")
  • reason (可选): 切换模式的原因,为用户提供上下文

功能

该工具在当前任务更适合其他模式能力时请求模式变更。它在转换Roo的焦点和可用工具集以匹配新任务阶段需求的同时保持上下文。


使用场景

  • 从信息收集过渡到代码实现时
  • 从编码转向架构或设计时
  • 当前任务需要仅在另一模式下可用的能力时
  • 复杂项目的特定阶段需要专门专业知识时

主要特点

  • 跨模式转换时保持上下文连续性
  • 为模式切换建议提供清晰理由
  • 所有模式变更都需要用户批准
  • 强制执行特定于每个模式的工具组限制
  • 基于所选模式无缝调整工具可用性
  • 支持标准和自定义模式
  • 在UI中显示模式切换和原因
  • 使用XML风格格式指定参数
  • 处理特定于某些模式的文件类型限制

限制

  • 不能切换到系统中不存在的模式
  • 每次模式转换都需要明确用户批准
  • 切换完成前不能使用特定于模式的工具
  • 模式切换后应用500ms延迟以确保变更生效
  • 某些模式有文件类型限制(如架构模式只能编辑markdown文件)
  • 模式保留仅适用于new_task功能,不适用于常规模式切换

工作原理

当调用switch_mode工具时,遵循以下流程:

  1. 请求验证

    • 验证请求的模式存在于系统中
    • 检查提供了mode_slug参数且有效
    • 确认用户尚未处于请求的模式
    • 确保reason参数(如提供)格式正确
  2. 模式转换准备

    • 打包模式变更请求及提供的原因
    • 向用户呈现变更请求以获取批准
  3. 模式激活(用户批准后)

    • 更新UI以反映新模式
    • 基于模式的工具组配置调整可用工具
    • 应用模式特定的提示和行为
    • 应用500ms延迟以确保变更生效后再执行下一个工具
    • 强制执行模式特定的文件限制
  4. 继续

    • 使用新模式的能力继续任务
    • 保留之前交互的相关上下文

工具组关联

switch_mode工具属于"modes"工具组,但也包含在"始终可用"工具列表中。这意味着:

  • 无论模式的配置工具组如何,它可以在任何模式下使用
  • 它与ask_followup_questionattempt_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>