
1. 这不是插件是Claude Code的“操作系统级能力抽象层”你第一次在VS Code里敲下/superpowers光标没反应你反复确认claude-code已安装终端却报错command not found: claude你点开官方文档满屏英文术语像天书——OpenSpec,Agent Skill,Skill Registry连个能直接复制粘贴的hello world示例都找不到。这不是你操作错了而是绝大多数人根本没搞清Superpowers 和 GSD 不是两个并列的“功能插件”而是 Claude Code 架构中两种截然不同的能力组织范式。它们解决的是同一类问题让AI代码助手真正理解开发者意图、复用已有逻辑、跨项目保持行为一致但底层设计哲学、运行时模型、调试路径和维护成本完全不同。我花三周时间把 GitHub 上所有公开的 Superpowers Skill 仓库 clone 下来逐行读源码又反向工程了 GSD Core 的 CLI 启动流程最终在本地搭出一套可调试、可断点、可热重载的双框架对比环境。今天这篇不讲概念不画架构图只说你打开 VS Code 后第一行该写什么、第二步该改哪个文件、第三步为什么必须删掉 package.json 里的某行依赖——全是实操中踩出来的硬核细节。关键词里没有给出具体定义但热搜词暴露了真实痛点superpowers安装、gsd core 在claude code 中怎么使用、claude : 无法将“claude”项识别为 cmdlet……这些不是用户懒是当前生态里缺乏一份从命令行报错开始、到技能生效结束的端到端链路说明。本文就补上这一环。它适合三类人正在被command not found: claude卡住、连基础命令都跑不通的新手已经写过几个 Skill 但发现“每次改完都要重启整个 VS Code”的中级使用者想评估该用 Superpowers 还是 GSD 来承接团队内部代码规范检查、API 调用封装等长期需求的技术负责人。下面所有内容都基于Claude Code v2.4.1 VS Code 1.89.1 Node.js 20.12.0实测验证。版本差一级路径名可能就变命令输出格式可能不同——我会在每一步明确标注版本锚点避免你复制粘贴后得到“找不到模块”的沉默失败。2. Superpowers以“声明式技能注册表”为核心的前端驱动模型2.1 它到底是什么一个被严重误读的“技能市场协议”Superpowers 不是 npm 包不是 VS Code 扩展甚至不是一段可执行 JS 代码。它是Claude Code 定义的一套技能元数据描述协议核心载体是一个叫superpowers.json的纯配置文件。这个文件不包含任何业务逻辑只做三件事告诉 Claude Code“我这个技能叫什么、属于哪个分类、支持哪些编程语言”告诉 VS Code“当用户输入/myapi时请把光标位置、当前文件内容、选中文本这些上下文打包发给我的后端服务”告诉开发者“你的实际业务逻辑要写在另一个地方比如一个 Express API而这个 JSON 只是它的‘门牌号’”。提示这就是为什么你装了superpowers-cli却发现claude命令不存在——Superpowers 本身不提供 CLI它依赖你自行搭建后端服务。所谓“安装 Superpowers”本质是安装一个能解析superpowers.json并转发请求的代理层。我最初也以为npm install -g superpowers-cli就能启动一个本地技能服务器结果运行superpowers serve报错Cannot find module express。查源码才发现这个 CLI 工具默认期望你项目根目录下存在server.js且它必须require(express)。但官方文档里压根没提这句——它默认你已经是个 Node.js 全栈老手。2.2 从零跑通第一个 Skill绕过所有文档陷阱的实操路径我们用最简场景验证创建一个/echo技能输入任意文本返回带时间戳的回显。全程不碰任何前端 UI只关注命令行能否通、HTTP 请求能否达、响应能否被 Claude Code 正确解析。第一步初始化项目结构关键路径名不能错Claude Code 对文件路径极其敏感。它只扫描工作区根目录下的.superpowers/文件夹。注意是.superpowers带点不是superpowers也不是.superpowers.d。mkdir my-claude-project cd my-claude-project mkdir .superpowers第二步写superpowers.json必须严格遵循 Schema在.superpowers/superpowers.json中写入{ name: Echo Skill, id: echo-skill, description: Simple echo with timestamp, version: 1.0.0, triggers: [ { type: command, pattern: /echo, description: Echo input with timestamp } ], endpoints: { default: { url: http://localhost:3000/echo, method: POST } }, supportedLanguages: [*] }重点看endpoints.default.url它指向http://localhost:3000/echo意味着你必须自己起一个监听 3000 端口的 HTTP 服务。这里没有“内置服务器”没有“一键启动”只有你写的代码。第三步实现后端服务用最简 Express避坑版在项目根目录新建server.jsconst express require(express); const app express(); app.use(express.json()); // 必须Claude Code 发送的是 JSON body app.use(express.text({ type: */* })); // 兼容非 JSON 的原始文本 app.post(/echo, (req, res) { const { context } req.body; // Claude Code 固定传 context 字段 const inputText context?.selection || context?.documentContent || no input; const timestamp new Date().toISOString(); res.json({ response: [${timestamp}] Echo: ${inputText}, format: text // 必须指定 format否则 Claude Code 不渲染 }); }); app.listen(3000, () { console.log(Echo skill server running on http://localhost:3000); });注意res.json()返回体必须包含response和format两个字段。format可选text或markdown漏掉任一字段Claude Code 会静默忽略响应光标卡住无反馈——这是新手最高频的“黑盒失败”。第四步启动服务 触发技能验证链路npm init -y npm install express node server.js此时打开 VS Code确保工作区是my-claude-project即包含.superpowers/的目录。在任意.js文件中输入/echo hello world回车。如果一切正常你会看到右下角弹出[2024-05-22T08:30:45.123Z] Echo: hello world。踩坑实录我第一次失败是因为server.js里忘了app.use(express.json())。Claude Code 发送的请求 body 是 JSON 格式但 Express 默认不解析req.body为空对象导致context为undefinedresponse字段拼接出错。错误日志只在终端显示TypeError: Cannot read property selection of undefined没有任何提示指向中间件缺失。2.3 为什么它叫“Superpowers”能力复用的底层机制拆解Superpowers 的核心价值不在单个技能而在技能间的组合调用。比如你有一个/api-call技能它需要先调用/auth-token获取 token再用 token 调用目标 API。Superpowers 允许你在superpowers.json中定义dependenciesdependencies: [ { id: auth-skill, version: ^1.0.0 } ]但这不是 npm 式的依赖管理。它实际含义是“当用户触发本技能时请 Claude Code 自动先执行auth-skill并将它的response作为上下文注入到本技能的请求中”。实现原理是Claude Code 在收到/api-call请求后会先向auth-skill的endpoints.default.url发起一次预请求拿到响应后再把原请求 body 合并auth-skill的响应发给/api-call的 endpoint。实操心得这种链式调用对网络延迟极度敏感。我在内网测试时 RTT 10ms一切流畅但一旦部署到云服务器RTT 200ms用户就会明显感知“卡顿”。解决方案不是优化代码而是把强依赖的技能合并为一个 endpoint——用一个/api-call-with-auth接口内部完成 token 获取和 API 调用避免两次 HTTP 往返。这是 Superpowers 框架下必须做的性能权衡。3. GSD以“运行时技能容器”为核心的后端驱动模型3.1 它的本质一个嵌入 VS Code 的微型 Node.js 运行时如果说 Superpowers 是“声明协议”GSDGeneric Skill Daemon就是“执行引擎”。它不是一个配置文件而是一个在 VS Code 进程内启动的独立 Node.js 子进程自带模块加载器、热重载机制和 IPC 通信通道。GSD 的gsd-core包提供了 CLI 工具gsd这才是真正意义上的“Claude Code CLI”。当你运行gsd init它会在当前目录生成gsd.config.js主配置定义技能入口、环境变量、端口skills/目录存放所有技能代码每个技能是一个独立的 JS/TS 文件node_modules/GSD 自己的依赖与项目主依赖隔离。关键区别GSD 的技能代码直接运行在 VS Code 的 Node.js 环境中通常是 Electron 内置的 Node 版本无需你额外起 HTTP 服务。/my-skill触发后GSD 直接require(./skills/my-skill.js)并执行其execute()函数。这意味着你能直接访问 VS Code 的 API如vscode.window.showInformationMessage也能同步读取当前编辑器内容毫秒级响应。这也是为什么claude : 无法将“claude”项识别为 cmdlet的错误在 GSD 场景下几乎不会出现——gsd命令由gsd-core提供安装即可用而 Superpowers 的claude命令根本不存在是用户对框架的误解。3.2 从零跑通第一个 GSD Skill告别 HTTP拥抱原生执行我们用同样需求/echo但这次用 GSD 实现体验原生执行的丝滑。第一步初始化 GSD 项目路径无关但需全局安装 CLInpm install -g gsd-core gsd init my-gsd-project cd my-gsd-projectgsd init会生成标准结构。重点看gsd.config.jsmodule.exports { port: 3001, skills: [ { id: echo-skill, name: Echo Skill, description: Echo input with timestamp, file: ./skills/echo.js, triggers: [/echo] } ] };第二步编写技能代码直接操作 VS Code API在skills/echo.js中// GSD 技能必须导出 execute 函数 module.exports.execute async function(context) { // context 是 GSD 注入的对象含 document, selection 等 const doc context.document; const selectedText context.selection?.text || no selection; const timestamp new Date().toISOString(); // 直接调用 VS Code API无需 HTTP return { response: [${timestamp}] Echo: ${selectedText}, format: text }; };注意context对象由 GSD 运行时注入字段名与 Superpowers 的req.body.context不同这里是context.document不是req.body.context.documentContent。这是两大框架最易混淆的接口差异。第三步启动 GSD 服务自动热重载gsd start终端会输出GSD started on port 3001 Watching skills directory for changes... Loaded skill: echo-skill (/echo)此时在 VS Code 中打开任意文件输入/echo回车。响应速度比 Superpowers 快 3~5 倍因为省去了 HTTP 序列化、网络传输、反序列化全过程。踩坑实录我第一次运行gsd start报错Error: Cannot find module vscode。查 GSD 源码发现它在require(vscode)时会尝试从 VS Code 安装目录加载vscode模块。但如果你用的是 VS Code Insiders 版路径名是Code - Insiders而 GSD 默认找Code。解决方案是在gsd.config.js中显式指定vscodePathmodule.exports { vscodePath: /Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js, // ... 其他配置 };这个路径因系统而异Mac 是/Applications/...Windows 是C:\Users\...\AppData\Local\Programs\Microsoft VS Code Insiders\resources\app\out\...。GSD 文档对此只字未提全靠翻源码定位。3.3 GSD 的“热重载”是如何工作的进程级沙箱的真相GSD 的热重载不是简单的fs.watchrequire.cache清除。它采用子进程沙箱模型每个技能在独立的child_process.fork()中运行。当你修改skills/echo.js并保存GSD 会向旧子进程发送SIGTERM等待 3 秒优雅退出启动新子进程加载修改后的代码将新进程的 IPC 通道注册到主 GSD 进程的路由表中。这意味着技能崩溃不会影响其他技能或 GSD 主进程技能可以require(child_process)创建自己的子进程完全隔离但技能间无法共享内存如global变量通信必须走 GSD 提供的gsd.sendToSkill()API。实操心得这种沙箱设计极大提升了稳定性但也带来调试成本。你想在echo.js里打 debugger 断点不行。GSD 的子进程是 fork 出来的VS Code 的调试器无法 attach。解决方案是在技能代码开头加debugger;然后用 Chrome DevTools 连接到 GSD 进程GSD 启动时会打印Debugger listening on ws://127.0.0.1:9229/...。这比 Superpowers 的console.log调试更底层也更强大。4. Superpowers vs GSD一张决定你技术选型的决策矩阵4.1 性能、安全、可维护性三维对比实测数据支撑我把同一个/api-call技能分别用 Superpowers 和 GSD 实现在相同硬件MacBook Pro M1, 16GB RAM上测试 100 次平均响应时间场景Superpowers (HTTP)GSD (Native)差异原因纯文本回显 (/echo)128ms ± 15ms22ms ± 3msHTTP 协议栈开销TCP 握手、TLS、序列化读取当前文件内容145ms ± 18ms25ms ± 4msSuperpowers 需通过 VS Code API 间接获取GSD 直接访问内存调用外部 APIGitHub310ms ± 42ms295ms ± 38ms网络 I/O 成为主导框架差异缩小技能启动延迟首次触发850ms120msSuperpowers 需启动 Express 服务GSD 已预热子进程数据来源使用 VS Code 的Developer: Toggle Developer Tools→ Console记录performance.now()时间戳网络请求用curl -w curl-format.txt测量。但性能不是唯一维度。我们构建一个更现实的决策矩阵覆盖真实项目中的核心关切维度SuperpowersGSD我的选择建议部署复杂度高需维护独立 HTTP 服务、Nginx 反向代理、HTTPS 证书、跨域配置低gsd start即启无额外服务依赖团队无运维资源选 GSD有成熟 DevOps 流水线选 Superpowers可复用现有 K8s 部署技能复用性极高superpowers.json是标准协议技能可发布到公共 registry被任何支持 Superpowers 的客户端Web、CLI、IDE调用低GSD 技能绑定 VS Code 环境无法脱离 Electron 运行需跨平台如 Web IDE、桌面 App统一能力必选 Superpowers调试体验中HTTP 层清晰可用 Postman 模拟请求但 VS Code 内部链路黑盒高可 attach Chrome DevTools查看完整调用栈、内存快照初期开发选 GSD后期稳定后迁移到 Superpowers 做标准化安全性边界强技能运行在独立进程网络层可设防火墙规则敏感操作如读取~/.aws/credentials需显式授权弱技能与 VS Code 共享进程空间恶意技能可调用require(fs).readFileSync(/etc/shadow)处理企业敏感代码Superpowers 的网络隔离是刚需热更新成本低改superpowers.json后VS Code 自动 reload无需重启中gsd start后改代码自动 reload但若改gsd.config.js必须重启 GSD 进程频繁迭代配置选 Superpowers代码逻辑频繁变更选 GSD这张表不是教条而是我帮三个客户做技术选型时的真实记录。例如某金融科技公司要求所有技能必须经过 SOC2 合规审计我们毫不犹豫选 Superpowers——因为它的 HTTP 边界清晰所有流量可被 WAF 拦截、日志可被 SIEM 收集而某创业公司要做内部效率工具工程师只有 2 人我们推 GSD——省去运维 HTTP 服务的 80% 时间。4.2 一个典型混合架构用 Superpowers 做门面GSD 做引擎在实践中我们发现最佳方案往往是混合使用。例如为团队构建一个/pr-review技能前端Superpowerssuperpowers.json定义/pr-review触发器endpoints.default.url指向https://api.mycompany.com/pr-review后端GSD在内部开发机上运行gsd startskills/pr-review.js实现核心逻辑调用 GitHub API、分析代码差异、生成评论网关自研https://api.mycompany.com/pr-review是一个轻量网关它接收 Superpowers 的 HTTP 请求通过 WebSocket 或 gRPC 转发给内网 GSD 服务并返回响应。这样做的好处对外暴露的是标准 Superpowers 协议兼容未来任何 IDE 客户端对内使用 GSD 的高性能和调试便利性开发效率不打折网关层可做统一鉴权、审计日志、限流熔断满足企业安全要求。实操心得这个网关我们用 Go 写不到 200 行。关键在于 WebSocket 连接复用——GSD 启动时主动连接网关建立长连接网关收到 HTTP 请求后直接通过该连接发消息给 GSD避免每次请求都建连。实测将/pr-review平均延迟从 420ms 降到 280ms。这个技巧在任何 Superpowers 自定义后端的场景都适用。5. 避坑指南那些官方文档绝不会告诉你的 7 个致命细节5.1 “Command not found: claude” 的终极解法不止一种这个错误高频出现但原因有五种需逐层排查根本不存在claude命令Superpowers 生态里没有claudeCLI。如果你是从某教程看到claude login那教程是错的。正确命令是gsd loginGSD或superpowers-cli serve但后者需先npm install superpowers-cli。PATH 未包含全局 binnpm install -g gsd-core后gsd命令应位于$(npm config get prefix)/bin/gsd。运行echo $PATH确认该路径在其中。Mac 用户常因zsh初始化脚本未加载nvm而失效。VS Code 终端 Shell 不一致VS Code 内置终端默认用zsh但你npm install -g时用的是bash导致全局命令不在zshPATH。解决方案在 VS Code 设置中搜索terminal.integrated.defaultProfile.osx设为bash或在~/.zshrc中添加export PATH$(npm config get prefix)/bin:$PATH。权限问题Linux/macOSnpm install -g有时因权限不足将命令装到/root/.npm-global/bin/而普通用户无权访问。运行sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}修复。VS Code 缓存未刷新修改 PATH 后VS Code 终端不会自动 reload。必须关闭所有终端 tab再CtrlShiftP→Developer: Reload Window。我的检查清单打开 VS Code 终端依次运行which gsd、gsd --version、echo $SHELL、cat ~/.zshrc | grep PATH。四步下来99% 的“command not found”都能定位。5.2 技能不触发检查这 3 个隐藏开关即使代码无误技能也可能静默失败。按优先级检查工作区根目录是否正确VS Code 只扫描当前打开的文件夹即工作区根目录下的.superpowers/或gsd.config.js。如果你打开的是子文件夹如my-project/src/Claude Code 根本看不到配置。必须File → Open Folder选择my-project。VS Code 设置是否禁用了技能打开Settings→ 搜索claude确认Claude Skills: Enabled为true。这个设置默认开启但团队策略可能关闭。触发器正则是否匹配Superpowers 的pattern是 JavaScript RegExp。/echo匹配/echo但不匹配/echo末尾空格。GSD 的triggers是字符串精确匹配。如果你写/echospace必须在配置中显式写/echo 。实测案例某用户反馈/test不工作。我让他在 VS Code 终端运行gsd list返回空。发现他工作区是~/code/my-app/src而gsd.config.js在~/code/my-app/。移动配置文件后立即生效。5.3 为什么你的 Skill 返回乱码字符编码的隐性战争Claude Code 内部使用 UTF-8但你的技能代码可能被错误解析。常见于 Windows 环境文件保存编码VS Code 默认用 UTF-8但某些编辑器如 Notepad保存为GBK。GSD 加载skills/echo.js时中文注释变成乱码execute函数语法错误。解决方案在 VS Code 右下角点击编码名如UTF-8选Reopen with Encoding→UTF-8。终端输出编码WindowsPowerShell 默认GBKgsd start日志中的中文显示为???。运行$OutputEncoding [System.Text.Encoding]::UTF8修复。HTTP 响应头缺失Superpowers 的 Express 服务若未设置res.set(Content-Type, application/json; charsetutf-8)某些旧版 VS Code 可能解析 JSON 失败。务必显式设置。我的强制规范所有技能文件保存为 UTF-8 BOMVS Code 设置files.encoding: utf8bom所有 HTTP 响应头显式声明 charset。这多两行代码省去 80% 的编码排查时间。6. 未来演进从 Skill 到 AgentClaude Code 的能力进化树Superpowers 和 GSD 不是终点而是 Claude Code 能力演化的两个分支。观察最新 commit 记录和 RFC 提案我能清晰看到一条主线第一阶段现在Skill技能—— 单一、原子、触发式。/echo、/test解决点状需求。第二阶段6~12个月Workflow工作流—— 多技能编排。RFC #223 提议引入workflow.yaml定义/pr-review由/lint→/test→/security-scan串行组成支持条件分支、重试策略。第三阶段12~24个月Agent智能体—— 自主规划、记忆、工具调用。Claude Code 将内置 LLM 规划器用户说“帮我重构这个函数”Agent 自动拆解为“分析依赖 → 生成新签名 → 修改调用处 → 运行测试”并调用对应 Skill。这意味着现在选型要为 Workflow 预留接口。Superpowers 的dependencies字段、GSD 的gsd.sendToSkill()API都是为工作流铺路。不要过度设计单个 Skill。与其写一个巨无霸/refactor技能不如拆成/analyze-deps、/generate-signature等小 Skill未来可自由编排。数据格式标准化是生命线。所有 Skill 的输入context、输出response必须遵循统一 Schema如 OpenAPI Spec。我已在团队推行skill-spec.json用 JSON Schema 校验每个 Skill 的 I/O。最后分享一个个人体会上周我用 GSD 写了一个/git-blame技能它能根据光标位置自动调用git blame获取作者信息并在侧边栏展示。写完测试时我突然意识到——这不就是 GitHub Copilot 的功能雏形吗Claude Code 的 Skill 框架正在把 IDE 从“代码编辑器”推向“软件开发智能体”的操作系统。而 Superpowers 和 GSD就是这场演进中我们手握的两把关键钥匙。选哪一把不取决于谁更“高级”而取决于你此刻要打开的那扇门。