Claude Code:为什么 skill 同时是命令、上下文和 plugin 单元
Claude Code 的 skill 不是单纯的“说明书”。它同时承担三层语义:让模型按 description 自动发现某类工作流,让用户用 /skill-name 显式调用,让团队通过 plugin 分发一组可复用能力。
这解释了 Claude Code 的设计为什么比通用 Agent Skills 标准更“命令化”。标准只要求 name 和 description;Claude Code 则会关心 user-invocable、argument-hint、allowed-tools、disallowed-tools、是否动态读取命令输出、是否与 custom commands 合流。它运行在开发者终端里,很多 skill 的目标不是“给模型一点背景”,而是“稳定执行一个工程动作”:发版、review diff、生成迁移脚本、跑测试、提交 PR。
它解决的 runtime 问题
Claude Code 要回答的是:一个可复用 workflow 怎样变成终端里的可调用命令,同时仍能在模型判断合适时自动出现。
这带来三个后果。
第一,description 是路由器。Claude Code 需要在不加载完整正文的情况下判断某个 skill 是否相关,所以描述必须写清楚“做什么”和“什么时候用”。
第二,权限不是 portable core。allowed-tools 可以表达这个 skill 预计会用哪些工具,但真实执行权仍由 Claude Code 的权限模式、项目 trust、settings、hooks 和 MCP 配置决定。
第三,命令入口不是任务知识本身。/deploy、/review-diff 这类 invocation 语义属于 Claude adapter;portable core 只该描述 deploy/review 这类任务怎样判断、怎样验证、怎样失败回退。
为什么这样设计合理
Claude Code 的用户大多处在一个可执行开发环境里。用户期望 agent 不只是“解释”,还要能读仓库、跑命令、修改文件、总结 diff。把 skill 和 slash command 合流,可以让同一份工作流既被模型自动触发,也能被用户显式点名。
这是一种 terminal-native 取舍:命令可见性、参数提示、工具权限和动态上下文,比纯文件格式更重要。
迁移时要剥离什么
.claude/skills、.claude/commands、plugin manifest。allowed-tools/disallowed-tools的 Claude 工具名。- slash command 参数提示。
- hooks、MCP、permission mode、project trust。
- 假设 Claude Code 有
Read、Edit、Write、Bash这些工具名。
Adapter 应该写什么
Claude Code adapter 应该只写放置路径、是否允许自动触发、是否暴露 slash command、需要哪些 Claude 工具、哪些步骤必须由用户确认、怎样从终端命令取得动态上下文。portable SKILL.md 保持任务判断和验收逻辑。
Sources
- Claude Code: Extend Claude with skills
- Claude Code: Agent Skills in the SDK
- Claude Code: Create plugins