
先交代一个背景这套claude-code-templates不是某个官方仓库而是我基于 Claude Code 日常使用半年多之后沉淀下来的一套“模板集合”。起因很简单Claude Code 是真正能落地的 AI 编码工具但它不是一个开箱即用、永远不用管的黑盒。每次开新项目、换新机器都要重新设置 CLAUDE.md、重新敲一遍约束规则、把权限配置和 hook 脚本再配一次。如果不把这些东西沉淀成模板每换一个项目就等于把同一个坑重新踩一遍。所以我把提示词、配置文件、脚本模板全部整理进了claude-code-templates让“配置一套到处复用”成为现实。这篇文章就是完整拆解这套模板的设计思路、内容结构、实操步骤以及我在整理和使用过程中踩过的各种坑希望能帮到正在用或准备用 Claude Code 的朋友。1. 先搞懂 Claude Code 到底在终端里做了什么1.1 一分钟理解 Claude Code 的定位Claude Code 是 Anthropic 推出的官方命令行 AI 编码工具。它和网页版 Claude 聊天最大的区别在于它能直接站在你的项目目录里干活。你在终端输入claude启动它之后它可以读取当前仓库的文件、搜索代码、修改代码、运行测试、执行 shell 命令还可以调用外部工具。本质上它不是“问答机器人”而是一个有权限操作你电脑的 agentic 工具。举个例子你让它“帮我把登录接口的单元测试补全”它不会只给你一段建议性的代码而是会自己去读auth/src/login.ts和相关测试文件分析现有测试风格然后直接生成测试文件并保存到项目里。如果发现缺少某个依赖它可能会询问你是否安装。这些操作都需要权限Claude Code 的权限模型允许你给某些命令配置自动放行也可以让它在每次执行敏感操作前征求你的确认。所以它的使用体验和 IDE 补全完全不一样你给的是一个任务目标它负责拆解、执行、验证过程中会不断向你汇报进展。也因为这种“主动行动”的特性它比普通聊天助手更需要一套稳定的上下文约定否则每次会话它都可能跑偏这就是模板库存在的意义。1.2 为什么模板化能大幅提升效率我第一次用 Claude Code 的时候觉得这玩意太强了后来发现一个严重问题每次新建一个项目启动claude之后它的记忆是空的。它不知道这个项目用什么语言、不知道代码风格偏好、不知道哪些目录不能改、不知道测试框架是哪一套。同一类任务我每次都要花几百字去描述背景和约束甚至每次说的还不太一样导致它生成的代码风格飘忽不定。模板化解决的就是这几件事上下文一致性把一个项目的“自我介绍”固定下来写进 CLAUDE.mdClaude Code 每次启动都会自动读取相当于它一进项目就“认识”了代码库。减少重复输入把常见任务的提示词模板化例如代码审查、测试生成、重构、提交信息生成用的时候直接调用不用临场发挥。环境可移植把 settings.json、hook 脚本、权限规则归档换台电脑、换个团队几分钟恢复同样的工作环境。质量兜底好的模板里写清楚了“不要做什么”相当于给 AI 立了一条不能越过的底线减少错误操作和安全隐患。我整理这套claude-code-templates的过程其实就是不断把“我在和 Claude Code 反复沟通的内容”提炼成固定资产的过程。下面这几节就是这套模板库最核心的三块内容。2. 模板库里的三块核心资产2.1 提示词模板让 AI 第一次就按规矩办事提示词模板是整套模板里最常用、也最容易见效的部分。很多人的误区是觉得提示词就是一句话“帮我写个测试”而真正有效的提示词应该包含角色定位、任务目标、输入输出约定、质量标准和禁止事项。我从长期使用中挑出了几个高频场景每个都固化成了模板。第一个是代码审查模板。我用的最终版大致长这样你现在是拥有20年经验的资深代码审查专家。请审查diff中涉及的所有改动输出格式严格按以下结构 1. 总体印象3句话以内 2. 严重问题按严重程度排序每个问题附建议修复方法 3. 改进建议按性价比排序 4. 可以合并的判断通过/需要修改 约束不要泛泛而谈“代码质量良好”必须指出具体行号不要提风格偏好类意见只审查diff范围内涉及的问题。第二个是单元测试生成模板。这个模板能极大减少“生成了一堆空测试”的情况请为以下模块生成单元测试。要求 - 测试框架vitest - 只测试这个模块的对外行为不 mock 内部实现细节 - 每个用例必须有明确断言禁止空壳测试 - 覆盖正常路径、边界条件、异常输入三类场景 - 测试文件保存到与源文件同级的 __tests__ 目录 - 生成后运行一次测试命令把结果反馈给我第三个是重构模板。这个模板的重点是“限制 AI 的发挥空间”请在不改变函数签名和外部行为的前提下重构以下代码片段。优化目标按优先级排序 1. 可读性 2. 减少嵌套复杂度 3. 消除重复逻辑 重构完成后给我一份变更摘要说明每处改动的理由。 注意不允许引入新的依赖不允许改变现有注释重构范围仅限于指定的这段代码。为什么要模板化因为 Claude Code 是对话式的对话次数越多越容易产生上下文漂移。开头几次它还遵守规矩聊到后面如果用户插了几句无关内容它可能就忘了某条约束。把约束写在模板里每次任务一开始就调出来相当于把最容易失效的“口头约定”变成了“初次指令”效果稳定很多。在模板的组织方式上我建议按“任务类型”来分目录不要全部堆在一个文件里。我目前的仓库结构是这样的claude-code-templates/ ├── prompts/ │ ├── code-review.md │ ├── unit-test-generation.md │ ├── refactoring.md │ ├── commit-message.md │ └── architecture-design.md ├── configs/ │ ├── settings.json │ ├── CLAUDE.md.example │ └── permissions.json ├── hooks/ │ ├── pre-commit-format.js │ └── post-tool-use-log.js └── scripts/ ├── init-project.sh └── apply-templates.sh每个目录解决一个问题使用的时候直接复制到目标项目里。后面我会给出具体的使用流程。2.2 配置文件模板settings.json 与 CLAUDE.md 的结构设计配置文件是模板库的骨架。Claude Code 有两个关键的配置文件一个是settings.json一个是CLAUDE.md。settings.json控制的是工具级行为比如权限、hook、模型参数。它分成项目级和用户级两级项目级的放在.claude/settings.json用户级的放在用户目录下。我模板里的settings.json大概长这样{ permissions: { allow: [ Read, Glob, Grep, Edit, Bash(npm run lint), Bash(npm run typecheck) ], deny: [ WebFetch, Bash(rm -rf *), Bash(shutdown *) ] }, hooks: { PreToolUse: [ { matcher: Bash, hooks: [ { type: command, command: node ~/.claude-templates/hooks/pre-command-check.js } ] } ] } }permissions.allow是白名单把高频且安全的操作自动放行比如读取文件、搜索、编辑以及两个无副作用的命令。permissions.deny是黑名单明确禁止危险操作。这样配好之后日常开发中大部分基础操作不用频繁确认同时又保留了对危险命令的拦截。注意 WebFetch 实际上是可以安全用的但我在团队场景默认禁掉避免模型随意抓取网页内容导致注意力被带偏真需要的时候再临时放开更安全。CLAUDE.md是 Claude Code 的项目记忆文件或者说“项目说明书”。这个文件最关键因为每个项目启动时它都会被自动加载。我的模板给了三个不同的 CLAUDE.md 版本一个是 Node.js 后端项目模板一个是前端项目模板还有一个是 Python 项目模板每个都用同样的骨架# 项目概述 一两句话说明这个仓库是做什么的 # 技术栈 列出语言、框架、关键依赖以及版本要求 # 已确认的命令 构建命令、测试命令、运行命令分成常用和不常用两栏 # 架构约定 模块边界、目录结构说明、禁止跨层依赖有哪些 # 编码偏好 命名规范、错误处理方式、测试风格、注释风格 # 不要做 列出 AI 最容易做错的事项例如不要修改schema、不要自动升级依赖等这个结构非常朴素但每一条都有明确价值。比如“不要做”这一节我一开始没写结果 Claude 经常自作主张去升级依赖版本或者顺手重构掉一些看起来不好的代码导致我 review 成本剧增。加了“不要做”之后行为立刻收敛了很多。CLAUDE.md 不需要写太长重点是高频、稳定、可执行的信息。2.3 脚本与 Hook 模板把重复动作自动化模板库的第三块是 hook 脚本。Claude Code 提供了 hook 机制可以在特定事件发生时执行自定义脚本比如PreToolUse、PostToolUse、UserPromptSubmit等。这块是效率和安全的双重保障。我实际在用的 hook 有两个。第一个是 PreToolUse 的检查脚本它会拦截所有即将执行的 Bash 命令检查命令是否包含危险模式比如删除数据库、强制执行 push 等一旦命中就中止操作。这个脚本我在一次事故之后写的当时 Claude 在跑测试的时候误执行了一个清理脚本把我的临时目录清空了虽然没造成什么不可逆的损失但这个教训让我意识到默认权限不能给得太宽。const { execSync } require(child_process); const command process.env.CLAUDE_TOOL_INPUT || ; const dangerousPatterns [ /rm\s-rf\s*[\/~]/, /drop\stable/i, /git\spush\s--force/i, /curl\s.\|\s*sh/i ]; if (dangerousPatterns.some((pattern) pattern.test(command))) { console.error(拦截到危险命令已阻止执行 command); process.exit(2); }第二个是 PostToolUse 的日志钩子把所有 AI 执行过的工具调用记录到本地日志文件。这条日志特别有用因为 Claude Code 会话崩了或者你想回顾一次长会话到底做了什么没有日志就只能靠记忆。有了日志就可以写脚本统计 AI 在哪些操作上花的时间最多、地图里跑了什么命令。hooks 里的脚本不一定复杂关键在于“把关键动作沉淀成可审计、可自动化、可复用的代码”这正是模板库叫 templates 而不是 tools 的原因。3. 从零搭建一套可复用的 claude-code-templates3.1 安装与初始化Windows / macOS / Linux我先说一下 Claude Code 本身的安装方式再讲模板的落地方案。Claude Code 是一个 npm 全局包官方推荐的安装命令npm install -g anthropic-ai/claude-code装完之后在终端输入claude就能启动。macOS 和 Linux 上这一步没什么问题Windows 用户要注意 Node.js 的版本建议 18 以上。装好之后建议先运行一遍claude并完成登录验证然后进入下一步初始化项目模板。启动 Claude Code 后在交互界面里输入/init它会分析当前项目的代码结构自动生成一份基础的 CLAUDE.md。这个功能对新手很友好但对我的模板库来说只是起点。/init生成的 CLAUDE.md 基于对代码的静态分析缺少团队约束和项目潜规则所以我会再用自己的模板覆盖它。初始化模板库的方式有两种。第一种是直接把模板仓库克隆到本地git clone https://github.com/yourname/claude-code-templates ~/.claude-templates第二种是把模板作为项目模板的一部分复制到每个新项目里cp -r ~/.claude-templates/configs/CLAUDE.md.example ./CLAUDE.md cp -r ~/.claude-templates/configs/settings.json ./.claude/settings.json cp -r ~/.claude-templates/hooks/* ./.claude/hooks/这两种方式我都用过。对个人项目第二种更干净因为模板副本不会污染项目仓库对团队项目我推荐第一种把模板仓库作为统一基准然后要求每个人在自己本地同步。3.2 把模板写进项目的具体位置这套模板的关键是理解“三个层级”的配置覆盖关系。层级从高到低分别是用户级配置文件、项目级配置文件、CLAUDE.md 项目说明。用户级配置位置Windows%USERPROFILE%\.claude\settings.jsonmacOS / Linux~/.claude/settings.json项目级配置位置是.claude/settings.json和用户级相比项目级只影响当前仓库。CLAUDE.md 直接放在项目根目录属于最高优先级的内容级配置相当于一进项目就先加载“项目身份证”。三个层级的覆盖原则是都保留但项目级和 CLAUDE.md 里的说明会覆盖用户级里冲突的部分。我之前踩过一个配置混乱的坑在用户级权限里把Bash(npm run * )全部放行然后项目里又放行了一个更宽泛的Bash(*)结果就是 Claude 在项目里可以无限制跑任何命令。后来我把模板里用户级和项目级的权限声明分开并明确规则项目级只能缩小权限范围不能扩大权限范围。这个约定写进了模板的 README 里之后团队里再没出现过类似问题。模板里的apply-templates.sh脚本做了一件事把上面的复制过程自动化。它会检查当前目录是否存在.claude目录不存在就创建然后把模板复制进去最后提示用户手动检查 CLAUDE.md 里的项目说明。这样从克隆代码到开始使用 Claude Code大概只需要一分钟。3.3 接入第三方模型以 DeepSeek 为例Claude Code 默认使用 Anthropic 的模型但它支持通过环境变量切换模型端点。社区里常用的玩法是接入 DeepSeek利用 DeepSeek 兼容的 API 接口把 Claude Code 变成一个前端底层换成其他模型。这对预算有限、或者想尝试不同模型效果的团队来说是一个很实际的用法。我以 DeepSeek 为例给出配置方式。确认好 DeepSeek 官方提供 Anthropic 兼容端点后在终端设置两个环境变量export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic export ANTHROPIC_AUTH_TOKEN你的DeepSeek_API_Key然后启动 Claude Code 时指定模型claude --model deepseek-chatWindows PowerShell 下对应的写法$env:ANTHROPIC_BASE_URL https://api.deepseek.com/anthropic $env:ANTHROPIC_AUTH_TOKEN 你的DeepSeek_API_Key claude --model deepseek-chat这里一定要留意很多教程会同时设置ANTHROPIC_API_KEY但在兼容模式下ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY的优先级和行为是有差异的。我实测下来使用兼容端点时用ANTHROPIC_AUTH_TOKEN更稳定用ANTHROPIC_API_KEY有时会触发类似unexpected status 401 unauthorized的报错。如果发现401先检查是不是同时设置了多个 key 环境变量互相冲突了。这个配置方式有几个副作用需要提前说清楚。切换到 DeepSeek 之后Claude Code 的一部分高级功能依赖后端模型能力不同模型的 tool calling 能力、long context 表现、指令遵循能力都不一样所以模板里的提示词可能需要微调。我的建议是保留默认的 CLAUDE.md但提示词里的“绝对不要做什么”类约束要写得更强硬因为弱模型更容易在长上下文里忘记约束。3.4 在 VS Code 里配合使用除了纯终端使用Claude Code 也可以和 Visual Studio Code 结合。Anthropic 官方提供了一个 VS Code 扩展装上之后可以在编辑器里直接打开 Claude Code 面板不用来回切换终端窗口。我个人的使用习惯是复杂的全局操作放终端会话文件级别的修改放 VS Code 面板。原因很简单终端里跑命令方便看日志编辑器面板里看 diff 方便 review。模板库在 VS Code 场景下的适配主要是让它生成的代码改动更符合编辑器里的工作流。具体做法是在模板的 CLAUDE.md 里加了一行约定“所有修改都使用 Edit 工具并展示 diff不要使用全文重写”这样它改代码时会尽量做最小修改diff 看起来清晰。另外在 settings.json 里把 diff 相关的命令加入白名单。这套适配做完之后在 VS Code 里 review AI 的改动舒服很多同时也能用上 VS Code 的自带 Git 能力。4. 高频报错与避坑指南模板再完善也挡不住环境问题。这一节把我实际遇到的高频报错和排查思路整理成速查表每一条都是真实踩过的。4.1 API Key 相关的 401 错误Claude Code 启动后最常见的报错是 401unexpected status 401 unauthorized: {error:{code:invalid_api_key}} unexpected status 401 unauthorized: {error:{code:api_key_required}} unexpected status 401 unauthorized: {error:{code:unauthorized}}这三个报错虽然都是 401原因完全不同。invalid_api_key表示 API Key 本身是无效的最常见原因是复制的时候多复制了空格或引号。我排查过一次发现是我在 PowerShell 里设置环境变量时用了中文引号明面上看起来一样实际字符串里多了两个不可见字符。解决办法是重新设置环境变量设置完用echo $env:ANTHROPIC_API_KEY打印出来检查。在 bash 里可以用env | grep ANTHROPIC来看当前生效的所有相关变量。api_key_required表示根本没检测到 API Key。这种情况在用户同时用 API Key 和订阅登录两种方式时容易出现。Claude Code 的官方登录方式有两种一种是使用订阅账号初始化时的 token 会存在本地另一种是设置环境变量方式二选一即可。如果你同时设置了 API Key 又残留了本地 token 文件可能触发冲突。处理方式是清理本地残留的凭据缓存重新用环境变量方式配置。unauthorized表示身份认证通过但权限不足通常是因为账号额度耗尽或者 Key 所属账号没有权限使用。这时候去控制台检查配额就行。还有一种跟 401 相关的报错是error code token_exchange_failed details token exchange failed这个一般出现在订阅账号的 token 过期或刷新失败时。处理思路是先退出重新登录如果还不行就换用 API Key 方式。下面这张表是速查版报错内容常见原因排查方向invalid_api_keyKey 复制错误、包含隐藏字符重新设置并打印检查api_key_required环境变量未生效检查是否使用正确的变量名unauthorized配额不足或账号不可用去控制台检查项目权限token_exchange_failed订阅 token 过期重新登录或改 API Key4.2 地区限制提示的处理思路Claude Code 在部分地区、区域会出现以下提示{error:{code:unsupported_country_region_territory,message:country, region, or territory not supported}}以及note: claude code might not be available in your country. check supported countries这类提示表面上是网络出口区域层面的校验实际上是服务端对账号区域和当前网络位置的综合判断。我遇到这个问题时第一反应千万不要想着去改什么系统设置来“绕”因为这是服务端策略并涉及合规层面用非常规手段只会让账号风险变大。正确做法是先确认账号的注册区域、付款方式对应的区域以及当前使用的网络出口区域是否一致。如果账号头部和网络出口不在同一区域服务端会直接拒绝。这种情况需要先解决账号区域一致性问题这也是我踩坑之后总结出来的注册账户时候填的信息要真实可用后面使用最好不要跨区频繁切换。这个问题本质上属于账号层面的问题和安全合规高度相关所以在模板库的 FAQ 里我写的处理建议很简单查看官方支持地区列表确认当前区域是否在列表内不要在非官方支持的地区强行使用非正规手段访问这是对自己账号和代码安全负责。4.3 PowerShell 无法识别 claude 命令Windows 上另一个非常常见的报错claude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。这个报错的本质是claude命令不在当前 PATH 里。npm 全局包安装后会生成一个可执行文件放在 npm 的全局 bin 目录Windows 上通常是%APPDATA%\npm。如果这个目录没被加入系统 PATH终端就找不到claude。排查步骤就三步运行npm config get prefix获取 npm 全局目录。确认那个目录下的claude.cmd或claude文件存在。把该目录加入系统环境变量 PATH 并重启终端。如果装了 nvm for Windows这个问题更常见因为不同 Node 版本下全局 bin 目录会跟着变。解决方式是固定 Node 版本后再重新安装一次 Claude Code并确认 PATH 指向的是当前版本对应的 bin 目录。4.4 Windows 虚拟化与 VM Platform 报错我在 Windows 上传 Claude 相关客户端时遇到过下面的提示Claudes workspace requires the Virtual Machine Platform on Windows. Enable it and try again.这个提示的意思是Claude Code 的某些沙箱能力依赖 Windows 的可选功能“虚拟机平台”。这个问题本质上和 WSL2 底层机制有关Claude Code 在 Windows 上实现文件系统隔离和沙箱操作时会使用到 Windows 的虚拟化能力。解决方法是打开“启用或关闭 Windows 功能”勾选“虚拟机平台”和“适用于 Linux 的 Windows 子系统”重启系统即可。这里有一个值得注意的点如果你平时不用 Docker、不用 WSL突然为了 Claude Code 打开“虚拟机平台”可能在部分老机器上引起内存占用上升和虚拟化性能下降。我建议只在你确实需要用这些功能时才开启不用的时候关闭也不影响。模板库里我把这个开启步骤写进了 Windows 的 README避免团队新成员反复问。4.5 别把不懂的代码粘进 devtools最后想说一条和模板关系不大、但和安全直接相关的问题。网上有些教程会让你打开开发者工具在控制台粘贴一段“激活脚本”或“初始化代码”来实现某些功能。Claude Code 官方文档甚至专门给出过警告dont paste code into the devtools console that you dont understand。我的模板库里没有也永远不会有这种操作。为什么我特别强调这条因为开发者的信任习惯有时候会被利用。你看着一段只有几十行的脚本但它可以读取你的本地文件、访问你的浏览器存储、修改你的 IDE 配置、甚至把你的 API Key 发到另一个地址。一旦你在 devtools 里执行了它就已经运行在和你一样的权限级别上。我的建议是任何让你打开终端或者开发者工具执行不明脚本的“教程”直接关掉。这比我模板里任何一条权限规则都重要。5. 这套模板还能怎么扩展5.1 从个人模板到团队规范个人使用的模板和团队使用的模板设计重心完全不同。个人用的时候重点是“省事”所以权限可以放得很宽CLAUDE.md 也可以写得随意。团队场景就不一样了模板是一份“公共约束”每个字都要经得起讨论。我后来把模板库从个人仓库扩展成了团队仓库改动最大的是三块一是把 settings.json 里所有权限声明都加了注释注明为什么放行二是新增一个CODEOWNERS规则指定 CLAUDE.md 和 hooks 目录的负责人任何修改都必须经过 review三是在 CI 里加了一个检查脚本在代码提交时检查当前仓库的.claude目录是否和模板仓库一致防止有人修改了团队约定。这套东西跑起来之后最明显的变化是团队里的初级工程师也能放心让 Claude Code 干活了因为约束都写死在模板里AI 不会轻易越界。新同事克隆仓库后运行一遍apply-templates.sh看到和团队其他人完全一样的命令规则学习成本低了很多。5.2 与其他工具的组合玩法Claude Code 不是银弹它最好和其他工具配合使用。模板库扩展到现在我参考了不少代码片段组织方式其中有一个灵感来自 30 seconds of code 这类短代码风格的思路每个模板尽量压缩到“一段能快速理解、复制即用的内容”而不是一个几百行的巨型配置。实战中最常用的组合是Claude Code 负责生产代码和测试常规 lint、typecheck、format 交给项目自身的工具链git pre-commit hook 负责把关。Deploy 和发布流程不要交给 Claude Code至少现阶段别让它碰生产环境因为生产发布需要的审计链路和权限隔离非常严格AI 工具目前不适合直接介入最后一公里。另外我建议把 Claude Code 的会话记录和 hooks 日志接入团队内部的日志系统这样如果某次改动出了问题可以回溯当时 Claude 执行了哪些工具调用、读了哪些文件。这种可追溯性比任何“AI 生成的代码质量评级”都更有实际价值。在文档展示层面模板里的提示词文件我同时维护了纯文本版和 Markdown 版。纯文本版是给 Claude Code 直接读取的Markdown 版放在团队 Wiki 里供人查阅。如果你计划把提示词发布成网页记得用precode这类结构保证格式渲染正常至少我见过很多代码片段因为忘了包一层 pre 而显示成一坨乱行的情况。最后分享一点个人体会我在整理claude-code-templates的过程中最大的收获不是工作速度变快了多少而是我终于把“如何让 AI 稳定干活”这件事变成了一套可以复用的方法。模板库不是一次性写完就完事的东西它会随着你项目的演化不断修改。每隔一段时间我会翻一遍 hooks 日志看看 Claude Code 最近在项目里干过哪些事哪些操作是频繁触发权限确认的哪些命令是它自己想出来的然后把新的规则写进模板。这套东西用到现在已经不像“配置”更像是一个陪我写代码的资深同事的工作手册。如果这篇文章对你有用建议你先从 CLAUDE.md 模板和 code-review 提示词开始把这两样放进你的下一个项目里跑两周再调整会比一开始就追求大而全稳健得多。