
最近刷各种平台“硬控”“拿捏”“松弛感”这些热词反复出现在时间线上。初看是网络玩梗细想其实背后都是同一种渴望对节奏的掌控。我这种每天要在编辑器、文档、聊天窗口之间来回切换的人体会尤其深。与其抱怨工具太碎、事情太杂不如自己做一套顺手的工具链把重复动作全部自动化。于是就有了我正在维护的开源项目Superpowers。它不是一个传统意义上大而全的软件更像一套可以随时扩充的“能力包”你告诉它想干什么它帮你拆步骤、调模型、跑脚本最后把结果放到你顺手的位置。这篇内容会完整拆解Superpowers的设计思路、核心模块、部署流程和我实际踩过的坑适合那些想用AI改造自己工作流又不想被复杂框架绑死的朋友。1. 项目整体设计与思路拆解1.1 从网络热词到真实需求Superpowers到底解决什么问题如果你认真拆解当下的热词会发现它们全都在描述“掌控感”。“硬控”表面上是指被某个内容牢牢吸引但真正让人痛苦的“硬控”是被琐碎工作拖着走一会儿切窗口复制表格一会儿回头黏贴图片一会儿又去找上个版本的文档。这些动作不复杂但频繁到足以把一天的时间切成碎片。而“拿捏”这个词说的是对一件事有完全的控制能力工具能不能被你一句命令调起来、结果符不符合预期本质上就是“拿捏”与“被拿捏”的区别。“松弛感”更直接它不来自什么都不做而是来自你非常确信这一步该自动化的已经自动化该备份的已经备份哪怕出问题也能一键回滚。这些情绪落到开发和内容创作场景里逐步变成三组真实痛点。第一重复劳动太多。周报、日志整理、格式转换、截图打码、文案改写这类工作毫无创造性但每天都要占用大量时间。第二工具碎片化。每个人的电脑上可能装了十几个效率工具每个工具都有自己的快捷键和保存格式切换成本极高。第三AI能力强但调用啰嗦。你手里已经有大模型了但每次都要手动复制粘贴、写提示词、调整格式甚至在不同平台间来回搬运。Superpowers的出发点很简单把这些高频工作压缩成一条命令。它不打算取代任何现有工具而是成为那个“调度大脑”——你说一句“帮我写周报”它自己去拉Git提交记录、调用模型总结、生成Markdown文件、放到指定目录最后再通知你。整个过程你可以盯着它跑也可以让它完成后自动汇报。1.2 为什么不做大而全的App而是一组可组合的能力包早期规划Superpowers时我差点把它做成一个“超级应用”所有功能全塞进去一个界面搞定一切。后来很快放弃了因为这等于重新发明一套操作系统学习成本和维护成本都会失控。我最终采用的结构是“三明治式”的交互层通过命令行、快捷键、Web面板或IM机器人入口触达负责把你“随意的话”变成结构化指令。能力层一组相互独立的技能包Skill Pack每个技能包只解决一类问题比如文本处理、代码搜索、文件整理、信息收集。底座层本地脚本执行引擎、AI模型网关、记忆存储解决“怎么跑”“谁来理解”“怎么记住”的公共问题。这种设计最大的好处是“组合优于继承”。一个“超能力”不需要自己从头实现所有功能而是把多个技能包拼起来。比如写周报这个能力底层可能由三四个技能包协作Git提交记录读取包负责收集素材AI总结包负责提炼内容Markdown生成包负责排版文件输出包负责存档。以后任何一环想升级只需要替换对应的包其他部分不受影响。技术栈选了TypeScript和Node.js原因也很现实。第一生态足够成熟各种API和SDK拿来即用第二类型系统让技能包之间的接口非常明确新手也能安全地贡献新包第三跨平台Windows、macOS、Linux都能跑。相比之下Python虽然数据处理方便但分发和打包在桌面场景下还是不如Node.js顺手。2. 核心细节解析与实操要点2.1 六大核心能力模块Superpowers当前内置了六个核心模块。每个模块对应一类常见动作它们之间不耦合但可以自由组合。模块作用范围典型命令示例关键参数文本处理改写、摘要、翻译、格式统一sup 把这段文字改成口语化风格--style casual、--lang zh-CN代码助手解释代码、补注释、生成测试sup 给utils.ts补上类型注解--files src/utils.ts、--dry-run信息收集读取文件、抓网页、查提交记录sup 收集本周所有完成的Task--since 2025-06-01、--source git任务编排串联多个动作自动执行流程sup 写周报并发到存档目录--steps collect,summarize,write记忆管理记住偏好、路径、格式习惯sup 记住周报默认用简体中文表格--scope workspace快捷交互把命令绑定到全局快捷键/语音sup 复制当前选中的文件路径--hotkey ctrlshiftp文本处理是所有模块里使用频率最高的它本质上是一个“提示词模板库 后处理管道”。你输入的原始文本会先经过清洗然后拼接进事先写好的提示词模板模型返回结果后还会经过一次格式校验比如检查是否满足字数和标题格式要求。代码助手模块的特别之处在于支持--dry-run。开启后它只把需要修改的内容生成预览不会直接写文件。这个参数对我这种有“改完就后悔”习惯的人来说是救命稻草。信息收集模块是很多自动化的地基。它内置了Git操作、目录扫描、常见网页内容抓取和RSS解析。任务编排模块则像一个“乐高拼板”你可以用配置文件定义串联顺序每一步的输入输出都遵循统一的数据结构所以不同模块之间的衔接非常自然。2.2 命令解析用“动作对象约束”拆解意图Superpowers的命令解析没有一开始就上复杂的NLP模型而是采用了一套很务实的规则策略。核心格式是“动作对象约束”三段式。动作是你要做什么对象是作用在什么东西上约束是附加条件。例如sup 把这段文字缩写为三个要点 --style concise“缩写”是动作“这段文字”是对象“三个要点”是约束--style concise是更细的格式控制。解析器会先匹配内置技能包的关键词如果匹配不到再调用AI模型做意图路由。这种方式比全AI解析更快、更省token而且本地规则覆盖了90%以上的常见场景。对于不确定的命令Superpowers会进入“澄清模式”。它会把可能的动作选项列出来让你选择而不是直接抛出一个乱七八糟的结果。这一点非常影响日常使用体验宁可多问一次也不要做错一步。我还给命令解析器设计了“组合指令”支持。你用符号能串联多个命令比如sup 总结一下最近的会议纪要 sup 把总结转为待办事项前一条命令的输出会作为后一条命令的输入。这里的数据格式是统一的JSON结构所以链条可以持续延长。组合指令的意义在于你不用为了一个新场景专门写新技能包很多临时需求用这种方式就能解决。2.3 记忆与上下文管理AI工具使用中最容易忽略的就是记忆。如果每次命令都是“一次性对话”那么同一个用户必须反复强调自己的偏好我喜欢竖版封面、我喜欢短句、我习惯把文件保存到某个固定目录。Superpowers把记忆分成两层。短期记忆对应当前对话窗口保存的是连续几条命令的上下文比如你在同一轮里先让它“总结文档”再让它“翻译总结”它会知道翻译的对象是刚才那份总结。长期记忆则落在本地文件里以JSON的形式记录用户的格式偏好、常用路径、历史习惯。长期记忆不是简单地存储对话流水账而是定期抽取关键信息例如“用户在小红书场景要求句子长度不超过20字”“用户的技术文档默认使用中文」「用户喜欢在术语后面加英文注释」。上下文管理也不是把全部历史一股脑都塞给模型否则很快就触达token上限。Superpowers默认采用滑动窗口加自动摘要最近的对话完整保留更早的内容压缩成摘要再结合关键词检索找回具体细节。你可以通过配置文件调这三个参数{ context: { maxContextTokens: 8000, // 单次请求最大上下文token数 autoCompress: true, // 是否启用自动摘要压缩 summaryTriggerTokens: 6000 // 超过这个值就触发压缩 } }这套机制让连续工作流变得自然很多。比如你上午让它“整理项目资料”下午再问“根据之前的整理写一份结项汇报”它能直接引用上午已经整理过的结论而不是重新读一遍全量文件。3. 实操过程从零搭建Superpowers工作流3.1 环境准备与安装在开始之前你需要准备好Node.js 18以上版本和Git环境。Node.js版本过低会导致很多依赖安装失败建议直接用最新的LTS版。安装Superpowers的命令很简单npm install -g superpowers/cli sup initsup init会做三件事创建一个默认配置文件、生成技能包目录结构、检查本机是否有可用的AI模型服务。如果检测不到模型服务它会提示你在配置里手动填写。初始化完成后目录结构大概是这样的~/.superpowers/ ├── config.json # 全局配置 ├── skills/ # 自定义技能包目录 ├── memory/ # 长期记忆存储 ├── logs/ # 运行日志 └── templates/ # 提示词模板我建议从第一步开始就把配置目录纳入版本管理这样以后调整参数出了问题时可以快速回滚。尤其config.json里面有一些模型参数和安全策略改坏了影响面很大。3.2 配置第一个“超能力”Superpowers的所有自定义能力都叫技能包。一个技能包本质上就是一个文件夹里面包含一个描述文件和一个处理脚本。最简单的技能包可以只做一件事把输入的文本转成指定的社交平台文案风格。在skills/social-writer/skill.yaml里定义name: social-writer description: 把长文转换为社交平台卡片文案 version: 1.0.0 arguments: - name: text required: true description: 原始长文内容 - name: platform required: false default: wechat description: 目标平台可选 wechat/xiaohongshu/weibo然后在同目录下放一个run.ts脚本里面定义如何处理输入。Superpowers会读取这个技能包把命令行参数映射到脚本的输入脚本返回的结果再经过格式化输出给用户。配置完成后通过以下命令让它生效sup skill install ./skills/social-writer之后就能直接用了sup 把下面这段文章改成小红书风格标题要三个emoji \ --skill social-writer \ --platform xiaohongshu这里我没有直接调用内置的文本处理模块而是指定了--skill参数让路由走我们自己定义的技能包。这样你可以非常自由地定制自己的专属工作流而不是局限于内置功能。3.3 接入AI模型网关Superpowers本身不内置模型它通过“模型网关”统一对接各种大模型API。这样做的好处是上层命令不需要关心底层跑的是云端模型还是本地模型只需要指定一个模型别名。在config.json中可以同时配置多个模型{ models: { default: { provider: openai-compatible, baseURL: https://api.example.com/v1, apiKey: ${SUPERPOWERS_API_KEY}, model: deepseek-chat, temperature: 0.7 }, local: { provider: ollama, baseURL: http://localhost:11434/v1, model: qwen2.5:7b } } }baseURL使用环境变量引用而不是直接把密钥写在配置里。如果你担心安全问题可以在终端设置环境变量或者在.env文件里管理。本地模型是很好的补充。日常简单任务比如格式化文本、提取关键词本地模型响应速度快、不消耗云端配额。复杂任务比如长文总结、代码生成再切到云端模型。管道和路由都支持按任务类型指定模型非常灵活。3.4 实战把一篇长文变成社交平台卡片文案我们来做一次完整实战目标是把我刚写完的一篇长文自动转成适合发布的社交平台卡片文案包括标题、三行摘要和标签。先准备好原始文章文件article.md然后运行sup 根据 article.md 生成社交卡片文案标题要吸引人摘要不超过三行标签五个 \ --skill social-writer \ --file ./article.md \ --output ./social-card.json执行过程中Superpowers会先读取文件内容把它交给文本处理模块中的提取器提炼出三个核心观点然后调用模型生成标题候选通过一个“吸引力评分”规则排序最后把摘要和标签一起写入social-card.json。生成的JSON大致长这样{ titles: [ 别再被琐事硬控了我做了个自动干活的工具箱, 把重复劳动交给Superpowers我腾出了两小时, 这可能是你今年最值得装的效率工具 ], summary: [ 重复劳动不可怕可怕的是每天都在做, 用一句话命令就能让AI帮你自动整理、总结和输出, Superpowers把掌控感还给你 ], tags: [效率工具, AI自动化, Superpowers, 工作流, 热词] }整个过程除了最开始敲这条命令我没有手动复制粘贴、没有来回切换窗口。这就是Superpowers想带来的体验你只描述结果剩下的交给能力包去完成。4. 常见问题与排查技巧实录4.1 模型输出不稳定、格式跑偏怎么办这个是我使用频率最高的一类问题。模型经常“灵机一动”给你返回带小标题、带解释、甚至带一堆客套话的内容完全不符合预设格式。后来我总结出三个干预层次。第一层是提示词约束。在技能包模板里加上强指令“只输出JSON不要任何解释不要Markdown代码块”。很多模型吃这一套。第二层是后处理校验。如果输出不符合预期格式Superpowers会启动一个修正请求把当前输出和期望格式一起交给模型让它自己改正。第三层是加few-shot示例也就是在提示词里放一个“标准输入标准输出”的例子让模型照着写。如果依然不稳定我建议开启output.validation配置严格模式下不满足JSON Schema的结果会被直接丢弃并重试。4.2 命令卡住或超时怎么定位命令跑了一半不动了是最让人头疼的情况。Superpowers提供了三层排查手段。第一先看日志。执行sup logs查看最近一个任务的所有日志里面会详细记录每一步的耗时和退出码。第二区分瓶颈。如果卡在“模型调用”阶段通常是API响应慢或参数配置了过大的maxTokens如果卡在“本地脚本”阶段大概率是脚本读取了某个大文件或者正在等一个外部命令执行。第三设计兜底策略。给每次模型请求设置超时时间超过后自动重试一次仍失败就跳过当前步骤并进入降级模式比如改用本地小模型完成任务。常用参数{ request: { timeoutMS: 30000, maxRetries: 2, fallbackModel: local } }4.3 上下文过长被截断当你让Superpowers总结一本电子书或一个超大代码目录时经常会遇到上下文超限。问题不在模型不够聪明而在于输入太长。我的处理思路是“缩小对象”和“分层总结”。在命令里明确指定文件范围、章节或者最近的提交记录避免一股脑全塞进去。对于必须处理的大文件Superpowers会自动启用分块总结先把文件切成适合模型阅读的片段分别总结后再合并成最终结果。这个功能需要把context.autoCompress打开并且设置合理的分块大小。如果还不够用可以接入本地向量库做检索增强生成。也就是把文档切成块、向量化存起来每次只检索与任务最相关的几块。Superpowers的memory模块预留了向量存储接口不需要自己搭全套知识库。sup 基于 ./docs 找出与 API 设计相关的段落生成一份优化建议 \ --source ./docs \ --retrieval vector4.4 安全边界设置自动化工具越强大就越要注意边界。Superpowers默认不会自动执行危险操作。它有几个内置安全策略。API密钥不会出现在日志里输出时统一用掩码代替。文件写入需要明确的路径参数并且默认开启“只读”模式只有命令里带有--write才会真正修改文件。外部命令执行也采用白名单策略比如git操作只允许指定的子命令。高危险操作还会要求二次确认类似--force这样的参数必须在交互式终端里手动输入“yes”才会继续。所有这些策略都可以在config.json里的safety节点中调整。建议不要为了方便全部关掉尤其是当你的工作目录里有很多重要文件时。安全这个事宁可损失一点便利也不要赌“我不会手滑”。5. 如何把Superpowers嵌入日常工具链5.1 与VS Code、浏览器、快捷指令联动Superpowers虽然本身就是命令行工具但日常使用中很少有人会每次都打开终端敲命令。更顺手的用法是把它绑定到各种入口。在VS Code里你可以把常用命令配置成任务通过快捷键触发。比如把“格式化当前文件”映射到CtrlShiftF它会直接调用Superpowers的代码处理技能包省去自己写一遍VsCode格式化规则的麻烦。在macOS/iOS的快捷指令里也可以通过“运行Shell脚本”把一段文本发送给Superpowers然后把返回结果粘贴到任意App里。浏览器方面则可以用一个简单的书签脚本把选中文本传递给本地服务端口实现“选中即处理”。配合这些入口之后Superpowers就不再是一个冷冰冰的CLI而更像是系统中的“系统”你按一个快捷键它就能横跨多个应用帮你干活。5.2 自己动手写一个技能包如果你想贡献新的能力步骤也很清晰。先参考已有技能包的结构在skills目录下新建一个文件夹写一份skill.yaml描述文件再放一个处理脚本。脚本可以是TypeScript或JavaScript也可以直接调用本机的命令行程序。最后运行sup skill install即可。关键是描述文件里的name和description要写清楚因为解析器会通过这两项做意图路由。比如name: pdf-merge description: 合并当前目录下所有PDF文件并按文件名排序输出这样一个技能包就可以被自然语言命令触发了sup 把当前目录下的PDF合并成一个文件 --skill pdf-merge开发技能包的过程中我发现最值得投入的是“输入输出格式”设计。如果每个技能包都能返回统一的结构化数据那么组合能力会呈指数级上升。所以哪怕是一个很简单的“图片压缩”技能也建议返回压缩前大小、压缩后大小、耗时这些参数方便后续流程判断是否满意。个人使用体会我实际把Superpowers用进日常工作已经接近两个月。最大的变化不是“产出数量”暴涨而是“状态切换损耗”明显变小了。以前从写代码切到写周报至少要花五分钟找回上下文现在一条命令把材料、总结、格式全搞定我只需要负责判断和微调。这种“掌控感”才是真正的松弛感也才是网络热词背后大家真正想要的东西。如果你也想试试我建议不要一上来就搭一套特别宏大的工作流去找一个你每天都会做、又特别讨厌做的重复动作把它先变成一条Superpowers命令。等这条命令顺手了再去加第二个、第三个。工具是自己长出来的不是一步到位买回来的。