☰
Claude Code Mod 实战:从斜杠命令到 Hook 的终端 AI 定制指南
2026/10/9 17:09:26 网站建设 项目流程

1. 为什么一个“默认就能用”的工具还要折腾 Mod:先搞清楚改的是什么

如果你打开一个终端工具,第一反应是“它默认能用就行,没必要改”,那这篇可能不太适合你;但如果你跟我一样,总觉得默认配置差点意思,希望它更像一个贴合自己工作习惯的助手,那 Claude Code Mod 这条线值得认真玩一次。我在一个中型项目里连续用了大半年,从纯小白一路折腾到能自己搓 Mod,中间踩了不少文档里没写明白的坑。这篇文章会把从零安装、理解配置目录、手写斜杠命令、挂 Hook、调整输出风格的完整链路一次讲透,顺便把那些我强烈不建议碰的边界也列出来。

先说结论:所谓“Mod”,不是去破解程序、替换二进制、绕过什么认证,那些既危险也没必要。真正有价值的魔改,是改这五层东西——模型看到什么指令、终端里有哪些快捷命令、什么时候自动跑脚本、工具能调用哪些外部能力、最终输出长什么样。这五层每一层都有官方留好的扩展点,只是默认安装不会主动给你展示出来。

1.1 所谓“Mod”到底改的是哪一层

我用一个生活化类比解释。默认的 Claude Code 就像一个刚入职的实习生:能力很强,但不知道你的项目规范、不知道你习惯什么沟通方式、也不知道你提交代码前必须跑哪些检查。你每次都得在对话里反复交代,交代完这一轮,下一轮又忘了。Mod 做的事情,就是把“你的规矩”固化下来,让这个实习生变成“带了三年的老员工”。

具体到技术层面,改动点分成四类:

  • 斜杠命令(Slash Command):把一段固定的高质量指令封装成/review、/commitmsg这样的快捷入口,不用每次重新打字。
  • 钩子脚本(Hook):在某个动作发生时自动触发脚本,比如提交代码前自动检查、任务开始前自动拉取最新分支。
  • 系统提示与项目记忆(System Prompt / Memory):给模型补充你的技术栈、编码规范、回答风格,让它从第一句话开始就懂你。
  • 外部工具接入(MCP / Tool):让它可以读写本地文件、查数据库、调内部服务,扩展能力边界。

我见过很多人把“Mod”想得很玄,总觉得要会编译、要会逆向,其实大部分魔改只需要会写 Markdown 和一点点 shell 脚本。这篇文章就按这个认知展开。

1.2 哪些人适合往下读

如果你是纯新手,完全没装过,从第 2 节开始按顺序读就行;如果你已经装好、只是觉得不顺手,可以直接跳到第 4 节看命令魔改;如果你已经在折腾配置,重点看第 5、6 节,那里讲的是把 Mod 组合起来的工作流设计。我不打算写那种“论文式”教程,所有内容都来自我在真实项目里的操作记录,能复制到你的机器上跑通才叫干货。

2. 从零安装:三步装好,但每一处都有坑

安装这件事看起来简单,但我在帮同事排查时发现,大部分“装好之后用不了”的问题,都出在环境而不是安装命令本身。下面按我实际踩过坑的顺序讲。

2.1 环境准备:版本、包管理器、目录权限

我强烈建议先确认三件事,再执行安装命令,顺序别反。

第一是Node.js 版本。这类命令行工具对运行时有版本要求,太老的或太新的都可能出问题。我自己的经验是:优先用 LTS 版本,别追最新版;如果你同时装了多版本 Node,确认当前终端里node -v出来的那个版本就是你要用的。很多人装完提示“command not found”,其实就是 node 和 npm 的路径没对上。

第二是包管理器可用性。大部分 Linux 和 macOS 机器上,npm 是标配;Windows 上如果你用自带的 PowerShell,建议先装一个兼容层,或者至少在 Git Bash 里操作。内网环境特别需要注意:如果默认源访问不通,先把源换成你的内部镜像,否则安装会一直卡在下载阶段。

第三是用户目录的写权限。安装完之后的配置文件会放在用户主目录下,这个目录一般没问题;但如果你的主目录挂载了网络盘,或者有多用户共享机器,权限就会变得很奇怪。我最惨的一次是配置写不进去,报错提示“Permission denied”,查了半天才发现是主目录被组策略锁了写权限。

2.2 安装方法怎么选

主流做法有两种:

  1. 通过包管理器全局安装:一条命令装完,升级也方便。适合绝大多数开发者。
  2. 下载独立版本放进项目目录:适合需要在多个项目之间隔离版本、或者不想污染全局环境的场景。

我的建议是:第一台机器、第一次玩,用全局安装,省心;等你想长期维护某个项目时,再改成项目级隔离。不要一开始就搞复杂方案,否则你会把精力浪费在环境管理上,而不是魔改本身。

安装完成后,在终端里敲claude --version,能正常打印版本号就说明安装成功。如果这一步就报错,优先检查 Node 版本和 PATH,而不是重装。

2.3 验证安装是否能用

版本号能打印,不代表能工作。我第一次安装后,进入项目目录运行,卡在初始化界面半天,最后发现是因为终端环境变量里缺了一个代理配置,导致它无法初始化对话上下文。所以建议你装完之后直接建一个测试目录,在里面随便问一句“请列出当前目录的文件”,走通一次完整交互,再开始配置 Mod。

这一步没走通,后面所有魔改都是空中楼阁。测试目录不要用真实项目,避免它读取到一堆项目文件后行为变得不可预测。

3. 改装配件区:配置目录、文件结构和最小权限原则

安装搞定后,先别急着魔改,花十分钟把你的“改装配件区”摸清楚。这个区域就是配置目录,几乎所有 Mod 都放在里面。理解它,比背任何 API 都有用。

3.1 配置文件到底在哪

以最常见安装方式为例,配置目录在用户主目录下的~/.claude,里面会逐渐长出这些角色:

  • 全局设置文件:控制工具本身的行为,比如是否开启某些实验功能、默认输出格式、颜色主题等。
  • 项目记忆文件:这是模型每次对话都会参考的说明文件,类似给新同事看的“组内文档”。
  • 命令目录:放自定义斜杠命令的地方,每个命令对应一个文件。
  • 钩子脚本目录:放自动化脚本。
  • 日志目录:记录会话历史,这东西我很建议定期清理,否则吃磁盘。

另外,很多项目会支持“项目级配置目录”,放在仓库里的.claude文件夹。全局配置负责个人偏好,项目配置负责团队规范,两者叠加生效。我见过最头疼的情况是团队把个人偏好写进了项目配置,导致每个人克隆下来之后行为都不一样。

3.2 哪些文件能改、哪些别碰

我给自己定了一条“最小权限原则”:只改文档型配置文件,不碰程序型文件、不碰日志目录里的历史文件、不碰安装目录下的任何东西。

最安全的三类操作是:新建命令文件、编辑记忆文件、编辑全局设置里的可读选项。相对危险的操作是:直接修改工具运行时生成的缓存文件、覆盖未知用途的二进制文件、删除日志目录里正在被写入的文件。

如果你不确定某个文件能不能改,一个笨办法是:先备份,再改一行,重启验证;不行就还原。我在第 7 节的实战里会详细演示这个流程。

4. 手搓第一个 Mod:自定义斜杠命令从零到能干活

很多人第一次魔改,都是从“想要一个自己的斜杠命令”开始的。因为这几乎是回报最高、门槛最低的改动——不用写复杂的脚本,只是把一段好用的指令存成文件。

4.1 一个最实用的/review命令怎么做

我做得最多、也最推荐新人尝试的第一个命令是/review。它做的事情是:让模型以资深审查者的身份,对当前分支的代码改动做一轮检查。

在命令目录下新建一个文件,文件名就是命令名,内容是 Markdown,开头用一小段 YAML 描述元信息,正文就是丢给模型的提示词。整体结构长这样:

--- name: review description: 对当前分支改动做一轮 Code Review --- 请以一位有十年经验的高级工程师身份,对当前分支的代码改动做审查。 重点检查以下四类问题: 1. 是否存在明显的逻辑错误或边界条件遗漏; 2. 是否有并发或资源泄漏风险; 3. 命名和结构是否符合最小惊讶原则; 4. 有没有为了“看起来高级”而引入的过度设计。 输出格式:先给结论(通过 / 需要修改),再按严重程度列出问题, 每个问题必须给出文件、行号、风险说明和修改建议。

然后在对话里直接输入/review,模型就会按照这个严格的结构执行。这里有个关键点:命令的正文不需要太长,但必须“要求具体”。光说“检查一下代码”等于没说;指定四类问题和输出格式,效果立刻不一样。

4.2 让命令带参数

固定检查没问题,但有时候我只想 review 某个文件,怎么办?答案是给命令加输入参数。不同版本的实现细节略有差异,但思路一致:在命令正文里用变量占位符引用用户输入,然后实际使用时这样写:

--- name: review description: 对指定文件做一轮 Code Review --- 请审查文件 {{file_path}},重点检查...

调用时输入/review src/main.js,模型就会把{{file_path}}替换成src/main.js。有些人会在这里把参数写得太复杂,比如要求文件路径、审查等级、是否输出中文三个参数一起传,结果自己都记不住。我的建议是:第一个命令最多带一个参数,够用就行。

4.3 命令文件不生效的常见坑

我连续两次遇到过“明明文件建好了,但命令不出来”的情况,排查过程值得记录:

第一次,文件名带了后缀。我建了review.md,它识别的是review,但实际目录约定是不带.md后缀,或者只识别特定后缀,导致命令列表里永远找不到。查明后去掉后缀,立刻正常。

第二次,改完文件,对话里还是旧行为。原因是命令文件有缓存,不会每次实时重读。后来我养成一个习惯:改完配置后先退出当前会话再重新进入,而不是指望热加载。如果你发现改了半天没生效,先怀疑缓存,别怀疑人生。

提示:命令文件里的 YAML 元信息也是敏感区。漏写name或description时,有的版本会直接忽略整个文件,而且不报错,排查起来非常隐蔽。

5. 给工作流加外挂:用 Hook 实现提交前自动检查

斜杠命令解决的是“你主动开口”的场景,但还有一种更高级的玩法:让它在你没开口的时候自动干活。这就是 Hook。

5.1 Hook 是什么,为什么比手动执行可靠

Hook 的本质是“事件触发器”。当某个事件发生时,工具会调用你配置好的脚本,脚本执行完返回结果,工具再根据结果决定继续还是中断。

我拿最常用的“提交前检查”场景举例。以前我的流程是:写完代码,手动跑一遍测试,再让模型 review,最后提交。但人总会偷懒,总有那么几次“我先提交,测试跑挂了再说”。Hook 的价值就是把这个“老油条心态”堵死:在提交这个动作发生之前,系统自动执行检查脚本,检查不通过就直接阻断。

为什么说它比手动执行可靠?因为手动流程依赖记忆力,自动流程依赖机制。机制一旦建立,每次都会触发,不需要你想着“我该跑了”。

5.2 实际例子:提交前自动检查

我配置过一个最小可用的检查脚本,核心逻辑是:在允许提交之前,先看代码里有没有残留的调试输出。脚本本身不复杂,用 shell 就能写:

#!/usr/bin/env bash # 检查当前代码里是否有调试残留 if grep -rn "console.log\|debugger" --include="*.js" --include="*.ts" ./src 2>/dev/null; then echo "检测到调试残留,请清理后再提交。" exit 2 fi echo "检查通过" exit 0

关键在于退出码:返回0表示放行,返回非零(比如2)表示阻断。配置好之后,我故意在代码里留了一个debugger,提交动作果然被拦了下来。那一刻的爽感,不亚于第一次让自定义命令跑通。

这个脚本是“外挂”的典型形态:它不改模型的行为,而是站在工作流的关键路口当哨兵。你可以在里面跑测试、查格式、检查敏感信息,想挂多少挂多少,但记得别一次挂太多,否则每次操作都会变慢,反而让人想关掉它。

6. 系统性魔改:把输出风格调成自己想要的样子

如果你已经把斜杠命令和 Hook 玩明白了,那接下来最值得花心思的,是“系统级”的魔改——让模型从底层理解你的偏好,而不是靠你在每个命令里重复写要求。

6.1 默认行为与“项目记忆文件”的关系

这类工具的默认行为,相当于一个“通用工程师”,它不知道你所在项目的技术栈、评审规范、代码风格。项目记忆文件就是用来补上这块信息的。

我在一个后端项目里写过一段记忆,内容大致是:

  • 技术栈是 TypeScript + 一个轻量级服务框架;
  • 数据库访问统一走仓储层,禁止在路由里直接写 SQL;
  • 接口返回结构必须包含code、message、data三个字段;
  • 代码注释用中文,但公共方法必须有英文注释;
  • 回答问题时先给结论,再展开解释,不要写太长。

写了这段之后,最直观的变化是:模型给方案时不再漫天发散,而是先问“这个改动会不会影响仓储层接口”,一下就有了一种“在团队里待过”的感觉。

6.2 怎么改才不破坏稳定性

关于记忆文件,我想泼一盆冷水:它不是写越多越好,也不是写得越细越好。我见过有人把整个项目文档全塞进去,结果模型每次处理都会花大量上下文去读这些内容,反而变笨了。

我的经验是三条原则:

  1. 写“决策偏好”,不写“事实百科”:告诉它遇到冲突时怎么选,比告诉它所有技术细节更有效。
  2. 用“否定句”框边界:与其写“代码要优雅”,不如写“禁止为了抽象而抽象,优先写能被快速理解的代码”。否定句更容易被执行。
  3. 定期删旧内容:项目演进后,旧约束可能会跟新需求冲突。我每两周会清理一次记忆文件,把已经不再适用的规则删掉,不然它会成为新方案的最大阻碍。

至于全局设置里的输出风格,我建议只调“语言风格”和“详细程度”,不要做太激进的改动。比如让它在解释概念时多打比方、少说废话,这个没问题;但如果你把它的回答格式改成“永远只说三个字”,那基本就是在自废武功,副作用会很快超过收益。

7. 一次完整的组合实装:从需求清单到翻车修复

前面讲的都是单点 Mod,这一节我把它们组合起来,跑一个完整的模拟场景。项目代号就叫“模拟项目 X”,是一个带基本的用户登录和数据查询功能的内部小系统,代码量不大,但恰好踩中了我说的每一种改动。

7.1 先列需求清单

实装之前,我先把需求写清楚,防止自己改到一半迷失方向:

  • 每次开始一个任务时,自动读取当前分支信息;
  • 写代码前,让模型参考记忆文件里的技术栈约束;
  • 代码写得差不多时,用/review检查改动;
  • 提交前,用 Hook 自动检查测试是否通过;
  • 输出风格统一为“简洁中文,先结论后解释”。

这五条对应三种不同类型 Mod,我按“记忆文件 → 斜杠命令 → Hook”的顺序逐个落位。

7.2 组合过程

先改记忆文件,把模拟项目 X 的技术约束写进去,然后写/review和/commitmsg两个斜杠命令。/commitmsg的用途是生成规范的提交信息,我会在正文里要求它必须遵循团队现有的提交格式,并且要解释“为什么这样改”,不能只堆关键词。

最后加 Hook。我写了一个脚本,在提交前先执行测试命令,只要测试失败就阻断提交。这个脚本比第 5 节的示例复杂一些,要读取测试命令的退出码,还要把错误信息回传,让用户知道为什么被拦。

7.3 实测效果与两场翻车

整体效果比我预想的好:/review能稳定输出结构化意见,/commitmsg生成的提交信息和团队历史风格基本一致,测试 Hook 也确实拦住了两次带病提交。

但翻车也来了两回,都是很小但很有代表性的问题。

第一回,Hook 不触发。我检查配置文件的路径,感觉没写错,但它就是不执行。排查半天,发现脚本文件缺少执行权限。hook 调用的是脚本,而不是“用解释器去读脚本”,所以没有x权限就什么都跑不起来。chmod +x之后立刻正常。这个问题在文档里几乎不会强调,但对新手来说极其隐蔽。

第二回,/review命令突然失效。原因是我不小心把命令文件放在了全局目录,却在另一个项目里调用,而那个项目使用了项目级配置覆盖目录,导致全局命令被忽略。这个设计本身是为了团队隔离,但如果你像我一样同时维护多个项目,很容易忘了当前项目覆盖了全局。最后我把命令复制到项目目录里,问题解决。

注意:配置目录的优先级逻辑,在混合使用全局和项目级配置时特别容易踩坑。原则是“项目级优先”,如果项目里定义了同名命令,全局命令不会生效。这不是 bug,是设计。

8. 玩魔改的边界:哪些地方我真的不建议去碰

既然写了“终极指南”,我觉得有责任把边界也讲清楚。魔改虽爽,但不是改得越深越好。

8.1 不建议碰的三类东西

第一类,是运行时生成的内部缓存文件。它们看起来像配置文件,有的是 SQLite 数据库,有的是序列化缓存,直接改会导致会话数据错乱。我见过有人为了“加速启动”去删索引导航文件,结果工具直接无法恢复历史会话。

第二类,是为了绕过安全机制而做的改动。比如关闭权限确认、跳过敏感操作提醒、屏蔽审查类的 Hook。这类操作短期看起来很方便,但代价是让一个本该有安全边界的工具变成裸奔状态,任何误操作都可能造成不可逆后果。我的态度很明确:不要这么干。

第三类,是修改安装目录里的主程序文件。不管是想换图标还是想加启动动画,都不要动安装目录。原因很简单:升级时会被直接覆盖,你改得再花哨也会一夜之间消失,还可能因为版本不匹配导致工具无法启动。真想改体验,走官方支持的扩展点才是可持续的路。

8.2 升级与维护是魔改的一部分

很多人做好 Mod 之后就不管了,等工具一升级,突然发现/review不见了、Hook 报错了,第一反应是“工具坏了”。其实更可能的情况是:升级改变了配置格式或事件名称,你的 Mod 没有跟上。

我的维护习惯是:

  • 升级前先看变更说明,重点关注“配置格式”和“Hook 事件”相关的部分;
  • 升级后先把所有自定义命令跑一遍,不要求全通,但至少确认命令能找到;
  • 对重要的 Hook 脚本做版本管理,跟项目代码放在同一个仓库里,别只存在机器上。

把 Mod 当成和代码一样的“资产”来维护,而不是一次性的小玩具,才不会在升级面前手忙脚乱。

8.3 关于分享和二次分发

如果你做出了特别好用的 Mod,想分享给团队或发到社区,我劝你也稍微注意下边界:只分享你自己写的提示词和脚本,不要打包“破解版”或修改过的程序本体。好的扩展点都是开放的,尊重工具的边界,反而能让整个生态更长久。

最后再说一点我自己的习惯:我会把所有自定义命令和脚本集中放到一个专门目录里,用一个小工具统一管理,这样换机器时五分钟就能复现全套环境。这也是“从零安装到手搓”的最后一块拼图——让魔改能力跟着你走,而不是跟某台机器绑定。希望这篇把该说的坑都说了,剩下的,就等你在终端里亲手把它搓出来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询