switch_mode
switch_mode 工具让 Roo 可以在不同的操作模式之间切换,每种模式都拥有针对特定任务类型的专业能力。这使得在当前任务需要不同专业知识时,可以无缝地在诸如 “代码”、“架构”、“问答” 或 “调试” 等模式之间进行转换。
switch_mode 工具让 Roo 可以在不同的操作模式之间切换,每种模式都拥有针对特定任务类型的专业能力。这使得在当前任务需要不同专业知识时,可以无缝地在诸如 “代码”、“架构”、“问答” 或 “调试” 等模式之间进行转换。
参数
此工具接受以下参数:
- mode_slug(必需):要切换到的模式的代号(例如,“code”、“ask”、“architect”)。
- reason(可选):切换模式的原因,为用户提供上下文。
功能
当当前任务由另一种模式的能力处理更好时,此工具会请求进行模式更改。它在转移 Roo 的焦点和可用工具集以匹配新任务阶段的要求时,会保持上下文。
使用场景
- 从信息收集过渡到代码实现时。
- 从编码转向架构或设计时。
- 当前任务需要仅在其他模式下可用的能力时。
- 当复杂项目的特定阶段需要专业知识时。
关键特性
- 在模式转换中保持上下文连续性。
- 为模式切换建议提供清晰的理由。
- 所有模式更改都需要用户批准。
- 强制执行特定于每种模式的工具组限制。
- 根据所选模式无缝调整工具可用性。
- 支持标准和自定义模式。
- 在用户界面中显示模式切换和原因。
- 使用 XML 风格的格式进行参数指定。
- 处理特定于某些模式的文件类型限制。
局限性
- 无法切换到系统中不存在的模式。
- 每次模式转换都需要明确的用户批准。
- 在切换完成之前,无法使用特定于该模式的工具。
- 模式切换后会应用 500 毫秒的延迟,以允许更改生效。
- 某些模式具有文件类型限制(例如,“架构”模式只能编辑 Markdown 文件)。
- 仅
new_task功能保留模式以供恢复,一般模式切换则不适用。
工作原理
当 switch_mode 工具被调用时,它遵循以下过程:
- 请求验证:
- 验证所请求的模式在系统中是否存在。
- 检查是否提供了
mode_slug参数且其有效。 - 验证用户是否已处于所请求的模式中。
- 确保
reason参数(如果提供)格式正确。
- 模式转换准备:
- 将模式更改请求与提供的理由打包。
- 向用户呈现更改请求以供批准。
- 模式激活(在用户批准后):
- 更新用户界面以反映新模式。
- 根据模式的工具组配置调整可用工具。
- 应用特定于模式的提示和行为。
- 应用 500 毫秒的延迟,以允许更改在执行下一个工具之前生效。
- 强制执行特定于该模式的任何文件限制。
- 继续:
- 使用新模式的功能继续执行任务。
- 保留来自先前交互的相关上下文。
工具组关联
switch_mode 工具属于“modes”工具组,但也被包含在“始终可用”工具列表中。这意味着:
- 无论模式的配置工具组如何,它都可以在任何模式下使用。
- 它与其他核心工具(如
ask_followup_question和attempt_completion)一起可用。 - 当任务要求发生变化时,它允许在工作流中的任何时候进行模式转换。
模式结构
系统中的每个模式都有一个特定的结构:
- slug:模式的唯一标识符(例如,“code”、“ask”)。
- name:模式的显示名称(例如,“Code”、“Ask”)。
- roleDefinition:模式的专业角色和能力定义。
- customInstructions:可选的、指导行为的特定于模式的指令。
- groups:模式可用的工具组,可附带可选的限制。
模式能力
核心模式提供这些专业能力:
- 代码模式:专注于编码任务,可完全访问代码编辑工具。
- 架构模式:专注于系统设计和架构规划,仅限于编辑 Markdown 文件。
- 问答模式:为回答问题和提供信息而优化。
- 调试模式:专用于系统性地诊断和解决问题。
自定义模式
除了核心模式,系统还支持自定义的、特定于项目的模式:
- 可以定义自定义模式,并启用特定的工具组。
- 它们可以指定自定义的角色定义和指令。
- 系统首先检查自定义模式,然后才回退到核心模式。
- 自定义模式定义优先于具有相同代号的核心模式。
文件限制
不同的模式可能有特定的文件类型限制:
- 架构模式:只能编辑
.md扩展名的文件。 - 尝试编辑受限文件类型会产生
FileRestrictionError。 - 这些限制有助于强制执行模式之间的适当职责分离。
使用示例
- 讨论新功能时,Roo 从“问答”模式切换到“架构”模式,以帮助设计系统结构。
- 在“架构”模式下完成架构规划后,Roo 切换到“代码”模式以实现设计好的功能。
- 在开发过程中遇到 bug 时,Roo 从“代码”模式切换到“调试”模式进行系统性故障排除。
用法示例
切换到 “代码” 模式进行实现:
<switch_mode>
<mode_slug>code</mode_slug>
<reason>Need to implement the login functionality based on the architecture we've discussed</reason>
</switch_mode>
切换到 “架构” 模式进行设计:
<switch_mode>
<mode_slug>architect</mode_slug>
<reason>Need to design the system architecture before implementation</reason>
</switch_mode>
切换到 “调试” 模式进行故障排除:
<switch_mode>
<mode_slug>debug</mode_slug>
<reason>Need to systematically diagnose the authentication error</reason>
</switch_mode>
切换到 “问答” 模式以获取信息:
<switch_mode>
<mode_slug>ask</mode_slug>
<reason>Need to answer questions about the implemented feature</reason>
</switch_mode>