<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>坑点清单 on AI</title>
        <link>https://ai.programnotes.cn/tags/%E5%9D%91%E7%82%B9%E6%B8%85%E5%8D%95/</link>
        <description>Recent content in 坑点清单 on AI</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sat, 20 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ai.programnotes.cn/tags/%E5%9D%91%E7%82%B9%E6%B8%85%E5%8D%95/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Claude Code Skill使用指南</title>
        <link>https://ai.programnotes.cn/p/claude-code-skill%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link>
        <pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate>
        
        <guid>https://ai.programnotes.cn/p/claude-code-skill%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid>
        <description>&lt;img src="https://ai.programnotes.cn/img/ai/437a7a77bc32a47c032aded7b58ecc2c.png" alt="Featured image of post Claude Code Skill使用指南" /&gt;&lt;p&gt;核心内容:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skill是文件夹而非文件，应包含脚本、坑点清单、记忆文件等，构成完整工作系统，而非一份说明文档。&lt;/li&gt;
&lt;li&gt;description的前250个字符决定Skill是否触发，需写成触发条件而非给人看的摘要；安装过多Skill会挤占清单预算，贵精不贵多。&lt;/li&gt;
&lt;li&gt;验证类Skill是实测回报最大的类型，让Claude能自己确认工作成果，值得优先投入打磨。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;源自&lt;/strong&gt; |  小林coding&lt;/p&gt;
&lt;p&gt;不知道你有没有这种体验，兴冲冲给 Claude Code 装了一堆 skill，或者自己照着教程写了几个，结果用了一个月，Claude 压根没主动调用过几次。&lt;/p&gt;
&lt;p&gt;skill 就这么安静地躺在目录里，像极了你收藏夹里那些「以后一定看」的文章。&lt;/p&gt;
&lt;p&gt;问题出在哪？是 skill 这个机制不行吗？&lt;/p&gt;
&lt;p&gt;还真不是。&lt;/p&gt;
&lt;p&gt;Anthropic 内部光是活跃使用的 skill 就有几百个，他们前几天刚发了一篇博客，把这几百个 skill 沉淀下来的经验一次性全交代了：什么样的 skill 值得做、怎么写 Claude 才会用、团队怎么共享、甚至怎么给 skill 做数据埋点。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/fd4c3982f4e93d907126e57339105d1d.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;我把这篇博客整篇扒了一遍，整理成 7 个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Q1：「skill 不就是一份 markdown 吗？」这可能是最大的误解&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q2：Anthropic 内部几百个 skill，最后只归成了 9 类&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q3：为什么你写的 skill Claude 从来不触发？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q4：一个 skill 里含金量最高的部分，是「坑点清单」&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q5：skill 还能有记忆、带脚本、挂临时 hook？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q6：skill 怎么从你的本地走向全团队？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Q7：怎么知道一个 skill 到底有没有人用？&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们一个一个来说。&lt;/p&gt;
&lt;h2 id=&#34;q1skill-不就是一份-markdown-吗这可能是最大的误解&#34;&gt;────Q1：「skill 不就是一份 markdown 吗？」这可能是最大的误解────
&lt;/h2&gt;&lt;p&gt;先抛个问题：如果让你现在描述一下什么是 skill，你会怎么说？&lt;/p&gt;
&lt;p&gt;我猜不少人的答案是：「就是一个写了操作步骤的 markdown 文件，Claude 需要的时候会去读。」&lt;/p&gt;
&lt;p&gt;Anthropic 在博客里点名说了，这是他们听到的关于 skill 最常见的误解。&lt;/p&gt;
&lt;p&gt;那 skill 到底是什么？官方的定义是：&lt;strong&gt;一个文件夹&lt;/strong&gt;&lt;br&gt;
。里面除了那份 SKILL.md，还可以放脚本、参考资料、数据文件、输出模板，Claude 能自己发现、探索和使用这些东西。&lt;/p&gt;
&lt;p&gt;一个五脏俱全的 skill 长什么样？拿一个部署服务的 skill 举例，典型的目录结构是这样的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deploy-service/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── SKILL.md               # 唯一必需：何时用我 + 操作指引 + 坑点清单
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── references/            # 参考资料，正文放不下的细节放这里
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── api.md             # 部署平台 API 的详细参数和示例
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── troubleshooting.md # 部署失败时的排查手册
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── scripts/               # 现成的可执行脚本
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── smoke_test.sh      # 冒烟测试
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── rollback.sh        # 一键回滚
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── assets/                # 输出模板
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── release_note.md    # 发布报告的固定格式
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;整个文件夹里只有 SKILL.md 是必需的：文件开头一段 frontmatter 写名字和 description，正文写操作指引。references/、scripts/、assets/ 都是可选的，连名字都不是强制的，按你的需要随便加。&lt;/p&gt;
&lt;p&gt;更妙的是，这些子文件&lt;strong&gt;不会一股脑塞给 Claude&lt;/strong&gt;&lt;br&gt;
，而是它干活干到哪一步、需要什么材料，才自己去文件夹里翻什么。这个机制 Q3 会专门拆。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/437a7a77bc32a47c032aded7b58ecc2c.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 文件夹结构示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;打个比方。markdown 文件版的 skill，相当于你给新同事发了一条微信：「部署流程是先这样再那样」。而文件夹版的 skill，相当于你给他一个工位：桌上有操作手册，抽屉里有现成的工具，墙上还贴着前任留下的「这台打印机会卡纸，要先按两下」的便利贴。&lt;/p&gt;
&lt;p&gt;哪个更能让新同事快速干活，不用我多说了吧。&lt;/p&gt;
&lt;p&gt;而且在 Claude Code 里，skill 还有一堆配置项可以玩，比如绑定特定的触发条件、注册只在 skill 运行期间生效的动态 hook（这个 Q5 细说）。&lt;/p&gt;
&lt;p&gt;官方观察下来，&lt;strong&gt;内部效果最好的那批 skill，恰恰都是把文件夹结构和配置项用足了的&lt;/strong&gt;&lt;br&gt;
。只写一份 markdown 的 skill，相当于只用了这个机制十分之一的能力。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/2a83d87ceebb194d7c7fe4d639ee7120.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;微信消息 vs 完整工位对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;所以从今天起，请把对 skill 的认知从「一份说明文档」升级成「一个装备齐全的工具箱」。后面 6 个问题，全部建立在这个认知之上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;skill 是文件夹，不是文件。这是用好它的第一步。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q2anthropic-内部几百个-skill最后只归成了-9-类&#34;&gt;────Q2：Anthropic 内部几百个 skill，最后只归成了 9 类────
&lt;/h2&gt;&lt;p&gt;认知摆正了，下一个问题马上就来：到底什么样的事值得做成 skill？&lt;/p&gt;
&lt;p&gt;这个问题特别实际。skill 写起来不难，难的是不知道往哪个方向使劲，写了一堆没用的，真正高频的痛点反而没覆盖。&lt;/p&gt;
&lt;p&gt;Anthropic 干了一件很值钱的事：他们把内部几百个 skill 全部拉出来做了一次归类，发现这些 skill 自然聚成了 9 类。&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;background: rgb(246, 248, 250);font-weight: bold;&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;类别&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;th style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;background: rgb(246, 248, 250);font-weight: bold;&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;干什么的&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;th style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;background: rgb(246, 248, 250);font-weight: bold;&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;例子&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;库和 API 参考&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;教 Claude 正确使用某个内部库或 CLI&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;内部计费库的边界情况和坑&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;产品验证&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;教 Claude 怎么测试自己写的代码&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;用无头浏览器跑通注册流程并逐步断言&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;数据查询分析&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;连接数据和监控系统&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;该 join 哪些表才能看到转化漏斗&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;业务流程自动化&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;把重复工作流压成一条命令&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;自动聚合工单和 PR 生成站会日报&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;代码脚手架&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;按团队规范生成样板代码&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;新建一个预接好鉴权和日志的内部应用&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;代码质量与审查&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;在组织内强制执行代码质量&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;派一个全新视角的子 agent 做对抗式审查&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;CI/CD 与部署&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;拉取、推送、部署代码&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;盯着 PR 重试不稳定的 CI、解决冲突&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;Runbook 排障手册&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;从一个报警症状出发做多工具排查&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;给一个请求 ID，把所有系统的相关日志拉齐&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;基础设施运维&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;带护栏的例行维护操作&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&#34;border: 1px solid rgb(229, 231, 235);padding: 8px 12px;color: rgb(63, 63, 63);&#34;&gt;&lt;section&gt;&lt;span leaf=&#34;&#34;&gt;清理孤儿资源前先发 Slack 等人工确认&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  
![九大类 skill 全景图](https://ai.programnotes.cn/img/ai/2654c72a9df559ce40f6b589f949883a.png)  
&lt;p&gt;这张分类表怎么用？官方给了一个判断标准：&lt;strong&gt;最好的 skill 干干净净落在某一类里；那些想一次干太多事、横跨好几类的 skill，反而会把 agent 搞糊涂&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;你可以拿自己的 skill 库对着这 9 类扫一遍，马上能看出两件事：哪些 skill 越界了该拆，哪些类别还是空白该补。&lt;/p&gt;
&lt;p&gt;那如果 9 类只能先做一类，从哪类下手？&lt;/p&gt;
&lt;p&gt;官方在这里给出了全文最掷地有声的一个结论：&lt;strong&gt;验证类 skill 是内部实测对 Claude 输出质量提升最明显的一类&lt;/strong&gt;&lt;br&gt;
。原话甚至说到这个程度：值得专门让一个工程师花一整周，什么都不干，就把验证类 skill 打磨到极致。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/76019d3ae6b229c56f9c39e761580fcc.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;九大类价值排序示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;为什么是验证类？&lt;/p&gt;
&lt;p&gt;你想啊，Claude 写代码的能力已经够强了，真正拉开差距的是它&lt;strong&gt;有没有办法确认自己写的东西是对的&lt;/strong&gt;&lt;br&gt;
。没有验证手段，它就只能「我觉得应该没问题」；有了验证 skill，它能开个无头浏览器把注册、邮箱验证、引导页一步步跑完，每一步都断言状态，甚至录一段视频给你看它到底测了什么。&lt;/p&gt;
&lt;p&gt;一个会自己验收的 Claude 和一个只会交作业的 Claude，干活质量完全是两个物种。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;先别急着写一堆 skill，把「让 Claude 自己验证工作成果」这一件事做好，回报最大。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q3为什么你写的-skill-claude-从来不触发&#34;&gt;────Q3：为什么你写的 skill Claude 从来不触发？────
&lt;/h2&gt;&lt;p&gt;好，分类清楚了，skill 也写了，新问题来了：为什么 Claude 就是不用？&lt;/p&gt;
&lt;p&gt;要回答这个问题，得先搞清楚一件事：Claude 是怎么知道「现在该用哪个 skill」的？&lt;/p&gt;
&lt;p&gt;肯定有不少人以为，Claude 每次都会把所有 skill 的全文读一遍，然后挑一个合适的。要真是这样，装 50 个 skill，context 当场就被吃光了。&lt;/p&gt;
&lt;p&gt;实际的机制聪明得多。我们先讲原理，再看源码。&lt;/p&gt;
&lt;p&gt;会话启动的时候，Claude Code 会把所有可用 skill 收集起来，但&lt;strong&gt;只取每个 skill 的名字和 description&lt;/strong&gt;&lt;br&gt;
，拼成一张清单注入 context。Claude 平时看到的就只有这张「目录页」。等它判断某个任务匹配上了某个 skill，才会发起调用，这时候 SKILL.md 的全文才被加载进对话。&lt;/p&gt;
&lt;p&gt;这套机制有个专门的名字，叫&lt;strong&gt;渐进式披露（Progressive Disclosure）&lt;/strong&gt;&lt;br&gt;
：平时只给目录，用到了才给正文。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/9f5ea924daf8ea71d87fb8e8ba503ff3.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/336db92249120d4f9e463451c6c5625d.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;渐进式披露图书馆类比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;明白了这个机制，「为什么不触发」的答案就浮出来了：&lt;strong&gt;Claude 决定用不用你的 skill，唯一的依据就是那一行 description&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;它没读过你的正文，不知道你内容写得多用心。description 没写好，正文写出花来也是白搭。&lt;/p&gt;
&lt;p&gt;这就是官方在博客里专门强调的一条：&lt;strong&gt;description 不是写给人看的摘要，是写给模型看的触发条件&lt;/strong&gt;&lt;br&gt;
。「帮助处理数据库相关工作」这种写法就是典型的人类视角摘要；模型视角的写法是「当用户要写数据库迁移、修改表结构、或者遇到 migration 报错时使用」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/73981a779a43df59313e37677c31fbbe.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;description 好坏对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;讲完原理，我去源码里取了证，结果发现真实情况比博客说的还要苛刻。&lt;/p&gt;
&lt;p&gt;skill 清单注入 context 是有预算的，而且预算紧得吓人：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SKILL_BUDGET_CONTEXT_PERCENT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.01&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MAX_LISTING_DESC_CHARS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这段代码在 src/tools/SkillTool/prompt.ts&lt;br&gt;
，两个常量翻译成人话：&lt;strong&gt;整张 skill 清单只允许占用 context 窗口的 1%；单个 skill 在清单里的描述最多 250 个字符&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;250 个字符之后会发生什么？源码里写得明明白白：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;return desc.length &amp;gt; MAX_LISTING_DESC_CHARS  ? desc.slice(0, MAX_LISTING_DESC_CHARS - 1) + &amp;#39;…&amp;#39;  : desc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;同样在 src/tools/SkillTool/prompt.ts&lt;br&gt;
 里，超出 250 字符的部分直接被砍掉，换成一个省略号。你在 description 第 300 个字符处写的精妙触发条件，模型从头到尾就没见过。&lt;/p&gt;
&lt;p&gt;更狠的还在后面。如果你装的 skill 太多，把那 1% 的预算挤爆了，Claude Code 会先按比例压缩所有 description；要是还装不下，就直接降级成&lt;strong&gt;只显示名字、一个字描述都不留&lt;/strong&gt;&lt;br&gt;
的模式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/6703bcefd31b58a45f29f04b908a7d2c.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 清单预算挤压示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;这下「装了一堆 skill 反而都不触发」这个怪现象就完全说通了：装得越多，每个 skill 能留在 Claude 眼前的信息就越少，最后大家一起变成一排只有名字的哑巴。&lt;/p&gt;
&lt;p&gt;skill 不是收藏品，贵精不贵多。&lt;/p&gt;
&lt;p&gt;那调用之后，全文是怎么加载的？源码里这个加载动作是「懒加载」的，只有 skill 真被调用时才执行，而且会在正文前面拼一行很关键的信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getPromptForCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;toolUseContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;finalContent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;baseDir&lt;/span&gt;    &lt;span class=&#34;err&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;this&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;skill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;baseDir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;\&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;\&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markdownContent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;markdownContent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这段在 src/skills/loadSkillsDir.ts&lt;br&gt;
，它在 SKILL.md 全文的最前面加了一句「这个 skill 的根目录在哪里」。&lt;/p&gt;
&lt;p&gt;为什么要加这句？这正好解释了 Q1 说的文件夹机制怎么落地：&lt;strong&gt;references/、scripts/ 这些文件夹里的东西，系统从头到尾都不会自动加载&lt;/strong&gt;&lt;br&gt;
，是 Claude 拿到根目录地址之后，按 SKILL.md 里的指引，自己用读文件的工具一个个去取的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/f41b3ad4145701a725acc4a36bc0ce92.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 全文加载时序图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;所以渐进式披露其实有三层：平时只有 description，调用时才有 SKILL.md 全文，正文里提到的参考文件等 Claude 真需要了才会去读。一层比一层深，每一层都只在必要时打开。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/f69329e3764d3a43defb17d71274cc2c.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;渐进式披露三层结构图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;description 的前 250 个字符，决定了你的 skill 是工具还是摆设。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q4一个-skill-里含金量最高的部分是坑点清单&#34;&gt;────Q4：一个 skill 里含金量最高的部分，是「坑点清单」────
&lt;/h2&gt;&lt;p&gt;触发问题解决了，Claude 终于肯打开你的 skill 了。下一个问题：正文该写什么？&lt;/p&gt;
&lt;p&gt;先做个小测试。下面两条内容，哪条更值得写进 skill？&lt;/p&gt;
&lt;p&gt;第一条：「写完代码后要运行测试，确保所有用例通过。」&lt;/p&gt;
&lt;p&gt;第二条：「subscriptions 表是只追加不修改的，你要找的那行记录是 version 最大的那条，不是 created_at 最新的那条。」&lt;/p&gt;
&lt;p&gt;答案是第二条，而且不是「略好一点」，是一个天上一个地下。&lt;/p&gt;
&lt;p&gt;第一条犯了官方点名的大忌：&lt;strong&gt;陈述显而易见的事（don&amp;rsquo;t state the obvious）&lt;/strong&gt;&lt;br&gt;
。Claude 本来就会写代码、本来就会跑测试，你把它默认就会做的事再写一遍，等于往 context 里灌纯噪音，一点增量信息都没有。&lt;/p&gt;
&lt;p&gt;官方给的判断标准很直接：如果你的 skill 主要是传授知识，那就只写&lt;strong&gt;能把 Claude 推离默认思路的信息&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/03b72aea3d1fb831ba2e4b9427176416.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;显而易见 vs 增量信息筛子示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;他们自己有个现成的例子：官方那个前端设计 skill，整篇没教 Claude 怎么写 CSS（它会），而是专门列了一堆「不要做」：不要张口就用 Inter 字体，不要动不动紫色渐变。全是冲着 Claude 的默认审美去纠偏的。&lt;/p&gt;
&lt;p&gt;那第二条强在哪？它属于官方说的&lt;strong&gt;整个 skill 里信号最强的内容：Gotchas，坑点清单&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;什么样的内容算坑点？除了上面那条 subscriptions 表的例子，博客里还给了两个真实例子，感受一下：&lt;/p&gt;
&lt;p&gt;「这个字段在 API 网关里叫 @request_id，在计费服务里叫 trace_id，它们是同一个值。」&lt;/p&gt;
&lt;p&gt;「staging 环境就算 Stripe 的回调没真正处理，也会返回 200，真实状态要去 payment_events 表里查。」&lt;/p&gt;
&lt;p&gt;发现共同点没有？这些信息有一个共同特征：&lt;strong&gt;Claude 靠读代码永远推断不出来，只有踩过坑的人才知道&lt;/strong&gt;&lt;br&gt;
。这正是它信号强的原因，每一条都在为 Claude 排掉一个它必然会踩的雷。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/5c1ff6d3ff33dca1daebe99b0099a43a.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;坑点清单价值示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;而且坑点清单不是一次写完的，官方的玩法是&lt;strong&gt;持续攒&lt;/strong&gt;&lt;br&gt;
：每次 Claude 用这个 skill 又栽进一个新坑，就回头把这个坑补进去。skill 就这样越用越准。&lt;/p&gt;
&lt;p&gt;不过正文也不是写得越细越好，这里有个度要把握。官方专门提醒了一个反方向的坑，叫&lt;strong&gt;别把 Claude 锁死在轨道上（avoid railroading）&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;Claude 对指令的服从度是很高的，你把步骤写得太死，它遇到指令没覆盖的情况就容易僵在轨道上硬开，明明该随机应变的地方也不敢变。正确的姿势是：把它需要的信息给足，把怎么走的自由留给它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/5ea67ca22356b16779edf898e5ae7e44.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;铁轨 vs 导航对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;skill 正文的黄金法则：只写 Claude 推断不出来的，删掉它本来就会的。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q5skill-还能有记忆带脚本挂临时-hook&#34;&gt;────Q5：skill 还能有记忆、带脚本、挂临时 hook？────
&lt;/h2&gt;&lt;p&gt;把 Q4 的内功练好，你的 skill 已经能打了。这一节说三个高阶玩法，全部来自 Anthropic 内部的实战，一个比一个超出「skill 就是文档」的想象。&lt;/p&gt;
&lt;h3 id=&#34;玩法一给-skill-装记忆&#34;&gt;玩法一：给 skill 装记忆
&lt;/h3&gt;&lt;p&gt;先想一个场景：你做了一个自动写站会日报的 skill，今天跑一次，明天跑一次。问题来了，它怎么知道哪些内容昨天已经汇报过了？&lt;/p&gt;
&lt;p&gt;每次会话都是新开的，Claude 不记得上一次执行的任何事。难道每天的日报都从头把所有进展再说一遍？&lt;/p&gt;
&lt;p&gt;官方的解法很朴素：&lt;strong&gt;让 skill 把执行结果存在自己的文件夹里&lt;/strong&gt;&lt;br&gt;
。比如日报 skill 维护一个日志文件，每发一次日报就追加一条记录。下次执行时，Claude 先读自己的历史，自然就知道「只汇报昨天之后的增量」。&lt;/p&gt;
&lt;p&gt;简单的场景用追加式的文本日志或 JSON 就够了，复杂的甚至可以塞一个 SQLite 数据库进去。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/fb4b85fc615bd391a4407c1d1c3200e4.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 记忆机制示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;那这些数据该存在哪？官方专门为这件事准备了一个稳定的数据目录，在 skill 里通过环境变量 CLAUDE_PLUGIN_DATA 就能拿到。&lt;/p&gt;
&lt;p&gt;这个目录最大的特点是持久：&lt;strong&gt;plugin 升级换版本都不会被清掉&lt;/strong&gt;&lt;br&gt;
，只有彻底卸载时才会删除。也就是说，你的 skill 记忆可以放心地活得比 skill 版本更久。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/9bd0ff1120ac6c6f150bf046cde50a8f.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;两个数据目录生命周期对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;记忆这个思路还有个变种用法：存配置。&lt;/p&gt;
&lt;p&gt;有些 skill 第一次用之前，需要先从用户那里要点信息。还是拿日报 skill 举例，它总得知道日报要发到哪个频道吧？这种信息不该写死在 SKILL.md 里（不然没法分发给别人用），也不该每次执行都问一遍（烦死人）。&lt;/p&gt;
&lt;p&gt;官方给的模式是：把这类信息存进 skill 目录下的一个 config.json。Claude 每次执行先看配置在不在，在就直接用；不在就说明是第一次跑，主动找用户把信息问齐、写进配置，下次就不用再问了。&lt;/p&gt;
&lt;p&gt;相当于给 skill 加了一个「首次使用引导」。要是想问得更体面，还可以在 skill 里指明让 Claude 用选择题的形式来收集，用户点一下就配置完了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/c1b4cf1ba7979156c16419771630a1a7.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 首次配置流程图&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;玩法二把脚本喂给-claude让它只管编排&#34;&gt;玩法二：把脚本喂给 Claude，让它只管编排
&lt;/h3&gt;&lt;p&gt;官方有一句话我特别认同：你能给 Claude 最有力的工具就是代码。&lt;/p&gt;
&lt;p&gt;什么意思？假设你的数据分析 skill 里什么都不放，Claude 每次分析都要现场手写「怎么连数据源、怎么拼查询、怎么算留存」这一整套样板代码，又慢又容易错。&lt;/p&gt;
&lt;p&gt;但如果 skill 里预先放好一个函数库，取数、清洗、对比这些底层活全部封装成现成的函数，Claude 的每一个回合就都花在刀刃上：&lt;strong&gt;思考接下来该组合哪几个函数&lt;/strong&gt;&lt;br&gt;
，而不是重新发明轮子。&lt;/p&gt;
&lt;p&gt;你问一句「周二的数据怎么了」，它现场写一段十几行的小脚本，把你的函数库组合起来跑出答案。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/87d238adb6543d1656c181cbbc5c01a0.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;现场造轮子 vs 组合积木对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;玩法三挂只在-skill-激活期间生效的-hook&#34;&gt;玩法三：挂只在 skill 激活期间生效的 hook
&lt;/h3&gt;&lt;p&gt;这是三个玩法里最容易被忽略、但想象空间最大的一个：skill 可以自带 hook，而且这种 hook &lt;strong&gt;只在 skill 被调用时注册，会话结束就失效&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;为什么这个设计很妙？想想官方给的两个例子。&lt;/p&gt;
&lt;p&gt;一个叫 careful 的 skill：激活后自动阻断 rm -rf、DROP TABLE、强制推送这类危险命令。这种拦截要是常驻开着，开发体验能把人逼疯；但在你明确知道「我现在要碰生产环境」的时刻，手动激活它，就是一道恰到好处的保险。&lt;/p&gt;
&lt;p&gt;另一个叫 freeze 的 skill：激活后禁止修改指定目录之外的任何文件。专治排查 bug 时的「我只是想加两行日志，结果 Claude 顺手把无关代码也给修了」。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/ddfa810f7ff2730bce4271f530036b1a.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;临时 hook 开关示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;用法也很轻：这类 hook 直接在 skill 的 frontmatter 里声明就行，skill 被调用时自动注册，会话结束自动失效，不需要你去碰全局的 hook 配置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;skill 的上限不是一份好文档，是一个带记忆、带工具、带保险丝的小型工作系统。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q6skill-怎么从你的本地走向全团队&#34;&gt;────Q6：skill 怎么从你的本地走向全团队？────
&lt;/h2&gt;&lt;p&gt;一个人把 skill 玩明白了，价值是 1；让整个团队都用上，价值才是 N。但一到团队层面，马上冒出三个新问题：怎么分发？谁来审批？质量怎么保证？&lt;/p&gt;
&lt;p&gt;先说分发。官方给了两条路。&lt;/p&gt;
&lt;p&gt;第一条路：&lt;strong&gt;把 skill 直接提交进代码仓库&lt;/strong&gt;&lt;br&gt;
，放在 .claude/skills 目录下。团队成员拉代码的时候 skill 就跟着到位了，零成本同步。小团队、仓库不多的场景，这条路最省事。&lt;/p&gt;
&lt;p&gt;但还记得 Q3 说的那个 1% 预算吗？这条路有个隐性代价：仓库里每多一个 skill，每个人每次会话的清单里就多一行，所有人无差别承担这份 context 开销，不管用不用得上。&lt;/p&gt;
&lt;p&gt;所以规模一上来，官方推荐第二条路：&lt;strong&gt;做成 plugin，搭一个团队内部的 plugin marketplace&lt;/strong&gt;&lt;br&gt;
。skill 打包上架，谁需要谁安装，context 成本回归到「谁用谁付」。新人入职装一遍团队插件，立刻获得和老员工一样的装备。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/6412b7e96dcae9b77e02fce53ae4387e.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;两条分发路线对比图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;那 marketplace 谁说了算？哪些 skill 能上架？&lt;/p&gt;
&lt;p&gt;Anthropic 内部的答案可能跟你想的不一样：&lt;strong&gt;没有一个中心化的团队做审批&lt;/strong&gt;&lt;br&gt;
。&lt;/p&gt;
&lt;p&gt;他们的玩法是完全的自然演化：你写了个 skill 想给大家试试，先扔进 GitHub 上的一个沙盒文件夹，在 Slack 里吆喝一声。用的人多了、口碑起来了（火没火由 skill 作者自己判断），作者再提一个 PR 把它从沙盒挪进正式 marketplace。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/72f02cbcc0be3758f5af34c997492767.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;像不像开源社区的运作方式？好东西靠口碑自己长出来，而不是靠委员会评出来。审批环节越重，愿意分享的人越少；门槛低到「扔进沙盒就行」，几百个 skill 才攒得起来。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/09d9210111dcda207f1050584fe7258a.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 自然演化漏斗图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;还有一个团队场景下绕不开的小问题：skill 之间能不能互相依赖？比如一个生成 CSV 的 skill，最后一步要调用另一个文件上传 skill。&lt;/p&gt;
&lt;p&gt;官方很坦诚：依赖管理目前没有原生支持。但解法意外地简单，&lt;strong&gt;在 skill 正文里直接报另一个 skill 的名字就行&lt;/strong&gt;&lt;br&gt;
，只要对方装了，模型自己会去调用。毕竟执行者是一个能理解自然语言的 agent，「用 file-upload skill 把结果传上去」这句话本身就是依赖声明。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/6b27cbffdabe74ccbc8d245fadb3a12a.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 自然语言依赖示意图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;好 skill 的团队化路径：沙盒里长出来，口碑里筛出来，marketplace 里沉淀下来。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;q7怎么知道一个-skill-到底有没有人用&#34;&gt;────Q7：怎么知道一个 skill 到底有没有人用？────
&lt;/h2&gt;&lt;p&gt;最后一个问题，也是大多数团队压根没意识到要问的问题。&lt;/p&gt;
&lt;p&gt;skill 攒了几十个，marketplace 也搭起来了，然后呢？哪些 skill 天天被调用，哪些写完就成了仓库里的化石？没有数据，你只能靠感觉。&lt;/p&gt;
&lt;p&gt;靠感觉的结果通常是：大家继续给没人用的 skill 添砖加瓦，真正高频的 skill 反而没人维护。&lt;/p&gt;
&lt;p&gt;Anthropic 的做法是给 skill 做埋点，思路相当巧妙：&lt;strong&gt;用一个 PreToolUse hook 监听 skill 工具的每一次调用，把「谁在什么时候用了哪个 skill」记录下来&lt;/strong&gt;&lt;br&gt;
，汇总成公司内部的使用统计。&lt;/p&gt;
&lt;p&gt;相当于给每个 skill 装了个计数器，数据一拉出来，两类问题立刻现形。&lt;/p&gt;
&lt;p&gt;一类是「受欢迎的 skill」：调用量大，值得重点维护、优先打磨，Q2 说的「派工程师花一周打磨验证 skill」这种投入，就该花在这类 skill 上。&lt;/p&gt;
&lt;p&gt;另一类更有意思，叫&lt;strong&gt;触发不足（undertriggering）&lt;/strong&gt;&lt;br&gt;
：你预期它该被高频使用，数据却显示几乎没人碰。这种 skill 八成是 Q3 的病，description 没写对，模型扫一眼清单根本想不起它。数据帮你把「该触发却没触发」的病人筛出来，再回头去修 description，形成闭环。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/c6bb6635162314108e7758daf78ce8bb.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;skill 埋点度量闭环图&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;这件事的成本低到没有借口不做：一个 hook、一段日志脚本，官方连示例代码都开源出来了。但它把 skill 建设从「凭感觉做」变成了「看数据做」，这是个质变。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不被度量的 skill 库，迟早变成没人敢动也没人想用的杂物间。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;最后&#34;&gt;────最后────
&lt;/h2&gt;&lt;p&gt;7 个问题说完了，按惯例浓缩成 3 句话送你：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ai.programnotes.cn/img/ai/c779a64bf44e7a3f58d277e0b32bac43.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;全文总结图&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一，skill 是文件夹不是文件，把脚本、坑点清单、记忆文件、临时 hook 都用上，它才是一个完整的工作系统。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第二，决定 skill 命运的是 description 的前 250 个字符，写成「什么场景下用我」的触发条件，而不是给人看的摘要；装太多 skill 会互相挤占清单预算，贵精不贵多。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第三，如果只做一件事，先做验证类 skill，让 Claude 能自己确认工作成果，这是 Anthropic 实测回报最大的投入。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;博客的结尾有一句话我很喜欢，也送给准备动手的你：他们内部最好的那批 skill，几乎都是从「几行字加一个坑点」开始的，然后随着 Claude 撞上一个个新的边界情况，被人一点点喂大。&lt;/p&gt;
&lt;p&gt;如果这篇文章对你有帮助，记得点个赞、在看、转发三连，感谢林友们的支持！&lt;/p&gt;
&lt;p&gt;我们下篇见啦。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;────参考资料────
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Anthropic 博客《Lessons from building Claude Code: How we use skills》：https://claude.com/blog/lessons-from-building-claude-code-how-we-use-skills&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Claude Code skill 官方文档：https://code.claude.com/docs/en/skills&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;官方示例 skill 仓库：https://github.com/anthropics/skills&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
