Bring App
When to Use
- - User fragt nach Rezeptvorschlägen oder saisonalen Gerichten ("Was essen wir heute?", "Rezeptideen", "saisonale Inspirationen")
- User möchte Einkaufslisten anzeigen oder aktualisieren ("Was steht auf der Einkaufsliste?", "Füge ... hinzu")
- User will Zutaten für ein Rezept hinzufügen
- User fragt nach Bring-Liste-Status oder Rezept-Markern
- Jegliche Anfragen rund um Einkaufsplanung und Rezeptauswahl
Overview
Build a Bring! CLI-focused skill that uses the updated node-bring-api to fetch inspirations (recipes), highlight seasonal dishes, and add user-selected ingredients to a shopping list.
WICHTIG: Immer explizit nach Bestätigung fragen, bevor Artikel zur Liste hinzugefügt werden!
Quick start workflow
- 1. List inspiration filters and identify seasonal tags.
- Fetch inspirations using those tags.
- Summarize 3-7 seasonal dishes.
- IMMER FRAGEN: "Soll ich die Zutaten für [Rezeptname] zur Bring-Liste hinzufügen?"
- Nur bei expliziter Bestätigung: Add their ingredients (not the dish name).
Use references/bring-inspirations.md for endpoint details and headers.
These scripts load node-bring-api from:
- 1.
BRING_NODE_API_PATH (if set), or - INLINECODE4 relative to this skill, or
- the installed
bring-shopping package.
Tasks
1) Discover available filters (season, diet, cuisine)
Run:
CODEBLOCK0
- - Read the JSON and pick tags that look seasonal (e.g., winter/sommer/fruehling/herbst).
- If unsure, ask the user to pick from the filter list.
2) Fetch inspirations
Run:
CODEBLOCK1
- - If the user did not specify tags, default to
mine. - Inspect the JSON and extract a short list of suggested dishes with any available metadata.
- Capture
content.contentSrcUrl for each dish (needed to load ingredients).
3) Suggest seasonal dishes
- - Return 3-7 options.
- Include dish name and 1 short sentence (if available in the JSON).
- WICHTIG: Frage explizit: "Welche Rezepte sollen zur Bring-Liste hinzugefügt werden?" oder "Soll ich die Zutaten hinzufügen?"
- Warte auf explizite Bestätigung des Users.
4) Add selected dishes to a list (ingredients only)
NUR NACH EXPLIZITER BESTÄTIGUNG, list available lists if needed:
CODEBLOCK2
Add ingredients from the selected dish content URL(s):
CODEBLOCK3
Or resolve by list name:
CODEBLOCK4
List Management (v2.2.0)
Create a new shopping list:
CODEBLOCK5
Returns the new list's UUID and name. If a list with that name already exists, returns the existing list info without creating a duplicate.
Note: List deletion is not supported by the Bring API — lists can only be deleted via the Bring app.
Environment
These scripts default to ENV values:
- - INLINECODE8
- INLINECODE9
- INLINECODE10 (default
DE) - INLINECODE12 (optional path to
build/bring.js)
If ENV is not set, pass --email and --password explicitly.
Recipe Markers (v2.1.0)
Add items tagged with a recipe name so you can track which ingredients belong to which recipe:
CODEBLOCK6
This stores each item with the specification [Rezept] Lasagne, acting as a recipe marker.
List distinct recipe markers on a list:
CODEBLOCK7
Returns a sorted array of recipe names currently on the list.
Recipe Search & URL Parsing (v2.2.0)
Workflow: Rezeptvorschläge machen
When a user asks for recipe suggestions ("Was soll ich heute kochen?", "Rezeptideen für Sommer"):
Step 1: Search for recipes
Use your web_search tool (Brave API) to find recipe URLs:
CODEBLOCK8
Pick 3-5 promising recipe URLs from the search results.
Step 2: Parse recipe URLs for structured data
CODEBLOCK9
Returns structured JSON per recipe: name, ingredients (itemId + spec), image URL, source URL.
For a single URL, returns a single object. For multiple URLs, returns an array.
Step 3: Present options to the user
Show the user the parsed recipes with:
- - Recipe name
- Number of ingredients
- Source URL
- Key ingredients (first 5-6)
IMMER FRAGEN: "Möchtest du die Zutaten für [Rezeptname] zur Bring-Liste hinzufügen?" oder "Welche Rezepte soll ich zur Einkaufsliste hinzufügen?"
Step 4: Add selected recipe to list (NUR BEI BESTÄTIGUNG)
CODEBLOCK10
This parses the recipe, creates a marker (e.g., === LASAGNE ===), tags all ingredients with the recipe name, and batch-adds everything to the list.
Parse recipe URL (standalone)
CODEBLOCK11
Returns structured ingredient data without adding to any list. Useful for previewing.
Supported recipe sites
The Bring parser supports most major recipe websites including:
- - chefkoch.de
- lecker.de
- eatsmarter.de
- kitchenstories.com
- And many more (any site with structured recipe data / JSON-LD)
Recipe Images
CRITICAL: Never generate images for recipes. Recipe websites always include photos. Extract and use those instead.
Extract recipe image from URL
Method 1: Use --parse-url (preferred)
If the parser supports the site, the image URL is included in the JSON response:
CODEBLOCK12
Method 2: Fallback (manual extraction with web_fetch)
If --parse-url fails or returns no image, use web_fetch to extract the Open Graph image tag:
CODEBLOCK13
The image URL can then be used directly in markdown or Discord embeds — no download required:
CODEBLOCK14
Workflow for recipe suggestions with images
- 1. Search for recipe URLs (
web_search) - Parse recipe URL (
--parse-url or web_fetch fallback) - Extract the recipe image URL (no download needed)
- Present recipe with:
- Name
- Image (embed via URL:
)
- Key ingredients
- Source URL
- 5. IMMER FRAGEN: "Soll ich die Zutaten für dieses Rezept zur Bring-Liste hinzufügen?"
- NUR BEI EXPLIZITER BESTÄTIGUNG: Add to shopping list
Example: Complete recipe workflow
CODEBLOCK15
Beispiel-Dialog
Agent: "Ich habe 3 leckere Rezepte gefunden:
- 1. 🍝 Spaghetti Carbonara (5 Zutaten)
- 🍛 Chicken-Curry (9 Zutaten)
- 🥗 Griechischer Salat (7 Zutaten)
Welche Rezepte soll ich zur Bring-Liste hinzufügen?"
User: "Das Curry klingt gut"
Agent: "Soll ich die Zutaten für Chicken-Curry zur Bring-Liste 'Zuhause' hinzufügen? (9 Artikel: Hähnchen, Kokosmilch, Curry...)"
User: "Ja"
Agent: "✅ Zutaten für Chicken-Curry hinzugefügt!"
Mehrere Rezepte gleichzeitig
Bei mehreren Rezepten IMMER einzeln bestätigen lassen oder explizit fragen:
- - "Soll ich ALLE 3 Rezepte hinzufügen?"
- "Welche der Rezepte soll ich hinzufügen? (1, 2, 3 oder alle)"
Remember:
- - Recipe images come from the source website, never from image generation tools
- Use the image URL directly — no download needed (platforms load images themselves)
- INLINECODE25 avoids exec approvals and works seamlessly with OpenClaw
Notes
- - Keep the skill output in German for Germany by default.
- KRITISCH: NIEMALS Artikel ohne explizite Bestätigung hinzufügen!
- IMMER FRAGEN: "Soll ich die Zutaten zur Bring-Liste hinzufügen?" oder ähnliche Formulierung
- NUR BEI JA/BESTÄTIGUNG: Erst dann zur Liste hinzufügen
- Always add ingredients instead of the dish name when using inspirations.
- Bei mehreren Rezepten: Einzeln oder alle zusammen bestätigen lassen
Resources
scripts/
- -
scripts/bring_inspirations.js: Log in and call inspirations and filter endpoints. - INLINECODE27 : List available shopping lists and add items.
references/
- -
references/bring-inspirations.md: Endpoint details and headers.
技能名称: bring-rezepte
详细描述:
Bring App
使用场景
- - 用户询问食谱建议或时令菜肴(我们今天吃什么?、食谱创意、时令灵感)
- 用户想要查看或更新购物清单(购物清单上有什么?、添加……)
- 用户想要为食谱添加食材
- 用户询问 Bring 清单状态或食谱标记
- 任何与购物规划和食谱选择相关的请求
概述
构建一个专注于 Bring! CLI 的技能,使用更新的 node-bring-api 获取灵感(食谱)、突出时令菜肴,并将用户选择的食材添加到购物清单中。
重要:在将商品添加到清单之前,务必明确请求确认!
快速入门工作流程
- 1. 列出灵感筛选条件并识别时令标签。
- 使用这些标签获取灵感。
- 总结 3-7 道时令菜肴。
- 始终询问:是否要将 [食谱名称] 的食材添加到 Bring 清单?
- 仅在得到明确确认后:添加其食材(而非菜肴名称)。
端点详情和标头请参考 references/bring-inspirations.md。
这些脚本从以下位置加载 node-bring-api:
- 1. BRINGNODEAPI_PATH(如果已设置),或
- 相对于此技能的 ../../node-bring-api/build/bring.js,或
- 已安装的 bring-shopping 包。
任务
1) 发现可用的筛选条件(季节、饮食、菜系)
运行:
node scripts/bring_inspirations.js --filters
- - 读取 JSON 并选择看起来具有季节性的标签(例如,冬季/夏季/春季/秋季)。
- 如果不确定,请让用户从筛选列表中选择。
2) 获取灵感
运行:
node scripts/bring_inspirations.js --tags <逗号分隔的标签> --limit 20
- - 如果用户未指定标签,则默认为 mine。
- 检查 JSON 并提取一份简短的推荐菜肴列表以及任何可用的元数据。
- 捕获每道菜的 content.contentSrcUrl(加载食材所需)。
3) 推荐时令菜肴
- - 返回 3-7 个选项。
- 包括菜肴名称和一句简短描述(如果 JSON 中有)。
- 重要:明确询问:应将哪些食谱添加到 Bring 清单?或是否要添加食材?
- 等待用户的明确确认。
4) 将选定的菜肴添加到清单(仅食材)
仅在得到明确确认后,如有需要,列出可用清单:
node scripts/bring_list.js --lists
从选定的菜肴内容 URL 添加食材:
node scripts/bring_list.js --list <清单-uuid> --content-url https://api.getbring.com/rest/v2/bringtemplates/content/
或通过清单名称解析:
node scripts/bring_list.js --list-name Einkauf --content-url https://api.getbring.com/rest/v2/bringtemplates/content/
清单管理(v2.2.0)
创建新的购物清单:
node scripts/bring_list.js --create-list Amazon
返回新清单的 UUID 和名称。如果该名称的清单已存在,则返回现有清单信息,不会创建重复项。
注意:Bring API 不支持删除清单——只能通过 Bring 应用删除清单。
环境
这些脚本默认使用环境变量值:
- - BRINGEMAIL
- BRINGPASSWORD
- BRINGCOUNTRY(默认 DE)
- BRINGNODEAPIPATH(build/bring.js 的可选路径)
如果未设置环境变量,请显式传递 --email 和 --password。
食谱标记(v2.1.0)
添加带有食谱名称标记的商品,以便追踪哪些食材属于哪个食谱:
node scripts/bring_list.js --list-name Einkauf --add-recipe Lasagne --recipe-items 面条,肉馅,番茄
这将每个商品存储为带有 [食谱] Lasagne 的规格说明,作为食谱标记。
列出清单上不同的食谱标记:
node scripts/bring_list.js --list-name Einkauf --recipe-markers
返回当前清单上食谱名称的排序数组。
食谱搜索与 URL 解析(v2.2.0)
工作流程:提供食谱建议
当用户询问食谱建议时(我今天应该做什么菜?、夏季食谱创意):
步骤 1:搜索食谱
使用你的 web_search 工具(Brave API)查找食谱 URL:
web_search(夏季素食食谱 site:chefkoch.de)
web_search(快速晚餐食谱 site:chefkoch.de OR site:lecker.de)
从搜索结果中选择 3-5 个有希望的食谱 URL。
步骤 2:解析食谱 URL 以获取结构化数据
node scripts/bring_inspirations.js --parse-url url1,url2,url3
返回每个食谱的结构化 JSON:名称、食材(itemId + spec)、图片 URL、来源 URL。
对于单个 URL,返回单个对象。对于多个 URL,返回一个数组。
步骤 3:向用户展示选项
向用户展示解析后的食谱,包括:
- - 食谱名称
- 食材数量
- 来源 URL
- 关键食材(前 5-6 个)
始终询问:是否要将 [食谱名称] 的食材添加到 Bring 清单?或我应该将哪些食谱添加到购物清单?
步骤 4:将选定的食谱添加到清单(仅在确认后)
node scripts/bring_list.js --list-name Einkauf --add-recipe-url https://www.chefkoch.de/rezepte/123/lasagne.html
这将解析食谱,创建一个标记(例如,=== 千层面 ===),用食谱名称标记所有食材,并将所有内容批量添加到清单。
解析食谱 URL(独立使用)
node scripts/bring_inspirations.js --parse-url https://www.chefkoch.de/rezepte/123/lasagne.html
返回结构化的食材数据,不添加到任何清单。适用于预览。
支持的食谱网站
Bring 解析器支持大多数主流食谱网站,包括:
- - chefkoch.de
- lecker.de
- eatsmarter.de
- kitchenstories.com
- 以及更多(任何具有结构化食谱数据 / JSON-LD 的网站)
食谱图片
关键:切勿为食谱生成图片。 食谱网站始终包含照片。请提取并使用这些照片。
从 URL 提取食谱图片
方法 1:使用 --parse-url(推荐)
如果解析器支持该网站,图片 URL 将包含在 JSON 响应中:
bash
node scripts/bring_inspirations.js --parse-url https://www.chefkoch.de/rezepte/123/lasagne.html
返回:{ ..., image: https://img.chefkoch-cdn.de/rezepte/123/lasagne.jpg, ... }
方法 2:备用方案(使用 web_fetch 手动提取)
如果 --parse-url 失败或未返回图片,请使用 web_fetch 提取 Open Graph 图片标签:
javascript
// 使用 web_fetch 工具获取 HTML(无需执行批准)
web_fetch(https://www.chefkoch.de/rezepte/123/lasagne.html)
// 解析返回的 markdown/文本以查找 og:image 元标签
// 从以下位置提取 URL:
然后可以直接在 markdown 或 Discord 嵌入中使用图片 URL——无需下载:
markdown

带图片的食谱建议工作流程
- 1. 搜索食谱 URL(websearch)
- 解析食谱 URL(--parse-url 或 webfetch 备用方案)
- 提取食谱图片 URL(无需下载)
- 展示食谱,包括:
- 名称
- 图片(通过 URL 嵌入:

)
- 关键食材
- 来源 URL
- 5. 始终询问:是否要将此食谱的食材添加到 Bring 清单?
- 仅在得到明确确认后:添加到购物清单
示例:完整食谱工作流程
bash
步骤 1:搜索
web_search(三文鱼蜂蜜芥末食谱)
步骤 2:通过 --parse-url 解析(推荐)
node scripts/bring_inspirations.js --parse-url https://www.eatclub.de/rezept/honig-senf-lachs/
→ { ..., image: https://www.eatclub.de/wp-content/uploads/2023/09/shutterstock-416951386.jpg }
步骤 2