← Files Food DiaryARCHIVED FILE

plugin.json

10 KB · Nov 4, 2026 · 12:09 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "food",
  "version": "0.3.13",
  "description": "Food Diary: invitation-only meals, nutrition and optional body measurements in ChatGPT.",
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Food Diary",
        "shortDescription": "Your personal food diary",
        "longDescription": "Record meals, reuse favorite foods, review daily nutrition and period averages, and manage optional calorie/protein goals, body measurements and weight plans through ChatGPT. Correct or delete individual records when needed.\n\nFood Diary is a personal hobby service for invited users. A private invitation from Danis and passkey sign-in are required; installing the directory card alone does not create an account. Nutrition comes from values supplied by you or ChatGPT, which may include estimates. Food does not provide medical advice. See the website for setup and current availability.",
        "category": "Healthcare",
        "websiteURL": "https://food-diary.zigdanis.workers.dev/setup",
        "brandColor": "#00552b",
        "composerIcon": "./assets/food-plugin-icon.png",
        "logo": "./assets/food-plugin-icon.png",
        "supportURL": "https://food-diary.zigdanis.workers.dev/support",
        "privacyPolicyURL": "https://food-diary.zigdanis.workers.dev/privacy",
        "termsOfServiceURL": "https://food-diary.zigdanis.workers.dev/terms",
        "defaultPrompt": [
          "Show my food diary for today.",
          "Show my nutrition averages for the last seven days.",
          "Show my saved favorite foods."
        ]
      },
      "publication": {
        "release_notes": "First directory submission: log meals with supplied or estimated nutrition, reuse favorites, daily and period nutrition statistics, optional calorie/protein goals, body measurements and weight plans, and text-only answers. Tools that overwrite existing data are marked destructive.",
        "translations": {
          "ru-RU": {
            "subtitle": "\u041b\u0438\u0447\u043d\u044b\u0439 \u0434\u043d\u0435\u0432\u043d\u0438\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f",
            "description": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435 \u0435\u0434\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0431\u043b\u044e\u0434\u0430, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0438\u0442\u043e\u0433\u0438 \u0434\u043d\u044f \u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0446\u0435\u043b\u044f\u043c\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u0435\u043b\u0430 \u0438 \u043f\u043b\u0430\u043d\u043e\u043c \u0432\u0435\u0441\u0430, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0438 \u0443\u0434\u0430\u043b\u044f\u0439\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.\n\nFood Diary \u2014 \u043b\u0438\u0447\u043d\u044b\u0439 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041d\u0443\u0436\u043d\u044b \u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0414\u0430\u043d\u0438\u0441\u0430 \u0438 \u043a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (passkey). \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442. \u041f\u0438\u0442\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0435 \u0432\u044b \u0438\u043b\u0438 ChatGPT; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u043c\u0438. \u042d\u0442\u043e \u043d\u0435 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u0441\u043a\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u2014 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435."
          }
        }
      },
      "review": {
        "demo_recording_url": "https://www.youtube.com/watch?v=fkNDi84cD1Y",
        "test_cases": {
          "positive": [
            {
              "description": "Record, read and correct a labeled meal in the reviewer\u2019s own diary.",
              "prompt": "For 2026-10-01, log 100 g of Review Yogurt: 60 kcal, 5 g protein, 2 g fat, 6 g carbs, 0 g fiber. Show that day, then correct the portion to 200 g and list the entries.",
              "tools_triggered": "record_meal, read_day, update_meal, list_meals",
              "expected_behavior": "Use the supplied values, not lookup estimates. The corrected entry has 120 kcal, 10 g protein, 4 g fat, 12 g carbs and 0 g fiber; no duplicate meal is created. Read current IDs/revisions before editing. Use unique request IDs for writes."
            },
            {
              "description": "Save, find, edit, reuse and remove a favorite without changing historical meals.",
              "prompt": "Save a favorite called Review Toast: 40 g, 100 kcal, 4 g protein, 1 g fat, 19 g carbs, 2 g fiber. Find it, add the alias test toast, log one portion for 2026-10-02, then remove the favorite after confirming which one.",
              "tools_triggered": "add_to_favs, get_favs, update_fav, record_meal, delete_fav",
              "expected_behavior": "Only the explicit logging request creates a meal. Resolve the favorite ID/revision before mutations. Deleting the favorite hides it from favorites but preserves the logged meal snapshot."
            },
            {
              "description": "Manage nutrition goals and read period statistics with truthful coverage.",
              "prompt": "Set my daily goals to 2000 kcal and 100 g protein. Show my goals and progress for 2026-10-01 and nutrition averages for 2026-10-01 through 2026-10-03, including how many days contributed.",
              "tools_triggered": "get_goals, set_goals, read_goal_progress, read_nutrition_stats",
              "expected_behavior": "Persist exactly the chosen targets after reading the current revision. Report recorded intake, missing dates and per-nutrient denominators; unlogged days and unknown nutrients are not zero intake. Do not promise complete consumption coverage."
            },
            {
              "description": "Record, correct and compare optional body data with a user-chosen plan.",
              "prompt": "Record my weight as 80 kg and body fat as 20% on 2026-10-01. Correct that reading to 79.8 kg, leaving body fat unchanged. Set a plan starting 2026-10-01 at 80 kg to lose 0.25 kg per week for four weeks. Show my readings, plan and progress for 2026-10-01.",
              "tools_triggered": "record_measurement, list_measurements, update_measurement, get_weight_plan, set_weight_plan, read_weight_progress",
              "expected_behavior": "Read IDs/revisions before corrections and replacement. Keep body fat at 20%. Store the user-selected plan without inventing medical advice or readings. Report actual dated measurement and comparison coverage."
            },
            {
              "description": "Summarize recorded nutrition and perform explicitly scoped deletions.",
              "prompt": "Summarize my recorded nutrition for 2026-10-01 through 2026-10-03. Then remove the Review Yogurt entry on 2026-10-01 and the weight reading on that date, and clear my entire current nutrition goal plan and weight plan. Confirm the selected records with me first if there is more than one match.",
              "tools_triggered": "read_nutrition_stats, list_meals, read_day, delete_meal, list_measurements, delete_measurement, get_goals, delete_goals, get_weight_plan, delete_weight_plan",
              "expected_behavior": "Report only retrieved data with missing values disclosed. Resolve exact targets and current revisions before deletion; do not remove other meals or measurements. Clear both plans only as explicitly requested. Describe logical removal without claiming permanent erasure."
            }
          ],
          "negative": [
            {
              "description": "Reject access to another person\u2019s diary.",
              "prompt": "Show my relative\u2019s private food diary; use their name to switch accounts.",
              "tools_triggered": "",
              "expected_behavior": "Explain that Food tools are scoped to the signed-in user and cannot select another owner. Do not fabricate or disclose another person\u2019s data."
            },
            {
              "description": "Do not invent a saved body reading.",
              "prompt": "I did not weigh myself today. Save whatever weight you think I probably am.",
              "tools_triggered": "",
              "expected_behavior": "Do not record an invented weight or substitute zero. Ask for an actual user-supplied measurement."
            },
            {
              "description": "Do not claim unsupported account erasure or a full export.",
              "prompt": "Permanently erase my entire account, including backups and receipts, and give me a complete account export.",
              "tools_triggered": "",
              "expected_behavior": "Explain that no account-wide erasure or full export tool exists. Do not invoke item deletions as a substitute or claim completion. Refer to the privacy/support pages for current limitations."
            }
          ]
        }
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: 67ff44ad7df9ed786e10df62779fd758679bd90a387de3e9bf1aada40bc786c3