Communitygithub.com

mgummich/mealie-skill

通过 REST API 清理 Mealie 实例——由 LLM 做判断,由脚本执行写入。既是智能体技能,也是独立 CLI 工具。

mealie-skill 是什么?

这个技能旨在通过一个严格的三阶段流程(分析 -> 计划 -> 执行)来系统性地清理和维护 Mealie 实例。它利用一个中心的 Python 脚本 (`mealie_ctx.py`) 来封装所有 API 调用,提供审计、搜索、转换单位、种子固定词汇表和应用操作等功能。该技能的一个关键特性是其“保守写入”策略:除非通过 `actions.json` 文件获得用户明确批准,否则不会进行任何修改;所有写入操作都在 `apply` 阶段执行,该阶段会强制执行限制(如不允许缩短列表字段)并提供 `--dry-run` 选项。它支持多种维护模式,包括食谱清理、食品/单位管理、购物清单标签整理和分类合并。该技能可以与 MCP 服务器 (`mcp-mealie`) 集成,用于替代某些分析任务(如膳食计划、食谱导入),并将所有操作记录在 `.mealie.changelog.jsonl` 中以便追溯。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add mgummich/mealie-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Mealie 维护

始终遵循三个阶段:分析 -> 计划 -> 执行。 未经明确批准,不得写入任何内容。 切勿在单个计划中混合两种不同类型的任务。

选择模式并阅读对应的参考文档

只阅读当前模式对应的参考文档,不要阅读所有文档:

任务参考文档
清理食谱、解析食材、填充字段references/recipes.md
食品:缺口、匹配、重复references/foods.md
单位:缺口、重复、转换为公制references/units.md
购物清单标签:调色板、缺口、轴线references/labels.md
整合分类、标签、工具references/organizers.md
创建或重做食谱手册references/cookbooks.md
重复食谱、断行的食材、失效链接、饮食标签references/maintenance.md
食谱、食品和单位上的 extras 字段references/extras.md
膳食计划、从 URL 导入食谱、使用 MCP 服务器references/mcp.md

所有模式的动作格式相同:references/actions.md。 仅在计划阶段二(计划)开始时阅读该文件。

每当 mcp-mealie MCP 服务器连接时,阅读 references/mcp.md —— 它会改变所有其他模式获取数据的方式。

工具

scripts/mealie_ctx.py 封装了所有 API 调用。不要阅读其源代码, 使用 --help 调用它。

路径相对于此技能目录,而不是工作目录—— 每次调用都必须包含其前缀,否则找不到命令:

python .agents/skills/mealie/scripts/mealie_ctx.py <command>

setup [--check]                    检查连接,存储凭据
index [--refresh]                  构建本地食谱索引
audit <what> [--limit N]           食品 单位 标签 分类 标签
                                   工具 食谱 链接 extra
ctx recipe <slug> [--search T]     食谱 + 匹配的食品 + 组织者
                  [--full]         未删节的 JSON,很少需要
ctx <what> [--limit N] [--group G] 食品 单位 分类 标签 工具
                                   食谱手册 饮食
usage <kind> <id>                  使用了某个食品/单位/分类/标签/工具的食谱
convert "<amount>" [...]           非公制数量 -> 公制 + Original: 注释;也处理 °F 和英寸
rules [--init]                     此实例的内部规则
seed labels|units|all [--out F]    用于固定词表的动作
apply <file> [--slug S] [--dry-run]

第一次 audit 调用会构建索引(遍历所有食谱一次,取决于实例大小,可能需要一些时间)。 之后的每次审计都从该索引读取。 每次执行写入操作(apply)后,索引会被丢弃并重新构建。

以下三个命令可以替代你本可能手工完成(而且通常做不好)的操作:

  • convert 持有密度表和舍入规则,并返回 Original: 注释。切勿在心中换算英制数量。
  • rules 打印此实例的决策——区域设置、分类轴线、容器假设、解析裸食品的表格(pepper -> black pepper [ground])。在创建或重命名任何内容之前阅读它,并且添加一行规则,而不是两次决定同一个问题。
  • seed 将固定词表(29 个标签及其区域颜色、公制单位集)写入一个动作文件,跳过已存在的内容。

apply 会将每个操作与它所覆盖的状态一起记录到 .mealie.changelog.jsonl 中,拒绝那些会缩短列表字段的 patch_recipe 以及为 Mealie 1.x 编写的食谱手册负载(一个 queryFilterString,绝不能是 tags/categories/tools/requireAll*),并且会检查计划——如果包含非公制单位则会致命报错。--dry-run 执行相同的检查。详细信息请参阅 references/actions.md。

上下文命令已经返回过滤后的数据。切勿未经过滤地加载完整表格,也切勿手动构建食谱循环——这就是索引的作用。

环境变量:MEALIE_URL、MEALIE_TOKEN——也会读取 MEALIE_API_TOKEN(mcp-mealie 中用于令牌的名称)、MEALIE_BASE_URL 和 MEALIE_API_KEY。如果它们都未设置,脚本会从工作目录下的 .mealie.env 和 .env 文件中读取。任何命令如果找不到这些值,都会终止运行并提示使用 setup。

脚本需要网络访问实例。在沙盒环境中,即使 URL 和令牌正确,调用也可能因连接错误而失败——这是环境权限问题,不是配置错误。请说明情况,让用户允许该调用。切勿使用手写的 HTTP 脚本绕过此问题:mealie_ctx.py 是访问 API 的唯一途径,第二个途径既没有写入顺序保护也没有 dry run 功能。当 MCP 服务器连接时,其调用通过服务器进行,不受此影响。

setup --check 仅探测配置,可以安全运行——当连接状态不明时,在会话开始时使用一次。而普通的 setup 会提示输入 URL 和令牌,必须由用户运行,而不是由你运行:询问用户并等待。切勿在聊天中要求输入令牌,也切勿自己将其写入文件。

如果 mcp-mealie MCP 服务器已连接,请改为使用它进行分析:它在服务器端回答审计问题,因此根本不会构建本地索引,并且它涵盖了这个脚本特意缺少的功能——膳食计划、从 URL 导入食谱、交互式食谱搜索。脚本保留有序批处理:需要 ORDER 或需要对整个数据集进行 dry run 的计划仍然通过 actions.json 和 apply 执行。请先阅读 references/mcp.md。

输出风格:洞穴人

如果 caveman 技能可用,请为这个工作流激活它。审计、计划和报告都是冗长的表格输出——正是压缩能带来好处的情况。如果没有该技能:正常回答,但保持简洁——使用表格而不是散文,不要重复工具已经打印过的内容。

只有聊天输出被压缩——分析、计划、报告、你的临时评论。以下两种情况保留完整的 ${CONTENT_LANG} 散文:

  • 所有写入 Mealie 的内容,即 actions.json 中的所有内容。这是数据库内容,不是聊天内容;请参阅 references/actions.md。
  • 关于破坏性操作的警告、不确定时的提问以及批准确认问题。对于需要重写 14 个食谱的合并操作,清晰明确比节省几个 token 更重要。

所有模式的通用规则

不杜撰任何东西:食材、数量和步骤只能被结构化、翻译和纠正,绝不能添加或删除。现有的正确值保持不变。

所有内容使用 ${CONTENT_LANG};已确立的烹饪术语(sous-vide, roux, ganache)保持原样。使用公制单位。

在报告中标记估算值。有疑问时,留空字段而不是猜测。

在创建前先搜索——对于食品、单位以及组织者都是如此。同时检查拼写变体、单复数形式和外语等效词。

在计划中明确标记破坏性操作(merge_*、delete_organizer、retag_recipe),注明受影响的食谱数量,并指出这些操作无法撤销。

保持批次较小:每次运行最多处理 25 个食品/单位缺口或 5 个重复项/组织者组。食谱有自己的规则——对于食材、步骤和注释,每个计划处理一个食谱;对于字段级别的更改,可以是任意数量;请参阅 references/recipes.md。

出现中止时,不要尝试推测性修复——报告已到达的状态并询问。

相关技能