极狐 GitLab

CodeRider 模式

CodeRider 中的模式是专门设计的角色,可以根据当前任务调整助手的行为。每种模式都提供不同的能力、专业知识和访问权限,帮助你完成特定目标。

使用模式#

为什么使用不同的模式?#

  • 任务专业化:获得针对当前任务所需的精确帮助
  • 安全控制:在专注于规划或学习时,防止意外的文件修改
  • 专注交互:接收针对当前活动优化的响应
  • 工作流优化:在规划、实施、调试和学习之间无缝切换

切换模式#

四种切换模式的方式:

  1. 下拉菜单:点击聊天输入框左侧的选择器

    模式选择器

  2. 斜杠命令:在聊天输入框中输入 /architect/ask/debug 、 /code、 /orchestrator/review

    模式选择器

  3. 切换命令/键盘快捷键:使用适用于你操作系统的键盘快捷键。每次按下都会按顺序循环切换可用模式,到达末尾后返回第一个模式。

    操作系统快捷键
    macOS + .
    WindowsCtrl + .
    LinuxCtrl + .
  4. 接受建议:在适当时点击 CodeRider 提供的模式切换建议

内置模式#

代码模式(默认)#

方面详细信息
描述一位熟练的软件工程师,精通编程语言、设计模式和最佳实践
工具访问完全访问所有工具组:readeditbrowsercommandmcp
适合场景编写代码、实现功能、调试和一般开发
特殊功能无工具限制——所有编码任务完全灵活

问答模式#

方面详细信息
描述一位知识渊博的技术助手,专注于回答问题而不修改代码库
工具访问有限访问:仅 readbrowsermcp(无法编辑文件或运行命令)
适合场景代码解释、概念探索和技术学习
特殊功能优化为在不修改项目的情况下提供信息丰富的响应

架构师模式#

方面详细信息
描述一位经验丰富的技术领导和规划者,帮助设计系统并创建实施计划
工具访问访问 readbrowsermcp 和受限的 edit(仅限 markdown 文件)
适合场景系统设计、高层规划和架构讨论
特殊功能遵循从信息收集到详细规划的结构化方法

调试模式#

方面详细信息
描述一位擅长系统化故障排除和诊断的专家问题解决者
工具访问完全访问所有工具组:readeditbrowsercommandmcp
适合场景追踪错误、诊断问题并解决复杂问题
特殊功能使用分析、缩小可能性和修复问题的系统化方法

协调者模式#

方面详细信息
描述一位战略工作流协调者,通过将复杂任务委派给适当的专业模式来协调工作
工具访问有限的访问权限,用于创建新任务和协调工作流
适合场景将复杂项目分解为可管理的子任务,并分配给专业模式
特殊功能使用 new_task 工具将工作委派给其他模式

评审模式#

方面详细信息
描述一位专家级代码审查员,专注于分析代码更改,以提供关于质量、安全和最佳实践的结构化反馈
工具访问具有读取 (read)、浏览器 (browser)、mcp 以及在获得许可时进行编辑 (edit) 的权限
适合场景及早发现问题、强制执行代码标准、加速 PR (拉取请求) 周转
特殊功能提交前的代码审查,提供涵盖性能、安全性、代码风格和测试覆盖率的反馈

自定义模式#

CodeRider 允许您创建自定义模式,以根据特定任务或工作流调整 CodeRider 的行为。自定义模式可以是全局(适用于所有项目)或项目特定(在单个项目中定义)。

粘性模型以提高工作效率#

每种模式(包括自定义模式)都有粘性模型功能。这意味着 CodeRider 会自动记住并选择您上次在特定模式下使用的模型。这让您能够为不同任务分配不同的首选模型,而无需不断重新配置,因为 CodeRider 会在您切换模式时自动切换模型。

为什么使用自定义模式?#

  • 专业化:创建针对特定任务优化的模式,如"文档编写者"、"测试工程师"或"重构专家"
  • 安全性:限制模式对敏感文件或命令的访问。例如,"审查模式"可以限制为只读操作
  • 实验性:安全地尝试不同的提示和配置,而不会影响其他模式
  • 团队协作:与团队共享自定义模式以标准化工作流程

自定义模式包含哪些内容?#

自定义模式由几个关键属性定义。理解这些概念将帮助您有效地调整 CodeRider 的行为。

UI 字段 / YAML 属性概念描述
Slug (slug)模式的唯一内部标识符。CodeRider 使用它来引用模式,特别是用于关联特定于模式的指令文件。
名称 (name)在 CodeRider 用户界面中显示的模式名称。应该是人类可读且具有描述性的。
描述 (description)在模式选择器 UI 中显示的模式目的的简短、用户友好的摘要。保持简洁,并专注于该模式对用户的作用。
角色定义 (roleDefinition)定义模式的核心身份和专业领域。此文本放置在系统提示的开头,并定义 CodeRider 在此模式激活时的个性和行为。
可用工具 (groups)定义模式允许的工具集和文件访问权限。对应于选择模式可以使用的工具的一般类别。
使用场景 (whenToUse)(可选) 为 CodeRider 的自动化决策提供指导,特别是模式选择和任务编排。由协调器模式用于任务协调。
自定义指令 (customInstructions)(可选) 模式的特定行为准则或规则。添加在系统提示的末尾附近,以进一步细化 CodeRider 的行为。

导入/导出模式#

轻松共享、备份和模板化您的自定义模式。此功能允许您将任何模式及其关联规则导出到单个便携式 YAML 文件中,您可以将其导入到任何项目中。

主要功能#

  • 可共享设置:将模式及其规则打包到一个文件中,轻松与团队共享
  • 轻松备份:保存您的自定义模式配置,这样您就不会丢失它们
  • 项目模板:为不同类型的项目创建标准化模式模板
  • 简单迁移:在全局设置和特定项目之间轻松移动模式
  • 灵活的 Slug 更改:在导出的文件中更改模式 slug,无需手动路径编辑

创建和配置自定义模式的方法#

您可以通过几种方式创建和配置自定义模式:

1. 询问 CodeRider(推荐)#

您可以通过要求 CodeRider 为您创建基本的自定义模式来快速创建。例如:

text
创建一个名为"文档编写者"的新模式。它应该只能读取文件和编写 Markdown 文件。

CodeRider 将引导您完成此过程,提示必要的信息并使用首选的 YAML 格式创建模式。

2. 使用提示标签页#

  1. 打开提示标签页:点击 CodeRider 顶部菜单栏中的  图标
  2. 创建新模式:点击模式标题右侧的  按钮
  3. 填写字段:

界面提供名称、Slug、描述、保存位置、角色定义、使用时机(可选)、可用工具和自定义指令的字段。填写这些字段后,点击"创建模式"按钮。CodeRider 将以 YAML 格式保存新模式。

3. 手动配置(YAML 和 JSON)#

您可以直接编辑配置文件来创建或修改自定义模式。此方法为您提供对所有属性的最大控制。CodeRider 现在支持 YAML(首选)和 JSON 格式。

  • 全局模式:编辑 custom_modes.yaml(首选)或 custom_modes.json 文件。通过提示标签页 > ("全局提示"旁的设置菜单图标)> "编辑全局模式" 访问
  • 项目模式:编辑项目根目录中的 .coderidermodes 文件(可以是 YAML 或 JSON)。通过提示标签页 > ("项目提示"旁的设置菜单图标)> "编辑项目模式" 访问

YAML 配置格式(首选)#

YAML 现在是定义自定义模式的首选格式,因为它具有更好的可读性、注释支持和更清晰的多行字符串。

YAML 示例#

text
1customModes: 2 - slug: docs-writer 3 name: 📝 文档编写者 4 description: 专门用于编写和编辑技术文档的模式。 5 roleDefinition: 您是一位专门编写清晰文档的技术作家。 6 whenToUse: 使用此模式编写和编辑文档。 7 customInstructions: 专注于文档的清晰性和完整性。 8 groups: 9 - read 10 - - edit # 元组的第一个元素 11 - fileRegex: \.(md|mdx)$ # 第二个元素是选项对象 12 description: 仅限 Markdown 文件 13 - browser 14 - slug: another-mode 15 name: 另一个模式 16 # ... 其他属性

JSON 替代方案#

text
1{ 2 "customModes": [ 3 { 4 "slug": "docs-writer", 5 "name": "📝 文档编写者", 6 "description": "专门用于编写和编辑技术文档的模式。", 7 "roleDefinition": "您是一位专门编写清晰文档的技术作家。", 8 "whenToUse": "使用此模式编写和编辑文档。", 9 "customInstructions": "专注于文档的清晰性和完整性。", 10 "groups": [ 11 "read", 12 ["edit", { "fileRegex": "\\.(md|mdx)$", "description": "仅限 Markdown 文件" }], 13 "browser" 14 ] 15 } 16 ] 17}

YAML/JSON 属性详情#

slug

  • 用途:模式的唯一标识符
  • 格式:必须匹配模式 /^[a-zA-Z0-9-]+$/(仅字母、数字和连字符)
  • 用法:在内部使用以及模式特定规则的文件/目录名中使用(例如,.coderider/rules-{slug}/
  • 建议:保持简短且具有描述性

YAML 示例:slug: docs-writer 

JSON 示例:"slug": "docs-writer"

name

  • 用途:在 CodeRider UI 中显示的名称
  • 格式:可以包含空格和适当的大小写

YAML 示例:name: 📝 文档编写者 

JSON 示例:"name": "文档编写者"

description

  • 用途:在模式选择器 UI 中显示在模式名称下方的简短、用户友好的摘要
  • 格式:保持简洁,并专注于该模式对用户的作用
  • UI 显示:此文本出现在重新设计的模式选择器中

YAML 示例:description: 专门用于编写和编辑技术文档的模式。 

JSON 示例:"description": "专门用于编写和编辑技术文档的模式。"

roleDefinition

  • 用途:模式角色、专业领域和个性的详细描述
  • 位置:当模式激活时,此文本放置在系统提示的开头

YAML 示例(多行):

text
roleDefinition: >- 您是一位测试工程师,具有以下专业知识: - 编写全面的测试套件 - 测试驱动开发

JSON 示例:"roleDefinition": "您是一位专门编写清晰文档的技术作家。"

groups

  • 用途:定义模式可以访问的工具组和任何文件限制的数组/列表
  • 可用工具组:"read""edit""browser""command""mcp"
  • 结构:
    • 无限制访问的简单字符串:"edit"
    • 受限访问的元组(双元素数组):["edit", { fileRegex: "pattern", description: "optional" }]

"edit" 组的文件限制:

  • fileRegex:用于控制模式可以编辑哪些文件的正则表达式字符串
  • 在 YAML 中,通常对正则特殊字符使用单个反斜杠(例如,\.md$
  • 在 JSON 中,反斜杠必须双转义(例如,\\.md$
  • description:描述限制的可选字符串

YAML 示例:

text
1groups: 2 - read 3 - - edit # 元组的第一个元素 4 - fileRegex: \.(js|ts)$ # 第二个元素是选项对象 5 description: 仅限 JS/TS 文件 6 - command

JSON 示例:

text
"groups": [ "read", ["edit", { "fileRegex": "\\.(js|ts)$", "description": "仅限 JS/TS 文件" }], "command" ]

whenToUse(可选)

  • 用途:为 CodeRider 的自动化决策提供指导,特别是模式选择和任务编排
  • 格式:描述此模式的理想场景或任务类型的字符串
  • 用法:由 CodeRider 用于自动化决策,不在模式选择器 UI 中显示

YAML 示例:whenToUse: 此模式最适合重构 Python 代码。 

JSON 示例:"whenToUse": "此模式最适合重构 Python 代码。"

customInstructions(可选)

  • 用途:包含模式附加行为准则的字符串
  • 位置:此文本添加在系统提示的末尾附近

YAML 示例(多行):

text
customInstructions: |- 编写测试时: - 使用 describe/it 块 - 包含有意义的描述

JSON 示例:"customInstructions": "专注于解释概念并提供示例。"

YAML 格式的优势#

YAML 现在是定义自定义模式的首选格式,因为它具有以下优势:

  • 可读性:YAML 基于缩进的结构更容易被人阅读和理解
  • 注释:YAML 允许注释(以 #开头的行),可以为您的模式定义添加注释
  • 多行字符串:YAML 提供更清晰的多行字符串语法,使用 |(文字块)或 >(折叠块)
  • 更少标点符号:与 JSON 相比,YAML 通常需要更少的标点符号,减少语法错误
  • 编辑器支持:大多数现代代码编辑器为 YAML 文件提供出色的语法高亮和验证 虽然 JSON 仍然完全支持,但通过 UI 或询问 CodeRider 创建的新模式将默认为 YAML。

迁移到 YAML 格式#

全局模式#

当以下情况发生时,会自动从 custom_modes.json 迁移到 custom_modes.yaml

  • CodeRider 启动时
  • 存在 custom_modes.json 文件
  • 尚不存在 custom_modes.yaml 文件

迁移过程会保留原始 JSON 文件以备回滚。

项目模式#

  • 项目特定文件不会在启动时自动迁移
  • CodeRider 可以读取 YAML 或 JSON 格式的 .coderidermodes 文件
  • 通过 UI 编辑时,JSON 文件将转换为 YAML 格式
  • 对于手动转换,您可以要求 CodeRider 帮助重新格式化配置

通过文件/目录提供特定于模式的指令#

您可以使用工作区内的专用文件或目录为自定义模式提供指令,从而实现更好的组织和版本控制。

首选方法:目录(.coderider/rules-{mode-slug}/)

text
1. 2├── .coderideer/ 3│ └── rules-docs-writer/ # 模式 slug "docs-writer" 的示例 4│ ├── 01-style-guide.md 5│ └── 02-formatting.txt 6└── ... (其他项目文件)

备用方法:单个文件(.coderiderrules-{mode-slug})

text
. ├── .coderiderrules-docs-writer # 模式 slug "docs-writer" 的示例 └── ... (其他项目文件)

规则目录范围

  • 全局模式:规则存储在 ~/.coderider/rules-{slug}/
  • 项目模式:规则存储在 {workspace}/.coderider/rules-{slug}/

如果目录存在且包含文件,则目录方法优先。目录中的文件按字母顺序递归读取并追加。

配置优先级#

模式配置按以下顺序应用:

  1. 项目级模式配置(来自 .coderidermodes - YAML 或 JSON)
  2. 全局模式配置(来自 custom_modes.yaml,如果未找到 YAML 则来自 custom_modes.json)
  3. 默认模式配置

重要:当 .coderidermodes 和全局设置中存在相同 slug 的模式时,.coderidermodes 版本会完全覆盖全局版本的所有属性。

覆盖默认模式#

您可以通过创建具有相同 slug 的自定义模式来覆盖 CodeRider 的内置模式(如 💻 代码、🪲 调试、❓ 询问、🏗️ 架构师、🪃 协调器)。

全局覆盖示例#

text
1customModes: 2 - slug: code # 匹配默认的 'code' 模式 slug 3 name: 💻 代码(全局覆盖) 4 roleDefinition: 您是一位具有全局特定约束的软件工程师。 5 whenToUse: 此全局覆盖的代码模式用于 JS/TS 任务。 6 customInstructions: 专注于项目特定的 JS/TS 开发。 7 groups: 8 - read 9 - - edit 10 - fileRegex: \.(js|ts)$ 11 description: 仅限 JS/TS 文件

项目特定覆盖示例#

text
1customModes: 2 - slug: code # 匹配默认的 'code' 模式 slug 3 name: 💻 代码(项目特定) 4 roleDefinition: 您是一位具有此项目特定约束的软件工程师。 5 whenToUse: 此项目特定代码模式用于此项目中的 Python 任务。 6 customInstructions: 遵循 PEP8 并使用类型提示。 7 groups: 8 - read 9 - - edit 10 - fileRegex: \.py$ 11 description: 仅限 Python 文件 12 - command

理解自定义模式中的正则表达式#

正则表达式(fileRegex)提供对文件编辑权限的细粒度控制。

提示
让 CodeRider 构建您的正则表达式模式
不要手动编写复杂的正则表达式,询问 CodeRider: 创建一个匹配 JavaScript 文件但排除测试文件的正则表达式模式
CodeRider 将生成模式。请记住根据 YAML(通常单个反斜杠)或 JSON(双反斜杠)进行调整。

fileRegex 的重要规则#

  • JSON 中的转义:在 JSON 字符串中,反斜杠(\)必须双转义(例如,\\.md$
  • YAML 中的转义:在未加引号或单引号的 YAML 字符串中,单个反斜杠通常足以用于正则特殊字符(例如,\.md$
  • 路径匹配:模式与工作区根目录的完整相对文件路径匹配
  • 大小写敏感性:正则表达式模式默认区分大小写
  • 验证:无效的正则表达式模式会被拒绝,并显示"无效的正则表达式模式"错误消息

常见模式示例#

模式(类似 YAML)JSON fileRegex匹配不匹配
\.md$\\.md$readme.mddocs/guide.mdscript.jsreadme.md.bak
^src/.*"^src/.*"src/app.jssrc/components/button.tsxlib/utils.jstest/src/mock.js
`\.(cssscss)$``"\.(cssscss)$"`
docs/.*\.md$"docs/.*\\.md$"docs/guide.mddocs/api/reference.mdguide.mdsrc/docs/notes.md
`^(?!.*(testspec)).(jsts)$``"^(?!.*(test
`^(?!.*(testspec)).(jsts)$``"^(?!.*(test

关键正则构建块#

  • \.:匹配文字点(YAML:\.,JSON:\\.
  • $:匹配字符串末尾
  • ^:匹配字符串开头
  • .*:匹配任何字符(换行符除外)零次或多次
  • (a|b):匹配"a"或"b"
  • (?!...):负向先行断言

错误处理#

当模式尝试编辑不匹配其 fileRegex 模式的文件时,您会看到包含以下内容的 FileRestrictionError

  • 模式名称
  • 允许的文件模式
  • 描述(如果提供)
  • 尝试的文件路径
  • 被阻止的工具

配置示例#

基本文档编写者(YAML)#

text
1customModes: 2 - slug: docs-writer 3 name: 📝 文档编写者 4 description: 专门用于编写和编辑技术文档 5 roleDefinition: 您是一位专门编写清晰文档的技术作家 6 groups: 7 - read 8 - - edit 9 - fileRegex: \.md$ 10 description: 仅限 Markdown 文件 11 customInstructions: 专注于清晰的解释和示例

带文件限制的测试工程师(YAML)#

text
1customModes: 2 - slug: test-engineer 3 name: 🧪 测试工程师 4 description: 专注于编写和维护测试套件 5 roleDefinition: 您是一位专注于代码质量的测试工程师 6 whenToUse: 用于编写测试、调试测试失败和提高测试覆盖率 7 groups: 8 - read 9 - - edit 10 - fileRegex: \.(test|spec)\.(js|ts)$ 11 description: 仅限测试文件 12 - command

安全审查模式(YAML)#

text
1customModes: 2 - slug: security-review 3 name: 🔒 安全审查员 4 description: 只读安全分析和漏洞评估 5 roleDefinition: 您是一位审查代码漏洞的安全专家 6 whenToUse: 用于安全审查和漏洞评估 7 customInstructions: |- 8 关注: 9 - 输入验证问题 10 - 身份验证和授权缺陷 11 - 数据暴露风险 12 - 注入漏洞 13 groups: 14 - read 15 - browser