Claude Code深入浅出(技巧篇1)

Claude code深入浅出(技巧篇1)

上一期我们介绍了基础的 Claude Code安装,这一期开始我们就要开始进行 Claude Code使用技巧的学习,详细介绍,会话管理、全权限管理、Tools、Hooks以及Skills 的相关概念及其实践。接下来我们坐稳扶好准备发发车 😄

1.工作区介绍

经过上期,我们安装了 VS CodeClaude Code插件,摆脱了 CLI方式较为复杂晦涩的操作界面,接下来我们就先来学习一下它的基础功能。

1.1 会话管理

点击这个橙色的按钮,可以增加多个会话,每一个会话都拥有独立上的上下文,也就是我们所说的拥有独立的记忆,就和我们在使用 Chat APP一样的效果,每一个会话之间不会u相互干扰,这样可以让 AI更加专注的解决精细的问题。

比如现在我在一个会话里面告诉 Claude Code我的名字,再通过另一个会话询问 Claude Code。就可以看出他们之间的 记忆隔离

现在通过点击橙色的小按钮或者是 点击 New Session按钮创建一个新的会话,再次询问他我的名字是什么,即可验证~~

可以看出 会话之间不存在记忆互通,但是我的 Claude Code还是通过一些渠道找到了一些信息,所以在AI时代大家要更加注意自己的信息隐私安全!! ⚠️

在新会话按钮的旁边有一个时钟样式的按钮,那个就是 历史会话管理,点开可以看到之前在该工作区和 Claude Code的对话记录,也就是说 丢失的记忆可以在这里找回来,如果不慎将一个重要的会话关闭了,可以在这里找回。

2. 文件引用与对话流程

Claude Code的对话中,也是支持我们自己上传资料作为 Claude Code思考依据的

同时我们也可以指定特定的文件来作为这一轮对话的参考,比如我的工作区中有两个文件,可以使用 @ + 指定文件名称的方式来对这个文件的信息进行询问或者是直接使用 Claude Code编辑

接下来我们也可以看到,在对话框的下面有一个斜杠按钮,点开之后可以看到非常多的操作。这个其实在 Claude Code CLI也是可以看到的,但是 VS Code插件就更加 平民化一些,可以直接通过搜索和点击按钮的方式来进行交互。常见的操作到了后面会结合具体案例展示,这里我们先按下不表,感兴趣的同学可以自行搜索一下。

当然这里每一个 AI输出的每一个 次元都是大家的真金白银,在操作是也会难免有手误的时候,当觉得询问的问题不具体或者是询问的方向错误等问题想要终止当前的对话,可以直接点击旁边的按钮终止流程

然后界面中我们能看到 一个 Edit automatically这个就是接下来要详细介绍的权限模式

3.权限机制

3.1 四种权限介绍

claude code本身有四种权限模式可以选择:

  • plan mode

顾名思义他只做计划,理解项目,给出修改计划,不直接修改代码

  • Ask before Edits = default

这个就是默认的模式,他是 权限最低的编辑模式,读文件不需要请求权限,其他的 编辑文件、跑命令、网络请求他都需要向用户请求权限

  • Edit automatically = accept edit

在这个模式下 代码可以被直接改动,但是不是权限被完全开放,根据官方的文档:

会自动通过的操作:

读、编辑文件

  • 运行常见的系统指令 比如 mkdir\touch\rm\mv\sed\cp

仍然会询问的操作:

  • 其他的 bash指令

  • 网络请求

  • 工作区外部的文件写操作

  • 受到保护的路径写入

By pass permissions

​ 权限最高的模式,几乎不询问,可以直接执行模型的所有操作!

可以跳过安全检查、权限提示,工具调用基本上是直接执行

​ 但是也存在例外:

收到保护的路径依旧不会完全开放,比如:

.git
.vscode
.idea
.husky
.claude

他是速度最快的模式,同时也是最危险的模式,在实际的使用中我们需要仔细的斟酌!好,现在我们用一个实际的例子来展示这些权限模式在实际工作的状态下的区别~ 😄

比如现在我们现在 plan mode下让他改为我们做一个简单的个人博客系统

在这个模式下,它会根据我们浅显的 prompt来进行一些提问,来确定我们的技术路线、功能需求等来进行产品的规划,这里我就选择简单的路线来让他加速实现。

需求确定之后,他一会就将需求文档编写好了,在这个阶段可以看到他并没有编辑任何的文件。

此时已经出现了几个选项:

  • 第一个选项Yes, and auto-accept选择这个选项,claude code会直接切换到 Edit automatically 模式,进行较快的开发方式。

  • 第二个选项 Yes, and manually approve edits则是进入 ask before edit模式,所有的写入操作都需要进行手动确认。

  • 第三个选项就是让 claude code继续编写项目文档,同时下方可以输入你的意见和需求~~

这里为了让他更快的开发,我就选择 auto edit模式,这样可以更快的进行演示。

但是当出现一些不在 automatically edit 白名单中的命令,他就会继续提示,在这里可以直接点击 Yes让他执行者命令,但是现在 npm命令依旧在黑名单,下次执行这个命令的时候依旧会出现提示。此时就可以选择第二个选项,这个选项就是允许整个项目 将 npm这个命令加入白名单,下一次遇到这个命令就可以直接执行,不再需要人工的授权。

但是话又说回来,对于一些简单的场景或是在一些非常安全的环境中,我就是想要体验 claude code开发极致快速的感觉,那么怎么样才能打开第四种模式 —— By pass permissions

但是很显然这里没有开启这个模式的开关:

3.2 最高权限模式的开启

那么接下来就跟着我来操作:

在上方的搜索栏输入 >setting然后回车

在弹出的页面搜索框中输入 Allow Dangerous Skip Permissions,勾选下面的关于 claude code的配置,其他的 AI插件配置也可以在这里找到,大家可以按照自己的需求打开

同时如果想要在终端中开启最高权限的模式,只需要在终端中输入下面的指令:

1
claude --dangerously-skip-permissions

开启之后,一般的命令就不会再需要人工授权提示了~~ 😄

此时我们再次回到操作工作区就乐意看到,已经出现了最高权限的开启选项了

4. Tools 工具

在这里我们就需要先搞清楚 大语言模型、工具、环境之间的关系了:

  • 大语言模型本质上就是 大脑,其实没有行动的能力,只能进行决策

  • 工具就是 大语言模型的决策的实际执行者,它能够响应大模型的调用,取我们的环境,浏览文件,创造文件,删除文件等之类的操作

  • 环境其实就是我们真正的项目,是一直被改变的客体,工具的用本质就是响应大模型的调控修改环境。

请帮我创建一个 Claude code Stop hook
作用:在 Claude 准备结束前做交付验证。
规则:如果本轮改了代码、配置或者是文档,但是没有说明测试、lint、typecchheck功能验证或者是 TODO检查结果,那么就不允许结,继续需工作,并让 Claude 继续完成验证。
如果已经验证,那么就允许结束。

创建完成之后,告诉我怎么用 /hooks 检查。

claude code中已经内置了非常多的工具了,具体可以在它的官方介绍文档中看到:

介绍文档

在这个文档中又详细介绍了 claude code的内置工具行为等,有兴趣的小伙伴可以自行查阅。

现在我们代入前文博客网站制作的过程,其实就可以看到, claude code调用工具的完整过程。

比如第一点,它就明确调用了 bash命令,通过运行 bash相关的命令来查看项目的基础信息。第二点就调用了 Claude code的写入命令,来具体编辑文件。

5. hooks(钩子)

什么是 hooks? 这可能是一个大家平时没有用到的但是其实十分重要的概念,具体来说他其实是: 程序运行到某一个关键的节点的时候,提前预留的一个 挂接口 ,让你可以有时间插入自己的逻辑,是智能体的监督员,在关键的节点进行强制的检查, 向智能体询问:“你真的按照我的逻辑照做了么”。

到这里我们先来看看,具体有哪些 hooks:

钩子 触发时机 常见用途
SessionStart 会话开始或恢复时 加载环境信息、检查依赖、提示项目规则
SessionEnd 会话结束时 清理临时文件、记录会话日志
UserPromptSubmit 用户提交 prompt 后,Claude 处理前 检查用户输入、追加项目约束、拦截不合规请求
PreToolUse Claude 调用工具前 拦截危险命令、限制写入路径、做安全检查
PostToolUse 工具成功执行后 自动格式化、跑测试、记录工具调用结果
PostToolUseFailure 工具调用失败后 收集错误信息、输出诊断日志
PermissionRequest Claude Code 请求权限时 自动处理部分可信权限请求
PermissionDenied 工具调用被权限机制拒绝时 记录被拒绝的操作、给出替代建议
Notification Claude Code 发出通知时 桌面提醒、消息推送、状态同步
Stop Claude 完成一轮响应时 收尾检查、自动提交摘要、执行完成提示
StopFailure 一轮响应因错误失败时 错误告警、记录失败原因
PreCompact 上下文压缩前 保存关键状态、记录当前任务进度
PostCompact 上下文压缩后 恢复上下文、补充重要信息
SubagentStart 子代理启动时 记录子任务开始、注入子代理规则
SubagentStop 子代理结束时 汇总子任务结果、记录执行状态
FileChanged 被监听的文件发生变化时 监听 .env、配置文件或关键源码变化
ConfigChange Claude Code 配置变化时 重新加载规则、同步配置状态
CwdChanged 当前工作目录变化时 切换项目上下文、加载对应目录规则
TaskCreated 任务创建时 记录任务、初始化任务状态
TaskCompleted 任务完成时 生成总结、通知用户、归档结果

上面的看起来很多杂,看起来也很有用,所以我们要怎么在实际中运用起来呢?

其实这个也非常的简单,我们只需要使用自然语言对 claude code进行命令的下达就可以了:

比如我们对 claude code

1
2
3
npx skills add anthropics/skills --skill pptx		
# anthorpics/skills 是github上的地址 pptx是一个具体的 技能名称
# 日后想要安装其他的你技能也可以按照这个命令格式任意改

创建完成之后,我们就可以看到,在工作区的 .claude文件就已经出现了关于结束工作前的检查 hook. 严格上来说此时我们配置的hooks还没有生效。

在和 claude code的对话框中输入指令 /hooks可以开启查看 自定义的 hooks

此时我们在终端中就可以上下键来进行切换查看我们需要的 hooks

选中之后,回车之后可以查看我们已经配置的 hooks, 此时我们需要仔细地核对,在实际的工程之中 hooks对整个项目的影响不可忽视,比如在一轮会话前结束的 hooks中写入了太多冗余的操作,可能会大大增加 token的消耗量;如果不慎写入了错误的指令,更是有可能导致整个项目的崩溃。所以在实践中,一定要认真对待。这里我觉得没有问题,就直接回车确定了。

在这里 claude code提示如果想要后续修改启用的 hooks就可以直接去 自己项目的 文件夹.claude中的配置 json文件中进行修改或者是删除操作,也可以直接通过与 claude code的对话来实现对 hooks的修改。

查看完成之后,我们可以直接退出这个界面,然后重启 vscode的拓展设置:

设置完成之后,我们接下来在这个项目的每一轮对话结束之前,都会执行这个 hooks,本质上可以让项目更加的安全可控。

现在我再对 claude code说帮我换一个好看的主题:

现在可以发现 claude code结束前就会输出这样的任务检查结果,此时我们配置的 hooks才是真正的生效了。

6. skills

什么是 skills呢?

它其实是: 为了完成某一个特定的任务,把反复使用的流程、提示词、模板打包为 claude code可以自动调用的能力包。

  • 本质上是一个文件夹,里面最为核心的就是 SKILL.md

  • SKILL.md 告诉 claude:这个能力是什么时候用的、怎么用、按照什么步骤做、输出的是什么格式。

  • 相关的资源、参考资料、代码脚本也可以打进 skills,在 SKILL.md 中走到相关步骤的时候再进行调用。

6.1 下载管理 skills

好,概念我们介绍到了这里,我们来看一个具体的例子:

可以在 vscode中上方的终端,开启一个终端输入下面的命令。

1
请创建一个 skill: research-to-slides: 用户给定主题之后,先去网上仔细搜索,然后把搜索来的信息整理到调用/pptx来生成 PPT

输入命令之后,就会开始 clone这个技能仓库

安装进行到这一步的时候,提示我们需要选择为哪个 CLI工具安装这个技能,这里选中 claude code回车即可。

同时他还会提示,是要全局安装,还是只为当前的项目安装,这里我们最好为项目只安装需要的技能,所以选择 project

选择我弄成之后,会给我们一个信息预览,这里我们确认没有问题之后,就选择 yes

之后就可以看到,工作区中出现了关于 pptx的技能但是此时还不能让 claude code识别到,我们需要将整个 skills文件夹移动到 .claude文件夹中,才能让这个技能真正的可以被 claude code使用,到了后面我们也是可以将自己编写的 skills或者是下载下来的 skills,存放在 .claude/skills这个文件夹中。

6.2 拆解 skills

下载的操作完成之后,我们就可以来拆解一下 skills是如何工作的了。首先我们可以看到非常醒目的 SKILLS.md

这个文件相当于是整个 技能的总指挥入口:

比如这里描述技能的特点和产出模式,在 Quick Reference中就描述了

  • 如果是要编辑或者是从一个模板进行 ppt创作,那么就去读取另外一个名为 edting.mdmarkdown文件

  • 如果是从0开始创建,那么就去读另外一个 pptxgenjs.mdmarkdown文件

通过 SKILLS.md文件导入不同的入口,再通过详细的提示词配置来指引 agent工具更好的产出

同时我们还可以看到,这些指导文件中有很多优秀的提示词,比如规定了不能做的事情,色彩的搭配,文本的架构等等。本质上他还是一套精细的提示词,在熟悉之后,我们也完全可以修改这个提示词来生成符合我们预期的效果。

6.3 自定义 skills

自定义 skills可以直接向 claude code提出要求即可,只要明白了其结构,我们可以自行修改。

比如我现在让他创建一个这样的 skills

1
请创建一个 skill: research-to-slides: 用户给定主题之后,先去网上仔细搜索,然后把搜索来的信息整理到调用/pptx来生成 PPT

创建完成之后,在 ./claude/skills文件夹里面就会出现 research-to-slides的技能包了;

同时 claude code也提示我们,只要在 Claude code中提示这样的字眼就可以直接调用这样的技能包了。