开头
这两年 AI 编程代理可以说是铺天盖地,Claude Code、Codex CLI、Gemini CLI 一个个冒出来。工具多了,问题也跟着来了:这些代理确实能跑能写,可只要任务稍微复杂一点,它们就容易"东一榔头西一棒子"——改一个功能能顺带动三个文件,加个报错能排查半小时绕回原路。直到我翻到一个叫superpowers的开源项目,情况才有了本质变化。
这项目不是又一个套壳 Agent,而是一套给 AI 编程代理"装脑子"的技能增强框架,官方说法叫 skills 体系。它把软件工程里那些很基础但又容易被大模型忽略的工作方式——先探索再动手、按逻辑步骤提交、盯着失败测试缩小范围——沉淀成结构化的提示词技能,让代理在干活前主动调用。本篇文章就从我一个普通后端开发者的视角,聊聊我怎么装它、怎么用,以及在 Java 项目里踩过的坑和总结出来的实战心得。不管你是天天跟 AI 代理打交道的资深工程师,还是刚接触命令行 Agent 的新手,这套东西都值得花几分钟看完。
1. 它解决的痛点,以及核心设计思路
1.1 为什么我用别的代理总觉得"差点意思"
先说个真实场景。我让某个知名 AI 代理去修一个 Spring Boot 服务的登录报错,它第一步不是去看整体代码结构,而是直接搜"登录"关键字,找到一个 Controller 就开始改。改完告诉我好了,我一测,发现它把另一个模块的 Session 逻辑也顺手改了,回归三个测试挂了两个。这种"管中窥豹"的毛病,本质上不是因为模型笨,而是代理缺少一套稳定的工程行为规范。
我给代理下再详细的指令,比如"你先看代码"、"你注意别改无关文件",它这次听话了,下次换一个任务又忘。因为单次对话里的临时指令,根本没有进入代理的长期工作记忆。superpowers的思路就是把这类规范做成一组可持久化调用的"技能",每个技能对应一套高质量的操作流程,代理每次开工之前会先扫描有哪些技能可用,然后按技能指引去干活。
1.2 它到底给代理装了什么样的"超能力"
superpowers本质上是一组精心设计的 Markdown 指令文件,也就是 skills。每个技能包含一个SKILL.md,里面写了触发条件、执行步骤、约束条件;旁边还能配reference文档和scripts脚本,用来补充更详细的背景知识或自动化辅助。我第一眼看到这个结构时,想到的就是"给 AI 立规矩的模板库"。
举几个我最常用的技能就明白了:
exploring-the-repo:强制代理在动手前先梳理项目结构、入口文件、依赖关系,输出一份地图。implement-change:要求按五步走,从复述问题开始,到拆解实现步骤,再逐步执行、验证、总结。focused-test-failures:当测试大面积失败时,不慌着全量修,先提取单个失败用例,定位根因。using-git:规定提交粒度、分支策略和回滚方式,避免代理制造一堆"无意义 commit"。
这些技能不是冷冰冰的规则,而是把资深工程师平时的工作习惯翻译成了模型最容易执行的指令。比如implement-change里明确要求"每完成一个逻辑步骤就停下来检查一次,而不是一口气改完",我看了之后很有共鸣——这就是我在 code review 里最常跟年轻人强调的事。
1.3 和其他"套壳增强"项目的区别在哪
市面上也有不少给 AI 代理加提示词的封装方案,很多是往系统提示词里塞一大段话。我试过一两个,效果有,但问题也很明显:提示词太长之后,模型容易"看到等于没看到",尤其是对话轮数多了以后,早期的全局指令经常被遗忘。superpowers的做法不一样,它是把技能作为可检索、按需加载的模块,代理在开始干活时先扫描技能清单,再根据当前任务主动调用对应技能。
这个区别像什么?就像把一本《团队开发规范》厚书塞给你,和在你接手不同任务时递给你对应的"工作手册"。显然后者更有效,而且更容易维护。我自己还往里面加过自定义技能,后面会专门讲怎么加——这个可扩展性,比那些封闭的提示词方案强太多了。
2. 安装与配置实操
2.1 环境准备和版本检查
在动手之前,我先把环境整理了一遍。这个项目基于 Node.js 生态,我平时机器上本来就有 Node,但版本偏老,直接装出了个警告。如果你也是从零开始,建议先确认 Node 版本不低于 20,不然装到后面会遇到一些依赖兼容问题。
node -v # 我这边输出 v20.11.1,没问题 npm -v # 9.6.7如果你的版本偏低,可以去 Node 官网下载 LTS 版本,或者用nvm切一下。我建议用nvm,方便来回切换,有些老项目还需要 Node 16。
2.2 全局安装与初始化
安装步骤本身非常简单,官方推荐的是通过 npm 全局安装:
npm install -g superpowers装完之后跑一下自检命令,它会检查当前机器上有哪些受支持的 AI 代理已经安装好,以及对应的 skills 目录是否能写入:
superpowers doctor我当时看到输出里列出了 Claude Code 和 Codex CLI 都就绪,Gemini CLI 没装,它就提示我可以忽略,或者以后补装之后再重新检查。接着运行安装命令,把技能集链接到各个代理的配置目录下:
superpowers install codex # 也可以指定 claude / gemini,或者不带参数全安装这步做的事情,说人话就是把你下载好的技能文件夹"软链"到各代理读取 skills 的目录。所以之后每次更新superpowers,只要重新跑一遍install,各个代理就能用上新版的技能定义,不需要手工在配置文件里维护。
2.3 在 Codex CLI 和 Claude Code 里加载技能
安装完成之后,不是马上就能生效。以 Codex CLI 为例,它会在启动时扫描~/.codex/skills目录下的技能,但代理必须知道这些技能的存在。因此首次对话时,我一般会先问一句:
请先查看你有哪些可用的技能,然后告诉我。这会触发代理读取技能列表,接下来它就会在合适的时机主动调用exploring-the-repo、implement-change这类技能。Claude Code 的机制类似,它在项目启动时会读取.claude/skills,但最好在项目根目录的CLAUDE.md或者你自己的用户级配置里加一行指引,让代理默认先浏览技能清单。
如果你跟我一样同时装了 Codex CLI 和 Claude Code,建议两个都跑一遍superpowers install,别嫌麻烦。因为不同代理对技能文件的组织格式稍微有点差异,项目会帮你适配好,手工复制容易出错。
2.4 初始化一个演示项目试试水
光说不练没用。我建了一个临时目录,专门验证技能是否真的被触发了:
mkdir try-superpowers && cd try-superpowers codex启动后我先发一条最简单的指令:
当前目录是空项目,请帮我把一个 Python 的 Flask 应用骨架搭起来。有意思的是,代理没有马上哗哗写代码,而是先调用了exploring-the-repo,发现目录是空的,然后转去参考design-document技能的思路,向我确认了几个问题,比如有没有数据库需求、需不需要用户登录。这和我以前直接让它"写个 app.py"得到的反馈完全不同——它更像是先做需求分析再动手。
所以如果你第一次试感觉"多了一步",别急着关掉,这正是它的价值所在。
3. 核心技能详解与实战场景
3.1 exploring-the-repo:动手前的"项目地图"
exploring-the-repo是我使用频率最高的技能。它要求代理按照一套固定的顺序去读项目:
- 查看根目录下的项目描述文件(README、AGENTS.md、package.json、pom.xml 等)。
- 找出项目入口、环境变量配置、构建脚本。
- 梳理主要模块之间的依赖关系。
- 输出一份简明的项目地图,并指出本次任务可能涉及的文件范围。
我在实际用的时候发现,这个技能最大的价值是"强制代理抗住瞎猜的诱惑"。有一次让它在旧版 Spring Boot 项目里加接口,它探索完发现项目用了自定义的返回值包装类,并且 Controller 层有统一的异常拦截器,于是很自觉地按现有风格实现,而不是生成一套"标准但格格不入"的代码。
注意:如果你发现代理跳过了探索直接给代码,多半是启动时配置没有把技能列表加载进去。回到上一节,重新确认首次对话的那句"请查看可用技能"有没有发出去。
3.2 implement-change:五步变更法,让我放心让它改代码
以前让代理改代码,最怕它大动干戈。implement-change技能把一次代码变更拆成五个逻辑步骤,代理每完成一步都会停下来汇报、自检,再进入下一步:
- 复述问题:用自己的话说清楚要改什么、为什么改。
- 拆解实现方案:列出具体改动点,涉及哪些文件,逐个说明。
- 逐步执行:每改完一个逻辑单元,跑相关测试或编译验证。
- 整体回归:确认所有受影响用例。
- 总结变更:说明改动范围和影响,附带必要的日志或注释。
这招对付"改一个输出优化都能顺手把变量名给我 refactor 成另一个风格"的代理特别有效。我最近一次用,是让代理给一个微服务加超时重试逻辑。它按五步走,第一步就停下来跟我确认"这里的超时是指 HTTP 客户端连接超时还是整个链路超时",避免我踩到需求理解偏差。
3.3 focused-test-failures:从一片红海里捞针
测试失败是日常,但一次挂几十个用例的时候,很多代理会慌。focused-test-failures技能的做法是:先不急着改源码,先跑一次测试收集全部失败信息,然后挑出一个最小失败用例,通过读堆栈、对比断言、检查被测代码,找到根因;修好它,再重新跑相关测试组。这样既省时间,又不会把无关的失败搅在一起。
在 Java 后端里配合 Maven 用,效果格外明显。以前代理遇到测试失败,经常把mvn test整个重跑一遍,一次动不动三分钟,还容易看漏。用了这个技能后,它会主动用mvn test -Dtest=XXX去精准跑单个测试类,循环效率高很多。
mvn test -Dtest=OrderServiceTest#testCalculatePrice_WithDiscount我还手动给技能加过一条参考说明:优先使用-Dtest指定类名,只有确认改动会引起跨模块连锁影响时才跑全量。这个备注配合技能自带的流程,让代理在微服务项目里的排查速度快了不止一倍。
3.4 在 Java 项目里的具体映射和应用建议
结合热词里大家关心的superpowers java,我说说在 Java 项目里怎么把这套技能用出价值。
最大的一块是探索仓库这个环节。Java 项目结构相对固定,但依赖关系复杂。我会额外让技能在探索阶段输出pom.xml里的关键依赖树摘要,尤其是 Spring Boot 相关的 starter 和版本号。代理有了这几条信息,很多无谓的"引入错误版本依赖、白折腾半天"的情况就不会出现。
第二块是编译器和构建工具的语义。Java 项目不像脚本语言那样改完马上能跑,必须经过编译。我建议在技能里补充一条约束:每次改完逻辑单元后,先跑mvn -q compile,确认没有类型错误再继续。这避免了代理在错误的理解上越走越歪。
第三块是 JUnit 的用例编排。focused-test-failures技能本身不区分语言,但我会在项目的 AGENTS.md 里写明"测试失败先用-Dtest单独复现,不直接全量跑",这样代理读取项目说明时就能把这一条纳入执行策略。
实操心得:不要指望一个通用技能覆盖你项目的所有特殊性。花半天时间,把你们项目的构建命令、测试命令、代码风格要求,写成几行追加到项目 AGENTS.md 里,再配上 superpowers 的基础技能,效果翻倍。
3.5 自己动手写一个自定义技能
这部分是我最爱的功能。技能的本质就是 Markdown + 可选脚本,所以写起来一点都不玄乎。我举个例子,我经常需要给团队维护接口文档,于是写了一个api-doc-helper技能:
--- name: api-doc-helper description: 根据项目中的 Controller 代码生成 OpenAPI 片段 --- # API 文档辅助技能 ## 操作步骤 1. 使用 exploring-the-repo 技能定位所有 Controller 类。 2. 逐个读取方法上的 @RequestMapping、@GetMapping 等注解。 3. 整理路径、HTTP 方法、请求参数、响应结构。 4. 按 OpenAPI 3.0 格式生成片段输出给用户。 5. 严禁虚构不存在的响应字段;不确定时向用户确认。然后把它放到~/.codex/skills/api-doc-helper/SKILL.md,重新打开 Codex CLI,让代理重新扫描技能列表,就可以像调用内置技能一样使用了。我甚至还加过一个 bash 脚本,在生成片段后自动对 JSON 做jq校验。这个扩展性,才是它让我坚持用下来的核心原因。
4. 常见问题与排查技巧实录
4.1 安装了技能,代理却视而不见
这是频率最高的问题。我装了之后第一反应也是:技能呢?后来发现,绝大多数情况是代理的会话没有重新加载。Codex CLI 和 Claude Code 都有长驻会话,安装完必须新开一个会话,或者在原会话里主动触发技能扫描。另外要检查是不是装到了用户级目录,而代理跑在项目级目录。用superpowers doctor再跑一次,看它输出里各代理路径是否匹配。
如果确认目录没问题,还有一个容易踩的坑:某些代理只有在AGENTS.md和CLAUDE.md里写了"请先读取可用技能"的指引,才会真的去加载。我就在 Codex CLI 的项目里漏过这一步,补上之后一切正常。
4.2 多个技能同时被触发,行为错乱
有段时间我新建技能比较多,代理经常在做个简单改动时,把implement-change、api-doc-helper、design-document全部调用一遍,输出冗长还跑偏。排查之后发现是技能描述写得不够具体,导致代理对适用场景做了过度泛化。
解决办法是精修每个技能description字段,明确触发条件。比如我把api-doc-helper的描述改成"仅当用户明确要求生成接口文档或 OpenAPI 片段时才能使用",效果立竿见影。这也提醒我:技能不是越抽象越好,边界清晰才是关键。
4.3 工作流和现有 CI/CD 冲突
superpowers的技能倾向于小步、勤验证,这跟某些项目的"提交即触发全量流水线"策略会打架。比如代理按using-git技能分成 5 个小提交,每个提交都会触发一次构建,团队那边流水线排队排到怀疑人生。我们后来调整了触发规则,只在特定分支和特定路径变更时跑全量,同时把代理的提交粒度配置成"逻辑完整才提交"。这件事我的体会是:工具没问题,但对流水线很敏感的项目,要提前约定好提交策略。
4.4 代理自作主张改配置文件
某次让代理优化一个服务的日志配置,结果它不仅改了logback-spring.xml,还顺手把application.yml里的某个缓存开关改了。后来我在自定义技能里加了一条硬性约束:"修改任何配置文件前,必须先 diff 并征得用户确认;除非用户明确授权,否则不得修改与任务无直接关联的配置项。"
这条效果非常好。其实superpowers里reviewing-changes技能本来就有变更审查的步骤,但把它拆成可复用的约束,才能让代理在每个项目里都保持稳定输出。
结尾的一点个人体会
用superpowers也有小半年了,要说最大的变化,不是代理写代码更快了,而是它变得更"靠谱"了。靠谱这个词很难量化,但你在 code review 时候那种"心里一紧"的感觉确实少了很多。它不会每次都惊艳,可稳定不添乱,在这个领域就已经赢了大多数同类方案。
最后分享一个小技巧:别把superpowers当成银弹,它是基础设施,你的业务逻辑、团队规范、历史代码里的各种"地雷",还是需要靠项目里的AGENTS.md、自定义技能去持续沉淀。我现在的做法是每个项目单独建一个skills-custom目录,团队内部共享,新成员接入时一套带过去,代理的能力画像就基本一致了。说到底,AI 代理能不能成为合格的"队员",往往不是模型决定的,而是你愿不愿意花时间给它建立一套好用的工作方法。我的答案是:值得。