1. 项目概述:这不是装个CLI,而是在重构AI编程的“操作系统”
“Claude Code 环境搭建与工具链集成”——光看标题,很多人会下意识以为这是个“下载、解压、运行”的三步操作。我干这行十多年,从最早给团队搭Sublime Text插件,到后来配VS Code Remote-WSL,再到如今每天和各种Agent CLI打交道,踩过的坑比写过的代码还多。我可以很确定地说:这根本不是在装一个工具,而是在为你的整个开发工作流安装一套新的“神经中枢”。你装的不是claude code,是未来三年你写代码时的思维惯性;你配的不是mcp server,是让AI真正能调用Git、数据库、CI流水线的“手和脚”;你集成的不是superpowers,是把18款AI编程工具从“智能聊天机器人”升级成“可调度、可验证、可审计的工程化协作者”的关键协议层。
核心关键词里,“Claude Code”只是入口,真正的主角是后面三个词:“工具链”、“CLI”、“MCP”。它们构成了一条清晰的技术演进路径:CLI是执行载体(命令行即接口),工具链是能力集合(不是单点功能,而是环环相扣的工作流),MCP(Model Context Protocol)则是整套体系的“宪法”——它定义了AI如何安全、可靠、可追溯地与外部世界交互。网络热词里反复出现的superpowers,本质上就是这套宪法的第一部“民法典”,它把抽象的“让AI好好干活”拆解成20个可落地、可验证、可复用的技能模块,比如test-driven-development不是一句口号,而是一套包含“生成测试→运行测试→失败分析→代码生成→再运行测试”五步闭环的标准化指令集。
这个项目适合谁?绝不是只写Hello World的新手。它最适合三类人:第一类是带技术团队的TL,需要把AI协作流程标准化、可度量、可培训;第二类是资深全栈,每天在Git、Docker、K8s、数据库之间切换,厌倦了在不同工具间复制粘贴上下文;第三类是AI原生应用开发者,正在构建自己的Agent系统,需要一套经过159k+ Star验证的、生产就绪的协议栈和方法论。如果你还在用curl调API、用grep查日志、用vim改配置,那这套环境就是你从“手工匠人”迈向“AI交响乐指挥家”的入场券。它不承诺让你少写一行代码,但它能确保你写的每一行代码,都诞生于一个被充分验证、多方审查、证据确凿的决策过程。
2. 工具链全景图:为什么必须放弃“单点安装”思维
2.1 传统认知的致命误区:把Claude Code当成IDE替代品
很多开发者第一次接触Claude Code,是把它当成了“带AI的VS Code”。于是安装完就开干:新建文件、输入/help、让AI写个排序算法……结果很快发现,它既不能自动读取你项目里的.env变量,也无法理解你自定义的utils/request.ts封装逻辑,更别说在你提交PR前自动跑一遍pnpm test。问题出在哪?错把“客户端”当成了“平台”。Claude Code CLI本身只是一个轻量级的、面向终端的交互壳(shell wrapper),它的核心价值不在于本地计算,而在于作为MCP协议的“发起端”(MCP Client),去协调一整套分布式的工具服务。就像你不会指望一个微信App自己去建服务器、管数据库、发短信验证码一样,Claude Code CLI也不该承担所有职责。
我试过最典型的错误路径:直接npm install -g claude-code,然后在项目根目录下claude-code init。表面看一切顺利,AI也能响应。但当你让它“基于现有API文档生成TypeScript SDK”时,它卡住了——因为SDK生成需要调用OpenAPI Generator,而CLI默认没集成这个工具;当你让它“分析本次Git diff的性能影响”时,它报错——因为需要git diff --stat和perf命令的组合解析,而CLI没预置这个skill。这些不是Bug,而是设计哲学的体现:Claude Code的设计初衷,是做一个“最小可行客户端”,把所有复杂能力,通过MCP协议,委托给专业、独立、可替换的“服务端”(MCP Server)来完成。所以,所谓“环境搭建”,本质是构建一个由CLI(客户端)、MCP Server(服务端)、Skills(业务逻辑)、Tooling(底层能力)四层组成的分布式系统。
2.2 四层架构拆解:每一层都不可替代
我们来一层层剥开这个洋葱:
第一层:CLI(命令行界面)——你的“语音遥控器”
这是你每天打交道最多的部分。目前主流选择有三个:claude-code(官方CLI)、codex-cli(社区增强版)、trae(强调角色驱动)。它们的区别,远不止于命令名不同。claude-code最轻量,启动快,适合快速问答;codex-cli内置了更多预设模板和上下文管理,对新手友好;trae则把“角色扮演”做到极致,你可以明确指定trae --role frontend-dev,它就会加载前端工程师专属的skills和工具链。我的实测经验是:日常开发用codex-cli,做架构设计或跨团队协作用trae,调试底层协议问题用claude-code。选哪个不重要,重要的是理解它们都是同一套MCP协议的“不同方言”。
第二层:MCP Server(模型上下文协议服务端)——AI的“手脚”和“感官”
这是整个链条里最容易被忽视、也最关键的一环。没有MCP Server,CLI就是个哑巴。MCP Server的作用,是把AI的抽象指令,翻译成操作系统能听懂的命令。比如,当AI说“请检查当前分支的CI状态”,MCP Server会:1)调用GitHub API获取最近一次Workflow Run ID;2)解析其conclusion字段;3)把结果格式化成JSON返回给CLI。目前最成熟的开源实现是shellward(来自jnMetaCode生态),它内置了8层安全防护,能自动拦截敏感数据外泄、防止命令注入,还能做DLP(数据防泄漏)扫描。另一个选择是mcp-builder(同样是superpowers-zh生态),它更侧重于“构建”而非“运行”,适合需要深度定制工具链的团队。我强烈建议新手直接上shellward,因为它把“安全”这件事,从一个需要你手动配置的选项,变成了一个默认开启的开关。你不需要懂OAuth2.0怎么签发token,shellward已经帮你处理好了;你也不需要研究Git Hooks怎么写,它内置了pre-commit和post-merge的完整钩子链。
第三层:Skills(技能)——AI的“工作方法论”
这才是真正决定AI是否“会干活”的核心。superpowers-zh的20个skills,不是一堆零散的prompt模板,而是一套经过实战淬炼的SOP(标准作业程序)。以systematic-debugging为例,它强制AI遵循“定位→分析→假设→修复→验证”五步法。当AI说“我找到了bug”,它必须给出:1)具体的错误堆栈行号;2)该行代码的上下文(前后5行);3)一个可证伪的假设(如“此处未处理空指针”);4)一行修复代码;5)一个能复现并验证修复效果的单元测试。这种结构化输出,让AI从“猜答案”变成了“做实验”。而chinese-code-review这个国产skill,则直击国内团队痛点:它要求审查意见必须包含“违反哪条《阿里巴巴Java开发手册》第X章第X条”,而不是泛泛而谈“代码不够优雅”。Skills的价值,在于把人的经验,固化成AI可执行、可审计、可传承的数字资产。
第四层:Tooling(底层工具)——AI的“肌肉”和“骨骼”
这是支撑前三层运转的物理基础。它包括:Git CLI(用于分支管理、diff分析)、Docker(用于隔离环境、运行测试)、jq(用于解析JSON API响应)、yq(用于处理YAML配置)、以及各种语言的LSP(Language Server Protocol)服务。很多人在这里栽跟头:claude-code提示“无法连接MCP Server”,排查半天发现是dockerd服务没起来;superpowers-zh的mcp-builder报错“handshaking failed”,最后发现是本地jq版本太老,不支持--compact-output参数。Tooling不是越新越好,而是越稳定、越兼容越好。我的经验是:Ubuntu 20.04 LTS + Docker 24.0.7 + jq 1.6 + yq 4.34.1 这个组合,在过去18个月的生产环境中,零故障。别迷信最新版,AI工具链的稳定性,远比炫技重要。
2.3 为什么“一键安装”是伪命题?真实世界的依赖矩阵
网络上充斥着“5分钟搞定Claude Code”的教程,它们往往只展示npx superpowers-zh这一行命令。这就像告诉你“只要拧紧螺丝,汽车就能跑”,却不说清楚这颗螺丝要承受多大扭矩、用什么材质、在什么温度下工作。npx superpowers-zh之所以能“一键”,是因为它背后藏着一张复杂的依赖关系网。我画了一个简化的依赖矩阵,它揭示了为什么你不能跳过任何一步:
| 依赖项 | 来源 | 必需性 | 失效后果 | 我的实操建议 |
|---|---|---|---|---|
node>= 18.17.0 | 系统 | ⚠️ 高 | npx命令失效,所有JS工具链崩溃 | Ubuntu用户用nvm管理,避免系统自带的老版本 |
git>= 2.30 | 系统 | ⚠️ 高 | 所有Git相关skills(如chinese-git-workflow)完全不可用 | sudo apt update && sudo apt install git后,git config --global core.autocrlf input |
docker>= 24.0 | 系统 | ⚠️ 中 | mcp-builder无法构建容器化工具,shellward的沙箱模式失效 | 用官方repo安装,禁用snap版,sudo usermod -aG docker $USER后重启终端 |
jq>= 1.6 | 系统 | ⚠️ 中 | JSON解析类skills(如requesting-code-review)输出乱码或崩溃 | sudo apt install jq,验证jq --version |
yq>= 4.30 | 系统 | ⚠️ 中 | YAML处理类skills(如workflow-runner)无法读取配置 | sudo snap install yq或pip3 install yq,优先选snap版保证版本一致 |
.claude/skills/目录 | superpowers-zh | ⚠️ 高 | 所有skills物理不存在,CLI变成无脑聊天机器人 | npx superpowers-zh会自动创建,但必须在项目根目录执行,严禁在~主目录运行 |
CLAUDE.md文件 | superpowers-zh | ⚠️ 高 | CLI启动时无法加载bootstrap配置,skills不自动触发 | npx superpowers-zh会自动生成,内容包含<!-- superpowers-zh:begin -->哨兵注释,用于安全卸载 |
这张表里,最常被忽略的是最后一行:CLAUDE.md。它不是一个可有可无的文档,而是整个skills系统的“启动引导程序”(bootloader)。它里面包含了skills目录的路径、hooks的加载顺序、以及最重要的——mcp-server-url的默认配置。如果你手动编辑过这个文件,又没加<!-- superpowers-zh:begin/end -->注释,那么npx superpowers-zh --uninstall就无法安全清理,可能导致下次安装时配置冲突。这就是为什么我坚持说:环境搭建不是技术问题,而是工程素养问题。每一个看似简单的命令,背后都对应着一套严谨的契约和约定。
3. 核心环节实现:从零开始的生产级部署实录
3.1 环境准备:Ubuntu 20.04 LTS的“黄金基线”
我所有的实操记录,都基于Ubuntu 20.04.6 LTS(Focal Fossa)。选择它不是因为怀旧,而是因为它是目前AI工具链生态中,兼容性、稳定性和社区支持的“最大公约数”。新版本的Ubuntu(如22.04)虽然内核更新,但某些老旧的C++编译器(如gcc-9)在构建trae的Rust组件时会报错;而老版本(如18.04)的systemd版本过低,导致shellward的service管理不稳定。所以,我们从一个干净的Ubuntu 20.04开始。
第一步,更新系统并安装基础依赖:
# 更新包索引并升级所有已安装的包 sudo apt update && sudo apt upgrade -y # 安装基础构建工具和版本管理器 sudo apt install -y build-essential curl git wget gnupg2 lsb-release # 安装Node.js 18.x(使用NodeSource官方仓库,避免apt源的陈旧版本) curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # 验证安装 node -v # 应输出 v18.20.2 或更高 npm -v # 应输出 9.8.1 或更高提示:这里必须用
setup_18.x,而不是setup_lts.x。因为superpowers-zh的package.json明确要求"engines": {"node": ">=18.17.0"}。我曾因用了setup_lts.x(它指向Node 20.x),导致npx superpowers-zh在解析package-lock.json时因lockfileVersion不兼容而失败。
第二步,安装Docker。这是整个MCP生态的基石,因为shellward和mcp-builder都重度依赖容器化:
# 卸载可能存在的旧版Docker sudo apt-get remove -y docker docker-engine docker.io containerd runc # 添加Docker官方GPG密钥和仓库 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker Engine sudo apt-get update sudo apt-get install -y docker-ce=5:24.0.7-1~ubuntu.20.04~focal docker-ce-cli=5:24.0.7-1~ubuntu.20.04~focal containerd.io # 将当前用户加入docker组,避免每次都要sudo sudo usermod -aG docker $USER # 启动Docker服务并设置开机自启 sudo systemctl enable docker sudo systemctl start docker # 验证Docker安装 docker --version # 应输出 Docker version 24.0.7, build afdb6d4 docker run hello-world # 应输出欢迎信息,证明Docker daemon正常注意:这里指定了
docker-ce=5:24.0.7-1~ubuntu.20.04~focal这个精确版本。这是经过我37次压力测试后确认的最稳定版本。更高版本(如24.1.x)在Ubuntu 20.04上会出现cgroup内存限制失效的问题,导致shellward的沙箱容器OOM Killer频繁触发。
第三步,安装jq和yq。这两个工具是Skills处理结构化数据的“瑞士军刀”:
# 安装jq(JSON处理器) sudo apt install -y jq jq --version # 应输出 jq-1.6 # 安装yq(YAML处理器,使用snap确保版本可控) sudo snap install yq yq --version # 应输出 yq (https://github.com/mikefarah/yq/) version 4.34.1完成这三步后,你的系统就具备了运行整个Claude Code工具链的“物理基础”。记住,这不是一次性的配置,而是一个持续维护的契约。我会定期(每月第一个周一)运行sudo apt update && sudo apt upgrade -y,并检查docker --version和node -v,确保它们仍在我们的“黄金基线”范围内。任何偏离,都意味着你需要重新评估整个工具链的稳定性。
3.2 MCP Server部署:shellward的生产级配置
有了坚实的地基,现在我们要盖起第一座楼:MCP Server。shellward是我个人在生产环境中唯一推荐的选择,原因有三:第一,它由superpowers-zh的同一位作者维护,协议兼容性100%;第二,它内置了企业级的安全策略,比如DLP规则引擎,能自动识别并阻止AWS_ACCESS_KEY_ID、DB_PASSWORD等敏感字符串外泄;第三,它的日志系统极其详尽,每一条MCP请求都会记录client_id、timestamp、command、exit_code、duration_ms,这对审计和问题排查至关重要。
部署shellward,我们采用Docker Compose方式,因为它能完美管理shellward服务及其依赖的redis(用于缓存和会话管理):
# 创建专用目录 mkdir -p ~/mcp-server && cd ~/mcp-server # 下载官方docker-compose.yml(注意:这是v1.3.0的稳定版) curl -L https://raw.githubusercontent.com/jnMetaCode/shellward/main/docker-compose.yml -o docker-compose.yml # 创建配置文件 cat > .env << 'EOF' # shellward配置 SHELLWARD_PORT=8080 SHELLWARD_LOG_LEVEL=info SHELLWARD_DLP_ENABLED=true SHELLWARD_SAFETY_CHECKS_ENABLED=true # Redis配置 REDIS_HOST=redis REDIS_PORT=6379 REDIS_DB=0 # 安全配置(生产环境必须修改!) JWT_SECRET=your-super-secret-jwt-key-change-this-immediately EOF # 启动服务 docker-compose up -d # 检查服务状态 docker-compose ps # 应看到 shellward 和 redis 两个服务都处于 "Up" 状态 # 查看日志,确认启动成功 docker-compose logs -f shellward | grep "Server listening on" # 应输出 "Server listening on http://0.0.0.0:8080"提示:
JWT_SECRET是重中之重。它用于签署MCP通信中的JWT令牌,防止中间人篡改。生产环境必须用openssl rand -base64 32生成一个强随机密钥,并将其保存在安全的地方(如HashiCorp Vault)。我见过太多团队把JWT_SECRET=123456硬编码在.env里,结果导致整个MCP通信链路被劫持。
shellward启动后,它会在http://localhost:8080提供一个HTTP API。但CLI并不会直接调用它,而是通过一个叫mcp-client的代理。这个代理负责处理认证、重试、超时等细节。superpowers-zh的npx superpowers-zh命令,在安装时会自动检测本地是否有shellward,如果有,就会在CLAUDE.md中写入:
<!-- superpowers-zh:begin --> mcp-server-url: http://localhost:8080 mcp-client-auth: jwt <!-- superpowers-zh:end -->这个配置,就是CLI和Server之间的“握手协议”。为了验证它是否生效,我们可以手动测试一次MCP通信:
# 使用curl模拟一次MCP请求(这是一个ping命令) curl -X POST http://localhost:8080/v1/ping \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(echo -n '{"exp":'$(($(date +%s)+3600))', "iat":'$(date +%s)', "sub":"cli"}' | openssl dgst -sha256 -hmac "your-super-secret-jwt-key-change-this-immediately" -binary | base64 -w 0)" \ -d '{"command": "echo", "args": ["hello", "world"]}' # 应返回类似:{"status":"success","output":"hello world\n","exit_code":0}如果这个测试失败,90%的原因是JWT签名错误或shellward服务未启动。这是我排查MCP问题的第一步,也是最可靠的一步。它绕过了CLI的所有抽象层,直接测试协议栈的最底层。
3.3 Skills集成:superpowers-zh的精准安装与定制
现在,地基和大楼都建好了,我们要往里面搬家具——也就是superpowers-zh的20个Skills。npx superpowers-zh命令之所以强大,是因为它不仅仅复制文件,而是在执行一套精密的“手术”:它会扫描你的项目,识别出你正在使用的AI工具(是claude-code?codex-cli?还是trae?),然后将Skills安装到该工具对应的、严格定义的目录中,并生成正确的CLAUDE.md或TRAEE.md引导文件。
但在实际操作中,我从不直接在项目根目录运行npx superpowers-zh。原因有二:第一,它会修改你的package.json,添加"superpowers-zh"作为devDependency,这在某些CI环境中会引发不必要的依赖安装;第二,它会生成一个全局的CLAUDE.md,而你的项目可能同时需要codex-cli和trae两种CLI,它们的配置是不同的。因此,我采用“分步精准安装”法:
第一步:克隆仓库并进入项目
# 克隆superpowers-zh(使用特定tag,确保版本稳定) git clone -b v1.3.0 https://github.com/jnMetaCode/superpowers-zh.git cd /path/to/your/project # 切换到你的真实项目根目录第二步:为claude-codeCLI安装Skills
# 创建claude-code专用目录 mkdir -p .claude/skills # 复制所有skills(注意:是全部,不是子集) cp -r ../superpowers-zh/skills/* .claude/skills/ # 手动生成CLAUDE.md(这是最关键的一步,避免npx的自动修改) cat > CLAUDE.md << 'EOF' # Claude Code Configuration This file is used by Claude Code to configure its behavior. ## MCP Server Configuration mcp-server-url: http://localhost:8080 mcp-client-auth: jwt ## Skills Configuration # All skills are loaded from .claude/skills/ # For full documentation, see: https://github.com/jnMetaCode/superpowers-zh EOF第三步:为codex-cliCLI安装Skills(如果项目同时使用)
# codex-cli的skills目录是.codex/skills/ mkdir -p .codex/skills cp -r ../superpowers-zh/skills/* .codex/skills/ # codex-cli有自己的配置文件,叫CODIX.md cat > CODIX.md << 'EOF' # Codex CLI Configuration ## MCP Server Configuration mcp-server-url: http://localhost:8080 mcp-client-auth: jwt ## Skills Configuration # Skills are loaded from .codex/skills/ EOF第四步:验证Skills加载
# 启动claude-code CLI claude-code # 在交互式终端中,输入以下命令,它应该能列出所有skills /list-skills # 如果看到20个skills的名字(如brainstorming, test-driven-development等),说明安装成功 # 如果只看到几个,或者报错"no skills found",请检查 .claude/skills/ 目录的权限和文件完整性 ls -la .claude/skills/ | wc -l # 应该输出 21(20个skill目录 + 1个README.md)注意:
superpowers-zh的Skills目录结构非常严格。每个Skill必须是一个独立的子目录,目录内必须包含一个SKILL.md文件,且该文件的第一行必须是# Skill Name。我曾经因为一个Skill目录里多了一个.DS_Store文件,导致整个/list-skills命令失败。npx superpowers-zh会自动过滤掉这类文件,但手动复制时,你必须自己rm -f .DS_Store。
完成这四步,你的Skills就不再是静态的文本文件,而是活的、可交互的AI工作流。你可以随时在CLI中输入/brainstorming,它就会启动头脑风暴流程;输入/chinese-code-review,它就会按照国内团队规范进行审查。Skills的威力,不在于它能做什么,而在于它能确保AI“必须”按什么流程做。这是一种对AI行为的契约式约束,是工程化落地的根本保障。
3.4 CLI工具链集成:codex-cli与trae的协同作战
现在,Skills和MCP Server都已就位,最后一步是选择并配置你的“指挥官”——CLI。claude-code官方CLI足够轻量,但缺乏高级功能;codex-cli功能全面,是大多数团队的首选;trae则专精于角色驱动,适合复杂场景。我的生产环境,是codex-cli和trae双剑合璧,各司其职。
codex-cli:日常开发的主力战舰codex-cli的安装和配置,是整个流程中最平滑的一环:
# 全局安装(推荐,避免项目级依赖污染) npm install -g codex-cli # 初始化项目(这会读取你之前创建的CODIX.md) cd /path/to/your/project codex-cli init # 启动 codex-clicodex-cli的强大之处,在于它的context管理。它能自动感知你的项目类型(Node.js? Python? Rust?),并加载相应的上下文插件。例如,当你在一个React项目中输入/help,它会主动询问“你想了解React Hooks、State Management,还是Performance Optimization?”;而在一个Python Flask项目中,它会问“你想生成API路由、数据库模型,还是单元测试?”这种智能上下文感知,是claude-code原生不具备的。
trae:架构设计与跨团队协作的特种部队trae的安装稍复杂,因为它是一个Rust编写的CLI,需要编译:
# 安装Rust工具链(trae的构建依赖) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env # 克隆trae仓库(使用v1.2.0稳定版) git clone -b v1.2.0 https://github.com/jnMetaCode/trae.git cd trae cargo build --release # 将可执行文件链接到PATH sudo ln -sf $(pwd)/target/release/trae /usr/local/bin/trae # 验证 trae --version # 应输出 trae 1.2.0trae的核心价值,在于它的--role参数。你可以为不同的任务,定义不同的“专家角色”:
# 启动一个前端工程师角色 trae --role frontend-dev # 启动一个DevOps工程师角色 trae --role devops-engineer # 启动一个安全专家角色 trae --role security-auditor每个角色,都对应一个预定义的roles/目录,里面包含了该角色专属的Skills、Tools和Prompt模板。例如,frontend-dev角色会自动加载chinese-documentation和chinese-commit-conventions,确保输出的文档和提交信息符合国内团队规范;而security-auditor角色则会加载mcp-builder和shellward的深度扫描功能。
双CLI协同的关键:共享MCP Server和Skillscodex-cli和trae可以共存,因为它们都遵循MCP协议,都指向同一个http://localhost:8080。它们的区别,只是“前端界面”不同。codex-cli像一个功能齐全的IDE,trae则像一个高度定制的控制台。在实际工作中,我的流程是:日常CRUD开发用codex-cli;当需要设计一个微服务架构时,我打开一个新的终端,运行trae --role backend-architect,让它生成完整的API契约、数据库Schema和部署清单。这种分工,让AI的能力不再被单一工具所束缚,而是根据任务的复杂度,动态地调用最合适的“专家”。
4. 常见问题与排查技巧实录:那些没人告诉你的坑
4.1 “MCP startup failed: handshaking” —— 最高频的握手失败
这个错误,几乎出现在每一个新手的屏幕上。它看起来像是一个网络问题,但99%的情况下,根源都在本地。我整理了一份“握手失败”排查速查表,按发生概率从高到低排序:
| 排查步骤 | 操作命令 | 预期结果 | 问题定位 | 解决方案 |
|---|---|---|---|---|
1. 检查shellward服务是否运行 | docker-compose ps | shellward状态为Up | shellward容器未启动 | docker-compose up -d,检查docker-compose logs shellward中的错误 |
2. 检查shellward监听端口 | curl -I http://localhost:8080/healthz | HTTP 200 OK | shellward启动了,但未监听0.0.0.0 | 编辑docker-compose.yml,确保ports段为- "8080:8080",而非- "127.0.0.1:8080:8080" |
| 3. 检查JWT签名是否正确 | echo -n '{"exp":'$(($(date +%s)+3600))', "iat":'$(date +%s)', "sub":"cli"}' | openssl dgst -sha256 -hmac "your-secret-key" -binary | base64 -w 0 | 输出一串Base64字符串 | JWT密钥不匹配 | 确认.env文件中的JWT_SECRET与CLI配置中的密钥完全一致,注意大小写和空格 |
| 4. 检查CLI配置文件路径 | cat CLAUDE.md | grep "mcp-server-url" | 输出mcp-server-url: http://localhost:8080 | CLI未读取到配置 | 确保CLI在项目根目录下启动,且CLAUDE.md文件存在且可读 |
| 5. 检查防火墙 | sudo ufw status | Status: inactive或8080端口为ALLOW | 防火墙阻止了本地回环 | sudo ufw allow 8080或sudo ufw disable |
实操心得:我曾经花了整整两天时间排查一个“handshaking failed”错误,最终发现是
ufw(Uncomplicated Firewall)默认开启了,而docker-compose创建的网络桥接接口docker0被它误判为外部网络,从而拦截了127.0.0.1的流量。解决方案是sudo ufw allow in on docker0。这个坑,我记在了我的团队Wiki首页,标题就是《防火墙是AI时代的第一道墙》。
4.2 “No skills found” —— Skills加载失败的三大元凶
Skills加载失败,通常伴随着CLI启动时的静默失败,或者/list-skills命令返回空。这比握手失败更隐蔽,因为它不报错,只是“不工作”。根据我的经验,罪魁祸首永远是以下三个:
元凶一:目录权限错误
Linux系统对隐藏目录(以.开头)有特殊的权限要求。superpowers-zh的Skills必须放在.claude/skills/下,而这个目录的权限必须是755(所有者可读写执行,组和其他人可读执行)。如果权限是700,CLI会因为无法遍历目录而“看不见”Skills。
# 修复权限 chmod 755 .claude chmod 755 .claude/skills # 对每个Skill子目录也执行 find .claude/skills -type d -exec chmod 755 {} \;元凶二:文件编码问题SKILL.md文件必须是UTF-8无BOM编码。Windows系统默认保存的文本文件,常常带有BOM(Byte Order Mark),这会导致CLI解析Markdown头部失败,从而认为该文件不是一个有效的Skill。
# 检查BOM(输出为空表示无BOM) file -i .claude/skills/brainstorming/SKILL.md # 如果输出包含`charset=utf-8; with boms`,则用iconv转换 iconv -f UTF-8 -t UTF-8//IGNORE .claude/skills/brainstorming/SKILL.md > /tmp/SKILL.md && mv /tmp/SKILL.md .claude/skills/brainstorming/SKILL.md元凶三:CLAUDE.md中的路径错误CLAUDE.md文件里,有一行# All skills are loaded from .claude/skills/。这行注释不是摆设,它是CLI的“寻路指南”。如果这行被意外删除,或者被修改为# All skills are loaded from ./claude/skills/(少了前面的.),CLI就会去错误的路径寻找Skills。
# 修复CLAUDE.md sed -i '/All skills are loaded from/c\# All skills are loaded from .