人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载fixme是 Forge 内置的快捷命令slash command它让 AI 自动遍历当前项目源码文件中的FIXME注释并逐一尝试修复对应代码。本文以 .forge/commands/fixme.md 为骨架结合仓库中命令加载、解析与优先级的源码实现讲解该命令的文件格式、工作原理、注册机制以及如何举一反三编写属于自己的自定义命令。1.fixme命令是什么fixme是 ForgeAI enabled pair programmer预置的一条内置命令。它的完整定义存放在仓库根目录的 .forge/commands/fixme.md全文如下--- name: fixme description: Looks for all the fixme comments in the code and attempts to fix them --- Find all the FIXME comments in source-code files and attempt to fix them.它的语义非常直接扫描源码文件里所有FIXME注释然后尝试修复它们。也就是说当你在 Forge 对话中敲入:fixmeAgent 会先通过文件搜索定位所有包含FIXME标记的源码文件再逐条分析注释上下文、判断遗留问题并直接动手修改代码把问题修掉。在 crates/forge_app/src/fixtures/git_ls_files_many_extensions.txt 这个仓库自带的目录清单 fixture 中可以看到.forge/commands/fixme.md与check.md、pr_description.md一同出现在.forge/commands/目录下印证了这类命令文件正是以独立 Markdown 文件的形式存在于该目录中。2. 命令文件的结构YAML frontmatter Markdown 正文从fixme.md可以看出Forge 的每条自定义命令都由两部分组成YAML frontmatter元数据区位于文档开头的---与---之间用于声明命令的name与description。Markdown 正文提示词区frontmatter 之后的所有内容就是真正发给模型的提示词prompt指导 Agent 如何执行该命令。这套格式在源码中被严格建模。Command结构体定义于 crates/forge_domain/src/command.rs注释明确写着命令从 Forge 的命令目录中发现的.md文件中加载name和description来自 YAML frontmatterprompt则是文件正文pub struct Command { /// 调用该命令时使用的名字如 github-pr-description pub name: String, /// 在命令列表中展示的简短描述 pub description: String, /// 提示词模板正文frontmatter 之后的 Markdown 内容 pub prompt: OptionString, }解析逻辑在 crates/forge_services/src/command.rs 的parse_command_file函数中先用gray_matter库以 YAML 引擎解析 frontmatter再做类型安全的反序列化最后把正文部分挂到prompt字段上fn parse_command_file(content: str) - ResultCommand { let gray_matter Matter::YAML::new(); let result gray_matter.parse::Command(content)?; let command result .data .context(Empty command frontmatter)? .prompt(result.content); Ok(command) }Command结构体上标注了#[derive(Deserialize)]因此 frontmatter 中的name、description会被自动映射为结构体字段frontmatter 缺失时解析会报错Empty command frontmatter。这一点与fixme.md严格成对出现的name/description键完全一致。仓库测试 crates/forge_services/src/command.rs 中的用例也验证了这一格式test_parse_basic_command用 fixture basic.md 断言name、description与prompt都被正确解析test_parse_command_with_multiline_prompt则用 multiline.md 验证正文支持多行 Markdown步骤列表等也就是说像fixme这样的正文完全可以写得非常详细Agent 会完整读取。3.fixme命令的注册与加载机制fixme不是写在二进制里的硬编码逻辑而是以标准命令文件的形式被加载器统一发现并注册。整条链路在 crates/forge_services/src/command.rs 的CommandLoaderService中实现加载内置命令init_default()先把二进制内嵌的命令如github-pr-description源码见 commands/github-pr-description.md加载进来作为最低优先级。加载全局自定义命令从command_path()默认base_path/commands即~/forge/commands读取所有*.md文件。加载项目本地命令从command_path_local()读取项目根目录下的.forge/commands/目录fixme.md正是在这一层被发现的。解决命名冲突resolve_command_conflicts用 HashMap 按名字去重、保留最后一条从而形成项目本地 全局自定义 内置的优先级顺序。命令目录的路径定义在 crates/forge_domain/src/env.rs/// 全局命令目录base_path/commands pub fn command_path(self) - PathBuf { self.base_path.join(commands) } /// 项目本地命令目录.forge/commands pub fn command_path_local(self) - PathBuf { self.cwd.join(.forge/commands) }目录扫描由init_command_dir完成目录不存在时直接返回空存在时通过DirectoryReaderInfra并行读取目录下所有*.md文件并以文件名去掉扩展名作为命令名——这正是fixme.md对应命令名为fixme的原因。也就是说如果你想新增一条命令只需在.forge/commands/下新建一个 Markdown 文件即可文件名即命令名。项目根目录的 README.md 也给出了同样的使用说明“Custom commands: Place YAML files in.forge/commands/(project) or~/forge/commands/(global) to define shortcut commands available via:commandname.” 即命令可通过:命令名的形式在对话中直接触发。test_parse_builtin_commands测试用例把fixme当作内置命令 fixture 来解析并断言其name、description、prompt均非空进一步确认fixme是经过测试保障的标准内置命令。4. 实际使用方式在 Forge 会话中直接输入:fixmeForge 会解析出fixme命令的提示词即“在源码文件中找出所有 FIXME 注释并尝试修复”随后 Agent 按提示词执行定位搜索当前项目源码中的FIXME注释大小写通常不敏感README 中:fixme的说明原文即为fixme comments。分析逐个阅读注释上下文判断该处遗留的问题性质与修复意图。修复在保证不破坏其他逻辑的前提下直接修改源码把注释对应的缺陷或待办事项落地解决。验证修复后可结合:check同样注册在内置命令列表中的检查命令或项目测试来确认改动没有引入回归。使用前提是当前会话所在的目录是一个 Forge 项目即存在.forge/配置并且项目源码可被 Agent 通过文件工具正常读写。5. 举一反三编写你自己的自定义命令理解了fixme.md的格式与加载机制后完全可以自己编写类似的命令。例如在项目根目录.forge/commands/下新建refactor.md--- name: refactor description: Find duplicated code blocks and suggest refactoring --- Scan the source-code files for duplicated code blocks that appear in three or more places. For each duplication found: 1. Summarize the repeated logic and its locations. 2. Propose a refactoring that extracts the shared logic. 3. Apply the refactoring and verify the code still compiles.保存后在新的 Forge 会话中直接输入:refactor即可触发。需要注意命令名即文件名去掉.md后缀前端name字段应与文件名保持一致避免歧义description会展示在命令列表中建议写清楚命令的作用正文 prompt 可以像 multiline.md 那样使用多行列表让 Agent 按步骤执行若与内置命令重名项目本地命令会覆盖全局与内置版本优先级项目本地 全局自定义 内置。6. 小结fixme命令是 Forge 自定义命令机制的一个典型样本它由.forge/commands/fixme.md这样一个“YAML frontmatter Markdown 正文”的文件定义经 crates/forge_services/src/command.rs 的加载器扫描、解析与去重后注册为:fixme快捷命令最终把“扫描并修复 FIXME 注释”的意图作为提示词交给 Agent 执行。掌握这套文件格式与加载优先级你就能像fixme一样把团队里高频的编码巡检、重构、代码生成等重复工作沉淀为一条条可复用的 Forge 命令。赞分享人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载相关推荐Bitwarden Clients 代码库中的 Angular FIXME 与 ESLint 抑制注释清理实战指南Bitwarden Clients 代码库中的 Angular FIXME 与 ESLint 抑制注释清理实战指南 导读 本文聚焦 Bitwarden clie前端桌面应用CLI应用安全Foundry forge-lint 的 todo-comment 规则用 TODO/FIXME 标记审计未完成代码Foundry forge lint 的 todo comment 规则用 TODO/FIXME 标记审计未完成代码 TODO 与 FIXME 是开发过程中最区块链开发工具ESLint no-warning-comments 规则详解用注释规范拦截 TODO、FIXME 与 XXXESLint no warning comments 规则详解用注释规范拦截 TODO、FIXME 与 XXX 本篇技术指南以 ESLint 内置规则 no开发工具Lint静态分析代码质量上一篇用相机陀螺仪数据完成视频防抖Gyroflow 能做什么、从哪开始下一篇ET 框架 Buff 系统速成事件驱动 五档数值Debuff 不再牵一发动全身创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考