Aklman · Library

04 / 第四章

收编 · Skills 与输出风格.

你有一套反复输入的提示:同样的审查清单、同样的发布步骤、同样的「用这个口吻写」。每次重打一遍,既慢又不稳。Claude Code 给了两个收编的去处:重复的流程连脚本带资源打包成 Skill,一个 /名字 唤起、用到才加载,不挤占上下文 —— 从前的自定义 /命令 也已并入这里;要改的若是它整场对话的角色和口吻,那是输出风格的事,在设置里切换。这一章讲两者怎么分工:哪些活沉成 skill、哪些交给风格、哪些根本不值得固化。


你有几段每周都要重打的提示:发版前那套检查、审 PR 的固定清单、「用我们团队的口吻写 changelog」。每次凭记忆重打,慢,而且每次都略有不同 —— 于是结果也略有不同。这一章讲收编:把你的重复劳动变成两类资产,流程沉成 Skill,说话方式定成输出风格。收编过的东西不再依赖你的记性,也不再吃你的手速。

I

Skills:把流程存成一个词.

一个 skill 就是一个目录加一份 SKILL.md:frontmatter 里一句 description 说清「什么时候该用我」,正文写做法,旁边还能放脚本、模板、示例文件。存好之后有两条入口:你打 /名字 直接唤起,或者 Claude 自己判断相关就加载。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。关键的经济学在加载方式:描述常驻、正文用到才进上下文 —— 一份几百行的发版手册,平时几乎不占地方。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。这也是它和 CLAUDE.md 的分工:每次都要的一句事实住第 3 章,偶尔才用的一套流程住这里。 如果你记得「自定义 slash 命令」:它们已经并入 skills —— .claude/commands/deploy.md.claude/skills/deploy/SKILL.md 生成同一个 /deploy,旧文件继续可用,skills 只是多了支撑文件、调用控制这些新能力。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。一份真实形状的 skill 长这样:
.claude/skills/release/SKILL.md
---
description: 发布一个新版本。用户说「发版」「release」时使用。
disable-model-invocation: true
argument-hint: "[patch|minor|major]"
---
 
## 当前状态
 
!`git status --short && git log --oneline -5`
 
## 步骤
 
发布一个 $ARGUMENTS 版本:
1. 跑 npm test,全绿才继续
2. 按 $ARGUMENTS 升版本号,更新 CHANGELOG
3. 提交、打 tag、推送,贴出每一步的输出

一个发版 skill:动态注入 + 参数 + 只许手动触发

三个 frontmatter 字段值得先认识。disable-model-invocation: true:只许你手动触发 —— 发版、发消息这类有副作用的流程,别让它「觉得代码差不多了」就自己跑。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。allowed-tools:这一轮预批准的工具,让 /release 跑 git 命令不用逐条弹窗。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。context: fork:整个 skill 丢进 subagent 的独立上下文里执行,重活不弄脏主对话(第 5 章的机制)。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。正文里那行 !`git status` 是动态注入:调用瞬间先执行命令、把输出内联进内容 —— 你的 skill 拿到的是活数据,不是你写死的假设。1注 1Claude Code Docs · Skills —— 一个 skill 是一个目录加一份 SKILL.md:frontmatter 写清何时该用,正文是做法;描述常驻上下文,正文只在被调用或被判定相关时加载;/名字 直接唤起。「自定义命令已并入 skills」—— .claude/commands/deploy.md 与 .claude/skills/deploy/SKILL.md 同样生成 /deploy,旧命令文件继续可用。常用 frontmatter:disable-model-invocation(只许你手动触发)、user-invocable: false(只许它自己用)、allowed-tools(该轮免批工具)、context: fork(丢进 subagent 跑)。正文里还能用 $ARGUMENTS 参数替换、!`命令` 动态注入(执行后把输出内联进内容)。位置:企业 / 个人 ~/.claude/skills/ / 项目 .claude/skills/ / 插件;SKILL.md 建议 500 行内,细料放支撑文件。截至 2026-07-17。

II

输出风格:换的不是知识,是口吻.

第二根柱子管的是另一类重复:「解释详细点」「别铺垫直接干」「像导师一样带我」—— 这些不是流程,是整场对话的角色设定。输出风格直接改 system prompt 里的角色、口吻与输出格式,一次设定,每一轮生效。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。文档的界定句很准:改变它怎么回应,不改变它知道什么。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。 内置四款够覆盖多数场景:Default 是原生工程师;Proactive 更敢直接动手、少停下来问;Explanatory 边干活边给你讲原理;Learning 最有意思 —— 它会在代码里留 TODO(human),把关键的一小段留给你亲手写,拿它学新代码库比纯看快得多。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。切换走 /config 里的 Output style 选项,或直接在设置文件里写 outputStyle(独立的 /output-style 命令已经移除)。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。自定义也简单:markdown 文件放进 .claude/output-styles/,用 keep-coding-instructions 决定保不保留原生编码指令 —— 保留,它是个换了口吻的工程师;去掉,它可以彻底变成写作助手或数据分析员。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。两条边界记住:风格只作用于主对话,派出去的 subagent 不受影响;会话中途换风格不生效,下个会话才加载。2注 2Claude Code Docs · Output styles —— 「输出风格改变 Claude 怎么回应,不改变它知道什么」:修改 system prompt 里的角色、口吻与输出格式,作用于整场对话。内置四款:Default、Proactive(先动手少停顿)、Explanatory(边做边讲解)、Learning(留 TODO(human) 让你亲手写一段);自定义放 .claude/output-styles/,keep-coding-instructions 决定保不保留原生编码指令。经 /config 选择或直接改 outputStyle 设置(独立的 /output-style 命令已移除);只作用于主对话,subagent 不受影响。截至 2026-07-17。

III

什么收、收到哪、什么不收.

到这里,固化的去处一共四个。判断题每次只有一道:这段重复,是流程、是事实、是口吻,还是铁律?
这段重复是收到性质
多步流程、带脚本的做法Skill(本章)按需加载,模型执行
每次都要的一句事实CLAUDE.md(第 3 章)常驻上下文
整场对话的角色与口吻输出风格(本章)改 system prompt
必须每次都发生的动作Hook(第 7 章)harness 执行,不经模型
头两行的分界线,官方给的触发律是「第三次」:同一段提示重打到第三次、同一套做法第三次贴进对话,就存成 skill。3注 3Claude Code Docs · Extend Claude Code —— 收编的触发时机:同一段提示重打到第三次、或同一套多步流程第三次贴进对话,存成 skill;hook 与 skill 的分界:hook 在事件上必然执行,skill 由模型理解并执行、结果可能有出入。截至 2026-07-17。末行的分界线更硬:skill 是模型理解后执行的,结果可能有出入;hook 在事件上必然执行 —— 「希望它跑 lint」是 skill 的事,「必须跑过 lint 才许提交」是 hook 的事。3注 3Claude Code Docs · Extend Claude Code —— 收编的触发时机:同一段提示重打到第三次、或同一套多步流程第三次贴进对话,存成 skill;hook 与 skill 的分界:hook 在事件上必然执行,skill 由模型理解并执行、结果可能有出入。截至 2026-07-17。反过来,三类东西不值得收:只做一次的活,写清楚 prompt 就够;还在每周变的流程,固化了就是提前腐烂;以及模型本来就会做对的事 —— 给它立规矩,和给它写说明书一样,都有维护成本。 动手 · 本周就收编三样:
01

把重打过两次的 prompt 存成第一个 skill

找出你本周重打过的那段提示,原样放进 .claude/skills/<名字>/SKILL.md 的正文,description 写清触发时机。下次用 /名字 唤起。
02

给一个有副作用的流程上锁

发版、发通知、清数据 —— 挑一个,加 disable-model-invocation: true,让触发权只在你手里。
03

试一周 Learning 或 Explanatory 风格

在你最近接手的陌生代码库里开一周,再决定回不回 Default —— 风格是可逆的,试错成本几乎为零。

重打第三遍的提示, 是一个还没存档的 skill.

A prompt retyped a third time is a skill not yet saved.

Aklman Library

讨论

讨论.

评论区初始化中…