关于 zephyr
zephyr 是处理酸面包烘焙语音备忘录和烘焙日志的共享技能规范,供相关操作技能调用。它定义条目识别、日志定位、时间标记及数据规范;没有 Zephyr 条目的运行应保持静默。
主要功能
- 01按 Zephyr 标记识别烘焙条目
- 02将标记解析为烘焙日志文件
- 03规范事件时间与重量单位
- 04填写酵种峰值时长字段
- 05规定无匹配项时保持静默
适用场景
- 01将语音备忘录条目关联到对应烘焙
- 02为烘焙动作补充事件时间标记
- 03从日志计算酵种达到峰值的时长
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gkwa/ volcanicviper --skill zephyr安装后在 Claude Code 中输入/zephyr确认已加载。
附带文件tile.json
详细介绍
Zephyr 方案
“Zephyr”是用于标记酸面团烘焙语音备忘录的哨兵词。
每条与烘焙相关的语音备忘录都以“Zephyr N”开头,其中 N 是烘焙开始的日期。
例如,5 月 28 日开始的烘焙,其整个烘焙周期内的所有备忘录都使用键“Zephyr 28”。
选择哨兵词“Zephyr”,是因为它在烘焙相关语音中很少见、有两个音节,且语音特征鲜明——语音转文字不会将它与日期、数字或常用词混淆。
同一天开始多次烘焙
同一天开始多次烘焙时,在连字符后添加数字后缀来区分。
“Zephyr 3”表示本月 3 日开始的第一次烘焙——可以省略默认的 -1 后缀。
“Zephyr 3-2”表示本月 3 日开始的第二次烘焙。
5 月说的“Zephyr 5-5”表示 5 月 5 日开始的第五次烘焙。
后缀直接对应烘焙日志文件名末尾的烘焙序号。
没有哨兵词
哨兵词是筛选条件,而非必需项。
大多数文本不包含 Zephyr 键,不含此类键的文本不属于此方案的处理范围。
一次处理未找到哨兵词,就算成功——它准确执行了所要求的操作。
没有找到可处理的内容并不代表失败。
这项指令是有条件的:如果文本中有 Zephyr 条目,就处理它们;如果没有,条件就不会触发。
条件不成立不是错误,因此绝不要报告此次运行失败,也绝不要因未找到内容而以非零状态码退出。
对此保持沉默。
不要解释没有找到键,不要列举缺少键的条目,不要重述不含键的条目永远不会被修改这一规则,也不要将缺失描述为发现、偏差或异常。
只报告发生的更改。
如果此次运行没有任何更改,就不输出任何内容——不提供摘要、不作确认,也不另起一行宣布无事可做。
这适用于方案中的所有动词技能。
技能运行后没有找到可处理的内容,属于正常状态,而非异常状态。
参数
技能接受带默认值的命名参数,类似 Python 关键字参数。
解析优先级从高到低如下:
- 调用或请求中明确指定的值
- 机器本地配置
- 内置默认值
参数:
- 烘焙日志目录 — 内置默认值为
/Users/mtm/Documents/Obsidian Vault/;可通过ZEPHYR_BAKE_LOG_DIR环境变量设置机器本地值;也可在请求中指定目录来覆盖调用值
动词技能可声明自己的其他参数,并按相同的优先级解析。
在调用时使用 Bash 检查 ZEPHYR_BAKE_LOG_DIR;只有当该变量未设置时,才回退到内置默认值。
绝不要假设当前工作目录就是烘焙日志目录。
烘焙日志命名约定
本节是烘焙日志文件名解析的唯一依据。
包括路由在内的所有其他组件,都应根据这些规则解析文件名,而不是重复描述这些规则。
烘焙日志位于烘焙日志目录中(见“参数”)。
命名格式:bake log M-D-YYYY-N.md
N 是当天的烘焙序号,从 1 开始。
后缀不总是 -1:同一天开始的第二次烘焙使用 -2,第三次使用 -3,依此类推。
N 直接对应 Zephyr 键后缀——“Zephyr 3-2”解析为烘焙序号 2。
示例:
bake log 5-28-2026-1.md— 2026 年 5 月 28 日开始的第一次烘焙bake log 5-21-2026-1.md— 2026 年 5 月 21 日开始的第一次烘焙bake log 6-3-2026-2.md— 2026 年 6 月 3 日开始的第二次烘焙
将 Zephyr 键映射到烘焙日志
当前日期为 2026 年 5 月时,“Zephyr 28” → bake log 5-28-2026-1.md。
当前日期为 2026 年 6 月时,“Zephyr 3-2” → bake log 6-3-2026-2.md。
Zephyr 日期数字表示烘焙开始的月份日期。结合当前月份和年份即可确定完整日期。可选后缀表示烘焙序号;若未提供,则默认为 1。
阅读 Zephyr 条目
烘焙日志中的每条 Zephyr 条目都遵循以下格式:
For Zephyr N, [event description] at [time] on [date].
标题时间戳(条目上方的时间戳标题)是记录备忘录的时间。
事件时间戳是正文中提到的时间——也就是实际发生烘焙操作的时间。
提取烘焙事件时,务必使用事件时间戳,而非标题时间戳。
转录错误
条目来自语音转文字,因此有时会出现与上下文明显不符的词。
只有在上下文能确定正确词语时才更正;无法确定时就保留口述原文。
证据必须来自同一份烘焙日志,例如其中的步骤、其他条目或条目报告的测量值。
示例:“初始表盘体积是 1100mL”应改为“初始面团体积是 1100mL”,因为日志本身的步骤要求记录初始面团体积,表盘读数没有用途,而且没有其他词语符合语境。
如果要确定正确词语必须靠猜测,那就无法确定。
绝不要更正数字、单位、时间或否定词,因为错误猜测会改变记录;应将这些内容标记出来。
每次运行结束后,在该次运行自身的输出之后,用一行列出所有更改,注明条目标题、旧词和新词,以便看出是否有错误猜测。
没有更改词语时,不要说任何话。
如果某个词看起来有误,但上下文无法确定正确词语,就保留原文,并在本次运行最后将它与其他问题一并提出,不要在运行过程中提问。
只更正本次运行已经读取或写入的条目,绝不要通读整份烘焙日志来查找错误。
条目标题级别
在烘焙日志中,条目是嵌套在 ## bake log 章节下的 H3 标题。
语音备忘录导出内容会将条目设为 H2,因此将其导入烘焙日志时,应将每条标题降为 H3。
条目正文中的子标题从 H4 开始,因此应保留为该条目的子标题,而不是与条目标题平级。
较早的烘焙日志中,条目早于 ## bake log 章节,因此这些条目应保留为 H2,因为这些文件中没有可供嵌套的章节。
重量标注
语音备忘录由语音转文字生成,单位会被转写为单词,或者数字与单位缩写之间会多出空格。
编写或编辑 Zephyr 条目时,将所有重量数值规范为紧凑格式:
- 数字与单位之间不留空格
- 使用
g,不要使用grams - 使用
mL,不要使用milliliters或ml
示例:
- “18 grams” →
18g - “562 grams” →
562g - “20 g” →
20g - “2190 milliliters” →
2190mL
这适用于条目正文中的所有重量和体积,包括原料用量、面团重量、容器皮重和测量值。
编写 Zephyr 烘焙记录的引用
绝不要在任何备注或表格中单独写 Zephyr 编号(例如“Zephyr 13”)。
单独的编号在不同月份可能有歧义——读者看到“Zephyr 13”时,可能会根据阅读时间将其理解为 6 月 13 日或 7 月 13 日。
写入备注之前,务必将 Zephyr 键解析为烘焙日志双向链接:
- 正确:
[[bake log 5-13-2026-1]] - 错误:
Zephyr 13
这适用于表格单元格、正文引用和任何其他书面上下文。
event_time 标签
每条记录了特定烘焙操作的 Zephyr 条目,都应在正文后单独一行添加内联 event_time 标签:
`event_time: YYYY-MM-DDTHH:MM:00`
需要添加 event_time 的操作:
- 喂养酵种
- 酵种达到峰值
- 从碗中取出酵种
- 将水与酵种混合
- 将 tangzhong 加入面团
- 开始批量发酵(加入面粉)
- 加盐/将盐按入面团
- 拉伸折叠组
- 层叠折叠
- 预整形
- 整形
- 开始冷藏发酵
- 开始烘烤/烘烤完成
- 插入温度探针
不需要添加 event_time 的条目:
- 一般备注、提醒或经验总结
- 没有操作的纯测量或重量记录
- 推测性或回顾性评论
时间精度:
- 如果条目正文中注明了时间,则使用该时间
- 只有正文未注明时间时,才使用标题中的时间戳
- 转换为 ISO 8601 格式:
YYYY-MM-DDTHH:MM:00
带标签的条目示例:
### Friday, June 5, 2026 at 9:57 AM
For Zephyr 4-2, the starter peaked at 9:57 AM on June 5th.
`event_time: 2026-06-05T09:57:00`
不带标签的条目示例(仅测量):
### Friday, June 5, 2026 at 10:59 AM
For Zephyr 4-2, the initial dough volume is 2100 ml.
酵种达到峰值所需时间
每份烘焙日志都包含一个 ## Starter peak duration 部分,其中有一个 YAML 块:
fed: "[TBD]"
peaked: "[TBD]"
duration_to_peak: "[TBD]"
starter_remaining: "[TBD]"
只有当烘焙日志中包含足够的信息来推导字段值时,才填写该字段。
切勿猜测或沿用先前烘焙日志中的值。
| 字段 | 来源 | 填写条件 |
|---|---|---|
fed | feed_starter 条目的 event_time | 存在时间明确的喂养条目 |
peaked | starter peaked 条目的 event_time | 存在时间明确的酵种达到峰值条目 |
duration_to_peak | 从 fed 到 peaked 的经过时间 | fed 和 peaked 均已知 |
starter_remaining | 记录使用后剩余酵种的测量条目 | 烘焙日志中存在此类测量 |
格式规则:
fed和peaked:ISO 8601 格式,YYYY-MM-DDTHH:MM:00duration_to_peak:XhYm(例如11h52m)starter_remaining:紧凑重量表示法(例如1g)
如果烘焙日志中尚无所需信息,则将字段留为 "[TBD]"。
工作流
处理 Zephyr 烘焙日志:
- 确定 Zephyr 标识(例如 “Zephyr 28” 或 “Zephyr 3-2”)
- 根据日期、可选的烘焙序号后缀和当前日期,将其解析为烘焙日志文件名
- 阅读烘焙日志并提取所有 “For Zephyr N” 条目
- 使用事件时间戳(正文中的时间),而非标题时间戳(时间戳标题)
- 编写任何引用该次烘焙的输出时,使用
[[bake log M-D-YYYY-N]],切勿只使用 Zephyr 编号
为烘焙日志添加 event_time 标签:
- 阅读目标烘焙日志
- 对每条 Zephyr 条目,判断其是否记录了特定操作(参见上方列表)
- 如果是,则在正文最后一行后添加 event_time 标签
- 正文中注明时间时使用该时间;否则使用标题中的时间
- 添加完所有标签后提交
更新 Starter peak duration 块:
- 阅读烘焙日志并找到
## Starter peak duration部分 - 对每个字段,检查烘焙日志条目中是否包含所需信息
- 只填写可以推导的字段,其余字段留为
"[TBD]" - 更新后提交
组件
此技能是共享核心:方案本身、文件名解析、重量表示法、event_time 标签、Starter peak duration 区块,以及参数优先级。
对烘焙日志执行操作的动词是独立技能,每个都可单独调用,也可互换,而无需更改核心方案。
| skill | 处理内容 |
|---|---|
| [[zephyr-routing]] | 将任意文档中的 Zephyr 条目送入相应的烘焙日志 |
| [[zephyr-grafana-links]] | ## grafana 部分顶部的两个仪表板链接 |
| [[grafana-bake-annotation]] | ## grafana 部分中的 annotate-grafana.py 命令块 |
每个动词技能都会使用上述规则,而不会重复说明这些规则。
当请求需要执行某个动词时,请阅读相应的动词技能,而不要只依据此技能行事。
最后两个技能共用 ## grafana 部分——顶部是链接,下方是注释命令块。
在修改该部分之前,请阅读你要调用的技能,确认它负责其中哪一部分。
将 Zephyr 应用于烘焙日志
“应用 zephyr”或“将 zephyr 技能应用于此烘焙日志”是一个复合请求。
它涵盖烘焙日志的全部标准状态,而不只是此技能负责的规则。
按以下顺序执行:
- 为每条记录了离散烘焙操作的条目添加 event_time 标签——此技能
- 添加
## Starter peak duration区块——此技能 - 在
## grafana部分顶部添加两个链接——[[zephyr-grafana-links]] 技能
即使请求没有提及这些链接,也要执行第 3 步。
这就是该请求属于复合请求的原因:只需指定核心技能,就足以涵盖链接组件。
以下两个动词不包括在内,仍须作为独立请求处理:
- [[grafana-bake-annotation]] —
## grafana部分中的annotate-grafana.py命令块 - [[zephyr-routing]] — 将条目从一个文档送入另一个文档
只有此类请求会分派到多个技能。
其他所有请求都应指定自己的动词,并遵循上方的“组件”表。
测量数据的存放位置
烘焙期间测得的所有数据——tangzhong 重量、面团体积、温度、产量——都应放在 ## bake log 部分下按日期记录的条目中,最新的排在最前。
上方的脚手架部分,例如预防性缓冲检查、tangzhong 调整、baker's math 和步骤,描述的是配方及其公式。
脚手架是计划,会沿用到下一份烘焙日志中;按日期记录的条目则是本次烘焙的观察结果。将测量数据混入脚手架,会使计划无法作为模板使用。
如果有人要求汇总或记录烘焙期间观察到的数字,请在条目列表顶部添加一条带当前时间戳的新日期条目,不要改动脚手架。
脚手架部分可以在说明中引用之前某次烘焙的结果,以解释选择某个公式的原因,但绝不能累积本次烘焙的原始测量数据。
Levain 取整
Levain 计算结果含有小数克时,一律向上取整。不要保留 46.5g;应写成 47g。
秤无法测量不足 1 克的重量,因此小数值在实际操作中毫无意义。
在数学表达式中使用向上取整符号明确展示取整过程,例如 x = ⌈(278 − 19) / 2⌉ = ⌈129.5⌉ = 130g,并在说明中的配料用量里也使用取整后的数值。