人工智能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 项目自带的 resolve-fixme 技能 为线索完整讲解如何用发现 → 展开 → 分组 → 实现 → 验证五步工作流系统性地消灭 FIXME从运行find-fixme.sh脚本抓取全部命中点到跨文件合并同一重构任务的多个 FIXME再到基于cargo insta test的收尾验证。读完本文你将掌握一套可复制的 FIXME 清零方法论并理解 Forge 技能系统Skill在底层如何加载、解析与调用这类指令文档。一、认识 resolve-fixme一份为 Agent 编写的 FIXME 清除指令1.1 技能在仓库中的位置与触发方式resolve-fixme是 Forge 项目本地技能project-local skill位于.forge/skills/resolve-fixme/目录下由两个文件组成SKILL.md技能主体以 YAML front matter Markdown 指令构成scripts/find-fixme.shFIXME 发现脚本。其 front matter 定义了技能元信息--- name: resolve-fixme description: Find all FIXME comments across the codebase and fully implement the work they describe. Use when the user asks to fix, resolve, or address FIXME comments, or when running the fixme command. Runs a discovery script to find every FIXME, expands multiline comment blocks, groups related FIXMEs across files into a single implementation task, completes the full underlying code changes, removes the FIXME comments only after the work is done, and verifies that no FIXMEs remain. ---从description可以看出技能的触发条件用户要求修复/解决/处理 FIXME 注释或运行fixme命令。它预设了一条完整链路——发现所有 FIXME、展开多行注释块、跨文件分组、完成底层代码变更、仅在实现完成后删除注释、最后验证无残留。1.2 技能在 Forge 技能体系中的加载机制从源码结构看.forge/skills/skill-name/SKILL.md是 Forge 约定的项目本地技能存放格式。技能仓库实现 ForgeSkillRepository 会从四个来源加载技能来源目录优先级内置技能编译进二进制的forge://skills/...最低全局自定义技能~/forge/skills/skill-name/SKILL.md中Agents 技能~/.agents/skills/skill-name/SKILL.md较高项目本地技能./.forge/skills/skill-name/SKILL.md最高同名冲突时后出现的覆盖先出现的resolve_skill_conflicts见 crates/forge_repo/src/skill.rs#L293-L311因此项目本地技能可以覆盖其他所有来源——这正是把resolve-fixme放进仓库.forge/skills/的意义每个克隆该项目的人都自动获得这份技能无需额外安装。local_skills_path()在 crates/forge_domain/src/env.rs#L135-L137 中被定义为cwd.join(.forge/skills)。解析过程由extract_skill完成crates/forge_repo/src/skill.rs#L278-L288使用gray_matter解析 YAML front matter读取name与description正文部分作为command字段存入Skill结构体结构定义见 crates/forge_domain/src/skill.rs#L8-L25。随后system_prompt.rs 会调用list_skills()把技能列表注入系统提示词Agent 便能感知并选择调用工具执行器则通过 tool_executor.rs 的fetch_skill按名字取出技能正文作为指令注入对话。技能查询服务 ForgeSkillFetch 用OnceCell缓存技能列表避免重复加载。二、工作流第 1 步用 find-fixme.sh 发现全部 FIXME2.1 运行方式与输出格式技能要求首先从仓库根目录执行发现脚本bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]PATH可选省略时搜索整个工作目录传入时只搜索指定目录/文件范围脚本为每个 FIXME 打印前 2 行、后 5 行的上下文并标注精确的文件路径与行号自动跳过.git/、target/、node_modules/、vendor/四个目录依赖rgripgrep或greppython3二者任一可用即可运行。2.2 脚本实现原理阅读 find-fixme.sh 源码其实现有四个值得注意的细节主备双引擎优先使用rg --json输出 JSON 匹配流交给python3解析出path与line_number当rg不可用时回退到grep -rn并用正则从filepath:linenum:content格式中提取行号见第 39-70 行。选择 JSON 流而非文本解析是为了稳健处理路径中含冒号等特殊字符的情况。临时文件承载匹配匹配结果先写入mktemp创建的临时文件trap ... EXIT保证脚本退出时自动清理。上下文窗口CONTEXT_BEFORE2、CONTEXT_AFTER5用sed -n ${START},${END}p切片打印。终端高亮命中行以黄色高亮其他上下文行以暗色显示并用[N/TOTAL]序号与分隔线分隔每条命中便于 Agent 与开发者快速定位重点若范围内没有 FIXME则输出No FIXME comments found in: path并正常退出退出码 0。三、工作流第 2 步把每个 FIXME 展开为完整指令发现脚本的输出只是索引不是指令本身。技能明确要求打开文件读取命中行周边内容——不要只依赖脚本输出展开到整个注释块——FIXME 可能是多行的含FIXME的那一行往往只是开头把连续相关的注释行视为同一条指令的一部分——真正的实现细节可能写在后续注释行里。关键纪律在读取完整注释块之前不得解释或修改任何 FIXME。对每个展开后的 FIXME需要记录三样东西文件路径完整注释块的起始行与结束行该 FIXME 请求事项的简短摘要。这一步的本质是把注释还原成需求规格。跳过它直接动手很容易只看到局部而漏掉多行注释里真正约束实现的细节。四、工作流第 3 步跨文件合并相关联的 FIXME4.1 为什么要分组现实中大量 FIXME 描述的是同一底层任务在不同文件中的不同侧面技能给出了典型场景一个文件描述需要引入的领域类型domain type另一个文件描述该类型出现后应当消失的参数再一个文件描述为完成同一重构所需的 service、repo 或 UI 更新。如果逐文件孤立地解决会产生中间状态不协调、接口断裂等问题。因此编辑代码前必须把全部展开后的 FIXME 放在一起通读。4.2 分组判据与产出技能建议按以下信号判断是否属于同一任务共享的词汇shared vocabulary引用了相同的类型、服务、仓库、参数或功能注释明显描述了不同文件中的前置条件与后续变更只有放在一起读才有意义的注释。对每个分组产出一份合并后的任务理解涉及的全部文件与行号范围跨组的完整实现要求变更的推荐执行顺序。禁止一个文件一个文件地孤立解决分组 FIXME应当把整个任务当作整体一致地完成。五、工作流第 4 步完整实现每个 FIXME5.1 无跳过路径技能强调每个 FIXME 都必须解决没有跳过路径There is no skip path。逐个分组推进直到底层实现完成阅读设计所需的额外文件创建或修改所需的代码、类型、服务、仓库、测试、配置或模板把变更传播到组内每个受影响文件只有在 FIXME 描述的工作真正实现后才删除该注释。5.2 两条红线红线一绝不提前删除。注释是实现工作的记录在完成前移除它是失败。删除或改写 FIXME 与实现完成之间必须严格绑定。红线二不要只做第一个局部改动。如果 FIXME 暗示更大的重构就做重构如果需要新建支撑代码就新建。注释明确指向的后续影响范围不能止步于第一个文件。技能收尾处还补充了两条工作准则优先做针对性修复但当多个 FIXME 描述一个大任务时不要缩小范围意图模糊时先广泛阅读再动手——一致性重于局部性分组后的 FIXME 应导向一个连贯的实现。它的自我定位很明确工作不是清理注释而是完成注释所指向的实现。六、工作流第 5 步验证无 FIXME 残留实现完成后进入验证阶段技能指定了三个动作# 1. 运行项目标准验证步骤接受并更新快照 cargo insta test --accept # 2. 重新运行发现脚本确认目标范围内无残留 bash .forge/skills/resolve-fixme/scripts/find-fixme.sh [PATH]cargo insta test --acceptForge 是 Rust 项目使用insta做快照测试--accept接受测试生成的新快照仓库根目录可见 insta.yaml 与大量.snap快照文件如 crates/forge_app/snapshots 目录实现变更常伴随输出格式变化这一步保证测试基线同步更新。重跑发现脚本若输出变为No FIXME comments found in: ...且退出码为 0说明目标范围已清零。人工确认目标范围内不再有任何 FIXME 注释。七、落地建议把 FIXME 清零做成可重复的工程习惯结合技能文档与仓库实现总结几条可直接落地的经验先全局再局部始终先跑find-fixme.sh拿到完整清单并通读再决定分组与顺序脚本的PATH参数支持收窄范围适合分批清理大仓库。把注释当作需求源多行 FIXME 的后续注释行往往就是实现规格展开读取后再动手杜绝只看一行就猜。按任务而非按文件推进以第 4 节的分组判据共享词汇、共同类型/服务/参数聚合任务一个任务一次性贯通所有相关文件避免中间状态。删除与完成强绑定任何 FIXME 的移除都必须发生在其描述的实现落地之后——这是技能反复强调的Critical rule。验证闭环用cargo insta test --accept保证测试通过再重跑发现脚本确认清零形成发现-实现-验证的完整闭环。对于希望把此类工作流固化为团队资产的项目可以参照本技能的目录规范在仓库.forge/skills/下自建技能目录含SKILL.mdfront matter 与配套脚本利用 ForgeSkillRepository 的项目本地优先级自动加载让每个协作者与 Agent 开箱即用地获得同样的执行力。赞分享人工智能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应用安全彻底清除SD卡数据ESP-IDF擦除功能全解析与实战指南彻底清除SD卡数据ESP IDF擦除功能全解析与实战指南 在嵌入式开发中SD卡Secure Digital Card作为常用的存储介质其数据安全擦除一物联网嵌入式Multipass 实例删除实战指南回收站、恢复与彻底清除purgeMultipass 实例删除实战指南回收站、恢复与彻底清除purge 本指南以 Multipass 官方文档《Remove an instance》为骨架虚拟化开发工具云原生上一篇mera-mix-4x7B安全部署指南企业级应用最佳实践下一篇any-rule用户案例电商平台如何用正则提升表单体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考