news 2026/6/13 11:53:51

同样一个 Skill,Claude Code 比标准多做了什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
同样一个 Skill,Claude Code 比标准多做了什么?

同样一个SKILL.md,按标准 Agent Skills 来看,和放进 Claude Code 里运行,看到的是两层东西。

在标准眼里,它是一个能力包:一个文件夹、一份SKILL.md,需要时还能带上脚本、参考资料和模板。一套代码审查流程、一份发布清单、一组项目约定,原本散落在文档、脚本和人的经验里;做成 Skill 之后,就成了 Agent 能在合适的时候调用的能力。

但在 Claude Code 眼里,它不只是这份能力包。Claude Code 还会把 Skill 接进自己的执行体系:可以变成/skill-name命令,可以带参数,可以控制 Claude自动调用还是用户手动调用;可以在加载前执行命令,把当前的git diff、PR 信息注入上下文;可以放进隔离的 Subagent 执行;还可以接入权限系统,限制它能碰哪些工具。

之前写过一篇《一篇讲清 Agent Skills:把经验变成可调用的能力》,系统讲过标准 Agent Skills 的基础、结构和用法。这篇把视角收窄到 Claude Code,只讨论一个问题:

同样一个SKILL.md,Claude Code 到底多做了什么?

拆开之前,先花一分钟说说 Skills 的由来。

Skills 的由来

Skills 来自 Anthropic 对 Claude 能力扩展方式的设计。

2025 年 10 月 16 日,Anthropic 发布 Agent Skills。官方给出的定义很直接:Skill 是一个包含 instructions、scripts、resources 的文件夹,Claude 可以在需要时动态加载,用来完成某类专门任务。

这也是 Skills 和普通提示词最大的区别:提示词多半是一次性的,而 Skill 是一套能保存下来、反复调用的工作方法。下次遇到同类任务,不需要再把规则从头讲一遍。

到了 2025 年 12 月 18 日,Anthropic 把 Agent Skills 发布为开放标准。官方把它定义成一种轻量的开放格式,目标也很清楚:一个 Skill 写一次,就能在多个兼容的 Agent 客户端里复用。

现在,OpenAI Codex、Gemini CLI、Cursor、OpenCode 等客户端已经开始支持 Agent Skills。Skills 不再只是 Claude 的能力扩展机制,而是多个 Agent 工具共同采用的能力格式。

不同客户端对 Skill 的运行方式并不完全一样。Claude Code 在这个标准之上,又补了不少开发场景里的运行能力。

Claude Code 预置 Skills

除了自定义 Skill,Claude Code 也自带了一批开箱即用的 Skills。

比如/code-review/batch/debug/loop/claude-api。这些都属于预置 Skills,每个会话里都能直接用。

它们和/help/compact这类内置命令看起来都是打/调用,但背后的机制不同。

/help/compact更像 Claude Code CLI 里的固定功能:输入命令,CLI 执行一段固定逻辑。

预置 Skills 是基于提示词的:它们给 Claude 一份详细指令,让 Claude 结合当前上下文和可用工具,自己编排任务、完成任务。

其中/run/verify/run-skill-generator这一组最能说明问题。

/run把项目跑起来。/verify确认一个改动是不是真的生效:重点不在跑测试或类型检查,而是尽量在真实运行状态下验证。

但很多项目没那么好跑:要连数据库,要配环境变量,要打开页面或服务,要分好几步构建。Claude 只靠 README、package.json临时判断,常常猜不准。

/run-skill-generator就是来补这块的。它会把项目真正跑通的步骤记下来,保存成项目级 Skill,放在.claude/skills/run-<名字>/。后面再用/run/verify时,Claude Code 就可以读取这份记录,按里面的步骤运行项目、验证改动,不用每次重新猜。

Claude Code 的 Skill 加载位置

Skill 放在哪里,基本决定了谁能用它。

  • 企业级:通过 managed settings(托管设置)下发,整个组织生效。适合放公司层面的硬规范。
  • 用户级~/.claude/skills/<名字>/,跟着当前用户走,所有项目都能用。适合放你自己的习惯,比如固定风格、常用排查套路。
  • 项目级<项目>/.claude/skills/<名字>/,只在这个项目里生效。适合放接口约定、发布流程、字段说明这类项目经验。放进版本库后,团队成员拉下代码就能用。
  • 插件级<插件>/skills/<名字>/,启用插件后生效。适合把一组 Skills、agents、hooks、MCP 配置打包分发。

Skill 撞名了怎么办?

优先级是:企业级 > 用户级 > 项目级。高优先级会覆盖低优先级的同名 Skill;插件里的 Skill 走插件名:Skill名命名空间,不跟这些层级直接抢名字。

还有两个细节值得单独说。

改完即时生效。Claude Code 会监听已经存在的 Skill 目录。你在~/.claude/skills/、项目里的.claude/skills/,或者--add-dir目录里的.claude/skills/中新增、修改、删除 Skill,当前会话就能生效。

有一个例外:如果 Claude Code 启动时,某个顶层 skills 目录还不存在,你后来才把这个目录建出来,那就需要重启一次。因为它启动时还没有监听这个新目录。

它也适合 monorepo。Claude Code 加载项目级 Skill 时,不只看当前启动目录。它会从启动目录开始,沿着父目录一路往上找.claude/skills/,直到仓库根目录。

即使你在packages/frontend/这种子目录里启动 Claude Code,它也能读到仓库根目录下的.claude/skills/

当你编辑某个子目录里的文件时,Claude Code 也会按需发现这个子目录自己的.claude/skills/

比如你正在改:

packages/frontend/Button.tsx

Claude Code 会额外查看:

packages/frontend/.claude/skills/

这样,monorepo 里可以有两类 Skill:仓库根目录放公共规则,子包目录放模块自己的规则。公共规则不用复制到每个包里,子包规则也不用全塞到根目录。

Claude Code 额外的 Frontmatter 字段

SKILL.md开头用---包起来的 YAML,就是 frontmatter。最小写法大概是这样:

---name: deploydescription: 把应用部署到生产环境。用户要发布、上线时使用。---

标准 Agent Skills 的基础字段包括:

  • name:Skill 名称。
  • description:用途和触发说明。
  • license:许可证信息。
  • compatibility:兼容性说明。
  • metadata:自定义元数据。
  • allowed-tools:预先允许的工具。

这些基础字段上一篇已经讲过,这里不再展开。本文只看 Claude Code 额外的字段。

Claude Code 在标准字段之外,又扩展了一批字段。按用途分,大致有这几组。这里只做速查,重点的后面再展开:

  • 调用控制disable-model-invocation禁止 Claude 自动调用,只保留用户手动触发;user-invocable控制是否出现在/菜单里。
  • 触发控制when_to_use补充触发场景;paths限定只在处理匹配文件时激活。
  • 参数提示argument-hint提示该传什么;arguments声明具名参数。
  • 权限控制allowed-tools预批准工具(标准字段);disallowed-tools禁用工具。
  • 模型与推理model切换模型;effort调整推理强度。正文里写ultrathink,也可以让当前回合触发更深层推理。
  • 执行上下文context: fork放到隔离上下文里运行;agent指定由哪个 subagent 执行。
  • 运行环境shell指定!命令使用的 shell;hooks配置这个 Skill 专属的生命周期钩子。

控制谁调用 Skill

在 Claude Code 里,Skill 有两种触发方式:

  • Claude 自动调用:根据descriptionwhen_to_use和当前任务判断是否相关。
  • 用户手动调用:输入/,再选择或输入 Skill 名称。

Claude Code 允许分别控制这两种入口。

/deploy这样手动调,是因为 Claude Code 把过去的自定义命令并进了 Skills。下面这两个文件效果相同:

.claude/commands/deploy.md # 老写法.claude/skills/deploy/SKILL.md # 新写法

都会生成/deploy。老命令照常能用,同名时 Skill 优先。

限制自动调用:disable-model-invocation: true

---name: deploydescription: 部署应用到生产环境disable-model-invocation: true---

配置了disable-model-invocation: true后,这个 Skill 只能由用户手动触发,Claude 不会自动调用。它适合部署、发布、批量删改这类有风险、需要人确认的操作。

这个开关也能减少上下文占用:配置后,这个 Skill 不再参与 Claude 的自动发现,相关元数据不会进入上下文。只有用户手动调用时,Skill 内容才会加载进来。

隐藏手动入口:user-invocable: false

---name: project-styledescription: 当前项目的代码风格和命名约定user-invocable: false---

配置了user-invocable: false后,这个 Skill 不会出现在斜杠菜单里,但 Claude 可以在相关任务中调用。它适合放背景知识,比如项目代码风格、内部术语、某类文件的处理规则。这些内容 Claude 需要知道,但用户一般不会手动调用。

frontmatterClaude 自动调用户手动调
默认
disable-model-invocation: true
user-invocable: false否(不显示在斜杠菜单里)

参数和字符串替换

在 Claude Code 里,SKILL.md里的内容不一定是固定不变的,还可以通过占位符接收输入。

最常用的是$ARGUMENTS,代表 Skill 名后面跟的全部内容:

---name: fix-issuedescription: 按项目规范修复一个 GitHub issue---修复 GitHub issue $ARGUMENTS,遵循项目编码规范:1. 读 issue 描述2. 实现修复并写测试3. 提交

输入/fix-issue 123,正文里的$ARGUMENTS就会被替换成123

如果 Skill 内容里没有写$ARGUMENTS,Claude Code 也不会丢掉用户输入的参数,而是会把它追加到 Skill 内容末尾,格式类似ARGUMENTS: 123

参数不止一个时,可以按位置取。位置从 0 开始:

  • $0:第一个参数,等同于$ARGUMENTS[0]
  • $1:第二个参数,等同于$ARGUMENTS[1]

比如/fix-issue main 123里,$0main$1123。如果参数里有空格,用引号包起来:/my-skill "hello world" second,这时$0hello world$1second

如果不想记位置,也可以在 frontmatter 里给参数起名:

---name: fix-issuedescription: 修复指定 GitHub issueargument-hint: "[branch] [issue]"arguments: [branch, issue]---从 $branch 分支开始,修复 GitHub issue $issue。

argument-hint会在自动补全时提示用户该传什么参数;arguments则把传入参数按顺序命名。在这个例子里,$branch对应第一个参数,$issue对应第二个参数。

这里的[branch] [issue]只是示例,也可以写成[issue-number][filename] [format],看这个 Skill 需要什么参数。

除了用户输入,Claude Code 还支持几个内置变量。

  • ${CLAUDE_SKILL_DIR}:当前 Skill 所在目录。引用 Skill 自带脚本、模板时很实用,不用写死绝对路径。
  • ${CLAUDE_SESSION_ID}:当前会话 ID。适合写日志、生成会话专属文件。
  • ${CLAUDE_EFFORT}:当前推理强度。Skill 可以根据它调整说明。

比如在 Skill 里引用自带脚本,可以写:

请使用 ${CLAUDE_SKILL_DIR}/scripts/validate.sh 校验生成结果。

这样,Skill 放到不同项目、不同机器上,也能找到自己的scripts/validate.sh

动态上下文注入

参数解决的是“用户传什么进来”。动态上下文解决的是另一个问题:Skill 运行时,怎么拿到现场数据。

SKILL.md里写!`命令`,Claude Code 会在内容送进 Claude 之前先执行这个 shell 命令,然后把输出替换到原位置。

Claude 看到的不是命令,而是命令跑出来的结果。

比如一个按项目规则审查当前改动的 Skill:

---name: review-changesdescription: 按项目规则审查当前改动---## 当前改动!`git diff HEAD`## 任务按项目代码审查规则,找出可能的 bug、行为变化和缺失的测试。

触发它时,git diff HEAD会在 Skill 加载前执行,真实 diff 直接进入上下文。

这里要分清楚:命令是 Claude Code 在预处理阶段执行的,不是 Claude 自己调用工具执行的。Claude 从头到尾只看到替换后的内容。

很多开发任务不缺提示词,缺的是现场。

  • 代码审查要看git diff
  • 发布检查要看git status
  • PR 总结要看gh pr view
  • 调试要看最近一次测试输出

这些信息每次都在变。写死在 Skill 里,很快过期;每次让用户手动贴,又回到重复粘贴上下文的老问题。!`command`把这一步自动化了。

如果命令比较长,可以用多行命令块:

```!node --versionnpm --versiongit status --short```

这些命令会在 Skill 加载时自动执行,所以要注意安全边界。

如果想禁用这类 shell 注入,可以在 settings 里设置"disableSkillShellExecution": true。原来的命令不会执行,也不会原样发给 Claude,而是会被替换成:

[shell command execution disabled by policy]

这意味着 Claude 看不到原始命令,也拿不到命令输出。所以写依赖动态上下文的 Skill 时,最好准备降级策略。否则在禁用 shell 注入的环境里,这个 Skill 需要的上下文会直接缺失。

让 Skill 在 Subagent 里运行

有些 Skill 的执行过程会读很多文件,产生大量搜索过程和临时判断,比如代码库调研、安全检查、bug 分析。全都放在主对话里,很容易污染上下文。

Claude Code 给了一个字段:context: fork。加上它,这个 Skill 就会在隔离的 Subagent 里运行。Subagent 看不到你的对话历史;Skill 正文会作为 Subagent 的任务输入,做完后再把结果汇总回主对话。

不熟悉 Subagent 也不影响往下读。这里先把它理解成一个独立的执行环境就够了。想了解完整机制,可以看我之前写的《Subagent 详解:用 Subagent 把 Claude Code 变成一支小团队》。

比如一个调研 Skill:

---name: deep-researchdescription: 深入调研代码库里的某个主题context: forkagent: Explore---深入调研 $ARGUMENTS:1. 用 Glob、Grep 找相关文件2. 阅读并分析实现3. 给出结论,标明具体文件位置

调用/deep-research auth flow后,Claude Code 会新开一个隔离上下文,把这段 Skill 正文交给 Subagent。Subagent 在里面翻文件、读代码,只把结论带回主对话。

agent决定由哪个 Subagent 执行。因为每个 Subagent 都有自己的模型、工具和权限配置,这也会决定这次执行的环境。可以用内置的ExplorePlangeneral-purpose,也可以用.claude/agents/里自定义的 Subagent。

这里选Explore,是因为它适合只读地搜索和分析代码库。不写agent的话,默认是general-purpose

context: fork适合任务型 Skill,比如分析代码、查调用链、找风险。像“写 API 时遵循这套命名规范”这种背景规则,没有明确要完成的任务,留在主上下文里更合适。

权限、安全和信任边界

Skill 会影响 Claude Code 的执行边界。它可能带脚本,也可能在加载时执行!`command`,还可能在激活后预批准某些工具。看一个 Skill,不能只看它写了什么流程,还要看它会让 Claude 自动做什么、免确认做什么。

先看allowed-tools

---name: commitdescription: 暂存并提交当前改动disable-model-invocation: trueallowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)---

它的作用是:Skill 激活时,列出来的工具可以不用每次再问你确认。

allowed-tools不是“白名单”。没列进去的工具仍然可用,只是继续走 Claude Code 原本的权限规则,该确认的确认,该拒绝的拒绝。

想让某个 Skill 不能碰某些工具,要用disallowed-tools

---name: background-loopdescription: 自动检查后台任务状态disallowed-tools: AskUserQuestion---

它会在这个 Skill 激活期间,把对应工具从 Claude 的可用工具池里移除,等你发下一条消息再恢复。

如果要做全局限制,就不要只写在某个 Skill 里,而要放到 Claude Code 的权限设置中。

常见规则大概是这几类:

  • 禁用所有 Skill:denySkill
  • 禁止某个 Skill:denySkill(deploy)
  • 禁止某个 Skill 的带参调用:denySkill(deploy *)
  • 允许某个 Skill:allowSkill(commit)

放到配置文件里,大概是这样:

项目级可以写在.claude/settings.json
用户级可以写在~/.claude/settings.json

{ "permissions": { "allow": [ "Skill(commit)" ], "deny": [ "Skill(deploy *)", "Bash(git push *)" ] }}

这里的Skill()规则管的是 Claude 自动调用 Skill 的权限,不控制用户手动输入/deploy的入口。Bash(git push *)则是限制对应的 shell 命令。

user-invocable: false也一样。它只是不显示在斜杠菜单里,不等于禁止 Claude 调用。要挡住 Claude 自动调用,得用disable-model-invocation: true,或在权限规则里限制Skill(...)

动态上下文那节讲过disableSkillShellExecution。它可以禁用用户级、项目级、插件级,以及--add-dir目录里的 Skill 和旧版自定义命令(.claude/commands/)中的!`command`注入。

预置 Skills 和 managed Skills(托管 Skills)不受这个设置影响。它也不等于全局禁用 Bash;Claude 后续能不能主动用 Bash,仍然看普通工具权限。

项目级 Skill 还要看信任工作目录。

仓库里的.claude/skills/可能带有allowed-tools。这些预批准工具只有在你信任当前工作目录之后才会生效。

一个项目级 Skill 可能声明很宽的工具权限。信任一个仓库前,最好把它的 Skill 当代码一样审一遍。

审一个 Skill,至少看三件事:

  • 它会不会自动触发。
  • 它预批准了哪些工具。
  • 它有没有在加载时自动执行 shell 命令。

标准 Agent Skills 和 Claude Code 扩展对比

回到开头那个问题:同样一个SKILL.md,Claude Code 到底多做了什么?

维度标准 Agent SkillsClaude Code 扩展
基本形态文件夹 +SKILL.md,可带脚本、参考资料、模板兼容,不改
预置能力不预置具体 Skill预置/code-review/run等 Skills,开箱即用
发现方式通过元信息让 Agent 判断是否需要加载增加/skill-name手动调用
调用控制定义“按需加载”disable-model-invocationuser-invocable控制谁能调
自定义命令不定义斜杠命令custom commands 并入 Skills,同名 Skill 优先
参数不定义参数替换$ARGUMENTS$0/$1、具名参数
当前现场内容主要来自文件本身!`command`在加载前注入git diff、PR 信息等实时数据
执行位置不规定运行上下文context: fork放进隔离 Subagent 跑
权限定义 allowed-tools 字段接入权限系统,加disallowed-toolsSkill()规则、信任工作目录
安全策略不定义具体执行策略,交给客户端实现disableSkillShellExecution禁用部分来源的 shell 注入

标准管 Skill 怎么写,Claude Code 管它怎么跑。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 11:42:52

交通数据可视化实战:在TransCAD中如何为多条公交线创建带精准站点的动态分段地图?

交通数据可视化实战&#xff1a;在TransCAD中为多条公交线创建带精准站点的动态分段地图 每次看到城市公交线路图上那些蜿蜒的彩色线条和整齐排列的站点标记&#xff0c;我都会好奇这些专业地图是如何制作出来的。直到接触了TransCAD这款交通规划专业软件&#xff0c;才发现原来…

作者头像 李华
网站建设 2026/6/13 11:42:52

SketchUp STL插件完整指南:如何快速实现3D打印模型转换

SketchUp STL插件完整指南&#xff1a;如何快速实现3D打印模型转换 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl SketchUp …

作者头像 李华
网站建设 2026/6/13 11:39:51

Harness Engineering:解决Agent幻觉的工程手段

Harness Engineering&#xff1a;解决Agent幻觉的工程手段 &#xff08;万字深度技术博客&#xff09;摘要/引言 0.1 开篇场景&#xff1a;一个令人崩溃的LLM Agent客服事故 想象一下&#xff1a;你是国内某TOP3互联网金融公司的客服AI负责人&#xff0c;为了解决80%高频重复的…

作者头像 李华
网站建设 2026/6/13 11:36:00

如何在5分钟内搭建专业级本地语音合成系统:终极完整指南

如何在5分钟内搭建专业级本地语音合成系统&#xff1a;终极完整指南 【免费下载链接】tts-vue &#x1f3a4; 微软语音合成工具&#xff0c;使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 还在为寻找安全高效的文…

作者头像 李华