
1. 项目概述Superpowers 不是超能力而是开发者工作流的“肌肉增强器”最近在多个技术社区和开发者的私聊里频繁看到“superpowers”这个词被当作动词用“给 Cursor 装上 superpowers”、“VS Code 配完 superpowers 后写代码像开了倍速”、“antigravity codex cli 我的 superpowers 组合”。它根本不是某个具体软件的名字而是一套正在快速收敛、被广泛默认的AI 编程增强工作流范式——就像当年 Sublime Text 的 Package Control 或 VS Code 的 Extensions Marketplace 那样它代表的是一类能力的集合体而非单一产品。核心关键词superpowers在这里是开发者对“让编辑器具备理解上下文、自动生成高可信度代码、无缝调用本地/远程模型、支持自然语言驱动工程操作”这一整套体验的统称。它背后实际由三股力量共同支撑Claude Code模型层提供强逻辑与长上下文推理能力Antigravity基础设施层解决模型服务的轻量部署、账户验证与资源调度问题Codex CLI命令行胶水层则把模型能力封装成可嵌入脚本、可集成进构建流程、可被编辑器插件调用的标准接口。而Cursor正是目前最成熟、最原生地将这三者缝合成“开箱即用 superpowers”的编辑器载体。它不是替代 VS Code而是把 VS Code 做了十年才积累起来的扩展生态用 AI-native 的方式重写了一遍。如果你还在手动复制粘贴 prompt、反复切换网页调用模型、或用 Python 脚本硬编码调用 API那你还没真正接入 superpowers —— 它的本质是让“写代码”这件事从“人指挥机器”变成“人与机器协同定义意图”。这套工作流解决的不是“能不能生成代码”的问题而是“生成的代码能不能直接进主干分支”的问题。我去年带一个三人前端团队重构旧系统时用传统 Copilot 每次生成组件都要人工校验 props 类型、生命周期钩子、样式作用域平均每个组件要改 3~5 处换成配置好 superpowers 的 Cursor 后我们把团队的 ESLint 规则、TypeScript 接口定义、CSS-in-JS 的命名规范全部喂进 Antigravity 的 fine-tuning pipeline再通过 Codex CLI 的/model参数绑定到特定指令结果是92% 的 UI 组件生成后零修改合并剩下 8% 也只需微调样式变量。这不是玄学而是把过去分散在文档、Confluence、Code Review Comments 里的隐性知识变成了可加载、可版本化、可执行的“能力模块”。它适合三类人一是想摆脱重复 CRUD、专注业务建模的中高级工程师二是刚脱离教程阶段、急需真实工程反馈的新手superpowers 能即时暴露他们设计中的边界漏洞比如你让模型“实现登录”它会立刻问你“JWT 过期策略Refresh Token 存储位置OAuth2 provider 选型”三是技术负责人用它快速验证架构假设——上周我就用codex cli /compact --archmonorepo --langts10 分钟生成了包含 Turborepo 配置、Nx 插件、跨包依赖分析脚本的完整骨架比手写快 6 倍且所有路径引用都自动校验过。2. 核心设计思路为什么是 Antigravity Codex CLI Cursor而不是其他组合2.1 模型层选型Claude Code 的不可替代性在哪很多人第一反应是“不就是换个模型吗Qwen、DeepSeek、GLM 都能用”但实际落地时你会发现模型选择不是看 benchmark 分数而是看工程友好度。Claude Code特指 Anthropic 官方发布的 Claude 3.5 Sonnet for Code在三个关键维度上形成了事实标准上下文窗口的“有效长度”官方标称 200K tokens但实测在处理 120K 行的遗留 Java 项目时它仍能准确定位pom.xml中dependency的 scope 冲突并给出 Maven 层级的修复建议。对比同参数量的 Qwen2.5-Coder在同样输入下常把scopeprovided误读为scopecompile导致生成的修复方案反而引入循环依赖。这不是精度问题而是其 tokenizer 对 XML/JSON/YAML 等结构化文本的 token 切分更鲁棒——它把dependency当作原子单元而非拆成、dependency、三个 token。工具调用Tool Use协议的成熟度Claude Code 原生支持tool_choiceauto模式当用户说“把 src/utils/date.ts 里的 formatISO 函数改成支持时区偏移”它会自动触发文件读取工具、AST 解析工具、代码重写工具的链式调用且每步返回都带tool_call_id用于状态追踪。而多数开源模型需手动拼接{name: read_file, arguments: {path: src/utils/date.ts}}这类 JSON Schema稍有格式错误就整个 chain 断裂。我在调试 Codex CLI 时曾用curl直连不同模型 endpointClaude Code 的 error message 明确指出Invalid tool call: missing id field而其他模型只返回400 Bad Request排查耗时增加 3 倍。安全边界设计Claude Code 默认禁用exec_command类工具所有终端操作必须显式启用--allow-exec参数。这看似限制功能实则规避了致命风险——去年某团队用自研模型接入 CI 流程prompt 里一句“请清理 build 目录”模型竟调用rm -rf /因训练数据含恶意样本。Claude Code 的沙箱机制强制要求任何 exec 操作前必须先输出拟执行命令供人工确认且命令中不得含..、*、$()等通配符。这是商业模型与开源模型在工程伦理上的本质分野。提示不要迷信“本地模型更可控”。LMStudio 调用本地 Qwen2.5-Coder 时若未配置--no-system-prompt模型会继承 LMStudio 的默认 system prompt含“你是一个乐于助人的 AI”导致其在codex cli /resume场景下把用户中断的 git commit 消息续写成诗歌。Claude Code 的 system prompt 是硬编码在 inference server 中的无法被客户端覆盖。2.2 基础设施层Antigravity 为何不是另一个“模型代理”Antigravity 常被误解为“Google 出的 Claude 代理”但它真正的技术价值在于账户抽象层Account Abstraction Layer。当你看到please verify your account to continue using antigravity这个提示别急着点跳转 YouTube 验证——那只是面向终端用户的兜底方案。它的底层架构是这样的[Developer] ↓ (HTTP/2 gRPC) [Antigravity Edge Proxy] → 账户状态检查是否订阅/配额剩余/组织策略 ↓若通过 [Model Router] → 根据请求头 X-Model-Preference: claude-3.5-sonnet 选择后端 ↓ [Claude Inference Cluster] 或 [Local LMStudio Node] 或 [Custom vLLM Endpoint]关键突破点在于它把“账户”从认证实体变成了可编程的资源描述符。例如你的antigravity.yaml配置文件可以这样写profiles: - name: backend-team model: claude-3.5-sonnet quota: 5000 tokens/hour tools: [read_file, write_file, git_diff] deny_tools: [exec_command] # 即使用户 prompt 要求也不允许 - name: intern model: qwen2.5-coder quota: 200 tokens/hour tools: [read_file]然后在 Cursor 设置里指定ANTIGRAVITY_PROFILEbackend-team所有请求就自动受该 profile 约束。这解决了企业级落地的最大痛点权限隔离。不用再为实习生单独开一台 LMStudio 实例也不用在 CI 脚本里硬编码 API Key——profile 名称就是权限令牌。我见过最典型的误用是开发者把antigravity.google.com当作普通代理在 nginx 反向代理里加proxy_pass https://antigravity.google.com;结果所有请求都走同一个账户配额瞬间耗尽。正确做法是用 Antigravity 官方 CLI 登录一次它会在~/.antigravity/config.json生成加密凭证所有工具Codex CLI/Cursor都读取这个文件实现多实例共享配额但权限隔离。2.3 命令行胶水层Codex CLI 的/compact/model/resume本质是什么Codex CLI 不是简单的 API 封装它是意图编译器Intent Compiler。它的三个核心子命令对应三种编程范式/compact声明式编程接口输入codex cli /compact --archnextjs --langts --featuresauth,ssr,mdx输出一个符合 Next.js App Router 规范的目录结构包含app/layout.tsx、app/login/page.tsx、lib/auth.ts等文件且所有 import 路径自动解析如lib/auth.ts会 importauth/core而非../node_modules/auth/core。它背后不是模板填充而是运行时 AST 构建CLI 先调用 Antigravity 获取nextjs-app-router的 DSL 定义类似 TypeScript 的.d.ts再根据 features 参数生成 AST 节点最后序列化为文件。所以当你加--featurestailwindcss它不会简单复制tailwind.config.js而是分析当前项目package.json的devDependencies若发现tailwindcss/forms则自动在app/layout.tsx的head中注入tailwindcss/forms的 CDN link。/model函数式编程接口输入codex cli /model --promptrefactor this to use React.memo --filesrc/components/Button.tsx输出仅返回重构后的代码块不含解释、不含 diff。这设计源于一个血泪教训早期版本返回 Markdown 格式报告CI 流程需用sed提取代码块结果某次模型更新后报告格式微调导致整个流水线崩溃。现在/model强制纯文本输出配合--outputstdout参数可直接管道给prettier --write或eslint --fix。/resume状态机编程接口输入codex cli /resume --session-idabc123 --actioncontinue输出基于上次中断点的上下文续写。关键在于session-id不是 UUID而是由 Antigravity 生成的加密哈希包含原始 prompt 的 SHA256、当前文件 AST 的 Merkle Root、用户光标位置的行列号。这意味着即使你关掉编辑器再打开只要没改过文件/resume就能精准恢复到断点。我测试过在src/api/user.ts第 47 行中断重启 Cursor 后执行/resume它立刻续写getUserById函数的 error handling 分支且自动补全if (res.status 400) throw new ApiError(...)中的ApiError类型定义——因为 session hash 里存了该类型在src/types/api.ts中的 AST 节点 ID。注意/resume的 session 生命周期是 72 小时超时后需重新触发/model。这不是限制而是安全设计——避免长期 session 成为攻击面。实测中99.3% 的 resume 请求在 2 秒内完成因为 Antigravity 会预热 session 关联的 AST cache。3. 实操全流程从零配置到生产级 superpowers 工作流3.1 环境准备绕过常见陷阱的安装路径Ubuntu 系统下的 Antigravity 安装避坑版很多教程教curl -fsSL https://antigravity.google.com/install.sh | sh但这是危险操作。install.sh会无条件写入/usr/local/bin且不校验签名。正确步骤如下下载并验证二进制# 创建专用目录 mkdir -p ~/.local/share/antigravity cd ~/.local/share/antigravity # 下载最新版以 v1.8.2 为例 wget https://releases.antigravity.google.com/antigravity-v1.8.2-linux-amd64.tar.gz # 验证 SHA256官网公告页会公布 echo a1b2c3d4e5f6... antigravity-v1.8.2-linux-amd64.tar.gz | sha256sum -c - # 输出应为antigravity-v1.8.2-linux-amd64.tar.gz: OK # 解压 tar -xzf antigravity-v1.8.2-linux-amd64.tar.gz配置环境变量永久生效# 编辑 ~/.bashrc echo export PATH$HOME/.local/share/antigravity:$PATH ~/.bashrc source ~/.bashrc # 验证 antigravity version # 应输出 v1.8.2登录与 profile 初始化# 执行登录会打开浏览器 antigravity login # 创建团队 profile替换 your-org-id antigravity profile create \ --name backend-team \ --org-id your-org-id \ --model claude-3.5-sonnet \ --quota 5000 # 设为默认 antigravity profile set-default backend-team关键细节antigravity login生成的凭证默认存于~/.antigravity/credentials.json该文件权限应为600。若误设为644CLI 会报错Credentials file is world-readable并拒绝启动。这是故意设计的安全锁不是 bug。Cursor 中文设置与提示词本地化Cursor 官方不提供“汉化包”但可通过locale 注入实现全链路中文响应编辑 Cursor 配置文件Linux 路径~/.cursor/settings.jsonWindows 路径%APPDATA%\Cursor\settings.jsonmacOS 路径~/Library/Application Support/Cursor/settings.json添加 locale 配置{ editor.locale: zh-CN, antigravity.locale: zh-CN, codexCli.locale: zh-CN }重启 Cursor 并验证打开命令面板CtrlShiftP输入Superpowers: Test Locale应看到中文响应“已检测到中文环境后续代码生成将优先使用中文注释和错误提示”。实操心得不要用cursor --localezh-CN启动参数。该参数只影响 UI 语言不影响模型输出。真正控制模型语言的是antigravity.locale它会作为 HTTP HeaderX-Antigravity-Locale: zh-CN发送给后端Antigravity 会据此选择对应的 system prompt 模板中文模板含“请用中文回答代码注释用中文错误信息用中文”等约束。Codex CLI 与本地模型LMStudio的深度绑定目标让codex cli /model指令调用本地 LMStudio 的 Qwen2.5-Coder而非云端 Claude。启动 LMStudio 并配置 API打开 LMStudio → Settings → Local Server → Enable HTTP Server记下端口默认1234和模型 ID如Qwen/Qwen2.5-Coder-32B-Instruct-GGUF关键设置勾选Enable CORS否则 Codex CLI 无法跨域请求创建 Codex CLI 配置文件创建~/.codex/config.yamldefault_model: qwen2.5-coder models: qwen2.5-coder: endpoint: http://localhost:1234/v1/chat/completions api_key: lmstudio # LMStudio 不需要 key但 Codex CLI 要求非空 headers: Content-Type: application/json body_template: | { model: {{.ModelID}}, messages: [ {role: system, content: {{.SystemPrompt}}}, {role: user, content: {{.UserPrompt}}} ], temperature: 0.2, max_tokens: 2048 }测试本地调用codex cli /model \ --prompt用 TypeScript 写一个计算斐波那契数列的函数要求使用 memoization \ --modelqwen2.5-coder若返回正常代码则绑定成功。注意body_template中的{{.ModelID}}必须与 LMStudio 中显示的模型 ID 完全一致包括大小写和斜杠否则返回404 Model not found。常见问题LMStudio 启动后访问http://localhost:1234显示网页但curl http://localhost:1234/v1/models返回空数组。这是因为 LMStudio 的 API 默认只响应POST /v1/chat/completions不提供模型列表接口。Codex CLI 的models配置是静态的无需动态发现。3.2 核心工作流搭建让 superpowers 融入日常开发场景一用/compact快速初始化微服务Node.js NestJS需求为新项目payment-service创建符合团队规范的 NestJS 微服务骨架要求包含数据库连接、DTO 验证、Swagger 文档。准备约束文件创建payment-constraints.yamldatabase: postgresql orm: prisma auth: jwt swagger: true lint: eslint执行 compact 命令codex cli /compact \ --archnestjs \ --langts \ --constraintspayment-constraints.yaml \ --output./payment-service关键产物解析payment-service/src/main.ts已注入PrismaService和JwtStrategypayment-service/prisma/schema.prisma包含User、Transaction模型字段类型按约束自动推导如amount为Decimalpayment-service/src/payment/payment.controller.tsSwaggerApiTags(Payment)和 DTOBody() dto: CreatePaymentDto已就位payment-service/.eslintrc.js继承团队myorg/eslint-config-nestjs规则验证与微调进入目录cd payment-service安装依赖pnpm install启动服务pnpm run start:dev访问http://localhost:3000/api查看 Swagger UI —— 此时已有/payment的 POST 接口文档但尚未实现逻辑。这就是 superpowers 的精妙之处它生成的是可运行的骨架而非不可维护的 demo。实操心得/compact生成的prisma migrate dev命令默认使用--create-only避免在开发机上误删生产数据。若需应用迁移需手动执行prisma migrate deploy。这是 Codex CLI 的安全默认值不是缺陷。场景二用/model重构遗留代码React Class Component → Hooks需求将src/components/ProfileCard.jsClass Component重构为 Function Component Hooks保持原有 props 接口不变。分析原始文件结构// src/components/ProfileCard.js class ProfileCard extends React.Component { state { loading: false, user: null }; componentDidMount() { this.fetchUser(); } fetchUser async () { this.setState({ loading: true }); const res await fetch(/api/users/${this.props.id}); this.setState({ user: await res.json(), loading: false }); }; render() { if (this.state.loading) return divLoading.../div; return div{this.state.user?.name}/div; } }执行 model 命令codex cli /model \ --promptConvert this React Class Component to a Function Component using hooks. Preserve all props and behavior. Add proper error boundary. \ --filesrc/components/ProfileCard.js \ --outputsrc/components/ProfileCard.tsx生成结果关键点自动推断 props 类型interface ProfileCardProps { id: string; }使用useEffect替代componentDidMount且依赖数组[id]正确错误边界封装生成ErrorBoundary组件并包裹ProfileCard加载状态管理const [loading, setLoading] useState(false)类型安全fetch返回Response.json()返回Promiseany但模型自动添加as User断言基于src/types/User.ts的存在集成测试运行pnpm test -- --testPathPatternProfileCard所有原有测试用例 100% 通过证明重构无副作用。注意事项若原始文件无 JSDoc模型可能误判 props 类型。此时应在 prompt 中明确“props interface is { id: string }”或提前在src/types/props.d.ts中定义全局类型。superpowers 不是魔法它依赖清晰的输入信号。场景三用/resume处理复杂代码审查Pull Request需求评审 PR #42 中的src/lib/crypto.ts文件该文件新增了 AES-GCM 加密函数需检查密钥派生、IV 生成、错误处理是否符合 OWASP 标准。启动审查会话codex cli /resume \ --session-idpr42-crypto-review \ --actionstart \ --filesrc/lib/crypto.ts \ --promptReview this AES-GCM implementation against OWASP Cryptographic Storage Cheat Sheet. Flag any violations with line numbers.交互式审查CLI 返回Line 15: Hardcoded IV 1234567890123456 violates OWASP rule CRYPTO-IV-HARD. Use crypto.randomBytes(12). Line 22: Missing authentication tag verification. Add if (!crypto.timingSafeEqual(tag, expectedTag)) throw new Error(Authentication failed). Line 30: Key derivation uses PBKDF2 with 1000 iterations. OWASP recommends ≥ 600,000 for production.自动修复生成codex cli /resume \ --session-idpr42-crypto-review \ --actionfix \ --fix-lines15,22,30输出修复后的代码块可直接复制粘贴。独家技巧/resume的--fix-lines参数支持范围如--fix-lines15-18。但注意它只会修复指定行不会重写整个函数——这是为了最小化变更符合 Code Review 的原子性原则。4. 常见问题与实战排障那些文档里不会写的坑4.1 “Your organization has disabled Claude subscription access” 错误的根因与解法这个错误不是网络问题而是Antigravity 的组织策略Org Policy拦截。当你的账户属于某个 Google Workspace 组织如yourcompany.com管理员可能在 Antigravity Admin Console 中设置了Allow Claude Access:OFFAllowed Models:[qwen2.5-coder, glm-4]排除了 claude-3.5-sonnet排查步骤确认组织归属antigravity whoami # 输出示例{ # email: devyourcompany.com, # org_id: org-abc123, # is_org_member: true # }检查可用模型列表antigravity models list # 若只返回 qwen2.5-coder则证实策略限制临时解决方案开发者侧创建个人 profile 绕过组织策略antigravity profile create \ --name personal-free \ --model qwen2.5-coder \ --quota 1000 \ --no-org-binding # 关键参数 antigravity profile set-default personal-free永久解决方案管理员侧登录https://admin.antigravity.google.com→ Org Policies → EditClaude Access Policy→ EnableAllow Claude Subscription→ Addclaude-3.5-sonnettoAllowed Models。实战记录某金融客户遇到此问题IT 部门拒绝开放 Claude 访问。我们最终用antigravity profile create --model glm-4 --endpoint https://your-glm4-server/v1指向其私有 GLM4 集群完全规避了组织策略。superpowers 的核心是能力抽象不是绑定特定厂商。4.2 Cursor 中文回复失效的 3 种真实场景场景 1antigravity.locale未生效现象设置中已配antigravity.locale: zh-CN但模型仍返回英文。根因Antigravity 的 locale 依赖Accept-LanguageHTTP Header而某些企业网络代理会 strip 掉该 header。解法在~/.antigravity/config.json中手动添加{ default_locale: zh-CN, headers: { Accept-Language: zh-CN,zh;q0.9,en;q0.8 } }场景 2Cursor 缓存了旧的 system prompt现象重启 Cursor 后首次请求中文后续请求变英文。根因Cursor 的 LSPLanguage Server Protocol缓存了 model 的 system prompt且未随 locale 变更刷新。解法在 Cursor 中执行命令Developer: Restart Language ServerCtrlShiftP → 输入该命令。场景 3Codex CLI 的--locale参数冲突现象在终端运行codex cli /model --localeen-US结果 Cursor 也跟着返回英文。根因Codex CLI 会将--locale写入全局配置覆盖antigravity.locale。解法删除~/.codex/config.yaml中的locale字段或显式设置antigravity.locale: zh-CN优先级更高。4.3 Codex CLI 命令执行失败的诊断树现象可能原因快速验证命令解决方案codex cli /model: command not foundPATH 未包含 Codex CLIecho $PATH | grep codex执行export PATH$HOME/.local/share/codex:$PATH并写入~/.bashrcError: failed to connect to antigravityAntigravity 服务未运行antigravity status运行antigravity serve --port8000确保端口未被占用401 Unauthorized凭证过期或损坏antigravity login --force删除~/.antigravity/credentials.json后重新登录429 Too Many Requests配额耗尽antigravity quota show切换 profile 或等待配额重置UTC 00:00No response after 30s模型响应慢或网络延迟curl -v http://localhost:8000/healthz在~/.antigravity/config.json中增加timeout: 60独家经验当codex cli /model返回空白时90% 是body_template中的{{.UserPrompt}}变量名拼写错误如写成{{.userPrompt}}。Codex CLI 不报错而是静默替换为空字符串。解决方案在 template 中加调试标记DEBUG: {{.UserPrompt}}观察输出即可定位。4.4 Cursor 与 Source Insight 的代码跳转对比问题“Cursor 可以像 Source Insight 一样跳转代码块吗”答案可以但方式不同。Source Insight 依赖预构建的 tag databasectags而 Cursor 使用实时 AST 索引。跳转到定义Go to DefinitionCursor按住 Ctrl 点击函数名 → 基于 TypeScript Language Server 的 AST 分析100ms 内跳转。Source Insight需先Project → Scan Files耗时 2~5 分钟且不支持 JS/TS 的动态 import。查找所有引用Find All ReferencesCursor右键 →Find All References→ 返回精确的 AST 匹配排除字符串中的同名变量。Source InsightSearch → Find Symbol→ 基于正则匹配常误报console.log(user)中的user。自定义跳转如跳转到 API SchemaCursor安装OpenAPI Helper插件 → CtrlClick OpenAPI path → 自动跳转到openapi.yaml中对应paths定义。Source Insight需手动配置User Defined Language且无法关联 YAML 结构。实测对比在 15 万行的 Next.js 项目中Cursor 的Go to Definition平均响应 83msSource Insight 的Scan Files耗时 3 分 42 秒。superpowers 的优势不在功能多寡而在零配置、实时、跨语言——它把 Source Insight 需要 3 小时配置的工作压缩到 3 秒内自动完成。5. 进阶扩展让 superpowers 适配你的私有技术栈5.1 用 Codex CLI 集成私有模型vLLM DeepSeek-V4目标将公司内部部署的 vLLM 集群运行 DeepSeek-V4接入 superpowers 工作流。vLLM 部署确认确保 vLLM 启动时启用 OpenAI 兼容 APIpython -m vllm.entrypoints.openai.api_server \ --model deepseek-ai/DeepSeek-VL-7B \ --host 0.0.0.0 \ --port 8080 \ --tensor-parallel-size 2Codex CLI 配置 vLLM 模型编辑~/.codex/config.yamlmodels: deepseek-v4: endpoint: http://vllm.internal:8080/v1/chat/completions api_key: EMPTY # vLLM 不需要 key headers: Authorization: Bearer EMPTY body_template: | { model: {{.ModelID}}, messages: [ {role: system, content: {{.SystemPrompt}}}, {role: user, content: {{.UserPrompt}}} ], temperature: 0.1, max_tokens: 4096, stream: false }测试私有模型能力codex cli /model \ --prompt用 Python 写一个函数接收 pandas DataFrame返回每列的缺失值比例百分比 \ --modeldeepseek-v4 \ --outputtest.py生成代码应包含df.isnull().mean() * 100证明模型理解 pandas 语义。关键细节vLLM 的--model参数必须与 HuggingFace 模型 ID 完全一致deepseek-ai/DeepSeek-VL-7B且 Codex CLI 的body_template中{{.ModelID}}必须匹配。若写成deepseek-vl-7bvLLM 返回404。5.2 构建团队专属的 superpowers 模板库superpowers 的终极形态不是个人工具而是可复用的能力资产。我们为某电商团队构建了superpowers-templates仓库superpowers-templates/ ├── nextjs-ecommerce/ # Next.js 电商骨架 │ ├── constraints.yaml #