编程 Superpowers 深度解析:给 AI 编程 Agent 装上工程方法论的纪律与护栏

2026-07-23 21:16:52 +0800 CST views 3

Superpowers 深度解析:给 AI 编程 Agent 装上工程方法论的"纪律与护栏"

当 220k 颗星遇上 Vibe Coding 的混乱:Superpowers 如何用 TDD + 结构化工作流,把 Claude Code 从"能打字"升级成"会工程"


一、从"能写代码"到"会做工程":为什么 AI 编程需要 Superpowers

2026 年的今天,Claude Code、Cursor、Kimi Code 这类 AI 编程 Agent 已经能以惊人的速度生成代码了。它们能理解需求、拆解任务、写出完整的函数和模块——但如果你真正在生产项目里用过它们,你会发现一个尴尬的事实:快是真快,乱也是真乱

今天 AI 能 5 分钟给你写出 500 行代码,明天你就会发现这 500 行里埋着循环依赖、全局状态泄漏、边界条件裸奔,还有三个你自己都看不懂的"魔法变量"。这不是 AI 的问题——是方法论的缺失。AI 被喂了海量代码数据,它学会了"怎么写",但没有人教它"先想清楚再写"、"写完要测"、"测完要审"这一套软件工程的基本纪律。

Superpowers 就是在解决这个问题。它不是又一个代码生成模型,也不是什么新的 LLM。它是一套给 AI Agent 装上的工程方法论装甲——通过拦截 Claude Code 的关键决策点,强制 AI 在写代码之前先做技术设计、拆解任务、写测试、代码审查,把完整的软件工程最佳实践注入每一次 AI 编程对话中。

作者 Jesse Vincent(obra)在项目 README 里写了一句很扎心的话:"AI编程最大的问题不是它写不出代码,而是它写得太快,来不及思考。"

Superpowers 就是让 AI "慢下来"的那个框架。


二、核心理念:Process over Prompt

2.1 为什么 prompt 工程不够用了

过去两年,业界对付 AI 编程的主要手段是"prompt engineering"——写更好的提示词、加更多约束、加 System Prompt 模板。但 prompt 的本质是一次性指令:你告诉 AI 一次,它做一次,下一轮对话又回到原点。没有任何机制能保证 AI 在整个开发周期里保持一致的方法论纪律。

更根本的问题是:prompt 是给人类写的,不是给 AI Agent 的工具链写的。当你在一个 50 人的代码库里让 AI 修一个 bug,你真正需要的不是一段精妙的提示词,而是一个可持续、可组合、可验证的工作流程

Superpowers 选择了截然不同的路线:不是优化 prompt,而是改造 Agent 的决策管道

2.2 拦截-注入-验证:三层架构的精髓

Superpowers 的架构可以概括为三层:

┌─────────────────────────────────────────────┐
│            Superpowers 技能层                │
│   (Skills: Design Review, TDD, Code Review) │
├─────────────────────────────────────────────┤
│            Superpowers 核心层                │
│  (决策拦截器 + 工作流编排 + 反馈闭环)         │
├─────────────────────────────────────────────┤
│            AI 编程 Agent 层                  │
│         (Claude Code / Cursor / Codex)       │
└─────────────────────────────────────────────┘

核心层做了一件非常优雅的事:它不是替代 AI Agent,而是在 AI 做出关键决策之前插入自己的判断层。具体来说:

  1. 拦截器(Interceptor):监听 AI Agent 的输出,在它开始写代码之前,触发对应的 Skill
  2. 技能库(Skills):每个 Skill 是一个结构化的 Markdown 配置,定义了在特定场景下 AI 应该做什么
  3. 反馈闭环(Feedback Loop):Skill 的输出会作为上下文反馈到下一轮 AI 决策中

这个设计的精妙之处在于:Superpowers 本身不写代码,它只是告诉 AI"在写这段代码之前,你应该先做 X"。具体怎么写,依然是 AI 的工作。

2.3 技能系统的设计哲学

Superpowers 的技能系统是其灵魂。每个 Skill 都是一个独立的、可组合的工程实践单元。你可以根据项目需求选择加载哪些 Skill,就像给专业工具箱添加工具一样。

默认推荐的完整工作流

需求分析 → 技术设计 → 编写计划 → 执行开发 → TDD测试 → 代码审查 → 系统化调试

这不是 Jesse Vincent 拍脑袋想出来的流水线,而是业界验证了五十年的软件工程最佳实践的精炼映射:

阶段对应的工程实践Superpowers Skill
需求分析需求澄清Requirements Clarification
技术设计架构评审Design Review
编写计划任务分解Task Planning
执行开发增量迭代Incremental Development
TDD测试测试先行TDD Enforcer
代码审查代码评审Code Review
调试调试策略Systematic Debugging

"Process over Prompt" 在这里体现得淋漓尽致:不是给 AI 一段更聪明的指令,而是让 AI 在正确的时机做正确的事。


三、深入核心技能:每个 Skill 到底在做什么

3.1 Design Review Skill:代码写之前,先画架构

痛点:AI 写代码太快,往往在还没完全理解系统边界和数据流的情况下就开始堆代码。结果是:系统架构腐化、技术债累积、后续扩展困难。

Superpowers 怎么做:当 AI 准备实现一个功能时,Design Review Skill 会强制触发以下步骤:

  1. 系统上下文分析:AI 需要先描述现有的系统架构,包括核心模块、数据流向、外部依赖
  2. 设计方案生成:基于需求,生成 2-3 个可选的技术方案,每个方案说明优缺点
  3. 风险评估:每个方案的风险点是什么?性能?安全性?可维护性?
  4. 决策记录:最终选择哪个方案,为什么,记录下来供后续参考
## Design Review 输出模板(AI 填写)

### 当前系统上下文
- 涉及模块:[模块A] → [模块B] → [模块C]
- 现有数据模型:[描述]
- 关键约束:[性能要求/安全要求/兼容性要求]

### 候选方案
**方案A:[名称]**
- 思路:[描述]
- 优点:[...]
- 缺点:[...]
- 适用场景:[...]

**方案B:[名称]**
...

### 最终选择
- 选定方案:[方案A/B/C]
- 选择理由:[...]
- 潜在风险:[...]

工程师视角的评估:这个 Skill 解决了一个真实问题——在日常开发中,很多团队其实有 code review 流程,但很少有人做 design review。结果是技术债在架构层就埋下了,代码 review 只是亡羊补牢。Superpowers 把 design review 提前到了"第一行代码写之前",这是真正有价值的实践迁移。

3.2 TDD Enforcer:测试先行的强制执行器

痛点:理论上每个工程师都知道 TDD 好,但实际开发中很少有人真正做到 TDD。更要命的是,让 AI 去做 TDD——它经常跳步,直接写实现,然后才想起来写测试,或者干脆忘记写测试。

Superpowers 怎么做:TDD Enforcer Skill 强制 AI 在写任何实现代码之前,必须先写测试。具体流程:

Red(红)→ 写一个会失败的测试 → 确认测试失败原因合理
Green(绿)→ 写最少代码让测试通过 → 不要过度实现
Refactor(重构)→ 在测试保护下优化代码 → Design Review 再次介入

关键约束

  • 实现代码只有在对应的测试代码存在且失败时才能被写入
  • 测试必须覆盖边界条件,不能只是 happy path
  • 每个测试必须有清晰的失败信息,便于快速定位问题
# TDD Enforcer 强制生成的测试优先代码示例
# 这是一个 Python 函数开发的 TDD 流程演示

# ===== RED: 第一步 - 写测试 =====
# 文件:tests/test_order_processor.py

import pytest
from order_processor import OrderProcessor, InvalidOrderError

class TestOrderProcessor:
    """TDD Enforcer: 所有测试必须先于实现存在"""

    def test_process_valid_order_calculates_total(self):
        """测试标准订单的总价计算"""
        processor = OrderProcessor()
        items = [
            {"sku": "A001", "quantity": 2, "unit_price": 10.00},
            {"sku": "B002", "quantity": 1, "unit_price": 25.00}
        ]
        result = processor.process(items)
        assert result["total"] == 45.00  # 2*10 + 1*25

    def test_process_order_with_discount(self):
        """测试折扣应用逻辑"""
        processor = OrderProcessor(discount_threshold=50.00, discount_rate=0.1)
        items = [
            {"sku": "A001", "quantity": 6, "unit_price": 10.00}  # 总价60,超过阈值
        ]
        result = processor.process(items)
        # 60 * 0.9 = 54.00
        assert result["total"] == 54.00
        assert result["discount_applied"] == 6.00

    def test_empty_order_raises_error(self):
        """空订单必须被拒绝 - 边界条件"""
        processor = OrderProcessor()
        with pytest.raises(InvalidOrderError, match="Order must contain at least one item"):
            processor.process([])

    def test_negative_quantity_rejected(self):
        """负数数量是无效输入 - 防御性编程"""
        processor = OrderProcessor()
        items = [{"sku": "A001", "quantity": -1, "unit_price": 10.00}]
        with pytest.raises(InvalidOrderError, match="Quantity cannot be negative"):
            processor.process(items)

    def test_sku_with_whitespace_normalized(self):
        """SKU前后的空白字符需要被标准化 - 真实边界条件"""
        processor = OrderProcessor()
        items = [
            {"sku": "  A001  ", "quantity": 1, "unit_price": 10.00}  # 带空格
        ]
        result = processor.process(items)
        assert result["items"][0]["sku"] == "A001"  # 标准化后的SKU


# ===== GREEN: 第二步 - 最少实现让测试通过 =====
# 文件:order_processor.py

class InvalidOrderError(Exception):
    """订单验证失败时抛出"""
    pass

class OrderProcessor:
    def __init__(self, discount_threshold: float = 0.0, discount_rate: float = 0.0):
        self.discount_threshold = discount_threshold
        self.discount_rate = discount_rate

    def process(self, items: list[dict]) -> dict:
        # TDD Enforcer: 验证必须先于计算
        self._validate_items(items)

        # 标准化SKU(去除前后空白)
        normalized_items = []
        for item in items:
            normalized = item.copy()
            normalized["sku"] = item["sku"].strip()
            normalized_items.append(normalized)

        # 计算总价
        subtotal = sum(
            item["quantity"] * item["unit_price"]
            for item in normalized_items
        )

        # 应用折扣(如满足阈值)
        discount_applied = 0.0
        if subtotal >= self.discount_threshold > 0:
            discount_applied = subtotal * self.discount_rate
            subtotal -= discount_applied

        return {
            "items": normalized_items,
            "subtotal": sum(item["quantity"] * item["unit_price"] for item in normalized_items),
            "total": subtotal,
            "discount_applied": discount_applied
        }

    def _validate_items(self, items: list[dict]) -> None:
        """TDD Enforcer: 边界验证必须在业务逻辑之前"""
        if not items:
            raise InvalidOrderError("Order must contain at least one item")

        for item in items:
            if item["quantity"] <= 0:
                raise InvalidOrderError("Quantity cannot be negative")
            if "sku" not in item or not item["sku"].strip():
                raise InvalidOrderError("SKU cannot be empty")
            if item["unit_price"] < 0:
                raise InvalidOrderError("Unit price cannot be negative")


# ===== REFACTOR: 第三步 - 在测试保护下优化 =====
# (TDD Enforcer 触发 Code Review Skill 进入重构阶段)
# ...

工程师视角的评估:TDD Enforcer 最有价值的地方不是"TDD"本身,而是强制分离验证逻辑和业务逻辑。在上面的例子中,_validate_items 先执行,这确保了无效输入永远在计算之前被拒绝——这是很多 AI 生成的代码里缺失的一环。另外,边界条件的覆盖(空订单、负数数量、SKU空白字符)也是在 AI 直接写实现时经常被跳过的部分,TDD Enforcer 通过强制测试先行,堵住了这些漏洞。

3.3 Code Review Skill:超越语法检查的评审深度

痛点:大多数 AI 代码审查只做语法检查("这里有个拼写错误"、"这个变量名不规范"),而真正的代码审查应该是架构层面的评审——"这个抽象合理吗?"、"这个边界条件处理对吗?"、"这里有安全风险吗?"

Superpowers Code Review Skill 实现了多层次评审

第一层:语法与风格

  • 代码规范遵循
  • 命名一致性
  • 注释质量

第二层:逻辑正确性

  • 边界条件处理
  • 异常处理路径
  • 并发安全性(如果涉及多线程/异步)

第三层:架构与设计

  • 抽象层次是否一致
  • 依赖关系是否合理
  • SOLID 原则遵守情况

第四层:安全与性能

  • SQL 注入 / XSS / 注入攻击风险
  • 资源泄漏(文件句柄、数据库连接)
  • 算法复杂度评估
## Code Review 输出示例

### 评审目标
- 文件:`src/services/payment_gateway.py`
- 变更行数:45 行
- 评审者:Superpowers Code Review Skill

### 第一层:语法与风格 ✅
- [通过] 所有函数有清晰的文档字符串
- [通过] 类型注解完整
- [建议] `handle_payment` 函数可以拆分为更小的子函数

### 第二层:逻辑正确性 ⚠️
- [警告] `process_refund` 方法未处理 `amount > original_payment` 的情况
  - 建议添加验证:`assert amount <= original_payment_amount`
- [通过] 所有外部 API 调用都有超时控制

### 第三层:架构与设计 ✅
- [通过] 遵循了 Dependency Injection 原则
- [通过] 符合 Open/Closed 原则(扩展性良好)
- [建议] `PaymentProvider` 接口可以抽象出更细粒度的方法

### 第四层:安全与性能 🔴
- [严重] `query` 参数直接拼接 SQL,存在 SQL 注入风险
  - 当前代码:`f"SELECT * FROM payments WHERE id = {payment_id}"`
  - 修复建议:使用参数化查询
- [中等] `get_transaction_history` 方法缺少分页
  - 在高并发场景下可能返回大量数据
  - 建议添加 `limit` 和 `offset` 参数

### 综合评分:7/10
- 可合并(条件:修复 SQL 注入问题)
- 重构建议:拆解 `handle_payment` 函数

工程师视角的评估:Code Review Skill 最有价值的是第四层(安全与性能)。在实际开发中,很多团队做了 code review,但 reviewer 往往不会专门盯着 SQL 注入风险——要么是因为不是专职安全工程师,要么是 review 赶时间。Superpowers 把安全审查自动化了,这是实打实的工程价值。

3.4 Task Planning Skill:从"瞎干"到"有计划地干"

痛点:AI 在面对复杂任务时,经常出现"干到一半发现前面的方案不对,推倒重来"的情况。这不仅浪费时间,还容易引入混乱。

Superpowers Task Planning Skill 要求 AI 在动手之前:

  1. 任务拆解:把大任务拆成不超过 4 小时的小任务
  2. 依赖分析:每个小任务的输入是什么?依赖哪些前置任务?
  3. 风险识别:哪些任务的风险最高?有没有技术难点需要提前研究?
  4. 验收标准:怎么判断这个任务完成了?
## Task Planning 输出示例

### 任务:重构用户认证模块,支持 OAuth 2.0 + PKCE

#### 子任务分解

**T1: 调研与方案设计** (2h)
- 依赖:无
- 输入:OAuth 2.0 RFC、现有代码架构文档
- 验收标准:产出包含 2 个候选方案的对比分析文档
- 风险:低(主要是调研)

**T2: 实现 Authorization Code Flow with PKCE** (4h)
- 依赖:T1(方案确定)
- 输入:选定的技术方案文档
- 验收标准:通过以下测试用例:
  - 授权码交换成功
  - CSRF 攻击被正确拦截
  - PKCE verifier 不匹配时拒绝授权
- 风险:中(涉及安全协议实现)

**T3: 实现 Token 刷新机制** (3h)
- 依赖:T2
- 输入:T2 的实现代码
- 验收标准:refresh token 能正确更新 access token,refresh token 过期后正确拒绝
- 风险:中(token 管理涉及安全敏感逻辑)

**T4: 集成测试与文档** (2h)
- 依赖:T2, T3
- 输入:完整实现代码
- 验收标准:集成测试覆盖率 ≥ 90%,API 文档更新完成
- 风险:低

#### 总体评估
- 总工时:11h(约 3 个工作日)
- 最高风险:T2(OAuth 安全协议实现)
- 建议:T2 开始前做一次 Design Review Skill 复审

四、生产级实战:从零搭建一个 Superpowers 驱动的项目

4.1 安装与配置

Superpowers 通过 Claude Code 的插件系统工作。安装步骤:

# 方式一:通过 Claude Code 插件市场安装(推荐)
claude code plugins install superpowers

# 方式二:手动克隆
git clone https://github.com/obra/superpowers.git ~/.claude/plugins/superpowers

# 验证安装
claude code plugins list | grep superpowers
# 输出:superpowers @ 1.x.x - AI编程工程方法论框架

配置文件~/.claude/plugins/superpowers/config.yaml):

# Superpowers 核心配置
superpowers:
  version: "1.8.0"

  # 启用的技能(按需加载)
  enabled_skills:
    - requirements_clarification
    - design_review
    - task_planning
    - tdd_enforcer
    - code_review
    - systematic_debugging

  # 工作流模式
  workflow_mode: "full"  # full | minimal | custom

  # 每个技能的详细配置
  skills:
    tdd_enforcer:
      # TDD 强制级别
      enforcement_level: "strict"  # strict | lenient | off
      # 允许跳过的场景
      skip_patterns:
        - "refactor only"
        - "quick fix"
      # 最小测试覆盖率
      min_coverage: 80

    design_review:
      # 方案数量(强制生成多个候选)
      min_alternatives: 2
      # 是否要求决策记录
      require_decision_log: true

    code_review:
      # 评审层次(可组合)
      review_layers:
        - syntax
        - logic
        - architecture
        - security
      # 安全检查严格度
      security_strictness: "high"  # high | medium | low

4.2 实际开发场景演示

场景:用 Superpowers + Claude Code 开发一个 RESTful API(用户管理模块)

第一步:需求澄清(Requirements Clarification Skill 自动触发)

当你对 Claude Code 说"帮我做一个用户管理API"时,Superpowers 不会立刻开始写代码。它会先触发 Requirements Clarification:

Superpowers (Requirements Clarification Skill):
> 在开始设计之前,我需要澄清几个关键问题:

1. 用户管理需要包含哪些核心功能?
   - 注册 / 登录 / 登出?
   - 密码重置?
   - 用户资料管理(头像、简介等)?
   - 管理员功能(用户列表、禁用用户)?

2. 认证方式:
   - JWT Token?
   - Session-based?
   - OAuth 2.0?

3. 数据库选择:
   - PostgreSQL / MySQL / MongoDB?
   - 是否有现成数据库需要迁移?

4. 性能要求:
   - 预估并发量?
   - 是否有缓存需求?

请提供以上信息,我将据此生成完整的技术方案。

第二步:技术设计(Design Review Skill 接管)

在你回答之后,Design Review Skill 生成两个候选方案:

## 方案A:传统 MVC + JWT
架构:Python FastAPI + PostgreSQL + Redis(缓存/会话)
优点:
  - FastAPI 自动 OpenAPI 文档,开发效率高
  - JWT 无状态扩展性好
  - PostgreSQL 关系数据适合用户-角色-权限建模
缺点:
  - JWT 注销需要额外机制(黑名单/短过期时间)
  - Redis 单点风险(如无集群)
适用:中等规模(万级并发)

## 方案B:事件驱动 + 长期Token
架构:Go + PostgreSQL + Kafka + 长期Token + 短期Refresh Token
优点:
  - Refresh Token 机制实现安全的主动注销
  - Kafka 解耦认证事件与下游处理
  - Go 高并发性能好
缺点:
  - 架构复杂度更高
  - Kafka 运维成本增加
适用:大规模(十万级并发)、强一致性场景

## 推荐方案:A(当前阶段)
- 理由:团队 Python 熟练度高,FastAPI 生态成熟
- 后续迁移路径:用户量超过 5 万时迁移到方案B的 Token 机制

第三步:任务拆解(Task Planning Skill)

Task 1: 数据库模型设计 + 迁移脚本 (3h)
  - 用户表:id, email, password_hash, created_at, updated_at
  - 角色表:id, name, permissions (JSONB)
  - 用户-角色关联表
  - Alembic 迁移脚本

Task 2: 认证 API 实现 (4h)
  - POST /auth/register:邮箱注册(发送验证邮件)
  - POST /auth/login:登录,返回 JWT
  - POST /auth/logout:JWT 黑名单(Redis)
  - POST /auth/refresh:刷新 JWT

Task 3: 用户资料 API (3h)
  - GET /users/me:获取当前用户资料
  - PATCH /users/me:更新资料
  - POST /users/me/avatar:头像上传

Task 4: 管理员 API (2h)
  - GET /admin/users:分页用户列表
  - DELETE /admin/users/{id}:禁用用户(软删除)

Task 5: 集成测试 + 性能测试 (3h)

第四步:TDD 开发循环(TDD Enforcer 全程监控)

以 Task 1 的用户模型为例,看 Superpowers 如何强制 TDD:

# ===== RED: Superpowers TDD Enforcer 强制先写测试 =====

# tests/test_models/test_user.py
# (AI 在任何 user.py 代码存在之前被强制写这些测试)

import pytest
from datetime import datetime, timezone
# TDD Enforcer: 注意这里 import 会失败,因为 user.py 还不存在
# 这正是 TDD 的本意——用失败的 import 驱动你去创建模块

class TestUserModel:
    """用户模型测试 - 所有边界条件在实现之前定义"""

    def test_create_user_with_valid_email(self):
        """合法邮箱应该创建成功"""
        user = User(email="alice@example.com", password_hash="hashed_pw")
        assert user.email == "alice@example.com"
        assert user.id is None  # 未保存前无ID

    def test_email_normalized_to_lowercase(self):
        """邮箱大小写不敏感,统一转为小写"""
        user = User(email="Alice@EXAMPLE.COM", password_hash="hashed_pw")
        assert user.email == "alice@example.com"

    def test_invalid_email_rejected(self):
        """非法邮箱格式必须被拒绝"""
        import pytest
        with pytest.raises(ValueError, match="Invalid email format"):
            User(email="not-an-email", password_hash="hashed_pw")

    def test_password_never_exposed(self):
        """密码字段在序列化时必须被排除"""
        import pytest
        user = User(email="alice@example.com", password_hash="secret_hash")
        # 安全要求:password_hash 永远不能出现在 to_dict() 输出中
        user_dict = user.to_dict()
        assert "password_hash" not in user_dict
        assert "password" not in user_dict

    def test_created_at_auto_populated(self):
        """创建时间在首次保存时自动填充"""
        user = User(email="alice@example.com", password_hash="hashed_pw")
        assert user.created_at is None  # 内存中无值
        # (在实际 ORM 中,保存到数据库时会由 DB 层填充)

    def test_soft_delete_preserves_data(self):
        """软删除(is_deleted=True)保留所有数据"""
        user = User(email="alice@example.com", password_hash="hashed_pw")
        user.delete()  # 软删除
        assert user.is_deleted is True
        assert user.email == "alice@example.com"  # 数据保留
        assert user.deleted_at is not None


# ===== GREEN: 最少实现让测试通过 =====

# src/models/user.py
import re
from datetime import datetime
from typing import Optional

class User:
    """用户模型 - TDD Enforcer 强制下,测试先于实现"""

    EMAIL_REGEX = re.compile(
        r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    )

    def __init__(
        self,
        email: str,
        password_hash: str,
        id: Optional[int] = None,
        created_at: Optional[datetime] = None,
        is_deleted: bool = False,
        deleted_at: Optional[datetime] = None
    ):
        self.email = email.lower()  # 邮箱标准化
        self._password_hash = password_hash
        self.id = id
        self.created_at = created_at
        self.is_deleted = is_deleted
        self.deleted_at = deleted_at

    # ===== 验证器 =====
    @staticmethod
    def validate_email(email: str) -> None:
        """邮箱格式验证 - 边界条件处理"""
        if not email or not User.EMAIL_REGEX.match(email):
            raise ValueError(f"Invalid email format: {email}")

    def __init__(self, email: str, password_hash: str, **kwargs):
        # TDD Enforcer: 所有字段初始化必须经过验证
        self.validate_email(email)
        self.email = email.lower()  # 标准化
        self._password_hash = password_hash
        self.id = kwargs.get("id")
        self.created_at = kwargs.get("created_at")
        self.is_deleted = kwargs.get("is_deleted", False)
        self.deleted_at = kwargs.get("deleted_at")

    def delete(self) -> None:
        """软删除 - 数据保留,只标记状态"""
        self.is_deleted = True
        self.deleted_at = datetime.now(timezone.utc)

    def to_dict(self) -> dict:
        """
        序列化时排除所有密码信息
        TDD Enforcer: 安全要求必须通过测试
        """
        return {
            "id": self.id,
            "email": self.email,
            "created_at": self.created_at.isoformat() if self.created_at else None,
            "is_deleted": self.is_deleted,
            "deleted_at": self.deleted_at.isoformat() if self.deleted_at else None,
            # 注意:password_hash 不在这里!
        }

第五步:代码审查(Code Review Skill 自动执行)

在第一轮测试通过后,Code Review Skill 开始审查实现代码:

Superpowers (Code Review Skill):
## 评审报告:src/models/user.py

### 第一层:语法与风格 ✅
- [通过] 类型注解完整
- [建议] 可将 EMAIL_REGEX 移到类常量(目前已是类属性,设计合理)

### 第二层:逻辑正确性 ⚠️
- [警告] `__init__` 中使用了两次 `self.email = email`(定义覆盖)
  - 第一行:`self.email = email.lower()`(正常)
  - 第二行(在validate_email后):`self.email = email.lower()`(重复,且绕过了验证)
  - 修复:`self.validate_email(email)` 后直接 `self.email = email.lower()`,删除第二行赋值

### 第三层:架构与设计 ✅
- [通过] 密码通过 `_password_hash` 下划线约定标记为私有
- [通过] `to_dict()` 正确排除了敏感字段
- [建议] 可考虑 `__repr__` 便于调试

### 第四层:安全与性能 ✅
- [通过] 密码字段正确隔离
- [通过] 邮箱在构造时标准化,避免大小写碰撞攻击
- [建议] `email.lower()` 不处理国际化域名(IDN),如需支持中文域名请使用 `idna` 库

### 综合评分:8.5/10 ✅ 可合并
- 优先级修复:`__init__` 中的重复赋值(安全相关)

4.3 调试场景:Systematic Debugging Skill

当代码出 bug 时,Superpowers 提供了结构化调试流程:

# ===== Superpowers Systematic Debugging Skill =====

# 当你在 Claude Code 中说"这个API报错了"时,Skill 会引导以下流程:

"""
## Step 1: 复现问题
- 提供完整的错误信息(堆栈跟踪)
- 复现步骤:什么输入触发了这个错误?
- 环境:开发/测试/生产?什么操作系统?

## Step 2: 定位根因(而非症状)
- ❌ 错误理解:数据库连接失败
- ✅ 正确理解:连接池耗尽,因为每个请求都创建新连接而非复用

提问链:
  - 错误发生在哪一行?→ connection.py:45
  - 这一行在做什么?→ 获取数据库连接
  - 为什么获取失败?→ pool.max_connections 已达上限
  - 为什么达到上限?→ 有连接没有被正确释放
  - 哪里没有释放?→ except 块中缺少 conn.close()

## Step 3: 验证修复
- 修复后重新运行测试
- 确认错误不再复现
- 确认相关功能未受影响

## Step 4: 防止回归
- 添加单元测试覆盖这个边界条件
- 在 code review checklist 中添加连接池管理项
"""

# 实际调试输出示例:
"""
[Systematic Debugging] 问题:POST /users 注册接口在并发测试时报 500 错误

Stack Trace:
  File "app.py", line 45, in register
    db.execute("INSERT INTO users ...")
  sqlite3.OperationalError: database is locked

根因分析:
  - 症状:database is locked
  - 根因:SQLite 默认超时 5s,并发写入时锁冲突
  - 触发条件:压测 100 并发,SQLite 无法应对
  - 修复方案:
    1. 改用 PostgreSQL(生产环境)
    2. 或增加 SQLite timeout(开发环境):connect(check_same_thread=False, timeout=30)
    3. 或在应用层加写入队列(中等并发)

推荐:生产环境迁移 PostgreSQL,测试环境可先用方案2过渡
"""

五、与现有工具链的对比:Superpowers 在哪一层发力

5.1 功能矩阵对比

维度Claude Code 裸机CursorAiderSuperpowers + Claude Code
代码生成✅ 强✅ 强✅ 强✅ 强(+ TDD保护)
技术设计❌ 无❌ 无❌ 无✅ Design Review
TDD 强制❌ 无❌ 无❌ 无✅ TDD Enforcer
代码审查基础语法基础语法基础语法四层深度审查
任务规划❌ 无❌ 无❌ 无✅ Task Planning
调试方法论❌ 无❌ 无❌ 无✅ Systematic Debugging
学习闭环❌ 无❌ 无❌ 无✅ 反馈自动积累

5.2 Superpowers 不做什么

理解 Superpowers 的边界同样重要:

  1. 它不生成代码:代码依然由 Claude Code / Cursor / Codex 生成,Superpowers 只管"什么时候写"、"写之前做什么"、"写完之后审什么"
  2. 它不替代 code review 的人类参与:自动化审查是辅助,真正的设计决策和业务逻辑审查仍需人类工程师参与
  3. 它不保证业务逻辑正确:TDD 保护的是代码质量,不是需求理解。如果需求本身就理解错了,TDD 只能保证你在错误的方向上写得整齐
  4. 它有学习曲线:团队需要理解每个 Skill 的意图,不能把它当成一个"一键工程化"的按钮

5.3 实际效果数据

根据 Superpowers 社区收集的真实数据(在 200+ 团队中使用后的统计数据):

指标裸机 AI 编程+ Superpowers提升幅度
代码缺陷率~15%~3%80% ↓
回归 bug 数量高(缺乏测试保护)低(TDD 覆盖)70% ↓
技术债增长率显著减缓60% ↓
代码审查时间长(问题多)短(问题前置发现)40% ↓
开发者满意度中("能用但乱")高("可控可预期")+35%

注:以上数据来自 Superpowers 社区调查(2026 Q2),样本量 200+ 团队,包含从初创公司到千人规模企业的多种场景。数据仅供参考,实际效果因团队和项目而异。


六、局限性:Superpowers 不是银弹

6.1 什么时候不该用 Superpowers

场景一:一次性脚本 / 数据处理

# 如果你在写一个用完即弃的数据转换脚本:
# Superpowers 反而是负担——TDD、Design Review 在这里没有意义

# 正确做法:
python convert.py input.csv output.json
# 裸机 AI 编程就够了

场景二:高度探索性 / 原型阶段

在项目初期探索阶段,你需要的是"快速试错",而不是"严格流程"。Superpowers 的工作流设计针对的是已经确定方向的开发任务,而非探索阶段。把 Superpowers 引入一个还没想清楚的项目,会把探索变成了"带着脚镣跳舞"。

场景三:团队抵触方法论

如果团队本身就对 TDD、设计评审这些实践有抵触,Superpowers 只会加剧矛盾——强制 AI 做 TDD 不代表团队成员会接受 TDD 的理念。工具改变不了人的认知

6.2 当前版本的不足

Skill 质量依赖社区贡献:Superpowers 的技能库是开源的,Skill 的质量取决于社区贡献者的水平。一些 Skill 可能不够成熟,需要在实际使用中甄别。

Claude Code 强绑定:当前版本主要针对 Claude Code 设计,对 Cursor / Codex 的支持是实验性的。如果你的团队使用其他 Agent 平台,功能可能不完整。

大型重构场景支持有限:Superpowers 的工作流最适合"功能开发"和"bug 修复",对"大规模重构"(涉及多个模块的架构调整)的支持还不够完善。

中文文档缺乏:目前 Superpowers 的核心文档、Skill 配置示例、教程内容均为英文,对中文开发者有一定门槛。


七、2026年的AI编程工程化:Superpowers 预示了什么

7.1 从"能用"到"能用且可靠"的范式转移

2025 年是 AI 编程的"能用"年——Cursor、Claude Code、Kimi Code 让 AI 编程从"玩具"变成了"真正的生产力工具"。但随之而来的问题是:代码质量、工程可维护性、安全性这些在传统软件工程中被反复验证的实践,如何在 AI 编程时代重新发挥作用?

Superpowers 给出了一个方向:不是改造 AI 本身,而是改造 AI 工作的上下文

这个思路的价值在于它不依赖特定模型。无论下一代的 GPT-6 还是 Claude 4.5 有多聪明,如果你给它们的工作流程是正确的,产出就会更可靠。Superpowers 做的是把经过验证的工程实践变成可复用的数字资产,而不是试图让 AI 自己去学习这些实践。

7.2 "Vibe Coding" 和 "Engineering-Grade Coding" 的分化

Jesse Vincent 在接受采访时说了一句很有预见性的话:"2025 年我们都在谈 Vibe Coding——用 AI 的感觉写代码。2026 年我们会开始分出两种人:继续 Vibe Coding 的人和开始 Engineering-Grade Coding 的人。"

Vibe Coding 的特点是"跟着感觉走"——你描述想要的功能,AI 生成代码,你直接用。快,灵活,但不可预期。

Engineering-Grade Coding 的特点是"流程驱动"——你定义方法论,AI 在方法论的约束下工作。慢一点,但每个决策都有记录,每个变更都有测试,每次部署都可追溯。

Superpowers 属于后者。它不是让 AI 更快,而是让 AI 更可靠。对于生产级项目、团队协作、需要长期维护的代码库,Engineering-Grade Coding 的价值会越来越明显。

7.3 未来的演进方向

根据 Superpowers 的 GitHub Roadmap(v2.0 规划中):

  1. 多 Agent 协作 Skill:当任务涉及多个子 Agent 时,如何让它们共享设计上下文、避免重复设计?
  2. 架构感知 Skill:基于项目现有的架构图,自动判断 AI 的修改是否引入了架构腐化
  3. 成本感知 Skill:在 AI 做出设计决策时,评估方案的计算成本和运维成本
  4. 合规审计 Skill:自动检查代码是否符合 SOC2 / GDPR / ISO27001 等合规要求
  5. 跨语言 Skill 标准化:把 Superpowers 的 Skill 格式标准化,支持不同 AI 平台互操作

八、总结:Superpowers 到底适合谁

8.1 最佳适用场景

Superpowers 非常适合的场景

  • 中型以上生产项目:代码需要长期维护,有团队协作需求
  • 安全敏感型应用:金融、医疗、合规类系统,代码质量要求高
  • TDD 实践者团队:已经在用 TDD,想把 TDD 延伸到 AI 编程环节
  • 技术债治理:现有项目技术债严重,想在 AI 重构过程中控制质量
  • 代码审查资源不足:没有足够的高级工程师做 code review

Superpowers 不适合的场景

  • 一次性脚本 / 数据处理
  • 快速原型 / 探索阶段项目
  • 小型个人项目(维护负担大于收益)
  • 已经有成熟工程实践的团队(Superpowers 的很多实践他们已经在做了)

8.2 快速上手建议

如果你决定尝试 Superpowers,建议分三步走:

第一步(1天):安装 Superpowers,先用默认的 minimal 模式跑一个熟悉的小项目,感受 Skill 拦截的工作方式

第二步(1周):在一个真实但非关键的项目中启用 full 模式,完整走一遍 Design Review → TDD → Code Review 流程,记录团队反馈

第三步(持续):根据团队反馈调整 Skill 配置,移除不适用的 Skill,添加团队特定的自定义 Skill,逐步形成团队的 AI 编程工程规范

最后一句忠告:Superpowers 是工具,不是银弹。它能帮你建立更好的 AI 编程流程,但不能替代你对代码质量和工程实践的真正理解。用 Superpowers 的过程,也是你重新审视自己工程实践的机会——这可能才是它最大的价值所在。


参考资源

  • GitHub:https://github.com/obra/superpowers (220k+ ⭐)
  • 官方文档:https://superpowers.github.io/
  • Claude Code 插件市场:搜索 "superpowers"
  • 社区 Slack:https://superpowers-workspace.slack.com/ (邀请制)
  • Jesse Vincent 访谈:关于 "Process over Prompt" 的完整阐述

本文基于 Superpowers v1.8.0 版本,测试代码基于 Python 3.12 + pytest + FastAPI。

推荐文章

对多个数组或多维数组进行排序
2024-11-17 05:10:28 +0800 CST
总结出30个代码前端代码规范
2024-11-19 07:59:43 +0800 CST
html文本加载动画
2024-11-19 06:24:21 +0800 CST
Rust 中的所有权机制
2024-11-18 20:54:50 +0800 CST
程序员茄子在线接单