RSS

第 5 章 / 共 10 章

技能加料:动态上下文、附属文件与渐进式披露

约 7 分钟 更新于

5.1 用反引号把实时数据灌进提示

到现在,release-notes 还得靠你把改动贴给它。但发布说明的原料明明就在 git 里。技能支持一种动态上下文注入:在正文里用 !`命令`,Claude Code 会先把这条命令跑掉,把输出替换到那一行,然后模型才读到已经带着数据的正文。

给正文顶部加一行:

## 这次的改动

!`git log $(git describe --tags --abbrev=0)..HEAD --oneline`

## 分类规则
...(照旧)

现在调用 /release-notes,模型看到的正文里已经嵌好了”上个 tag 到现在的所有提交”。它不再需要你贴,也不用自己去猜——数据在它读到指令的同一刻就已经在手边了。

要让这条命令免于每次授权,把它加进 allowed-tools

---
description: ...
allowed-tools: Bash(git log *), Bash(git describe *)
---

5.2 附属文件:模板、清单、示例

技能是一个目录,不只是一个文件——这是它比命令强的地方。你可以把模板、清单、示例放进去,让正文去引用:

~/.claude/skills/release-notes/
├── SKILL.md
├── template.md          # 发布说明的固定骨架
└── references/
    └── style.md         # 团队的用词与语气规范

然后在 SKILL.md 正文里指路,而不是把内容全抄进来:

`template.md` 的骨架输出。
用词和语气拿不准时,读 `references/style.md`

模型需要时才会去读 template.mdstyle.md。这一步是理解下一节的关键。

5.3 渐进式披露:什么时候才付上下文的钱

把前面几层串起来,你会看到技能真正的设计哲学——渐进式披露:上下文是稀缺的,所以每一层只在被需要时才加载,越晚用到的东西越晚付钱。

  • description(最先,最省):一直待在技能清单里,只有一行,供模型选择;
  • 正文(被调用时):技能被挂上时才整段进入上下文;
  • 附属文件(最晚,最贵才付):只有模型真的去读 template.md 时,它才进上下文。
第5章:渐进式披露的三层加载时机
图 5.1:三层的宽度代表它占的上下文,越往下越宽也越晚加载。这解释了为什么技能能装很厚的参考资料却几乎不花常驻成本——description 那一行永远在,厚重的 references/ 只在真正用到的那次才付钱。把长规范拆进附属文件,就是把成本从”每次会话”挪到了”真正用到的那一次”。

5.4 带一个脚本,并让它免提示运行

有些活儿让模型现写代码既慢又不稳,不如直接带一个写好的脚本。技能目录里可以放脚本,并且有个巧妙的机制让它免提示运行:${CLAUDE_SKILL_DIR} 会被替换成这个技能的实际安装路径,你在正文和 allowed-tools 里用同一个变量,两处就能精确对上:

---
description: ...
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/changelog.sh *)
---

运行 `${CLAUDE_SKILL_DIR}/scripts/changelog.sh` 生成原始条目,再按规则润色。

因为 allowed-tools 里的规则和正文里让模型跑的命令是同一条,权限精确匹配,脚本就能不弹授权直接跑。这比”让模型每次即兴写一段 shell”既快又可控。

你现在的成果release-notes 已经是一个完整的技能了——会自动触发、能灌实时数据、带模板和脚本、还几乎不占常驻上下文。下一章我们换一件产物:当一件调查工作大到会拖垮主对话时,怎么给它单开一个上下文。

广告位 · Multiplex 关联广告