用途
create-command 用于为 code-forge(forgecode)应用创建新的自定义命令。命令是模块化的工作流,可被调用以执行特定任务,例如代码检查、测试、提交前验证、文档更新、清理、构建部署等。
文件位置
所有命令文件必须创建在 <cwd>/.forge/commands 目录中,其中 <cwd> 是 code-forge 项目的当前工作目录。这是 forge 发现和加载自定义命令的唯一位置,放在其他位置将无法被识别。
- 目录:
<cwd>/.forge/commands - 文件格式:
{command-name}.md - 示例:若项目位于
/home/user/my-project,命令应放在/home/user/my-project/.forge/commands/
命令文件结构
每个命令文件必须包含两部分:
-
YAML Frontmatter(必需):
name:命令标识符,多词名称使用连字符description:命令的功能说明
-
命令正文(必需):
- 要执行的步骤列表
- 用于自动化工作流的特殊标签
- 每个步骤的清晰说明
特殊命令标签
命令正文中可使用三种标签嵌入自动化命令,标签应放在步骤描述之后的独立行:
<lint>:用于 linting/格式化命令,例如<lint>cargo +nightly fmt --all; cargo +nightly clippy --fix --allow-staged --allow-dirty --workspace</lint><test>:用于测试命令,例如<test>cargo insta test --accept --unreferenced=delete</test><shell>:用于一般 shell 命令(非 linting 或测试),例如<shell>rm -rf target/debug</shell>
命令类型
- 简单命令:单步骤或仅含说明的命令
- 多步骤命令:包含多个顺序步骤的命令
- 自动化工作流命令:包含自动化检查的命令
使用方式
创建命令的步骤:
- 确定命令目的:明确任务、涉及步骤、是否需要自动化检查或测试、用户应如何处理结果。
- 选择命令名称:使用基于动词的名称,多词用连字符。推荐如
check、fixme、pr-description、run-tests;避免checker、fixing、PRdescription。 - 编写命令文件:在
<cwd>/.forge/commands目录中创建{command-name}.md文件,包含 frontmatter 和命令正文。
命令正文使用 markdown 列表编写步骤,每个步骤应以明确的动作动词开头,具体可执行,并包含上下文。
最佳实践
命名:
- 仅使用小写字母
- 多词名称用连字符分隔
- 使用基于动词的名称(祈使形式)
- 名称简短但具描述性
描述:
- 清晰简洁
- 描述命令做什么,而非如何做
- 包含主要目的和关键结果
- 避免实现细节
命令步骤:
- 顺序步骤使用编号列表
- 每个步骤以动作动词开头
- 具体说明要做什么
- 复杂步骤包含上下文
- 使用现在时
特殊标签:
- 标签放在步骤之后的独立行
- 仅使用
<lint>、<test>、<shell>标签 - 包含可执行的完整命令
- 为工作流使用适当的标志
验证清单
文件结构:
- 文件位于
<cwd>/.forge/commands目录(关键) - 文件名与命令名称匹配(如
check.md对应name: check) - 文件扩展名为 .md
- YAML frontmatter 使用
---分隔符
Frontmatter:
- 存在
name字段 name使用小写字母name多词时使用连字符name基于动词(祈使形式)- 存在
description字段 description清晰简洁description描述做什么而非如何做
命令正文:
- 至少定义一个步骤
- 步骤使用项目符号(-)
- 每个步骤以动作动词开头
- 步骤具体可执行
- 复杂步骤包含上下文
- 步骤顺序合理
特殊标签:
- 标签在步骤描述之后的独立行
- 仅使用有效标签(
<lint>、<test>、<shell>) - 标签命令完整可执行
- 标签命令使用适当标志
- 标签命令格式正确
测试命令
创建命令后,可通过以下方式测试:
- 语法检查:验证 YAML 是否有效,如使用
yamllint path/to/your-command.md - 人工审查:检查每个步骤是否合理、顺序是否逻辑、命令是否完整
- 执行测试:运行命令,检查每个步骤是否成功执行、输出是否符合预期、是否有错误
- Forge 识别测试:验证命令被 forge 识别
forge list command(列出所有命令,自定义命令标记为 type: custom)forge list cmd(仅列出自定义命令)forge list command --custom(较新版本,仅列出自定义命令)
- 边界情况:考虑步骤失败、环境不同、文件缺失等场景
常见错误
Frontmatter 错误:
- 分隔符错误:缺少闭合
--- - 缺少必需字段:缺少
description
命名错误:
- 使用 CamelCase 名称
- 使用名词而非动词
步骤错误:
- 没有动作动词
- 步骤含糊不清
标签错误:
- 标签与步骤在同一行
- 使用无效标签(如
<check>) - 命令不完整(如缺少
--all标志)
适用场景
该技能适用于需要为 code-forge 项目定义可复用工作流的开发者,典型场景包括:Git 工作流命令(提交检查)、文档命令(更新文档)、清理命令(清理临时文件)、构建部署命令(构建并部署到 staging)等。
限制
命令必须放在 <cwd>/.forge/commands 目录,否则无法被 forge 发现。仅支持 <lint>、<test>、<shell> 三种特殊标签。命令名称必须与文件名(不含 .md)匹配。若命令未出现在列表中,需检查文件位置、文件名与 frontmatter 中 name 字段是否匹配、YAML frontmatter 格式是否正确、name 和 description 字段是否都存在。