Weekly Menu 每周菜单
by @beginnerrudy
Generate a weekly meal plan with images, recipes, and shopping lists. Searches Xiaohongshu (小红书) for trending seasonal recipes, creates a beautifully formatt...
clawhub install weekly-menu📖 About This Skill
name: weekly-menu description: | Generate a weekly meal plan with images, recipes, and shopping lists. Searches Xiaohongshu (小红书) for trending seasonal recipes, creates a beautifully formatted Feishu document with photos, source links, headings (for table of contents navigation), and checkboxes, and stores it in the receipts folder. Default: 20 dishes across 6 categories. Use when: user asks for meal planning, weekly menu, "出菜单", "这周吃什么", "推荐菜", "下周菜单", or any food/cooking planning request.
Weekly Menu Skill
Generate a weekly meal recommendation document with images and Xiaohongshu source links, stored as a Feishu doc in the receipts folder.
Prerequisites
docx:document, docx:document:create, drive:drivemeals/profile.yaml (see references/profile-template.yaml)Workflow
1. Load User Profile
Read meals/profile.yaml for:
location — determines seasonal ingredientshousehold.portions — serving sizecooking.equipment — available appliances (air fryer, pressure cooker, etc.)cooking.timeAvailable — quick/moderate/slowcooking.spiceTolerance — none/mild/medium-hot/hotpreferences.cuisinesFavourite — preferred cuisinespreferences.explorationLevel — conservative/adventurousschedule.cookingDays — how many days per weekIf profile doesn't exist, ask user the basics and create one from references/profile-template.yaml.
2. Search for Recipe Inspiration
Use agent-reach Xiaohongshu search to find trending recipes:
mcporter call 'xiaohongshu.search_feeds(keyword: "")'
Search strategy (3-5 searches):
Pick the top results by likes/collects. Aim for 20 candidate dishes across 6 categories:
3. Compose the Menu
Organize 20 dishes into 6 themed sections based on equipment, cuisine, and cooking method:
4. Download Dish Images
Download a representative image for each dish (from Unsplash or similar free sources — Xiaohongshu CDN blocks direct downloads):
curl -sL --connect-timeout 10 --max-time 20 -o ./tmp/dishes/01-name.jpg ""
Store in workspace/tmp/dishes/. Verify each file is a valid JPEG/PNG (not empty or HTML error).
5. Create Feishu Document
Read references/feishu-doc-recipe.md for the full Feishu API procedure.
Summary:
1. Create doc with title 🍽️ YYYY-MM-DD 推荐菜单 (Monday's date) in receipts folder
2. Grant user full_access permission
3. Insert blocks in ≤50-block batches. For each dish, create these blocks in order:
- heading3 (block_type 5) — dish name, enables table of contents navigation
- todo/checkbox (block_type 17, done: false) — same dish name, for user to check off
- text (block_type 2) — description + cooking time
- empty image (block_type 27) — placeholder, filled later
- text with link — "📌 小红书菜谱" linking to XHS post
4. After all text blocks inserted, fill images: upload to drive → patch with replace_image
5. Sections separated by divider (block_type 22) + heading2 (block_type 4)
Key constraints:
time.sleep(0.4) between API calls{"block_type": 27, "image": {}}) then filled via patch6. Share Result
Send the document link to the user in chat. Format:
🍽️ 本周菜单已出炉!20 道菜已备好👉
打开文档,从目录浏览所有菜,勾选你想做的~
7. Update History
Append the week's menu to meals/history.yaml for future reference and to avoid repeats.
Config
| Key | Location | Description |
|-----|----------|-------------|
| User profile | meals/profile.yaml | Taste preferences and constraints |
| Receipts folder | Feishu drive | Token stored in MEMORY.md |
| Meal history | meals/history.yaml | Past menus to avoid repeats |
File References
references/profile-template.yaml — blank user profile templatereferences/feishu-doc-recipe.md — step-by-step Feishu document creation API guide⚙️ Configuration
| Key | Location | Description |
|-----|----------|-------------|
| User profile | meals/profile.yaml | Taste preferences and constraints |
| Receipts folder | Feishu drive | Token stored in MEMORY.md |
| Meal history | meals/history.yaml | Past menus to avoid repeats |