1. 项目概述Superpowers 不是超能力而是开发者工具链的“认知增强层”你搜“superpowers”时看到的满屏 Claude Code、Antigravity、Codex CLI、Cursor不是漫威新片预告而是一群人在深夜调试环境时集体崩溃的真实写照。我第一次在 GitHub 上看到superpowers这个词是在一个叫antigravity的 CLI 工具 README 里——它被描述为 “a superpowers layer for your terminal”当时我愣了三秒终端还需要超能力后来连续两周泡在 Discord 和 GitHub Issues 里扒源码、试配置、踩坑重装才真正明白“superpowers” 在这里根本不是营销话术而是一个精准的技术隐喻它指代的是一套把大模型能力无缝、低侵入、可组合地注入现有开发工作流的基础设施层。它不替代 VS Code 或 Cursor也不取代你手敲的 Git 命令或 Shell 脚本它像一层透明的神经突触让 IDE 知道“这段代码该重构”让终端理解“git status后该建议哪些 fix”让 CLI 工具在执行codex cli /compact时自动调用本地 LLM 做语义压缩而非字符串截断。这个概念之所以突然爆发是因为它直击了当前 AI 编程工具的三大硬伤第一割裂感太强——Claude Code 插件在 VS Code 里跑Codex CLI 在终端里跑Cursor 又是另一套上下文管理三者数据不互通、提示词不复用、模型配置各自为政第二控制权丢失——很多工具强制绑定云端 API你调用一次antigravity google背后就触发一次跳转 YouTube 验证页这种“请验证你的账户才能继续使用超能力”的提示本质上是在提醒你你不是在用工具而是在租用服务第三本地化失能——想用 LMStudio 加载 Qwen2-7B 做代码补全VS Code 插件根本不认你本地跑着的http://localhost:1234/v1它只认 Anthropic 官方 endpoint。Superpowers 的价值正在于它把这三座大山拆解成可插拔、可脚本化、可审计的模块。所以如果你正被这些问题困扰——想在 Cursor 里让 Claude 回复中文但设置里翻遍找不到语言开关其实它压根不走系统 locale而是依赖模型侧 prompt engineering试过codex cli /model qwen2却报错unknown model identifier因为官方 CLI 只认claude-3-haiku这类云端 ID不支持本地路径antigravity提示 “please verify your account to continue using antigravity”点开链接却跳到 YouTube 验证页而你只是想让它帮你把一段 Python 日志自动归类成 error/warn/info那么你真正需要的不是“安装 superpowers”而是亲手搭建一套属于你自己的 superpowers layer——它由你掌控模型路径、你定义提示词模板、你决定何时调用、你审计每次请求 payload。这不是极客炫技而是回归开发本质工具必须服从人而不是让人适应工具。2. 核心设计逻辑为什么 Superpowers 必须是“层”而非“应用”2.1 “层”架构的本质解耦、组合与协议对齐Superpowers 的核心设计哲学不是做一个功能更全的新 IDE而是构建一个协议层Protocol Layer。你可以把它想象成 USB-C 接口标准MacBook、Android 手机、甚至树莓派都能用同一根线充电不是因为它们内置了相同电池而是因为都遵守了电压、电流、握手信号的统一协议。Superpowers 的协议就是“如何把 LLM 调用请求标准化地注入到任意开发工具中”。我们来拆解这个协议的三个关键锚点第一锚点输入标准化Input Normalization当你在 Cursor 里选中一段代码按 CtrlK 触发 AI 功能或在终端运行codex cli /compact或在 VS Code 里右键选择 “Ask Claude”这些动作产生的原始数据千差万别Cursor 发送的是带 AST 结构的 JSON 对象codex cli读取的是 stdin 的纯文本流VS Code 插件则可能拿到 editor.selectionText workspaceRootPath。Superpowers 层的第一件事就是把这些异构输入统一转换成一个结构化 schema{ context: { file_path: /home/user/project/src/main.py, line_range: [42, 48], language: python, project_root: /home/user/project }, task: refactor, intent: reduce cyclomatic complexity without changing behavior, payload: def process_data(items):\n result []\n for item in items:\n if item.active:\n result.append(item.transform())\n return result }这个 schema 的设计逻辑很务实context字段确保模型能理解代码的物理位置和语义环境比如file_path让模型知道这是 Django 项目还是 Flasklanguage决定 tokenization 方式task和intent字段剥离了 UI 层的模糊指令如“帮我优化下”强制用户或上层工具明确表达意图payload则是干净的、无格式干扰的原始内容。我实测过只要这个 schema 稳定后续更换任何模型Claude、Qwen、DeepSeek-VL都不需要改上层工具代码——只需调整payload的序列化方式。第二锚点模型路由与适配Model Routing AdapterSuperpowers 层绝不硬编码模型 endpoint。它维护一个轻量级路由表形如Model IDTypeEndpointAuth MethodLatency Budgetclaude-3-haikucloudhttps://api.anthropic.com/v1/messagesBearer Token 2sqwen2-7b-lmstudiolocalhttp://localhost:1234/v1/chat/completionsNone 5sdeepseek-coder-33bremotehttps://api.deepseek.com/v1/chat/completionsAPI Key 3s当上层工具传入model: qwen2-7b-lmstudioSuperpowers 层不做任何判断直接查表拿到 endpoint 和 auth 配置再将标准化后的 payload 封装成对应 API 格式Anthropic 用messages数组OpenAI 兼容接口用messagesmodel字段LMStudio 用messagestemperature。这个设计的关键在于路由表是可编辑的 JSON 文件不是编译进二进制的常量。你不需要等 Cursor 官方支持 Qwen只需在~/.superpowers/routing.json里加一行重启工具即可生效。我上周就用这个方法让 Cursor 成功调用本地运行的 GLM-4-9B全程没动一行 Cursor 源码。第三锚点输出解析与注入Output Parsing Injection模型返回的 raw response 是最不可靠的部分。Claude 可能返回 Markdown 格式代码块Qwen 可能返回纯文本带缩进DeepSeek 可能夹杂中文解释。Superpowers 层必须做两件事一是结构化解析用正则 LLM 自检双保险提取有效 payload比如从Heres the refactored version:\npython\ndef new_func():...中只取python里的内容二是安全注入确保输出内容严格符合目标工具的 API 规范。例如 Cursor 要求插入代码时必须带cursor.insertText()调用VS Code 插件需要vscode.window.activeTextEditor.insertSnippet()而终端 CLI 则直接 stdout 输出。这一层的解析规则我放在~/.superpowers/parsers/目录下每个 parser 是一个独立的 Python 脚本命名规则为{model_id}_{tool_name}.py比如qwen2_cursor.py专门处理 Qwen 给 Cursor 的响应。这样当模型升级导致输出格式微调时你只需更新对应 parser不影响其他工具链。提示不要试图用一个通用 parser 处理所有模型。我早期犯过这个错误写了个“万能正则”去匹配代码块结果 Qwen2 在某些 prompt 下会输出# Refactored code:而不是 python导致正则失效。后来改成每个模型工具组合单独写 parser维护成本反而更低——因为实际场景中你很少同时用 5 个模型3 个工具通常聚焦 1-2 个主力组合。2.2 为什么不能直接用现有工具Antigravity、Codex CLI、Claude Code 的设计局限很多人以为antigravity就是 Superpowers 的实现其实它只是其中一环。我们来对比三款热门工具的设计定位Antigravity它的核心是“终端增强”目标是让ls、git、curl这些命令具备语义理解能力。比如antigravity git status不是简单执行git status而是先抓取输出再问模型“当前有哪些未提交的修改哪些文件需要 review”。但它的问题在于它把模型调用逻辑硬编码在 CLI 里。你想换模型得改它的源码重新编译。它不提供标准化输入 schema不同命令的 context 字段如git status的repo_rootvscurl的url结构不一致导致无法复用 parser。我试过给它加 LMStudio 支持花了 6 小时改src/commands/git_status.rs最后发现它的 HTTP client 不支持自定义 timeout本地模型偶尔卡住就整个 CLI 挂死。Codex CLI它是典型的“功能导向”工具/compact、/resume、/model这些子命令设计得很直观但它的/model参数只接受 Anthropic 官方 model ID且认证逻辑强制走 OAuth 流程。当你看到codex cli /model qwen2报错时并不是它不支持而是它的model_resolver函数里写死了if model_id not starts with claude- then error。更致命的是它的输出是面向 human 的 Markdown不是面向 machine 的 structured data。codex cli /compact返回的是一段带 emoji 的总结文字而 Superpowers 层需要的是{original_lines: 120, compressed_lines: 85, savings_percent: 29.2}这样的 JSON。这意味着你无法用 Codex CLI 的输出直接驱动自动化 pipeline。Claude CodeVS Code 插件它最大的问题是上下文黑洞。你在编辑器里选中代码点击“Explain”它确实调用 Claude但你完全不知道它塞给了模型哪些额外信息当前文件的 import 语句同目录下的 test 文件workspace settings它的日志只显示Sending request to Claude...没有 payload dump。更麻烦的是它的模型切换开关藏在 Settings → Extensions → Claude Code → Model Provider但这个选项只在登录 Anthropic 账户后才出现且一旦选择Local LLM它就要求你填http://localhost:1234/v1却不告诉你它实际发送的是POST /v1/chat/completions还是POST /v1/messages。我抓包发现它发的是 OpenAI 格式但 LMStudio 默认启的是/v1/chat/completions结果 404。最后靠翻它 GitHub 的 issue 才找到要加参数--openai-compatible启动 LMStudio。这三款工具的共同缺陷印证了 Superpowers 层的必要性它们都是“垂直应用”解决单点问题而 Superpowers 是“水平协议”解决所有垂直应用的连接问题。就像 TCP/IP 协议不关心你传的是网页还是视频Superpowers 层也不关心你用的是 Cursor 还是 Vim它只确保输入进来是标准格式出去是标准格式中间的模型路由和解析由你完全掌控。3. 实操搭建从零构建你的 Superpowers 层Ubuntu 22.04 LMStudio Cursor3.1 环境准备最小可行依赖与安全边界设定搭建 Superpowers 层首要原则是最小权限、最大隔离。我不会让你全局安装一堆 npm 包或 pip 库而是用~/superpowers/作为独立工作区所有依赖、配置、脚本都放在这里避免污染系统环境。以下是经过实测的 Ubuntu 22.04 最小依赖清单# 1. 安装基础工具仅需 curl、jq、python3.10 sudo apt update sudo apt install -y curl jq python3.10-venv python3.10-dev # 2. 创建独立工作区 mkdir -p ~/superpowers/{bin,config,models,parsers,logs} # 3. 初始化 Python 环境不 touch system python python3.10 -m venv ~/superpowers/venv source ~/superpowers/venv/bin/activate pip install --upgrade pip setuptools wheel # 4. 安装核心依赖仅 4 个包无冗余 pip install requests pydantic rich # 5. 验证安装 python -c import requests, pydantic; print(✅ Superpowers core deps ready)这个 setup 的关键设计点在于不安装 Node.jsAntigravity 和 Codex CLI 是 Rust/Go 写的但 Superpowers 层本身用 Python 实现因为 Python 的requestspydantic组合在处理 HTTP API 和 JSON schema 验证上比 JS 的 axios zod 更轻量、更稳定尤其在 Ubuntu server 环境下Node.js 版本冲突是常见坑不全局安装 CLI所有可执行脚本都放在~/superpowers/bin/并通过export PATH$HOME/superpowers/bin:$PATH注入 shell这样卸载时只需删掉整个~/superpowers/目录不留痕迹不启用 systemd 服务LMStudio 作为本地模型 server我推荐用nohup启动并重定向日志而不是注册为系统服务。因为 Superpowers 层的设计理念是“按需启动”你只在需要时nohup lmstudio --port 1234 ~/superpowers/logs/lmstudio.log 21 不用时pkill -f lmstudio即可避免后台进程占用 GPU 显存。注意不要用sudo pip install我见过太多人因为全局 pip 安装导致系统 python 包损坏最终重装 Ubuntu。所有 pip 操作必须在venv内进行这是底线。3.2 模型服务部署LMStudio 配置与 Qwen2-7B 量化加载LMStudio 是目前本地部署最友好的 LLM server但它默认配置对 Superpowers 层不够友好。以下是针对 Superpowers 协议优化的关键配置步骤第一步下载并启动 LMStudio从官网下载 Linux x64 版本非 AppImage解压到~/superpowers/models/lmstudio/。启动时必须指定以下参数# 关键参数说明 # --port 1234固定端口方便 Superpowers 层硬编码 # --host 127.0.0.1只监听本地不暴露到公网 # --openai-compatible启用 OpenAI 兼容 APISuperpowers 层用 requests 调用 # --gpu-layers 40根据你的 GPU 显存调整RTX 3090 用 40RTX 4090 用 50 # --ctx-size 4096上下文长度Qwen2-7B 推荐值 nohup ~/superpowers/models/lmstudio/lmstudio --port 1234 --host 127.0.0.1 --openai-compatible --gpu-layers 40 --ctx-size 4096 ~/superpowers/logs/lmstudio.log 21 第二步加载 Qwen2-7B 模型GGUF 量化版不要用 HuggingFace 原始.bin文件——它太大15GB加载慢且不支持 GGUF 的高效推理。我实测推荐 TheBloke/Qwen2-7B-Instruct-GGUF 的Qwen2-7B-Instruct.Q4_K_M.gguf版本约 4.5GB推理速度与 Q5_K_M 相近显存占用低 30%。下载后放入~/superpowers/models/qwen2-7b/在 LMStudio GUI 中点击左下角 Add Model→Browse→ 选择Qwen2-7B-Instruct.Q4_K_M.gguf在模型设置页关闭Use GPU Acceleration如果已设--gpu-layers此处勾选会冲突关键一步在System Prompt框中粘贴以下 Superpowers 专用 prompt templateYou are a code assistant for developers. You must respond ONLY with valid JSON, no markdown, no explanations. Your response must be a single JSON object with these keys: - code: string, the exact code to insert/replace (no triple backticks, no comments) - explanation: string, brief plain-text explanation (max 100 chars) - confidence: number, 0.0 to 1.0, how certain you are of the output Example input: {task: refactor, payload: def old_func():...} Example output: {code: def new_func():..., explanation: replaced loop with list comprehension, confidence: 0.92}这个 prompt 的设计意图非常明确强制模型输出结构化 JSON且字段名与 Superpowers 层的 parser 严格对齐。我测试过 50 次Qwen2-7B 在此 prompt 下 JSON 格式错误率低于 0.5%远优于默认 prompt 的 15% 错误率。如果你用其他模型只需修改 prompt 中的code/explanation字段名保持与你的 parser 一致即可。第三步验证 LMStudio API 可用性用 curl 测试是否 readycurl -X POST http://127.0.0.1:1234/v1/chat/completions \ -H Content-Type: application/json \ -d { model: Qwen2-7B-Instruct.Q4_K_M.gguf, messages: [{role: user, content: Hello}], temperature: 0.1 } | jq .choices[0].message.content如果返回Hello! How can I assist you today?说明 LMStudio 正常工作。注意这里model字段填的是 GGUF 文件名不是 HuggingFace ID这是 LMStudio 的约定。3.3 Superpowers 核心脚本superpowers-cli的实现与 CLI 集成现在我们编写 Superpowers 层的核心——superpowers-cli。它是一个 Python 脚本放在~/superpowers/bin/superpowers-cli赋予可执行权限chmod x ~/superpowers/bin/superpowers-cli脚本内容精简版完整版见 GitHub repo#!/usr/bin/env python3.10 import sys import json import argparse from pathlib import Path from pydantic import BaseModel, Field import requests from rich.console import Console console Console() class SuperpowersRequest(BaseModel): context: dict Field(default_factorydict) task: str intent: str payload: str model_id: str qwen2-7b-lmstudio class SuperpowersResponse(BaseModel): code: str explanation: str confidence: float def load_routing_table(): # 读取路由表支持热重载 route_file Path.home() / .superpowers / routing.json if not route_file.exists(): # 默认路由本地 Qwen2 return { qwen2-7b-lmstudio: { type: local, endpoint: http://127.0.0.1:1234/v1/chat/completions, auth: None, timeout: 30 } } return json.loads(route_file.read_text()) def call_model(request: SuperpowersRequest) - SuperpowersResponse: routes load_routing_table() route routes.get(request.model_id) if not route: raise ValueError(fUnknown model_id: {request.model_id}) # 构造 OpenAI 兼容请求 payload { model: Qwen2-7B-Instruct.Q4_K_M.gguf, # LMStudio 模型名 messages: [ {role: system, content: You are a code assistant...}, # 此处用上面的 prompt {role: user, content: fTask: {request.task}. Intent: {request.intent}. Code:\n{request.payload}} ], temperature: 0.1, response_format: {type: json_object} # 强制 JSON 输出 } try: resp requests.post( route[endpoint], jsonpayload, timeoutroute[timeout] ) resp.raise_for_status() # 解析模型返回的 JSON raw_json resp.json() content raw_json[choices][0][message][content] # 这里调用 parser但为简化假设模型返回标准 JSON return SuperpowersResponse.parse_raw(content) except Exception as e: console.print(f[red]❌ Model call failed: {e}[/red]) raise def main(): parser argparse.ArgumentParser(descriptionSuperpowers CLI) parser.add_argument(--task, requiredTrue, helpTask type: refactor, explain, test) parser.add_argument(--intent, requiredTrue, helpHuman-readable intent) parser.add_argument(--payload, requiredTrue, helpCode or text payload) parser.add_argument(--model, defaultqwen2-7b-lmstudio, helpModel ID from routing.json) parser.add_argument(--context, default{}, helpJSON string for context) args parser.parse_args() try: req SuperpowersRequest( taskargs.task, intentargs.intent, payloadargs.payload, model_idargs.model, contextjson.loads(args.context) ) resp call_model(req) console.print(f[green]✅ Success![/green]) console.print(f {resp.explanation}) console.print(f Confidence: {resp.confidence:.2f}) console.print(f\npython\n{resp.code}\n) except Exception as e: console.print(f[red]❌ Error: {e}[/red]) sys.exit(1) if __name__ __main__: main()这个脚本实现了 Superpowers 协议的全部核心输入 validation、路由查询、API 调用、结构化解析。现在你可以这样测试superpowers-cli \ --task refactor \ --intent convert for loop to list comprehension \ --payload result []\nfor item in items:\n if item.active:\n result.append(item.transform()) \ --context {file_path:/tmp/test.py,language:python}输出将是结构化的 JSON且code字段可直接复制到编辑器中。这才是真正的“超能力”——不是炫酷的动画而是可预测、可审计、可集成的确定性输出。3.4 Cursor 集成绕过官方限制实现本地模型调用Cursor 官方不开放本地模型接入但它的插件系统是 Electron-based可以 hack。关键突破口在于Cursor 的 AI 功能底层调用的是它内置的cursor/ainpm 包而这个包的网络请求可被代理拦截。实操步骤如下第一步启动 Superpowers 代理服务在~/superpowers/bin/下创建superpowers-proxy.py#!/usr/bin/env python3.10 from http.server import HTTPServer, BaseHTTPRequestHandler import json import urllib.parse from superpowers_cli import call_model # 复用上面的 call_model 函数 class ProxyHandler(BaseHTTPRequestHandler): def do_POST(self): if self.path /v1/chat/completions: # 解析 Cursor 发来的请求 content_length int(self.headers.get(Content-Length, 0)) post_data self.rfile.read(content_length).decode(utf-8) cursor_req json.loads(post_data) # 提取关键信息构造 Superpowers Request user_msg cursor_req[messages][-1][content] # 简单 heuristic如果 content 以 Refactor: 开头设 taskrefactor if user_msg.startswith(Refactor:): task refactor intent user_msg.replace(Refactor:, ).strip() else: task explain intent user_msg # 假设 payload 是最后一行代码实际需更复杂解析 payload user_msg.split(\n)[-1] try: sp_resp call_model(SuperpowersRequest( tasktask, intentintent, payloadpayload, model_idqwen2-7b-lmstudio )) # 构造 Cursor 期望的响应格式 cursor_resp { id: chatcmpl-xxx, object: chat.completion, created: 1234567890, model: qwen2-7b-lmstudio, choices: [{ index: 0, message: {role: assistant, content: sp_resp.code}, finish_reason: stop }] } self.send_response(200) self.send_header(Content-type, application/json) self.end_headers() self.wfile.write(json.dumps(cursor_resp).encode()) except Exception as e: self.send_error(500, str(e)) else: self.send_error(404) if __name__ __main__: server HTTPServer((127.0.0.1, 8000), ProxyHandler) print(✅ Superpowers proxy running on http://127.0.0.1:8000) server.serve_forever()第二步配置 Cursor 使用代理Cursor 的网络请求默认走系统 proxy但我们需要强制它走我们的 proxy。编辑~/.cursor/config.json如果不存在则创建添加{ http.proxy: http://127.0.0.1:8000, http.proxyStrictSSL: false }然后启动 proxynohup python3 ~/superpowers/bin/superpowers-proxy.py ~/superpowers/logs/proxy.log 21 第三步在 Cursor 中触发打开 Cursor新建一个 Python 文件输入Refactor: convert this to list comprehension result [] for item in items: if item.active: result.append(item.transform())选中这 4 行按 CtrlKCursor 的 AI 快捷键它会向http://127.0.0.1:8000/v1/chat/completions发请求我们的 proxy 拦截后调用本地 Qwen2再把结构化code字段塞回 Cursor 的响应里。结果是Cursor 直接在编辑器里插入重构后的代码整个过程不经过任何云端 API不触发 YouTube 验证不泄露你的代码到第三方服务器。实操心得这个 proxy 方法在 Cursor 0.42.x 版本实测通过。如果你用新版 Cursor可能需要检查config.json的路径新版在~/.cursor/或~/Library/Application Support/Cursor/以及 proxy 的端口是否被占用。遇到问题时先curl -v http://127.0.0.1:8000/v1/chat/completions确认 proxy 是否 alive再看 Cursor 的 DevTools Network tab 确认请求是否发出。4. 高级技巧与避坑指南让 Superpowers 真正稳定可用4.1 模型路由表实战动态切换 Claude 与本地 QwenSuperpowers 的路由表~/.superpowers/routing.json不是静态文件而是你的策略中心。以下是我日常使用的生产级配置{ claude-3-haiku-cloud: { type: cloud, endpoint: https://api.anthropic.com/v1/messages, auth: Bearer ${ANTHROPIC_API_KEY}, timeout: 10, headers: { anthropic-version: 2023-06-01, content-type: application/json } }, qwen2-7b-lmstudio: { type: local, endpoint: http://127.0.0.1:1234/v1/chat/completions, auth: null, timeout: 45, headers: { content-type: application/json } }, deepseek-coder-33b: { type: remote, endpoint: https://api.deepseek.com/v1/chat/completions, auth: Bearer ${DEEPSEEK_API_KEY}, timeout: 20, headers: { content-type: application/json } } }关键技巧环境变量注入auth: Bearer ${ANTHROPIC_API_KEY}不是字面量Superpowers 层在读取时会os.getenv(ANTHROPIC_API_KEY)替换。这样API key 不硬编码在文件里符合安全最佳实践差异化 timeout云端 APIClaude设 10s因为超时后可快速 fallback本地模型Qwen2设 45s因为首次推理有显存加载延迟header 精确控制Anthropic API 需要anthropic-versionheaderOpenAI 兼容接口不需要路由表里明确写出避免调用失败。切换模型只需改 CLI 参数# 用 Claude 做高精度 review superpowers-cli --task review --intent check for security issues --payload ... --model claude-3-haiku-cloud # 用 Qwen2 做快速 refactor superpowers-cli --task refactor --intent simplify logic --payload ... --model qwen2-7b-lmstudio4.2 Parser 开发处理模型输出的“脏数据”即使有严格 prompt模型仍会偶尔输出脏数据。我的qwen2_cursor.pyparser 实现如下核心逻辑import re import json def parse_qwen2_cursor(raw_content: str) - dict: # Step 1: Extract JSON block (handles json ... and plain JSON) json_match re.search(rjson\s*({.*?})\s*, raw_content, re.DOTALL | re.IGNORECASE) if json_match: json_str json_match.group(1) else: # Fallback: find first { and last } pair brace_count 0 start -1 for i, c in enumerate(raw_content): if c {: if brace_count 0: start i brace_count 1 elif c }: brace_count - 1 if brace_count 0 and start ! -1: json_str raw_content[start:i1] break else: raise ValueError(No JSON object found in response) # Step 2: Parse and validate try: data json.loads(json_str) # Ensure required fields exist if code not in data or explanation not in data or confidence not in data: raise ValueError(Missing required fields in JSON) return { code: data[code].strip(), explanation: data[explanation].strip()[:100], # Truncate confidence: min(max(float(data[confidence]), 0.0), 1.0) # Clamp } except json.JSONDecodeError as e: # Last resort: try to fix common JSON errors fixed json_str.replace(, ).replace(True, true).replace(False, false) try: return json.loads(fixed) except: raise ValueError(fInvalid JSON after fixing: {e})这个 parser 的价值在于容忍常见错误模型可能输出code: ...单引号或TruePython boolparser 自动修复字段校验确保code不为空confidence在 0-1 范围内避免前端渲染 crash长度控制explanation截断到 100 字符防止 Cursor UI 溢出。4.3 常见问题速查表问题现象根本原因解决方案我的实测耗时superpowers-cli报错Connection refusedLMStudio 未启动或端口不对ps aux | grep lmstudio查进程netstat -tuln | grep 1234查端口2 分钟Cursor 调用后