
1. 我们为什么需要“superpowers”——说在前面最近总有人在开发群里问同一个问题superpowers 到底是什么它和直接用 AI 助手聊天有什么不一样这问题我特别有发言权。半年前我也是满眼问号直到真把一个中型项目交给它去跑才意识到自己之前对 AI 编程助手的理解太浅了。说句得罪人的实话以前我用 AI 助手大多时候是在“聊天”而把 superpowers 这类代理工具跑起来之后我是在“管理一支外包团队”——它会自己看代码、改文件、跑测试、翻文档遇到拿不准的地方还会停下来问我。这种切换一旦体验过就很难回去了。superpowers 不是某一个模型也不是某个单点功能。我更喜欢把它理解成一套“能力增强层”作用在 AI 代理Agent之上。以常见的 codex superpowers 组合为例codex 负责理解和生成代码superpowers 这层则负责给 codex 提供更持久的记忆、更清晰的任务拆解、更可控的上下文整理以及一连串自动化动作的编排能力。也就是说它把“能对话的模型”变成了“能干活的项目成员”。这篇文章我不打算念官方文档而是按我的真实上手路径来写先讲它的核心运行逻辑再讲安装和初始化接着用它跑通一个完整需求然后重点说说 Java 老项目里怎么适配最后分享一下它和 WordBuddy 这类文档工具联动的搭配方案。内容偏实践适合那些已经体会过 AI 编码辅助、但总觉得差点意思的开发者阅读。2. 底层逻辑的一眼拆解从“问答模式”到“代理模式”很多第一次接触 superpowers 的人都会问这不就是 Codex 的套壳插件吗这么理解不算全错但容易严重低估它。2.1 传统“问答模式”为什么在大项目里会露馅传统 AI 编码助手的用法本质是“问答”把问题丢给它它给你一段代码你复制粘贴不合适再补一句。这个模式在单文件、小函数上很爽但一旦碰到跨模块改动、牵一发动全身的多文件重构它就露馅了。根本原因在于问答模式没有“记忆”每一次响应都像一个刚入职的实习生记不住你十分钟前约定的常量命名记不住你已经排查过哪三个文件更不用谈什么前后一致性。我举个很常见的例子让 AI 把一个工具脚本的命令行参数从--input改成--source。问答模式下它会很干脆地告诉你改哪几行但如果你接着追问“现在--output对应的变量命名是result要不要一起统一”它就未必记得之前整个文件的命名脉络了。这种断裂感在几十万行的项目里会被放大到令人崩溃。2.2 代理模式到底做了什么不一样的事superpowers 这类工具的核心思路是把“问答模式”升级成“代理模式”。所谓代理模式就是让 AI 不只是“回答”而是自己去执行一连串动作读文件、改文件、跑测试、根据报错再调整直到完成你交给它的任务。这套动作组合在一起业内叫 Agentic Loop代理循环。我拿自己实际用过的一个任务举例让 AI 把某个 Python 脚本从“固定文件输入”改成“支持命令行参数”。如果用问答模式我得自己把整个脚本复制进去再手动核对改动用 superpowers 的时候它会进入一个循环计划读取脚本内容识别入口函数列出需要改动的点执行生成修改后的代码直接写入文件验证调用系统命令跑一遍python script.py --help确认新参数是否生效复盘如果报错把错误信息带回上一步重新调整。这四步不断循环直到任务完成或者遇到它认为必须由我来拍板的分歧。这个设计让我第一次觉得“AI 是在替我干完一整件事”而不是“给我一堆零件让我自己拼”。2.3 它凭什么能记住上下文你可能会好奇同样是用大模型superpowers 怎么就能记住上下文它的秘诀不在模型本身而在工具层做了一套“状态管理”。我理解它背后大致是这样运作的工具会把项目当前的目录结构、关键文件片段、刚才执行过的命令结果整理成一份“工作日志”每次 AI 思考前先注入这些日志。这样模型就不需要在一段超长对话里硬找信息而是在一个有结构、有线索的上下文里作答。就好比给新来的同事交接项目与其让他翻聊天记录翻到天亮不如直接塞一份更新到今天的README和一个TODO清单。superpowers 做的就是这个整理动作只不过它塞给的是模型而已。2.4 和普通“编辑器插件”的本质区别现在市面上各种 AI 插件很多但多数只是把对话框换个位置、把模型藏进侧边栏。真正的代理工具必须有“行动”和“观察”的能力它不光能生成文本还能执行命令、读取结果、根据结果修正下一步。superpowers 给我的整体感觉是“它知道自己刚才做了什么”而普通插件普遍做不到这一点。这也是为什么我会在这篇文章里反复强调“验证”环节——没有反馈闭环的 AI 工具本质上还是高级一点的自动补全。3. 安装与初始化先决条件这道坎最容易被忽略安装本身不难但有几个前置条件容易被新手忽略反而是大家最容易卡住的地方。我按自己的操作过程一步步说。3.1 需要准备哪些环境以我在 macOS 上的实践为例需要准备的东西主要是四样Node.js 18 及以上版本因为工具本体用 JavaScript 编写靠 npm 分发Git而且要在命令行里能直接调用一个可用的 AI 模型访问通道比如 Codex CLI 的配置文件或者 OpenAI API Key一个真实的项目目录不建议上来就拿空文件夹试那样很难感受到代理模式的价值。Windows 用户也差不多不过要注意 CLI 工具在 PowerShell 和 CMD 里的转义规则不一样很多新手在这上面栽过跟头。另外 macOS 上如果之前装了其他版本 Node建议先检查一下版本防止 npm 包装了个寂寞。3.2 安装主程序如果是从 npm 生态安装常见的社区版本命令是这样npm install -g superpowers-cli安装完成后验证一下superpowers --version能正常输出版本号就说明装好了。如果提示找不到命令多半是 npm 的全局安装目录没进PATH可以用npm prefix -g查一下实际路径再把对应的 bin 目录加进环境变量。这一步听起来很基础但我真见过有人折腾了一下午最后发现只是PATH没配好。3.3 初始化项目生成配置进入项目根目录执行superpowers init这条命令会在当前目录生成一套配置。我比较建议把配置提交到版本仓库里这样团队其他人拉下来就能共用同一套规则。初始化之后项目里通常会出现几个关键文件superpowers.json主配置文件指定默认模型、执行策略和允许的命令白名单.superpowers/rules/存放项目级规则比如代码风格、命名规范、禁用词.superpowers/tasks/任务描述文件把长期任务固化下来避免每次都要重新输入。3.4 配置模型和权限我习惯在superpowers.json里做三件事选择模型、设置工作目录、限制命令权限。一个比较典型的配置如下{ model: codex, cwd: ., allowedCommands: [ python, node, npm, git, grep, find ], maxIterations: 20 }allowedCommands很重要它规定了代理能执行的系统命令范围。我刚开始用的时候没有限制结果它自作主张调了某个我没听说过的东西虽然没出事但把我吓了一跳。从安全角度说白名单越窄越稳不要让代理随意执行全局命令。3.5 安装后第一次联通测试配置完后先做一次“冒烟测试”让代理执行一个简单的任务比如“统计一下当前目录下一共有多少个文件并按扩展名分组。”如果它能在循环里正常调用命令并给出结果说明模型通道、命令执行、文件读取这一整条链路已经打通。这一步如果报错差不多 90% 是 API 配置或命令权限的问题跟工具本体关系不大。4. 实用原型流程手把手跑通第一个真实需求环境准备好了下一步就进入真刀真枪的环节。我拿一个实际复现过很多次的例子来说清楚 superpowers 的典型用法应该长什么样。4.1 场景背景假设我有一个电商后端的开源项目里面有一段库存扣减逻辑用的是同步锁并发高的时候性能上不去。正常做法是自己动手改成乐观锁或者在编辑器里反复问 AI。但我想看看代理能不能直接把这件事干完。4.2 写一个高质量的任务描述在使用 AI 代理时最重要的一步不是敲代码而是写任务描述。一个合格的任务描述至少要包含三件事目标是什么、边界是什么、成功标准是什么。我实际用的描述类似下面这样请把库存模块的扣减逻辑从同步锁改为乐观锁。 约束 1. 不要修改数据库表结构 2. 保持既有接口签名不变 3. 必须保留原有的事务边界 4. 修改完成后运行 tests/inventory_test.py确保全部通过。注意我特意加了第四条。因为代理经常把“改完代码”当成“完成任务”不会主动去验证。你把验证步骤直接写进任务里等于强制它进入代理循环的“验证”环节这在我实践中能减少一多半的返工。4.3 发起任务并观察执行过程在命令行里运行superpowers run 请把库存模块的扣减逻辑从同步锁改为乐观锁也可以把上面的长描述存成任务文件再用superpowers run --task tasks/inventory-refactor.md来执行。任务文件的好处是日后可以反复使用尤其在带新人或者交接需求时特别有用。执行过程中我会重点关注它的“行动日志”。代理每执行一次文件修改或命令调用都会打印出对应记录。我一般不看过程代码只看两类信号一是它有没有主动读取相关模块二是它有没有自己跑测试。如果两样都有说明它真的进入了代理模式如果它只会“输出建议”而不是“动手改文件”那就要检查一下是不是把某个纯对话插件误当成了 superpowers。4.4 中途干预像管同事一样管代理代理不是每次都顺利。我遇到过它在第 7 轮循环里连续两次修改同一个文件改完又把原来的删了差点把接口弄挂。这种时候我就直接按Ctrl C中断然后手动把任务描述补一条“不要把deduct_stock方法从公共接口中移除”再重新跑一遍。这里有一个很实用的经验代理循环不是越多越好连续做同一类操作超过五次还看不到进展多半是方向错了。早点打断重新给约束比让它继续瞎折腾更省时间。也别迷信“自动化就不能干预”恰恰相反最终负责的人是你干预本身就是工作的一部分。4.5 验收和回滚机制跑完之后一定要验收不要只看它输出“完成”。我的验收清单很简单所有测试能否通过、代码 diff 是否符合预期、有没有引入不必要的依赖、提交历史是否干净。superpowers 默认会为每次重要改动建立快照如果验收不过我可以用superpowers revert回到改动前的状态再用更严格的任务描述重新跑。这个过程其实和真正管理一名外包开发没有本质区别给需求、盯执行、看结果、不合格就打回。5. Java 项目专项让 superpowers 真正帮上老代码库的忙聊到这儿估计有 Java 背景的读者已经等急了这玩意儿在 Java 项目里到底行不行我的答案是“能但配置上要费更多心思”。5.1 Java 项目为什么更难搞Java 项目和 Python 或 JavaScript 项目相比有一个显著差异验证成本高。Python 改完一个文件直接pytest就能得到反馈Java 改完一个类可能要等 Maven 编译完成、Spring 容器启动、再跑集成测试几分钟才能看到结果。而代理循环的本质是“快速试错、快速反馈”当反馈链路变得很长代理的效率会被急剧拉低。所以想让 superpowers 在 Java 项目里有效率第一件事不是调模型而是优化验证链路。我把 Maven 项目的常用命令先交给代理并明确告诉它只能用这些mvn -q compile -DskipTests mvn -q test -DtestInventoryServiceTest然后把这两条加进superpowers.json的allowedCommands同时把maxIterations调低一些避免代理反复触发长时间集成测试。5.2 配置一个最小 Java 项目规则我通常会在.superpowers/rules/下新建一个java-rules.md把项目里的硬性约束写清楚。一个简化的例子- 所有业务类必须使用 Service 或 Component 注解 - 禁止直接 new ServiceImpl - Mapper 接口必须放在 mapper 包下 - 修改数据库表结构前必须咨询项目负责人 - 每次改动后先跑 mvn -q compile再跑对应测试类。这些规则看起来很普通但对代理来说它们就是约束行为的高优先级指令。我实测下来写不写规则集代理生成的代码风格差异肉眼可见。比如写过“禁止直接 new”之后它就真的会去找 Spring 容器里的依赖而不是一上来就 new 一个实现类。5.3 一个真实可复现的例子我拿最常遇到的一个需求来说给订单模块增加一个状态流转校验。任务描述长这样在 order 模块中增加状态流转校验 1. 只有已支付订单允许进入“配送中”状态 2. 只有配送中订单允许进入“已完成”状态 3. 非法流转抛出 OrderStateException 4. 不改变现有表结构和接口 5. 完成后运行 mvn -q test -DtestOrderServiceTest。代理会在循环里自己找到OrderService.java、OrderState.java、OrderStateException等文件补全校验逻辑。我印象比较深的一点是它甚至会去翻OrderServiceTest里的已有测试命名以确保新代码风格和旧测试一致。那次它生成的简化代码大概长这样public void transit(Order order, OrderState targetState) { if (!order.getState().canTransitTo(targetState)) { throw new OrderStateException(非法状态流转: order.getState() - targetState); } order.setState(targetState); }虽然这段代码本身不复杂但它是在没人一步一步喂它的情况下自己先读了接口、再读了测试、又确认异常类位置之后生成出来的。这对我来说才是真正有价值的“超能力”。5.4 Java 场景的三个避坑经验第一构建工具版本要写死在规则里。代理默认可能会用gradle或mvnw如果你的项目只有mvn它要么报错要么乱装依赖。我一般直接在规则里声明“本项目统一使用 Maven 3.9.x”。第二测试命令要精准到类。如果让它跑mvn test一次全量测试可能耗时十几分钟代理很容易在等待中迷失方向。指定到具体测试类后反馈周期能缩短到几十秒。第三Java 的强类型特性反而让代理更可靠。因为编译错误是硬错误代理无法自欺欺人。只要你能把“编译通过”作为每次循环的硬性要求它通常会非常规规矩矩地改文件。6. 联动手写文档WordBuddy superpowers 搭配方案代码任务解决了可日常工作中还有一类需求同样消耗精力写文档。这段时间总有朋友问 WordBuddy 怎么用 superpowers 联动我的实践方案是从“让 AI 写代码”扩展到“让同一条工作流帮你写文档”。6.1 为什么需要在这里引入 WordBuddyWordBuddy 是一款侧重文本创作、文档编排和知识管理的生产力工具擅长把碎片信息整理成结构化内容。但它的短板在于它本身不掌握你项目的代码实现细节。如果能让 superpowers 把代码探索的结论交给 WordBuddy再由 WordBuddy 负责排版润色就等于把“读代码”和“写文档”两件事都自动化了。实际操作中我会把整个流程拆成两步先用 superpowers 生成一份“技术事实清单”再让 WordBuddy 基于这份清单产出正式文档。6.2 让 superpowers 先产出事实清单做法很简单给代理一个任务让它把指定模块的职责、核心接口、调用关系整理成一份结构化摘要。比如请分析 order 模块输出一份 md 格式技术清单包含 - 模块负责的业务场景 - 核心类的职责说明 - 主要接口和入参出参 - 与 user 模块、payment 模块的调用关系 - 已知的异常类型和触发条件。得到这份清单后我就不需要再逐行翻代码了文档素材已经在手里。有时候这份清单本身质量就已经不错可以直接作为 README 的技术架构部分稍微改改就能用。6.3 把事实清单交给 WordBuddy 加工WordBuddy 这边会自动识别剪贴板或指定文件内容我把 superpowers 输出的清单文件路径直接丢给它让它按目标读者做二次加工。这里有两个应用场景比较常用面向新人的模块说明把清单转成带示例代码、带词条解释的入门文档让新人不用追着老员工问“这个接口到底干嘛的”面向管理层的周报材料把技术细节压缩成一两句话突出影响范围和工作量而不是堆砌类名和方法名。6.4 由此形成的最小自动化闭环整个链路不需要任何脚本开发只是把两套工具串起来superpowers 分析代码 → 生成技术清单 → WordBuddy 排版润色 → 输出正式文档之前我写一个模块的说明文档少说半天时间现在基本是“先用 superpowers 跑几分钟再把结果丢给 WordBuddy 收拾收拾”整体效率提升很明显。不过这并不意味着人可以什么都不管代理给出的结论偶尔会有偏差特别是涉及历史遗留逻辑时最后的核对仍然需要人在旁边盯一遍。我的习惯是让 WordBuddy 在每份文档末尾自动追加一行“需人工复核”的小字提醒所有读者和写手这份文档还没到可以无脑照做的程度。7. 稳定使用的最后一公里三个踩坑复盘工具是好工具但也不是没踩过坑。我把印象最深的三类问题放在这里每个都给到排查思路方便你遇到时少走弯路。7.1 代理突然停住不执行任何命令了这个现象不一定代表卡死更可能是它在等待你确认某个动作。我第一回碰到时一头雾水后来才发现是任务描述里的某个分支代理无法自行决策就向我抛出了问题。我的处理方法是不看最终答案先看提问内容。如果提问合理就补全约束如果不合理就把它归因于规则冲突。排查思路检查是否存在两条规则互相矛盾比如“禁止修改接口”和“允许新增参数”。代理在这种冲突下往往会选择保守策略——停下来问人。把规则梳理成唯一优先级是根治办法。7.2 Token 用尽或者上下文被塞爆大项目里常出现这种情况代理读了一堆文件工作日志越来越长最后提示超出上下文窗口任务中断在最后一步。我的应对策略是“切任务”——不要试图让代理一口气处理整个模块而是把一个大型重构拆成多个小任务每个小任务只关注一个文件或一个子问题。比如不要写“重构整个库存模块”而是写“把库存查询逻辑从 service 层下沉到 mapper 层只动 InventoryQueryService 和对应 mapper 接口”。任务边界越清晰上下文消耗越可控。7.3 代理“幻觉”了一个并不存在的类这个坑在 Java 项目里尤其容易遇到。代理在修改代码时可能因为记忆了某个旧版本引用了一个根本不属于当前代码库的类。排查时不要相信它的解释直接让它运行编译。我一般会在任务描述里固定加上一句话“任何新引用的类必须能通过编译否则一律删除。”这样基本能挡住大部分幻觉。此外提交前抽查 diff 也很重要。看新增的 import 语句是否真的在项目依赖里出现过比读一百行生成代码更快发现问题。8. 关于 superpowers 的使用习惯我的最终体会分享到这里你会发现 superpowers 真正的价值并不在于某一条命令有多神奇而在于它逼着我把“和 AI 协作”这件事当成一门正经工作来管理。以前我是想到哪问到哪现在我会先写任务描述、再定验收标准、最后才开始执行。用一句话总结我的体会superpowers 给了 AI 更强的“双手”但那双手朝哪个方向动更多取决于你写下的规则和边界。如果非要说一个最容易上手的起点我建议从手头最枯燥、最重复的跨文件重构开始。不要一上来就让它碰核心架构先选一个边界清楚、验证便利的小模块跑通一次完整的代理循环。等你习惯了它读文件、改代码、跑测试、回报结果的节奏再逐渐把权限放宽。到那时你大概率会发现自己离一个“只提需求、顺便监督验收”的开发者还真就不远了。