如果你的 AI 编码助手写出的代码像初级开发者——没有测试、缺少规划、最后还要你手动修 bug——这篇文章给你一个解决方案。

上周,一个叫 Superpowers 的项目在 GitHub 上爆火:一天内获得 1,867 个 star,目前已超过 9 万 star。它的核心理念很简单:给 AI 编码助手一套"技能系统",让它按照资深工程师的工作流来写代码

本文深入解析 Superpowers 的工作原理,并展示如何在 Claude Code、OpenAI Codex、VS Code Copilot 中使用它。

问题:为什么 AI 编码助手会写出"面条代码"?

大多数 AI 编码工具(Cursor、Copilot、Claude Code 等)的工作方式是:

  1. 你描述需求
  2. AI 直接开始写代码
  3. 你检查、修改、运行测试
  4. 发现问题,再让 AI 修复
  5. 重复 3-4 直到满意

这个流程有几个问题:

  • 缺少规划:AI 直接写代码,没有先设计
  • 缺少验证:写完就提交,没有自检
  • 缺少测试:AI 很少主动写测试,更别说 TDD
  • 上下文混乱:多个任务混在一起,最后变成"面条代码"

Superpowers 的解决方案是:用一套"技能系统"约束 AI 的行为,让它按照标准化的工程流程工作

Superpowers 是什么?

Superpowers 是一个 Agent Skill Framework(Agent 技能框架),由 Jesse Vincent(obra)创建。Jesse 是 JavaScript 社区的传奇人物,曾创建 History.js、Promise.js 等项目。

核心理念:

传统的 AI 编码:用户 → AI → 代码 → 用户检查
Superpowers:用户 → AI → 规划 → 验证 → 测试 → 代码 → 用户确认

它的工作方式:

  1. 技能自动触发:根据你的对话内容,自动选择合适的"技能"
  2. 结构化工作流:规划 → 实现 → 验证 → 测试 → 提交
  3. 可组合:多个技能可以组合使用

核心技能一览

Superpowers 提供了一系列内置技能:

1. Planning(规划技能)

在写代码前,先生成详细的实现计划:

## 任务:添加用户登录功能

### 实现计划
1. 创建 LoginController 处理认证逻辑
2. 添加 JWT token 生成和验证
3. 创建登录页面组件
4. 添加表单验证
5. 编写单元测试
6. 更新 API 文档

### 风险评估
- 需要处理 token 过期场景
- 密码存储需要使用 bcrypt

2. TDD(测试驱动开发技能)

强制 AI 先写测试,再写实现:

// AI 先写测试
describe('LoginController', () => {
  it('should return 401 for invalid credentials', async () => {
    const response = await request(app)
      .post('/api/login')
      .send({ username: 'test', password: 'wrong' });
    expect(response.status).toBe(401);
  });

  it('should return token for valid credentials', async () => {
    const response = await request(app)
      .post('/api/login')
      .send({ username: 'test', password: 'correct' });
    expect(response.status).toBe(200);
    expect(response.body.token).toBeDefined();
  });
});

// 然后写实现
class LoginController {
  async login(req, res) {
    const { username, password } = req.body;
    const user = await User.findByUsername(username);
    
    if (!user || !await bcrypt.compare(password, user.password)) {
      return res.status(401).json({ error: 'Invalid credentials' });
    }
    
    const token = jwt.sign({ userId: user.id }, process.env.JWT_SECRET);
    return res.json({ token });
  }
}

3. Verification(验证技能)

每一步完成后自动验证:

  • 检查代码是否符合项目规范
  • 运行 lint 检查
  • 确保没有类型错误
  • 验证测试覆盖率

4. Git Workflow(Git 工作流技能)

自动化的 Git 操作:

# 自动创建功能分支
git checkout -b feature/user-login

# 完成后自动提交
git add .
git commit -m "feat: add user login functionality

- Add LoginController with JWT authentication
- Add login page component with form validation
- Add unit tests for login flow"

# 可选:自动创建 PR
gh pr create --title "Add user login functionality" --body "..."

安装与配置

在 Claude Code 中使用

# 克隆 Superpowers 仓库到 Codex 配置目录
git clone https://github.com/obra/superpowers.git ~/.codex/superpowers

# 创建符号链接(让 Codex 自动发现技能)
ln -s ~/.codex/superpowers/skills ~/.codex/skills/superpowers

重启 Claude Code,技能会自动加载。

在 OpenAI Codex 中使用

# 使用 Codex 原生技能发现
curl -o /tmp/install.sh https://raw.githubusercontent.com/obra/superpowers/main/.codex/INSTALL.md
bash /tmp/install.sh

在 VS Code Copilot Agent 模式中使用

VS Code Copilot 的 Agent 模式会自动检测项目中的 .vscode/skills 目录:

# 创建技能目录
mkdir -p .vscode/skills

# 下载 Superpowers 技能配置
curl -o .vscode/skills/superpowers.md \
  https://raw.githubusercontent.com/obra/superpowers/main/SKILL.md

实战:使用 Superpowers 开发一个功能

假设我们要给一个 Node.js 项目添加"用户头像上传"功能。

步骤 1:描述需求

我需要添加用户头像上传功能,支持 JPG/PNG 格式,
最大 2MB,上传后自动生成缩略图。

步骤 2:Superpowers 自动触发规划技能

AI 会先生成详细的实现计划:

## 用户头像上传功能 - 实现计划

### 技术方案
1. 使用 multer 处理文件上传
2. 使用 sharp 处理图片压缩和缩略图生成
3. 添加文件类型和大小验证
4. 存储到云存储(建议 S3 或兼容服务)

### 文件结构
- controllers/AvatarController.js - 上传接口
- middleware/upload.js - multer 配置
- services/ImageService.js - 图片处理
- tests/avatar.test.js - 单元测试

### API 设计
POST /api/users/:id/avatar
- Content-Type: multipart/form-data
- Body: avatar (file)
- Response: { avatarUrl, thumbnailUrl }

步骤 3:TDD 技能启动,先写测试

// tests/avatar.test.js
const request = require('supertest');
const app = require('../app');
const path = require('path');

describe('Avatar Upload', () => {
  const validJpg = path.join(__dirname, 'fixtures', 'valid.jpg');
  const largeFile = path.join(__dirname, 'fixtures', 'large.jpg');
  const invalidFile = path.join(__dirname, 'fixtures', 'invalid.txt');

  it('should upload valid JPG avatar', async () => {
    const response = await request(app)
      .post('/api/users/123/avatar')
      .attach('avatar', validJpg);
    
    expect(response.status).toBe(200);
    expect(response.body.avatarUrl).toMatch(/^https:\/\//);
    expect(response.body.thumbnailUrl).toBeDefined();
  });

  it('should reject files larger than 2MB', async () => {
    const response = await request(app)
      .post('/api/users/123/avatar')
      .attach('avatar', largeFile);
    
    expect(response.status).toBe(400);
    expect(response.body.error).toContain('2MB');
  });

  it('should reject non-image files', async () => {
    const response = await request(app)
      .post('/api/users/123/avatar')
      .attach('avatar', invalidFile);
    
    expect(response.status).toBe(400);
    expect(response.body.error).toContain('JPG or PNG');
  });
});

步骤 4:实现代码

// middleware/upload.js
const multer = require('multer');
const path = require('path');

const storage = multer.memoryStorage();

const fileFilter = (req, file, cb) => {
  const allowedTypes = ['image/jpeg', 'image/png'];
  if (!allowedTypes.includes(file.mimetype)) {
    return cb(new Error('Only JPG and PNG files are allowed'), false);
  }
  cb(null, true);
};

const upload = multer({
  storage,
  fileFilter,
  limits: {
    fileSize: 2 * 1024 * 1024 // 2MB
  }
});

module.exports = upload.single('avatar');
// services/ImageService.js
const sharp = require('sharp');

class ImageService {
  async processAvatar(buffer) {
    // 原图压缩到 500x500
    const avatar = await sharp(buffer)
      .resize(500, 500, { fit: 'cover' })
      .jpeg({ quality: 85 })
      .toBuffer();

    // 缩略图 100x100
    const thumbnail = await sharp(buffer)
      .resize(100, 100, { fit: 'cover' })
      .jpeg({ quality: 80 })
      .toBuffer();

    return { avatar, thumbnail };
  }
}

module.exports = new ImageService();
// controllers/AvatarController.js
const upload = require('../middleware/upload');
const ImageService = require('../services/ImageService');
const S3Service = require('../services/S3Service');

class AvatarController {
  async uploadAvatar(req, res) {
    try {
      const { id } = req.params;
      
      if (!req.file) {
        return res.status(400).json({ error: 'No file uploaded' });
      }

      // 处理图片
      const { avatar, thumbnail } = await ImageService.processAvatar(req.file.buffer);

      // 上传到 S3
      const [avatarUrl, thumbnailUrl] = await Promise.all([
        S3Service.upload(`avatars/${id}.jpg`, avatar),
        S3Service.upload(`avatars/${id}_thumb.jpg`, thumbnail)
      ]);

      res.json({ avatarUrl, thumbnailUrl });
    } catch (error) {
      res.status(500).json({ error: error.message });
    }
  }
}

module.exports = new AvatarController();

步骤 5:验证技能运行

# 自动运行测试
npm test

# 自动运行 lint
npm run lint

# 自动类型检查(如果使用 TypeScript)
npm run type-check

步骤 6:Git 工作流技能自动提交

git checkout -b feature/avatar-upload
git add .
git commit -m "feat: add user avatar upload functionality

- Add multer middleware for file upload handling
- Add ImageService for image processing with sharp
- Add validation for file type (JPG/PNG) and size (2MB max)
- Add unit tests for upload scenarios
- Add avatar and thumbnail generation"

技能优先级与冲突处理

当技能与项目配置冲突时,Superpowers 遵循以下优先级:

用户指令 > 技能规则 > 项目默认行为

例如:

  • 如果项目的 AGENTS.md 说"不使用 TDD",但技能要求"必须使用 TDD"
  • 最终会遵循用户指令

这确保了灵活性,同时提供结构化的默认行为。

自定义技能

你可以创建自己的技能,放在项目的 .superpowers/skills/ 目录:

<!-- .superpowers/skills/custom-review.md -->
---
name: code-review
description: 在提交前自动进行代码审查
triggers:
  - "完成"
  - "提交"
  - "review"
---

## 代码审查清单

在提交代码前,检查以下项目:

1. [ ] 是否有未处理的 TODO
2. [ ] 是否有 console.log 或 debugger 语句
3. [ ] 错误处理是否完整
4. [ ] 是否有安全风险(SQL 注入、XSS 等)
5. [ ] 性能是否有潜在问题

技能的触发机制

技能通过关键词和上下文自动触发。当你的对话包含触发词时,对应的技能会被激活:

# 技能触发示例
用户说: "帮我实现用户登录功能,要写测试"
触发技能: 
  - planning (包含"实现")
  - tdd (包含"测试")

用户说: "这个 bug 怎么修"
触发技能:
  - debugging
  - planning

创建团队共享技能

在团队项目中,可以创建共享技能来统一编码规范:

<!-- .superpowers/skills/team-standards.md -->
---
name: team-standards
description: 团队编码规范
always_active: true
---

## 必须遵守的规范

### API 设计
- 所有 API 返回统一格式: `{ success, data, error, message }`
- 使用 RESTful 命名约定
- 错误码使用标准 HTTP 状态码

### 代码风格
- 使用项目配置的 ESLint 规则
- 函数必须有 JSDoc 注释
- 变量命名使用 camelCase,常量使用 UPPER_SNAKE_CASE

### 测试要求
- 新功能必须有单元测试,覆盖率 > 80%
- Bug 修复必须有回归测试
- 使用 Jest 测试框架

### 安全要求
- 所有用户输入必须验证和清理
- 敏感数据必须加密存储
- API 必须有速率限制

与其他 Agent 框架的对比

市面上有多种 Agent 框架,Superpowers 的定位是什么?

框架定位核心能力
LangChainAgent 编排链式调用、工具集成、记忆管理
AutoGPT自主 Agent目标驱动、自我迭代、长期规划
CrewAI多 Agent 协作角色分工、任务委派、协作流程
Superpowers编码 Agent 工作流技能系统、工程规范、质量保证

Superpowers 的独特之处:

  1. 专注编码场景:不是通用 Agent 框架,专门为代码生成优化
  2. 技能即规范:用技能强制执行工程规范,而不是事后检查
  3. 最小侵入:不需要改造现有项目,只需添加配置文件
  4. 工具无关:支持 Claude Code、Codex、Copilot 等多种工具

Superpowers vs LangChain

LangChain 是通用 Agent 框架,擅长编排多个工具和步骤。但在编码场景下:

# LangChain 方式 - 需要自己定义链
from langchain.chains import LLMChain

code_chain = LLMChain(
    llm=llm,
    prompt=code_prompt,
    # 需要手动添加验证、测试等步骤
)
# Superpowers 方式 - 技能自动处理
你: "实现用户登录功能"
AI: [自动触发 planning -> tdd -> verification -> git workflow]

Superpowers 把工程流程封装在技能中,开发者不需要手动编排。

Superpowers vs Cursor/Copilot 内置能力

Cursor 和 Copilot 也有一定的 Agent 能力,但缺少结构化的工作流:

能力Cursor/CopilotSuperpowers
代码生成
自动规划❌ 需要提示✅ 自动触发
TDD 工作流❌ 需要手动✅ 强制执行
代码验证部分✅ 完整检查
Git 自动化✅ 分支、提交、PR

常见问题与解决方案

Q1: 技能没有自动触发?

检查以下几点:

# 1. 确认技能目录正确
ls ~/.codex/skills/superpowers
# 应该看到多个 .md 文件

# 2. 检查符号链接
ls -la ~/.codex/skills/superpowers
# 应该指向正确的目录

# 3. 重启编码工具
# Claude Code: 重新打开终端
# VS Code: 重新加载窗口 (Cmd+Shift+P -> Reload Window)

Q2: 技能规则与项目配置冲突?

Superpowers 的优先级规则:

用户明确指令 > 项目配置文件 (AGENTS.md) > Superpowers 技能

如果技能的规则不适合你的项目,可以:

  1. 在项目的 AGENTS.md 中明确覆盖:
# AGENTS.md
## 开发规范
- 不使用 TDD(项目处于快速原型阶段)
- 优先功能实现,测试在稳定后补充
  1. 或者直接在对话中说明:
"先实现功能,不用写测试"

Q3: 如何调试技能行为?

Superpowers 支持调试模式:

# 启用调试日志
export SUPERPOWERS_DEBUG=true

# 运行编码工具,查看日志
claude-code "实现用户登录" 2>&1 | grep superpowers

日志会显示哪些技能被触发,以及每个技能的执行情况。

Q4: 团队如何共享技能?

最佳实践是创建共享的技能仓库:

team-skills/
├── skills/
│   ├── team-standards.md
│   ├── security-review.md
│   └── api-design.md
├── SKILL.md          # 技能索引
└── README.md         # 使用说明

团队成员克隆后链接到各自工具:

git clone git@github.com:yourteam/team-skills.git
ln -s team-skills ~/.codex/skills/team

进阶:理解技能的内部机制

技能文件结构

一个完整的技能包含以下部分:

---
# 元数据
name: skill-name
description: 技能描述
triggers:           # 触发条件
  - "关键词1"
  - "关键词2"
priority: 10        # 优先级,数字越大越优先
always_active: false # 是否始终激活
---

# 技能内容

## 目标
描述这个技能要达成什么目标

## 规则
- 规则1
- 规则2

## 检查清单
- [ ] 检查项1
- [ ] 检查项2

技能执行流程

用户输入
[关键词匹配] → 找到候选技能
[优先级排序] → 选择最高优先级技能
[上下文检查] → 确认技能适用
[执行技能规则] → AI 按规则生成响应
[后续技能触发] → 检查是否需要触发其他技能

技能组合示例

复杂任务会触发多个技能:

用户: "实现一个安全的用户认证系统,要有完整测试"

触发链:
1. planning-skill (检测到"实现")
   → 生成实现计划

2. security-skill (检测到"安全")
   → 添加安全审查清单

3. tdd-skill (检测到"测试")
   → 强制先写测试

4. verification-skill (检测到"完成")
   → 验证代码质量

5. git-workflow-skill (检测到"完成")
   → 自动提交

实际项目中的最佳实践

1. 项目初始化时配置技能

# 新项目初始化
mkdir my-project && cd my-project
git init

# 安装 Superpowers
git clone https://github.com/obra/superpowers.git .superpowers

# 创建项目级技能配置
mkdir -p .superpowers/custom-skills

2. 为不同类型任务选择技能组合

任务类型推荐技能组合
新功能开发planning + tdd + git-workflow
Bug 修复debugging + tdd + regression-test
重构planning + refactoring + verification
性能优化profiling + benchmarking + tdd

3. 团队协作时的技能管理

# .superpowers/team-config.yaml
shared_skills:
  - team-standards
  - security-review
  - api-design

individual_skills:
  - personal-preferences

disabled_skills:
  - experimental-feature  # 团队统一禁用实验性技能

总结

Superpowers 解决了 AI 编码助手的核心痛点:

问题Superpowers 的解决方案
缺少规划Planning 技能自动生成实现计划
缺少测试TDD 技能强制先写测试
缺少验证Verification 技能自动检查代码质量
提交混乱Git Workflow 技能规范化提交流程

对于团队来说,Superpowers 提供了一种"编码规范"之外的手段——用技能系统约束 AI 的行为,确保每次生成的代码都符合工程标准。

推荐尝试场景

  • 新功能开发
  • 重构任务
  • Bug 修复(特别是需要写回归测试的场景)

实际应用场景分析

场景 1:初创公司快速迭代

初创公司常常面临"速度 vs 质量"的抉择。Superpowers 让两者兼得:

  • AI 自动按工程规范生成代码
  • TDD 确保每行代码都有测试覆盖
  • 验收阶段自动验证

结果是:代码质量不输大厂,但开发速度提升 3-5 倍。

场景 2:遗留代码维护

维护遗留代码最怕"改坏现有功能"。Superpowers 的技能系统可以配置为:

  1. 任何修改前必须先生成测试用例
  2. 修改后必须通过所有现有测试
  3. 自动生成变更文档

这样即使不熟悉代码,也能安全地进行修改。

场景 3:团队知识传承

当团队使用统一的 Superpowers 技能配置时:

  • 新人加入后自动获得团队的编码规范
  • 所有代码风格保持一致
  • 代码审查从"风格检查"转向"逻辑审查"

场景 4:远程协作项目

分布式团队常见的问题是沟通成本高、代码风格不统一。Superpowers 通过技能系统实现了"隐式知识编码"——把团队的编码规范、Review 要点、安全要求都封装成技能,让 AI 自动执行。

结果:

  • 减少不必要的 Code Review 轮次
  • 新人 PR 的一次通过率显著提升
  • 团队整体的代码质量更加稳定

技术实现细节

技能优先级系统

当多个技能同时触发时,优先级决定了执行顺序:

# 优先级示例
skills:
  planning:
    priority: 100    # 最高优先级,首先执行
    
  tdd:
    priority: 80    # 规划后执行
    
  verification:
    priority: 60    # 代码生成后执行
    
  git-workflow:
    priority: 40    # 最后执行

上下文感知

Superpowers 的技能不仅基于关键词触发,还会分析上下文:

# 伪代码示例
def should_trigger_skill(user_input, context):
    # 检查关键词
    if contains_keyword(user_input, skill.triggers):
        # 检查上下文适用性
        if is_applicable(context, skill.requirements):
            return True
    return False

这种设计确保技能在正确的场景下被触发,避免"过度触发"或"触发不足"的问题。

与项目配置的集成

Superpowers 可以读取项目配置文件来调整行为:

# .superpowers/project.yaml
project:
  name: "my-app"
  type: "nodejs"
  
language:
  typescript: true
  linter: "eslint"
  test_framework: "jest"
  
coding_standards:
  max_line_length: 100
  require_types: true
  min_test_coverage: 80

技能会根据这些配置自动调整生成代码的风格和验证标准。

未来展望

Superpowers 社区正在开发更多技能:

  1. 安全审查技能:自动检测常见安全漏洞(SQL 注入、XSS、CSRF 等)
  2. 性能优化技能:分析代码性能瓶颈,提供优化建议
  3. 文档生成技能:自动生成 API 文档和代码注释
  4. 架构审查技能:检查代码是否符合架构设计原则
  5. 国际化技能:自动处理多语言和本地化需求
  6. 可访问性技能:确保生成的 UI 代码符合 WCAG 标准

这些技能将进一步完善 AI 编码助手的能力边界,让 AI 不仅能写代码,还能写出"好代码"。

相关资源

行动建议

  1. 个人开发者 (Personal Developers): 今天就安装 Superpowers,体验 “AI Senior Engineer” 的工作方式。Install it today and see the difference in your coding workflow. This is a game changer for developers who want to write better code with AI assistance.

  2. 技术团队 (Tech Teams): 把 Superpowers 技能配置纳入团队开发规范,统一代码质量标准。Configure skills in your team’s workflow to ensure consistent code quality across all projects.

  3. 初创公司 (Startups): 用 Superpowers 快速建立工程规范,避免技术债务积累。Build robust engineering practices from day one without slowing down your iteration speed.

  4. 技术博主 (Tech Bloggers): 用 Superpowers 作为案例,分析 AI 开发工具的发展趋势。Use this framework as a real example to demonstrate the future of AI-powered development tools.

作为开发者,我们正站在 AI 辅助编程的历史节点。Superpowers 代表的"技能系统"思路,很可能是未来 AI 开发者工具的主流方向。现在开始学习和使用这项技术,意味着你在未来的竞争中占据了先机。

值得注意的是,Superpowers 仍在快速迭代中。每周都有新的技能被社区贡献出来,功能也在不断完善。建议关注 GitHub 的 Releases 页面,及时了解最新功能。

同时,obra 也在积极构建生态系统。除了官方的技能市场,第三方开发者也在贡献各种垂直领域的技能。如果你有特定行业的需求,完全可以自己开发技能并分享给社区。

更重要的是,Superpowers 的设计哲学值得每一个 AI 工具开发者学习:不是让 AI 变得更"聪明",而是让 AI 的行为变得更"可预测"和"可控制"。这种思路对于企业级应用来说尤其重要。

当你需要在生产环境中部署 AI 辅助编程工具时,“可控性"往往比"能力"更重要。你需要一个能够按照团队规范工作的 AI,而不是一个"聪明但不可预测"的 AI。Superpowers 正是为这个需求而设计的。

这也解释了为什么 Superpowers 一经推出就获得如此高的关注度。企业开发者需要一个可以"信任"的 AI 工具,而 Superpowers 通过技能系统提供了这种信任基础。

可以说,Superpowers 的出现标志着 AI 编程工具从"能做什么"转向"应该怎么做"的新阶段。这不仅是工具的进化,更是软件开发方法论的进化。


写在最后

Superpowers 的核心价值不是"让 AI 写代码”,而是"让 AI 按照正确的工程方式写代码"。它把资深工程师的思维模式——规划、验证、测试、审查——封装成可复用的技能,让任何人都能享受"资深工程师思维"带来的好处。

如果你也曾被 AI 生成的代码坑过,不妨试试 Superpowers。它可能不会让 AI 变得更强,但一定会让 AI 生成的代码更靠谱。


本文由 Lucky 发布于 shiller.cn 技术博客

往期精选