刚接触 Claude Code 的朋友,十有八九都会有同样一个感受:第一次在终端里敲下claude命令,它确实能帮你改代码、跑测试、查资料,可总感觉它像个“记性很差的外包”。今天你跟它说清了项目结构,明天它又忘了;换台机器、换个项目,所有约定又得从头交代一遍。
真正把 Claude Code 用出效率的人,靠的不是每次多打字,而是把“项目常识”和“操作套路”沉淀成模板文件——这也就是 claude-code-templates 这类资源存在的意义:让 AI 助手从一个“随叫随到但什么都要重新教”的工具,变成一个“一进项目就懂规矩”的长期搭档。这篇文章我不打算只贴一堆模板代码,而是顺着安装、配置、模板设计、技能扩展、模型接入、VSCode 集成、报错排查这条完整链路,把我在实际项目里跑通的方案和我踩过的坑一次性讲清楚。无论你是在 Windows、macOS 还是 Linux 上折腾,无论你是刚装好还没跑通第一条命令,还是已经用了一段时间想优化工作流,都应该能从里面拿到能直接照抄的东西。
1. 装好 Claude Code:安装路线、环境变量与两个高频启动报错
先把最基础也最劝退的部分解决掉。很多人在安装阶段就被拦住了,报错信息五花八门,但其实根因就那么几个。
1.1 三种安装方式与选型
Claude Code 官方提供了几类安装途径,我按推荐程度排一下:
| 安装方式 | 命令 | 适合场景 |
|---|---|---|
| 原生安装器 | curl -fsSL https://claude.ai/install.sh | bash | 不想碰 Node.js 依赖,想全局可用 |
| npm 全局包 | npm install -g @anthropic-ai/claude-code | 本机已有 Node.js 环境,希望版本跟随 npm 管理 |
| 桌面客户端 | 去 Claude 官网下载 Claude Desktop / Claude Code 桌面端 | 习惯图形界面操作,想在对话框里管理终端任务 |
我个人平时主力用的是 npm 方式,原因很简单:npm 包更新方便,npm update -g @anthropic-ai/claude-code一条命令就能跟上新版本;而且我在本机本来就要跑前端项目,Node.js 环境是现成的。原生安装器更适合那些不想为命令行工具多装一个运行时的人。
装完之后先验证一下:在终端运行claude --version,能正常输出版本号就说明安装成功。如果你使用的是桌面端或客户端版本,通常首次打开会让你登录账号、绑定工作目录,流程上比纯 CLI 更友好。
1.2 Windows 上最容易出现的“Virtual Machine Platform"问题
大量 Windows 用户在启动 Claude Code 时会看到这么一句:Claude's workspace requires the Virtual Machine Platform on Windows. Enable it and try again.这句话翻译过来就是:Claude Code 需要一个叫“虚拟机平台”的 Windows 功能,你还没开。
这个功能是给 WSL(Windows Subsystem for Linux)和某些需要沙箱隔离的本地执行环境用的。Claude Code 在终端里执行多步骤任务、跑脚本时,依赖这套隔离机制来保证行为可控,所以先决条件就是它必须开启。
开启方法有两种:
- 以管理员身份打开 PowerShell,依次执行下面两条命令,然后重启系统:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart- 图形界面方式:打开“控制面板 -> 程序 -> 启用或关闭 Windows 功能”,勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”,确定后重启。
提示:如果公司电脑有组策略锁定了系统组件,这类改动可能需要管理员配合。另外,重启之后建议顺手把 WSL 内核更新一下,命令是
wsl --update,这样后续跑 Linux 工具链时更稳。
装好 WSL 后,我建议你在终端里敲一下wsl --status看看默认发行版状态。如果之前没装过发行版,可能需要wsl --install -d Ubuntu初始化一个。说实话,这一步看着啰嗦,但做一次能少踩后续一大堆坑。
1.3 无法将“claude”识别为 cmdlet 的排查思路
另一个高频启动报错,在 Windows PowerShell 里长得像这样:
claude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。我第一次看到这个报错时也愣了一下,以为安装失败了。其实原因很简单:npm 全局安装的包,默认会被放到一个 npm 全局目录里,比如%APPDATA%\npm(或者你通过npm config get prefix查到的路径)。只有这个目录已经被加入PATH环境变量,PowerShell 才能直接识别claude命令。
排查步骤我固定是这样做的:
- 先确认安装有没有落在预期目录:
npm root -g,看输出路径对不对。 - 查一下
claude的命令入口是否真实存在:直接进入对应目录,用dir(或ls)看看有没有claude.exe或claude.cmd。 - 如果文件在,但 PowerShell 不认,那就是
PATH里没有这个目录。去“系统属性 -> 环境变量”里把 npm 全局目录加进Path,然后把所有终端窗口关掉重开。 - 如果用的是
nvm-windows这类 Node 版本管理工具,还要确认当前 Node 版本对应的全局目录和你配置的PATH一致,因为 nvm 切换版本会切换全局目录,路径不一致就会彻底找不到命令。
注意:改完环境变量后,当前已经打开的终端不会自动刷新。务必全部关闭重开,别只开一个新标签页就测试。
2. CLAUDE.md 就是项目级模板:架构、栏位设计与写模板的套路
很多人用了几天 Claude Code 后最崩溃的一点是:它每次对话都像第一次见到你的项目。想让它真正“懂”项目,靠的不是在对话里一遍遍解释,而是给它一份项目级系统提示词模板——CLAUDE.md。
2.1 CLAUDE.md 的本质:一段常驻上下文的项目说明书
Claude Code 启动时会自动读取两个位置的 CLAUDE.md:
- 用户级:
~/.claude/CLAUDE.md,对你所有项目生效。适合放通用的编码偏好、通用工具链说明。 - 项目级:
项目根目录/CLAUDE.md,只对当前项目生效。适合放架构说明、构建命令、测试命令、目录结构、约定俗成。
这份文件的内容会作为“初始记忆”注入到每次对话的上下文里。当然,它不是无限量的,项目级文件太长了也会挤占上下文窗口,所以要写得像“面试时的项目简介”,而不是把整本文档塞进去。
2.2 一份可以直接套用的 CLAUDE.md 模板
下面是我的项目里实际在用的精简版模板,你可以根据自己的项目改。核心思路是:用结构化的段落,让 AI 在最短路径上拿到“我是谁、怎么跑、怎么测、别碰什么”。
# 项目概况 这是一个面向XX场景的Web应用,采用前后端分离架构。 - 前端:Vue 3 + TypeScript + Vite - 后端:Node.js + Fastify + PostgreSQL - 包管理:pnpm # 常用命令 - 安装依赖:pnpm install - 启动开发环境:pnpm dev - 构建生产版本:pnpm build - 运行全部测试:pnpm test - 单独测试某个文件:pnpm test -- <file-path> # 代码规范 - 组件使用组合式 API(Composition API),避免 Options API - API 返回格式统一为 { code, message, data } - 禁止在业务代码里写 `any` 类型,必须显式定义 interface - 时间字段统一使用 ISO 8601 字符串,不直接存时间戳 # 系统约定 - 数据库表名使用 snake_case,字段名也是 snake_case - 错误处理统一进全局 error handler - 日志使用 pino,禁止直接 console.log # 重要约束 - 不要修改 src/core 目录下的核心逻辑,除非用户明确要求 - 新增依赖前先说明用途 - 提交代码前必须通过 lint:pnpm lint写这份模板时要注意几个原则:命令要精确到可执行,不要写“运行测试”这种模糊描述;规范要给反例或正面例子;约束项要克制,只写真正的红线。写太多约束反而会让 Claude Code 变得畏手畏脚。
2.3 用 /init 自动生成种子模板
如果你不知道从哪里下笔,可以直接在项目目录里执行:
claude然后在对话里输入:
/init它会扫描项目里的配置文件、依赖清单、源代码结构,自动生成一份 CLAUDE.md 初稿。生成之后不要直接收下,一定要自己过一遍:把里面过度概括的句子改精确,把缺失的关键命令补上。我每次用/init之后至少会改三轮,第一轮纠正事实错误,第二轮补命令,第三轮删掉无关紧要的废话。
这份文件是你应该纳入版本管理的资产。我在所有团队项目里都会把它放进行项目代码库,并约定好“改架构必须先改 CLAUDE.md”。这样不管是老成员换电脑,还是新成员接管项目,都能让 AI 助手保持同一套认知体系。
3. 命令模板与个性化指令:把高频操作固化成 Slash Command
CLAUDE.md 解决的是“项目常识”问题,但实际操作中还有很多重复性任务——比如生成 commit message、写单元测试、做 code review、按公司规范生成接口文档。这些动作每次对话都靠口头描述,既浪费 token,又容易模板遗漏。正确做法是用 Slash Commands 把它们固化成命令模板。
3.1 几个内置命令的实际用途
Claude Code 自带了不少斜杠命令,我列几个高频的:
/init:上面说过,自动生成或更新 CLAUDE.md。/clear:清空当前对话上下文,相当于让 Claude “重启记忆”。当你觉得它开始胡言乱语,多半是上下文被污染了,直接 /clear。/status:查看当前工作区改动、涉及的代码块,避免你忘了自己改过什么。/compact:压缩对话历史,保留关键信息的同时释放上下文窗口。适合长任务做到一半想继续的情况。/cost:查看当前会话的成本统计。用 API 计费模式时很有用,能及时止损。/mcp:管理 MCP 服务连接。当你接入了更多外部工具(数据库、文件系统、搜索)时,用它来增删连接。
这些内置命令不需要死记硬背,直接在对话里敲/就能看到列表。
3.2 自定义命令的目录结构与语法
自定义 Slash Command 本质上就是放在指定目录下的 Markdown 文件。以项目维度的命令为例,把文件放在项目根目录的.claude/commands/下面;全局的命令放在~/.claude/commands/下面。
文件名就是命令名。比如你要建一个review命令,就创建.claude/commands/review.md。文件内容里可以使用占位符,比如$FILE表示当前选中文件,$ARGUMENTS表示你在命令后跟的参数。
一个典型的代码审查命令长这样:
你是这个项目的资深 Code Reviewer。 请对当前分支的改动进行审查。 审查维度: 1. 是否存在逻辑错误或边界条件遗漏 2. 是否违反项目 CLAUDE.md 中的代码规范 3. 是否有潜在性能问题 4. 测试是否覆盖了关键路径 输出格式: - 按严重程度分组列出问题 - 每个问题给出:具体位置、问题描述、修改建议 本次改动涉及的文件: $ARGUMENTS保存后,在同一项目里启动 Claude Code,输入/review就会触发这段模板。如果命令后跟了参数,参数会替换到$ARGUMENTS位置。
3.3 三个值得抄走的命令模板
我把自己常用且经过多轮打磨的三个命令模板分享在这里,稍微改改就能用。
生成规范的 commit message:
请根据当前 git diff 的内容生成一个符合条件的 commit message。 要求: - 使用 Conventional Commits 格式(type(scope): subject) - subject 不超过 50 个字符 - 正文说明改动动机,而不是机械复述代码行为 - 如果有 breaking changes,在 footer 里标注 当前 diff 内容如下: $ARGUMENTS用的时候我会先git diff把内容复制到命令后面。模板化的好处是,不管谁来提交代码,产出格式都统一。
为新功能补测试:
你是一个前端项目的测试工程师。 请为下面的代码文件编写单元测试: $ARGUMENTS 要求: - 使用 Vitest + @testing-library/vue - 覆盖正常路径、边界情况和错误分支 - 模拟外部依赖,避免真实网络请求 - 断言要聚焦用户可观察的行为,不要断言实现细节注意,这类任务我一般让它先产出测试计划,确认后再写代码,避免它盲目生成一大坨低级测试。
接口文档生成:
根据以下接口代码,生成 OpenAPI 规范的 YAML 文档: $ARGUMENTS 包含: - 请求参数、路径参数、请求体结构 - 响应结构,含错误响应 - 各个字段的类型说明命令模板的维护成本很低,却能让整个团队的使用体验高度统一。我强烈建议每个项目至少把“提交规范”和“代码审查”两个命令先建起来。
4. Skills 技能的安装与编写:模板化的下一步
如果说 CLAUDE.md 是“静态说明书”,Slash Commands 是“快捷指令”,那么 Skills(技能)就是“一组带资源和步骤的完整能力包”。技能适合在重复性很高、又需要参考具体资料的场景里使用。热词里经常有人问“claude code 怎么手动装 github 上的 skills”,这一节就来解这个问题。
4.1 什么时候值得引入 Skills
我先打个比方:CLAUDE.md 像你入职时看的新员工手册,Slash Commands 像快捷键,而 Skill 像一套“SOP 工具包”——里面既说明白了流程步骤,又可以附带参考文件、脚本模板、检查清单。当某个任务满足以下条件时,我会优先考虑做成 skill:
- 流程固定且复杂,比如“生成一个新模块的标准脚手架”
- 需要引用一套项目外的规范文件,比如团队设计规范、后端接口约定
- 希望 AI 主动识别何时使用,而不是靠用户每次手动触发
4.2 从 GitHub 手动安装一个 Skill 的完整流程
社区里有很多现成 skills 仓库,比如 anthropics/skills 官方仓库以及各种第三方集合。手动安装不需要额外工具,本质就是把仓库里的 skill 目录放进 Claude Code 的 skills 搜索路径下。
以官方 skills 仓库为例,完整过程是:
git clone https://github.com/anthropics/skills.git然后在项目根目录创建一个.claude/skills/目录,把你需要的某个 skill 子目录复制或软链到里面。比如你想用文档技能:
mkdir -p .claude/skills cp -r skills/documentation/. .claude/skills/documentation/装完之后,再去项目里启动 Claude Code,它会在对话中自动判断什么时候适合调用这个 skill。如果你想让某个 skill 更显眼,也可以在 CLAUDE.md 里加一句“当涉及文档生成时,使用 documentation skill”。
注意:skill 目录大小写要规范,文件名要符合官方约定;目录里一般至少要有一个
SKILL.md文件,Claude Code 靠它来识别这个技能。
4.3 SKILL.md 的结构与一个最小可运行示例
SKILL.md 采用 YAML frontmatter + Markdown 正文的结构。frontmatter 里最重要的字段是name和description,其中 description 一定要写清楚“什么场景下使用”,因为模型是靠描述来决定何时唤起技能的。
一个最小可运行的 skill 长这样:
--- name: create-api-module description: 当用户需要新增一个 API 模块(包含路由、校验、Service 和测试)时使用该技能。 --- # 创建 API 模块 ## 步骤 1. 在 src/api 下创建以模块名命名的目录 2. 创建 router 文件,导出路由实例 3. 创建 validation 文件,定义请求体和响应结构 4. 创建 service 文件,实现业务逻辑 5. 在 tests 目录下补充接口测试 6. 更新 src/api/index.ts 注册新路由 ## 参考规范 - 路由文件命名:`{module}.routes.ts` - 校验文件命名:`{module}.validation.ts` - Service 必须返回统一包装结构 `{ code: 0, data, message }` ## 附带的模板文件 参考本目录下的 `templates/` 文件夹,里面提供了 router 和 service 的基础模板代码。这里的关键是:步骤要具体到用户可以照做,规范要足够明确,模板文件放在 skill 目录下的templates/子目录里。模型拿到这个技能后,能直接按照步骤生成文件,然后套用模板代码,再按规范调整细节。
Skills 的深度还可以扩展,比如在 skill 目录里放references/放更长篇的规范文档,放scripts/放可执行的辅助脚本,但我建议从最小可用开始做起,先跑通一个简单的,再慢慢加东西。
5. 把 Claude Code 接到其他模型服务:DeepSeek 与多供应商配置
Claude Code 的默认后端是 Anthropic 官方模型,但社区里早就探索出了“借助兼容层环境变量,把它接到其他模型服务”的玩法。热词里大量出现“claude code 接入 deepseek”“claude code 接 qwen key”这类需求,本质都是同一件事:让 Claude Code 的客户端壳子,使用你自己的模型 API 后端。
5.1 核心原理与环境变量
Claude Code 读取的环境变量主要有两个:
ANTHROPIC_API_KEY:认证用的 API Key。ANTHROPIC_BASE_URL:API 请求的地址前缀。
默认情况下,ANTHROPIC_BASE_URL指向 Anthropic 官方服务。但很多兼容服务(包括部分国内大模型服务商和自建的 API 网关)会提供 Anthropic 兼容格式的接口,只要把这两个环境变量换成对应的值,Claude Code 就能把请求转到别的模型上。
具体操作在 Linux/macOS 上是:
export ANTHROPIC_API_KEY="你的key" export ANTHROPIC_BASE_URL="https://你的接口地址"在 Windows PowerShell 上是:
$env:ANTHROPIC_API_KEY="你的key" $env:ANTHROPIC_BASE_URL="https://你的接口地址"设置完直接运行claude即可。这里有个细节:如果你用的是 DeepSeek 这类本身不提供 Anthropic 原生协议的模型服务,可能还需要通过一个“协议转换路由层”把 Anthropic 协议翻译成 OpenAI 兼容协议。社区里常见的做法是使用claude-code-router这类工具,在本地起一个中间层服务,然后让ANTHROPIC_BASE_URL指向这个本地路由。
5.2 经路由接入 DeepSeek 的完整操作路径
我以claude-code-router为例,描述一下接入流程,具体版本以项目文档为准:
- 安装路由工具,比如通过
npm install -g @anthropic-ai/claude-code-router这类方式。 - 准备配置文件,在里面定义你要使用的供应商(比如 DeepSeek)以及对应的模型 API Key。
- 配置
ANTHROPIC_BASE_URL指向本地路由端口。 - 启动路由服务,然后启动 Claude Code,选择对应供应商作为默认后端。
配置示例(仅演示用途,字段名以实际文档为准):
ANTHROPIC_BASE_URL=http://127.0.0.1:3456/v1 ANTHROPIC_API_KEY=sk-xxx之后在 Claude Code 里可以通过选项切换默认模型。需要说明的是,这种接入方式在延迟、稳定性和工具调用兼容性上都跟官方后端有差异,适合开发测试环境,不一定适合生产环境高强度使用。
5.3 cc-switch / cc-connect 配置焦点与 base_url 报错
社区里还有一个高频词是cc-switch,它其实是一个图形化的供应商切换工具,通过可视化管理多套环境变量配置,快速切换 Claude Code 的后端。配置页面里通常会让你填三样东西:label(标签)、api key、base url。很多人在这里栽跟头,报错长这样:
api error: 400 配置错误: claude provider 缺少 base_url 配置这个报错实在太典型了。根因就在于:你选择了 “claude provider” 这个供应商类型,但配置表单里没填 base_url。有些供应商模板默认 base_url 为空,需要手动填成你实际请求的地址。比如自建网关或第三方中转服务,需要填完整的https://域名/v1这种格式,而不是裸域名,更不能留空。
还有一部分人是用了cc-connect配合飞书做通知/联动,在 Windows 上配置时容易遇到网关签名问题,报错里会出现couldn't sign in to gateway或the provider rejected。这类问题一般要从三处排查:网关地址是否可达、密钥是否正确、飞书侧配置的权限与回调地址是否匹配。调试时先盯网络层,再检查密钥和参数。
接入非官方模型这件事,我的心态是:Claude Code 的优势在于“终端内任务编排 + 上下文记忆”,模型后端只是其中一个环节。利用兼容层尝试不同的模型,可以让你在预算有限或特殊场景下继续使用这套工作流,但凡是涉及核心交付的任务,我还是会切回官方模型,质量差异在复杂任务上非常明显。
6. VSCode 集成与桌面端:从命令行走向图形化
很多团队协作场景下,不是所有人都愿意整天对着终端。Claude Code 现在的生态已经覆盖了 VSCode 扩展和桌面客户端,让那些习惯 IDE 和图形界面的人也能用上同样的能力。
6.1 VSCode 扩展的正确打开方式
在 VSCode 应用市场里可以直接搜到 Claude Code 的官方扩展。安装后,左侧边栏会出现对话面板。这个扩展的好处是:它能自动感知你当前打开的文件和项目工作区,相当于在 CLAUDE.md 之外又加了一层“现场上下文”。
我习惯的用法是:
- 先在扩展的对话面板里描述任务,比如“重构当前文件,把逻辑拆成两个 hooks”。
- 模型会基于当前打开文件 + 项目上下文给出方案。
- 确认方案后,让它直接生成 diff,在编辑器里预览。
- 常见的操作是在 VSCode 里选中一段代码,右键让 Claude 解释或修改。
如果你更喜欢键盘流,VSCode 集成后有一个很好用的特性:直接在终端面板里跑claude,让 CLI 和扩展同时使用同一个项目目录。两者的上下文记忆都来自 CLAUDE.md 和 skills,所以并不会出现“换个入口就失忆”的问题。
6.2 桌面端/客户端的适用边界
Claude Code 桌面版适合连接云端开发环境或远程服务器工作区。你可以理解成它是“带 UI 的终端入口”,内部仍然是走命令行和启动语言模型。界面上通常有会话列表、文件参考、成本统计等可视化信息。
桌面版在多人协作时很有价值,因为它能把工作区绑定到统一路径,避免本地各跑各的。如果你所在团队的代码都在远程开发容器里,桌面端可以直接连接这个工作区,不需要再在本机折腾 WSL 和 Node 环境。
我给团队的建议是:单兵作战用 CLI + VSCode 扩展就足够舒服;多人协作、需要共享服务器环境时再上桌面端。工具没有绝对的好,只有合适不合适。
7. 高频报错排查记录:从消息到根因
最后一部分,我把使用过程中整理的高频报错和排查思路集中放这里。每一条都有人问过,我按“报错长什么样 -> 根因是什么 -> 怎么处理”来写。
| 报错信息 | 根因 | 处理方式 |
|---|---|---|
| 无法将“claude”项识别为 cmdlet | npm 全局目录未加入 PATH | 把npm root -g对应目录加入 PATH,重开终端 |
| workspace requires the Virtual Machine Platform | Windows 没启用虚拟机平台/WSL | 开启 Windows 功能里的 Virtual Machine Platform 并重启 |
| unfortunately, claude is not available to new users right now | 账号或渠道注册受限 | 走官方可用渠道注册或耐心等待访问放开 |
| note: claude code might not be available in your country | 地区支持限制 | 改用兼容层接入合规可用的模型 API 服务 |
| api error: 400 缺少 base_url | 供应商模板没填 base_url | 在配置里补全完整https://域名/v1地址 |
| couldn’t sign in to gateway | 网关地址不可达或密钥错误 | 检查网络地址、密钥、回调配置 |
| claude : 无法将“claude”项识别...(WSL 内) | WSL 环境里单独安装了 Node 但路径不对 | 在 WSL 内安装时确认 PATH,必要时用绝对路径启动 |
老生常谈但必须提的一句:排错顺序永远是从环境检查开始。先确认版本、确认配置、确认路径,再怀疑模型问题。我工作中遇到报错,第一步永远是claude --version和echo $ANTHROPIC_BASE_URL,这两条命令能直接排除一大半可能。
另外,如果你在 VSCode 里配了 Claude Code,但感觉它总是“答非所问”,第一反应不应该是找模型问题,而是检查项目根目录有没有你预期之外的 CLAUDE.md,很多时候是某个子目录的配置把上下文带偏了。把 CLAUDE.md 的加载路径理清楚,很多玄学问题都会消失。
8. 最后说点实际操作中的体会
折腾 claude-code-templates 这一整圈下来,我最大的体会是:这个工具链的成长速度极快,但它的学习曲线不在“怎么装”,而在“怎么把默认行为改成自己团队需要的样子”。CLAUDE.md、Slash Commands、Skills 三者的组合,几乎能覆盖一个软件团队日常开发 80% 以上的重复性指令工作。
我的真实建议是,不要一上来就追求完美的技能体系。先在项目里建一个基础的 CLAUDE.md,把构建、测试、规范三件事写清楚;用一周时间观察哪些指令你每天都在重复输入,然后从最痛的一两个点开始做成 Slash Command;等到命令模板多到需要分类管理了,再考虑升级成带资源的 Skills。至于模型后端、GUI 集成这类外围配置,完全可以在核心工作流稳定之后再慢慢调。工具是为人服务的,能让你的日常开发少被打断,就是好工具。