1. 为什么我放弃了"裸奔"的Codex CLI
先说个挺反直觉的事:Codex CLI本身已经很强了,能读代码、能改文件、能跑命令,基本等于把一个大模型塞进了终端。但用久了你会发现自己总在跟它重复同样的话——"注意项目规范""别动测试文件""先看README再动手"。每开一个新任务就要重新叮嘱一遍,换一个项目更是从头再来。这种体验就像请了个能力很强的实习生,但每次干活前都得重新培训。
superpowers这个名字听起来中二,实际干的事却非常实在:它给Codex CLI装上了一套"工作系统",让AI在动手前先读规则、先查记忆、先按流程走,而不是拿到需求就蛮干。我在github上翻到它的时候,第一反应是"又是个花架子包装",真正用了一周之后才意识到,它解决的恰恰是AI编程工具落地时最疼的问题——不是模型不够聪明,而是模型太容易"失忆"、太容易"自由发挥"。
如果你也遇到过这些情况,那superpowers大概率对你有用:
- Codex CLI改完代码后,下次对话完全不记得自己定的方案;
- 每次切换项目,都要重新说明代码风格、目录结构、不许动哪些文件;
- 一个复杂需求,直接甩给AI经常跑偏,缺步骤、少校验,返工好几轮;
- 团队里每个人都用自己的AI习惯,产出的代码风格五花八门。
本文的内容以我实际使用superpowers的经验为主,会讲清楚它的核心机制、安装配置、以及和Codex CLI配合的完整工作流。如果你是搞Java项目开发、日常重度依赖AI辅助编码、或者正在研究怎么让AI Agent更听话——这篇应该能给你一些参考。后面涉及版本相关的内容,都以我写这篇文章时使用的版本为准,新版本可能有变动,但核心逻辑不会有太大差异。
2. superpowers解决了Codex CLI的哪三个"硬伤"
2.1 没有持久记忆:每次对话都是"失忆重启"
Codex CLI本身是对话式的,你开启一次会话,它可以连续干活,但会话一关,之前聊的上下文基本就丢了。哪怕是同一个项目,第二天再打开,你也得重新解释一遍背景。如果中途切换分支、换个任务,它更是完全"忘了"之前定的技术方案。
superpowers的做法是加了一层文件化的记忆系统。简单说,它会在项目目录下维护一个结构化的记忆目录,AI在执行任务前会主动去读这个目录里的内容。这些记忆不是聊天记录,而是经过整理的决策记录、约束条件、项目状态,相当于给AI配了一个可以随时翻看的笔记本。
这带来的实际改善很明显:我在一个Spring Boot项目里使用superpowers,前两天定了一个接口异常码的规范,第三天再开新会话处理另一个模块时,AI自己就读到了那条约束,新写的代码自动遵循了之前的规则,完全不需要我重新强调。
2.2 缺少约束机制:AI太容易"自由发挥"
裸奔的Codex CLI没有一种强制的流程约束机制。你说"重构一下这个模块",它可能直接大刀阔斧开改,不告诉你改了哪些,不跑测试,不检查编译,甚至可能改了不该改的公共接口。你得像盯小孩写作业一样盯着它。
superpowers引入了"技能"(skills)的概念。技能本质上是一组预设的工作流程,由Markdown格式的说明文件定义。比如有一个技能叫"代码重构",它会在AI动手前要求先读取项目结构、梳理模块依赖、列出重构计划,然后经过确认后才开始改。这个"先计划后执行"的流程是写死在技能文件里的,AI必须照着走。
我把这理解为给AI装了一条"作业流程清单":什么时候该读文档、什么时候该写代码、什么时候该跑测试,都有明确的步骤指引。它不再是想到哪改到哪,而是按流程推进,过程中的每一步都有迹可循。
2.3 没有跨项目复用:每个项目从零开始
不用superpowers的时候,我在A项目里总结的"AI工作约定"(比如代码风格、提交信息规范、常见坑)基本带不到B项目去。每次新项目,都要重新交代一遍,纯粹的重复劳动。
superpowers把个人或团队层面的规则放在了全局配置层,项目层只需要继承和覆盖。比如我在全局配置里设定了一个通用规则:"所有新增公共方法必须要写JavaDoc注释,违反视为缺陷处理"。这个规则在任何一个项目里都会生效,除非某个项目在项目级配置里明确覆盖它。
这套机制跟Git的配置体系很像:system级、global级、local级,逐层覆盖。习惯了这个模式之后,我新建项目时几乎不用再给AI讲任何"做人的道理",它自己就知道该怎么干活。
3. 安装与基础配置:从零到能用的完整路径
3.1 前置环境检查
安装前建议先确认几个基础条件,避免踩一些莫名其妙的坑。首先,你需要一个可用的Node.js环境,因为superpowers的CLI层依赖Node运行时。其次,你必须已经安装并配置好Codex CLI,并且能正常使用,因为superpowers不是独立运行的AI引擎,它本质上是Codex CLI的能力增强层。
我建议在干净的终端环境里操作,避免和公司内网的代理环境产生冲突。如果你平时用nvm管理Node版本,注意切换到一个比较新的LTS版本上(我用的是Node 20.x,目前跑下来没问题)。另外确认你的网络可以正常访问npm registry,装包过程会比较快。
注意:如果你之前给Codex CLI配置过自定义的系统提示词(system prompt),建议先清理掉或者备份,superpowers接管配置时可能会和自定义提示词产生冲突,导致行为异常。
3.2 安装过程详解
superpowers的安装方式我实践下来比较稳的是通过npm全局安装。具体命令如下:
npm install -g superpowers-cli装完之后验证一下:
superpowers --version看到版本号输出就说明CLI主体装好了。下一步是初始化,它会往你的用户目录下写入全局配置和技能库:
superpowers init初始化过程会问你几个问题,比如全局规则放哪个目录、是否启用记忆系统、默认技能集用哪些。我当时的建议是:初次使用先全选默认,跑通了再逐步裁剪。不用急着开局就调一堆参数,后面理解了每个配置的含义,再按需优化更实际。
初始化完成后,最关键的一步是把superpowers挂载到Codex CLI上。这一步在项目根目录执行:
superpowers install --target codex它会帮你在Codex CLI的配置里注册skill provider或者对应的挂载点,每个版本具体实现方式不完全一样,但目的相同:让Codex CLI在启动会话时能主动加载superpowers的配置与技能。
3.3 项目级配置:一个最小的可运行示例
以我的体验来说,配置不用一上来就铺开,先落到项目里跑通一个最小闭环最重要。在项目根目录初始化项目配置:
superpowers init-project这会在你的项目下生成一个隐藏目录,里面包含三块核心内容:一是记忆目录,用于存放AI需要读取的项目级记忆;二是技能目录,用于放这个项目专用的自定义流程;三是项目规则文件,用于定义这个项目独有的约束和背景信息。
然后打开项目配置文件(路径通常在.superpowers/config.yaml或类似位置),写一个最简配置:
project: my-java-service memory: enabled: true rules: - "新增或修改公共方法时必须补充JavaDoc" - "禁止直接修改数据库迁移脚本的历史文件" skills: enabled: true保存之后,你在项目目录下启动Codex CLI会话,superpowers会自动生效。怎么确认它真的生效了?很简单,你直接问AI一个问题:"这个项目的代码规范有哪些?"如果它能准确说出你刚才写的那两条规则,说明挂载成功。
我第一次验证成功的时候还愣了一下——它不仅能背出规则原文,还知道这些规则来自项目配置文件。那一刻我才真正意识到,文件化的记忆和规则,对AI行为的影响是实打实的。
4. 核心机制拆解:skills、记忆与自动规划
4.1 skills到底是什么,它如何改变AI的行为模式
技能(skills)是superpowers里最核心的概念,也是一开始最容易被误解的东西。它不是一个插件,不是一段代码,而是一份结构化的指令说明书,通常以Markdown文件的形式存在。
每一个技能文件包含三块关键内容:
- 适用场景触发条件:什么时候这个技能应该被调用。例如"当收到代码评审请求时""当需要升级依赖版本时""当任务是新增一个REST接口时"。
- 执行步骤清单:AI被触发后必须按顺序完成的步骤。例如"先读取接口文档→再检查Controller层代码→然后编写实现→最后补充单测"。
- 完成标准:怎样才算任务完成,AI需要自查的清单。例如"所有新增方法都有JavaDoc注释""测试覆盖率不低于80%"。
我举个例子。我在项目里定义了一个"新增REST接口"的私有技能,内容大致规定了:先阅读项目现有的Controller风格,再按照RESTful规范设计端点,然后实现Service层和Mapper层,最后必须补一个集成测试。以前裸用Codex CLI时,它生成接口经常忘了加参数校验、忘了按项目风格命名。引入技能之后,这个问题基本消失,因为它走的是一条写好的流程,而不是靠模型临场发挥。
4.2 记忆系统的工作方式:AI如何记住该记住的东西
记忆系统的设计在细节上有点像个人知识库:分短期记忆与长期记忆两级。短期记忆记录当前会话的上下文状态,比如"正在重构用户模块,已抽取了UserService基类"。长期记忆则是跨会话持久化的内容,比如"项目约定所有时间和金额字段统一使用对应精度类型,禁止使用浮点运算"。
这套记忆的写入和读取都不是自动魔法,而是通过技能来驱动的。标准流程是这样的:AI在执行某个任务过程中,如果发现"这个信息值得记住",技能会触发它调用记忆写入功能,把信息整理成结构化文本存到记忆目录。下次启动新会话时,AI的技能集里有一个默认的"加载记忆"步骤,会主动读取并消化这些记忆。
实测下来,这个机制最好的使用方式不是让AI随意记录,而是你在定义技能时明确告诉它"什么信息必须记录"和"什么信息必须读取"。我在全局规则里加了一条:任何涉及决策的记录(例如"选择方案A而非方案B,理由是不需要引入额外中间件"),AI必须在讨论结束后写入长期记忆。这样,即使隔了一周再打开项目,它依然知道当时选了方案A,以及选A的原因。
4.3 自动规划与多步骤任务的推进逻辑
多步骤任务的推进是superpowers另一个让我觉得值回票价的地方。裸Codex CLI在接到一个复杂任务时,经常直接开始写代码,写到一半发现需要的数据结构没定义,又回头补,效率极低。
superpowers通过技能引导AI先做规划。我自己的体验流程是:拿一个"模块重构"的任务为例,AI收到指令后,第一步是读取记忆和项目结构,第二步是列出当前模块的代码类清单和依赖关系,第三步是产出重构计划(涉及哪些文件、改动的顺序、验证手段),然后停下来等我的确认。只有我明确说"开始执行",它才真正动代码。
这不是一次性的,而是在每个关键节点都会停下来同步进度。比如重构计划说要先改DTO层再改Service层,改完DTO层它会先跑一遍编译,确认无误后跟我汇报,再继续下一步。这种"计划—执行—检查"的循环,大大降低了偏差风险,我的返工率变得很低。
5. 实测:在Java项目里用superpowers完成一次模块重构
5.1 为什么选Java项目做验证场景
说实话,AI辅助编程在不同语言上的体验差异很大。Python项目因为语法灵活、类型约束少,AI出错后修正成本很低;Java则相反,类型系统严格、框架约定多、编译链路长,AI一不小心就会写出能编译过但是风格诡异、或者直接编译都过不了的代码。如果在Java这种"高约束环境"里superpowers都能明显提升效率,那它在其他语言上的表现基本不用担心。
我拿手头一个老项目做测试。这个项目是个标准的Spring Boot应用,用的是Java 11,模块下有大量的重复代码,Service层每个类都有类似的校验逻辑和异常处理。这次重构的目标是把这些重复逻辑抽到一个统一的基类里,同时把手工拼接的SQL全部换成MyBatis-Plus的LambdaQueryWrapper。任务不算简单,涉及几十个文件,而且容易改出隐藏问题。
5.2 定义重构专用技能
我没有直接让AI开干,而是先定义了一个"Java模块重构"的私有技能,内容大致如下:
- 第一步:读取项目记忆,理解当前代码结构和历史决策;
- 第二步:列出目标模块的所有Java文件,标记哪些涉及重复代码;
- 第三步:产出重构方案,包括基类设计、受影响文件列表、测试方案;
- 第四步:确认方案后再动手修改;
- 第五步:每改完一个子模块,执行
mvn compile验证; - 第六步:全部改完后执行全量测试,确保无回归;
- 完成标准:没有重复的校验代码残留,编译通过,测试通过。
定义完之后,我启动Codex CLI会话,输入了一句简单的指令:"请对用户模块执行重构,按模块重构技能流程来。"
5.3 执行过程与结果
AI接下来的表现让我录制了一段演示发给同事看。它先主动读取了项目的记忆文件,然后花了一会儿梳理代码结构,输出了一份重构计划书,列出会改动的27个文件,并解释了基类的设计思路。我确认之后,它开始动手改。
过程中有两个细节让我比较惊喜。一个是它每改完一个子包就会自动跑一次编译,某一次编译报了一个类型不匹配的错,它没有像我担心的那样"绕过问题直接继续",而是停下来分析错误原因,修正了一片涉及泛型擦除的代码,再继续。另一个是它在重构过程中发现有个老接口的返回值类型有历史包袱,主动在会话里问我:"这个接口的消费者还在用旧结构吗?如果改成新类型可能需要通知对接方,建议本次保留兼容层。"这个判断如果是裸Codex CLI,大概率不会主动停下来问你。
整轮重构下来,大概花了40分钟,其中AI的纯执行时间大概20分钟,剩下的时间是我确认方案、回答问题。如果我自己来改这27个文件,估计要写一整天。测试跑完后全绿,唯一的变更风险点被提前识别并做了兼容处理。
这轮实操让我确认了superpowers的真正价值:它不一定让AI变得更"聪明",但让AI变得更有章法、更懂得在关键节点上下车确认——而这恰恰是复杂工程任务里最需要的。
6. 使用过程中踩过的坑与排查链路
6.1 坑一:挂载后Codex CLI对话风格突然变得"啰嗦"
第一次跑通superpowers后,我发现AI的输出变啰嗦了:每个任务开始前都要先列计划、等确认,连"给README加一行说明"这种小事也要走一遍流程。说实话体验很割裂,小事变大,效率反而降低。
排查了一圈,原因是我在全局技能里启用了"默认全技能集",里面包含一个通用任务流程技能,它要求所有任务都先产出详细计划。后来我把这个全局技能关掉,改为只在小范围任务上启用流程类技能,然后对"简单修改类任务"单独定义了一个轻量技能,只要求改动前快速列出文件清单和影响面,执行后跑测试,不再要求等待人工确认。调整完之后,小任务干净利落,大任务依然稳扎稳打,两者平衡很多。
6.2 坑二:记忆文件越积越多,AI读取速度明显变慢
用了一个月后,项目记忆目录里积累了上百个记忆文件,有些已经过时甚至互相矛盾。AI每次启动都要读一遍,响应速度肉眼可见地变慢,偶尔还会出现以旧记忆为准的尴尬情况——它坚持说"之前定过某规则",但在当前代码里根本没有体现。
问题根源在于我没有建立记忆的"生命周期管理"。后来我在项目规则里加了一条强制约定:AI在写入长期记忆时,必须同时标记创建日期、适用范围和关联任务编号;每周我会在一次会话里主动要求AI执行"记忆整理"技能,让它把过时记忆归档、冲突记忆按最近日期裁决。这套机制跑起来之后,记忆库的可用性大幅提升,读取速度和准确率都恢复正常。
6.3 坑三:Java项目里AI仍然会写出"编译能过但设计不合理"的代码
不能把superpowers神化成什么都管。它管流程、管记忆、管规则,但它不替你做架构师。在一次重构中,AI抽出的基类本身没问题,但接口设计深度不够——它把所有公共逻辑都堆到一个类里,导致基类承担了过多职责,违反了单一职责原则。这确实是我确认方案时没把好关,AI按我确认的方案执行了,效果自然不理想。
这个坑很难靠配置解决,只能靠人。我的做法是在重构类技能里增加了"基类设计原则检查"这一步,要求AI在产出设计时同步罗列每个方法所属的职责域,如果某个职责域过大则提示拆类。虽然不能完全替代架构判断,但至少给了确认方案时的一个审视钩子。
6.4 排查链路:当superpowers表现异常时,我从哪几个方向排查
如果哪天你不确定是Codex CLI的问题还是superpowers的问题,我建议按下面的顺序排查:
- 看加载日志:superpowers在运行时会输出技能和记忆的加载日志,在终端环境变量里开启debug模式,能直接看到它到底加载了哪些技能、哪些记忆文件。
- 直接问AI:在会话里问"你当前启用了哪些技能?"和"你知道哪些项目规则?",看回答是否正常。回答异常,先怀疑配置文件语法错误。
- 检查配置文件:YAML文件缩进错误是非常常见的坑,一个空格不对,整个配置解析失败,AI就退回裸奔状态。
- 清理缓存:有些版本会缓存技能解析结果,更新技能文件后不生效,这时候把缓存目录删掉重新加载就好了。
整个排查链路走完通常不会超过15分钟,大部分问题都是配置层面的,真正改到核心机制的情况反而少见。
7. 根据自己的使用习惯调优:全局、项目、任务三层配置
7.1 三层配置模型:全局规则管底线,项目规则管风格,任务规则管流程
有一段时间我对superpowers的理解是"配置越多越好",恨不得把所有能想到的规范全部写进去。实际用下来发现不是这样,配置过多会导致AI在加载规则时耗费大量上下文,反而挤压了真正用于推理的空间。
现在我遵循的是三层配置模型。全局配置管底线:任何项目都不能做的危险操作,比如禁止删除迁移脚本、禁止绕过代码评审直接合并;项目配置管风格:比如这个项目坚持使用某个框架、某类接口要遵循某种命名;任务配置管流程:只在具体任务会话内生效,比如"本次重构先改A模块再改B模块"。
三层配置的优先级从高到低是:任务 > 项目 > 全局。也就是说,项目级配置可以覆盖全局的某条规则,任务级配置可以覆盖项目级。这套模型和Git的配置覆盖逻辑完全一致,理解了之后设置起来没有任何心智负担。
7.2 我推荐的几个高价值全局规则
如果你不想从零开始摸索,我分享几个我实测下来性价比最高的全局规则:
- 新增或修改公共方法时必须补充注释,这是团队代码审查时的硬性要求,写进规则后AI产出直接符合规范;
- 涉及数据库结构变更必须先出变更说明并人工确认,这个规则救过我一次,AI在改迁移脚本时停下来问了我一句,避免了直接改动历史迁移文件;
- 提交代码前必须跑相关模块的测试,强制让AI执行测试而不是"自信地说没问题";
- 关于架构决策的记录必须写入长期记忆,这个规则保证了跨会话的连续性。
7.3 如何让AI主动提问而不是闷头执行
这是很多人的痛点:AI不问、直接按自己理解的做,结果做偏了。superpowers里可以通过技能文件的"决策检查点"设计来推动AI提问。在技能执行步骤里明确规定:如果需求描述中存在歧义、或者存在多个合理方案、或者改动会波及当前文件之外的范围,必须停下来向用户确认,不允许擅自决定。
我这样设置之后,AI的提问频率确实变高了,但提问质量好了很多。以前它是"遇到不懂就问",现在基本是"遇到会影响方向的决策才问"。这中间的差别很大——前者让人觉得AI很笨,后者让人觉得AI很稳。
8. 一些实际的体会
用superpowers一个多月,我的总体感受是:它没有让我对AI编程产生更多不切实际的期待,反而让我对"人机协作的边界"有了更清醒的认识。AI仍然是那套模型,该有的局限都有,但通过流程约束和记忆管理,它犯低级错误的频率确实降低了一个量级。
对我来说,最微妙的变化发生在一次代码评审会上。同事问我某个重构方案的背景,我打开终端翻了半天记忆文件,找到当时AI记录下来的决策过程——"考虑到现有调用方的兼容成本,选择保留旧接口并新增v2版本"。那一刻我意识到,这份记录不仅对我有意义,对团队里的其他成员同样有价值。AI不再只是一个生成代码的工具,它开始参与沉淀项目的知识。
最后分享一个具体的小技巧:我在全局配置里加了这么一条规则——每完成一个子任务,AI必须用最多三句话总结"做了什么、为什么这么做、下一步做什么",并写入会话内的工作日志。这个习惯让多轮复杂任务的推进变得异常清晰,你再也不会在10分钟后忘记它到底改了哪些文件。如果你正准备尝试superpowers,我建议你从这条规则开始。