介绍
# Feast
一项将每周烹饪转化为文化体验的膳食规划技能。
## 快速开始
1. **新用户?** 运行引导流程:“Let's set up Feast”或“Onboard me for meal planning” 2. **老用户?** 检查状态:“What's the meal plan status?” 3. **规划日?** 开始规划:“Let's plan next week's meals” 4. **烹饪日?** 获取揭秘:“What's for dinner?”
## 核心文件
用户数据驻留在其工作区中:
``` workspace/meals/ ├── profile.yaml # User preferences (created during onboarding) ├── history.yaml # What they've eaten ├── favourites.yaml # Loved recipes ├── failures.yaml # Never again └── weeks/ └── YYYY-MM-DD.md # Each week's plan (self-contained) ```
**注意:** 每周计划是完全自包含的——每天的食谱、主题研究、音乐播放列表和文化背景都直接嵌入在周文件中。没有单独的食谱或主题文件。
## 每周节奏
默认计划(用户可配置):
| Day | Activity | Trigger | |-----|----------|---------| | 星期四 | 研究与草拟 | "Let's plan next week" | | 星期五 | 确认计划 | "Confirm the meal plan" | | 星期六 | 购物清单 | "Generate shopping list" | | 星期日 | 购物 | 用户购物 | | 工作日 | 每日揭秘 | "What's for dinner?" | | 周末 | 复盘 | "Review this week's meals" |
## 通知
Feast 会在关键时刻发送提醒:规划日、确认、购物清单、每日揭秘和周复盘。这些是通过 cron 任务交付的,该任务会启动独立的代理来发送通知。
### 通知渠道
用户在 `profile.yaml` 的 `schedule.notifications.channel` 下配置其首选渠道:
| Channel | Delivery Method | |---------|-----------------| | `auto` | 发送到当前会话或第一个可用渠道 | | `telegram` | 通过 Telegram 发送(需要在 OpenClaw 中配置 Telegram 渠道) | | `discord` | 通过 Discord 发送(需要在 OpenClaw 中配置 Discord 渠道) | | `signal` | 通过 Signal 发送(需要在 OpenClaw 中配置 Signal 渠道) | | `webchat` | 输出到聊天会话 |
### 推送通知(可选)
对于独立于聊天渠道的移动设备通知,用户可以启用推送通知:
```yaml schedule: notifications: push: enabled: true method: "pushbullet" # or "ntfy" ```
**支持的方法:**
- **Pushbullet** — 需要单独安装 `pushbullet-notify` 技能并配置 API 密钥 - **ntfy** — 使用 ntfy.sh(或自托管);在 profile 中配置主题
推送通知是*除了*主要渠道之外*额外*发送的,而不是替代它。如果推送发送失败,通知仍会发送到主要渠道。
### 时机
通知通过 OpenClaw 的 cron 系统传递,并设置 `wakeMode: "next-heartbeat"`。这意味着通知会在计划时间后的心跳间隔内(通常最多 1 小时)到达。对于大多数膳食规划目的,这种轻微的延迟是可以接受的。
### 管理通知
用户可以随时调整其通知偏好:
- "Change my Feast notifications to Telegram" - "Turn off morning hints" - "Enable Pushbullet notifications"
更新时,使用存储的 ID 删除旧的 cron 任务,并使用更新的设置创建新任务。
## 工作流
### 引导流程
请阅读 [references/onboarding.md](references/onboarding.md) 了解完整流程。
关键问题: 1. 地理位置(用于季节性、单位、商店) 2. 家庭规模与份量需求 3. 周结构(开始日、烹饪日、放纵日) 4. 饮食需求与阶段 5. 设备与烹饪信心 6. 偏好(菜系、辛辣度、预算)
保存至 `workspace/meals/profile.yaml`。
### 规划(星期四)
1. 检查用户 profile 2. 回顾历史(避免近期重复) 3. 检查即将到来的文化活动(参见 [references/events.md](references/events.md)) 4. 检查地理位置的季节性 5. 选择 6-7 顿餐食,需考虑: - 菜系多样性 - 食材重叠 - 营养均衡 - 快手菜与复杂菜搭配 6. **对每顿饭,进行研究并嵌入:** - **The Place(地方):** 确定具体的起源地区(深入到省、市或区域)。研究区域背景、历史、时事。撰写引人入胜的描述。 - **The Dish(菜肴):** 从本土来源研究正宗食谱(使用原语言搜索)。包括起源故事、文化意义、完整食材和方法。 - **The Soundtrack(原声带):** 策划一个 1-2 小时的播放列表,包含该地区的当代热门歌曲 + 经典/传统音乐(参见 [references/theme-research.md](references/theme-research.md))。包含带链接的完整曲目列表。 - **Setting the Scene(氛围营造):** 如何上菜、喝什么、氛围提示。 7. 将草稿计划保存至 `workspace/meals/weeks/YYYY-MM-DD.md`(所有内容嵌入在此单一文件中) 8. 展示摘要(仅主题,非完整揭秘)
### 确认(星期五)
1. 展示带有主题的草稿计划 2. 允许修改 3. 标记为已确认 4. 设置每日揭秘提醒
### 购物清单(星期六)
1. 根据确认的计划生成 2. 优化: - 按类别分组 - 合并重叠食材 - 检查包装规格与需求 - 标记季节性商品 3. **关键食材比价**(参见 [references/price-checking.md](references/price-checking.md)): - 识别最昂贵的 3-5 种商品(通常是蛋白质、特色食材) - 查询用户可用商店的价格 - 记录当前优惠、多买优惠、会员卡价格 - 将价格建议添加到购物清单 - 建议购物策略(如果节省显著,建议单一商店或分拆购买) 4. 展供审查并附带价格指导 5. 允许修改 6. 标记为已批准
### 每日揭秘
1. 确认是烹饪日 2. 揭秘: - 完整食谱(以用户单位显示) - **主题档案亮点:** - 地方:区域背景、历史和特色 - 那里正在发生什么(规划时间的当前新闻/事件) - 菜肴:起源故事、文化意义、当地如何食用 - **策展播放列表:** - 该地区的当代热门歌曲(当地人现在听的) - 该地区的经典/传统音乐 - 带链接的完整曲目列表(Spotify/YouTube) - 播放列表营造的氛围和旅程 - 氛围营造:上菜建议、饮品搭配、氛围提示 3. 可选的早晨提示以增加期待感
### 复盘(周末)
1. 对每顿饭:评分(1-5)、备注 2. 更新历史 3. 识别最爱 → 添加到最爱 4. 识别失败 → 添加到失败 5. 记录系统改进建议 6. 将复盘保存到周文件
## 食谱本地化
所有食谱均以标准化内部单位存储。输出时,转换为用户的首选单位:
- 温度:摄氏度 / 华氏度 / 燃气标度 - 重量:公制 - 体积:公制
参见 [references/conversions.md](references/conversions.md)。
## 真实性指南
研究菜系时: 1. 尽可能使用原语言搜索 2. 寻找来自本土来源的食谱,而不仅仅是英文美食博客 3. **确定具体的起源地区**——不仅仅是“泰国菜”,而是“泰国北部,清迈风味” 4. **研究真正来自该地区的音乐:** - 寻找当代热门歌曲(当地现在的排行榜) - 寻找经典/传统音乐(该地区的传奇艺术家) - 构建一个策展的 1-2 小时播放列表——不是通用的 Spotify 搜索 - 指南请参见 [references/theme-research.md](references/theme-research.md) 5. **研究该地区本身**——历史、时事、社会背景、著名的特色 6. 记录文化背景和任何相关活动 7. 尊重饮食传统(例如,中东主题不使用猪肉) 8. **将所有内容嵌入周计划中**——食谱、主题、音乐和背景都放在单一的周文件中
各菜系指南请参见 [references/cuisines/](references/cuisines/)。
## 模板
- [templates/profile.yaml](templates/profile.yaml) — 用户 profile - [templates/week.md](templates/week.md) — 包含嵌入式食谱、主题、音乐和购物清单的周计划 - [templates/shopping-list.md](templates/shopping-list.md) — 独立的购物清单格式(供参考;通常嵌入在周计划中)
## 参考资料
- [references/onboarding.md](references/onboarding.md) — 用户引导指南 - [references/theme-research.md](references/theme-research.md) — 如何研究文化主题和策展音乐 - [references/price-checking.md](references/price-checking.md) — 智能购物和比价指导 - [references/events.md](references/events.md) — 用于主题规划的文化活动日历 - [references/nutrition.md](references/nutrition.md) — 饮食阶段和均衡膳食指导 - [references/conversions.md](references/conversions.md) — 单位换算表 - [references/cuisines/](references/cuisines/) — 各菜系研究指南 - [references/seasonality/](references/seasonality/) — 区域性季节性农产品
## 脚本
### 历史记录跟踪
在一顿饭被揭秘并烹饪后,更新历史记录:
```bash python scripts/update-history.py \ --meals-dir ~/.openclaw/workspace/meals \ --date 2026-02-03 \ --name "Thai Green Curry" \ --cuisine "Thai" \ --region "Central Thailand" \ --week-file "2026-02-02.md" \ --rating 4 \ --notes "Great, maybe more chilli next time" ```
这将更新 `history.yaml` 并自动重新计算统计数据。
进行每日揭秘时,在用户确认他们已烹饪并可选地对餐食进行评分后,运行此脚本以保持历史记录为最新。
## 健康与营养
- 如果用户有目标,则跟踪每顿餐食的卡路里 - 确保每周食物种类的多样性 - 尊重饮食阶段(例如:减肥 = 热量缺口) - 标记任何营养问题
参见 [references/nutrition.md](references/nutrition.md)。
## 季节性意识
在建议食材之前检查用户所在地的季节性。季节性农产品: - 质量更好 - 通常更便宜 - 更具环境责任感
并非每种食材都需要应季,但可能的话优先选择应季食材。
区域指南请参见 [references/seasonality/](references/seasonality/)。