← 返回 Skills 市场
devak208

hash health

作者 C.K.DEVAK · GitHub ↗ · v1.0.9 · MIT-0
cross-platform ⚠ suspicious
135
总下载
0
收藏
0
当前安装
10
版本数
在 OpenClaw 中安装
/install hash-health
功能描述
Hash Health — personal nutrition tracking, meal logging, medication management, and daily health dashboard. Use when user mentions food, meals, eating, loggi...
使用说明 (SKILL.md)

You are connected to Hash Health, a personal nutrition and health tracking platform.

All data is sent to the user's own Hash Health account. No data goes to third parties.


CRITICAL RULES

Food image received (user sends a photo):

  1. Call hash_upload_image immediately with the image — do NOT describe or ask first
  2. Call detectIngredients with your visual analysis as text parameters
  3. Show detected ingredients from the tool result — ask "Confirm to save, or edit?"
  4. After user confirms → call analyze_food with image_path from step 1

Food text received ("I ate X", "log X", "save X"):

  • Call hash_analyze_and_log immediately — no asking first

Only pause point: After detectIngredients returns, show the list and wait for "yes/save/looks good" before calling analyze_food.

Never:

  • Describe the food or give your own nutrition estimates before calling tools
  • Ask "shall I log this?" before calling tools
  • Call analyze_food before user confirms ingredients
  • Save a meal unless user explicitly says save/log/track

Auth check

Before any request call hash_get_daily_nutrition with no arguments. If auth error → tell user:

"Set your HASH_HEALTH_TOKEN in OpenClaw settings. Get it from Hash Health app → Settings → Advanced → Generate API Key."


Setup

POST https://hash-claude-mcp.vercel.app/api/mcp
Authorization: Bearer $HASH_HEALTH_TOKEN
Content-Type: application/json
Accept: application/json, text/event-stream

All calls use JSON-RPC:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": { "name": "\x3Ctool_name>", "arguments": { ... } },
  "id": 1
}

Result is always in response.result.content[0].text


Log a meal — from image

Step 1 — Upload the image immediately (no text to user first)

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_upload_image",
    "arguments": {
      "image_url": "\x3Cattachment URL if available>",
      "image_data_url": "\x3Cdata:image/jpeg;base64,... if available>",
      "mime_type": "image/jpeg"
    }
  },
  "id": 1
}

Provide exactly ONE of: image_url, image_data_url, or image_base64. Save the path from the response — you will pass it to analyze_food later.

Step 2 — Call detectIngredients with your visual analysis

Pack everything you see in the image into the parameters. Pass ALL ingredients — if you pass a vague list you get a generic result.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "detectIngredients",
    "arguments": {
      "food_name": "\x3Cdish name you identified>",
      "ingredients_list": [
        "rice ~200g",
        "egg ~50g",
        "onion ~30g",
        "oil ~10g"
      ],
      "portion_size": "\x3Ctotal estimated weight e.g. 290g>",
      "visual_notes": "\x3Cbrief description e.g. fried rice in a bowl>"
    }
  },
  "id": 2
}

Step 3 — Show result and ask for confirmation

Display the ingredient list from the tool result verbatim, then ask:

"Detected: Egg Fried Rice

  1. Rice (~200g)
  2. Egg (~50g)
  3. Onion (~30g)
  4. Oil (~10g) ✅ Confirm to save, or tell me what to add/edit/remove?"

Step 4 — Wait for confirmation, then call analyze_food

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "analyze_food",
    "arguments": {
      "food_name": "\x3Cdish name>",
      "selected_ingredients": ["rice", "egg", "onion", "oil"],
      "ingredient_sizes_g": {
        "rice": "200g",
        "egg": "50g",
        "onion": "30g",
        "oil": "10g"
      },
      "is_customized_ingredients": true,
      "save_to_history": true,
      "image_path": "\x3Cpath from hash_upload_image step>"
    }
  },
  "id": 3
}

Show: dish name, calories, protein, carbs, fat. Confirm saved ✅

Important: selected_ingredients is an array of names. ingredient_sizes_g is an object mapping name → gram string. Never use ingredients_list in analyze_food.


Log a meal — from text

Trigger: "log X", "I ate X", "save X", "track X" — call immediately, no asking.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_analyze_and_log",
    "arguments": {
      "food_name": "\x3Cdish name and description>",
      "save": true,
      "language": "en"
    }
  },
  "id": 1
}

Show: dish name, calories, protein, carbs, fat. Confirm saved.


Check today's nutrition

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_get_daily_nutrition",
    "arguments": { "date": "\x3CYYYY-MM-DD or omit for today>" }
  },
  "id": 1
}

Display: calories, protein (g), carbs (g), fat (g), fiber (g), streak.


Daily dashboard

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_daily_dashboard",
    "arguments": { "date": "\x3CYYYY-MM-DD or omit>" }
  },
  "id": 1
}

View meal history

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_get_meal_history",
    "arguments": {
      "limit": 10,
      "date": "\x3CYYYY-MM-DD or omit for today>"
    }
  },
  "id": 1
}

JSON.parse the analysis field — see Parsing meal analysis data below.


Delete a meal

Step 1 — get meal ID:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": { "name": "hash_get_meal_history", "arguments": { "limit": 20 } },
  "id": 1
}

Step 2 — confirm: "Delete [dish name] logged at [time]?"

Step 3 — delete:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_delete_meal",
    "arguments": { "id": "\x3CUUID>" }
  },
  "id": 2
}

Weekly report

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": { "name": "hash_weekly_report", "arguments": {} },
  "id": 1
}

List medications

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": { "name": "hash_get_medications", "arguments": {} },
  "id": 1
}

Add a medication

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_add_medication",
    "arguments": {
      "name": "\x3Cmedication name>",
      "dosage": "\x3Ce.g. 500mg>",
      "frequency": "\x3Ce.g. twice daily>",
      "time_of_day": ["morning", "evening"],
      "notes": ""
    }
  },
  "id": 1
}

Delete a medication

Step 1 — get ID: hash_get_medications Step 2 — confirm with user Step 3:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "hash_delete_medication",
    "arguments": { "id": \x3Cnumeric id> }
  },
  "id": 2
}

Note: medication id is a number, not a string.


Bedtime summary

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": { "name": "hash_get_bedtime_summary", "arguments": {} },
  "id": 1
}

Nutrition chat

When: User asks a health/nutrition question.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nutrition_chat",
    "arguments": {
      "messages": [
        { "role": "user", "content": "\x3Cuser's question>" }
      ]
    }
  },
  "id": 1
}

Parsing meal analysis data

The analysis field in meal history is always a JSON string — always JSON.parse() it first.

Two possible formats:

Value Format A (current) Format B (legacy)
Dish name dishName dish
Calories nutritionalInfo.calories_kcal nutrition.calories
Protein nutritionalInfo.proteins_g nutrition.protein
Carbs nutritionalInfo.carbohydrates_g nutrition.carbs
Fat nutritionalInfo.fats_g nutrition.fat
Fiber nutritionalInfo.fiber_g nutrition.fiber
Sugar nutritionalInfo.sugar_g nutrition.sugar
Serving size estimatedServingSize_g estimated_serving_size_g
Category category category
Summary analysis summary

Detect format: dishName present → Format A. dish present → Format B.

Always display:

🍽 \x3Cdish name>
Calories: X kcal | Protein: Xg | Carbs: Xg | Fat: Xg | Fiber: Xg

Rules

  • Always use today's date (YYYY-MM-DD) when no date is specified.
  • Never guess a meal UUID or medication ID — look it up first.
  • Always confirm before deleting.
  • Medication id is a number — not a string.
  • Never ask the user to paste their token in chat — always use OpenClaw environment settings.
  • If token is missing/invalid: "Set your HASH_HEALTH_TOKEN in OpenClaw settings. Hash Health app → Settings → Advanced → Generate API Key."
安全使用建议
Before installing, verify that https://hash-claude-mcp.vercel.app is an official Hash Health API endpoint or trusted proxy. Key points to consider: - The skill will send your HASH_HEALTH_TOKEN as a Bearer token to that domain and auto-upload images/text without asking — if the domain is not trusted, your account access and personal data could be exposed. - Ask the publisher: why use that domain instead of an official Hash Health API? Request documentation or a privacy/security policy. - If you proceed, consider using a restricted or test API key (not your primary account key) and be prepared to rotate/revoke it if anything looks suspicious. - If you need the skill to prompt before uploading images or before sending sensitive data, ask the developer to modify SKILL.md to require explicit user confirmation prior to any upload. Given the unresolved mismatch between the "no third parties" claim and the explicit third-party endpoint, treat this skill as potentially risky until you confirm the endpoint's trustworthiness.
能力评估
Purpose & Capability
Name/description (nutrition, meal logging, medication management) align with needing an API token (HASH_HEALTH_TOKEN). However, all API calls are directed to https://hash-claude-mcp.vercel.app, which is not obviously an official Hash Health API domain. The skill claims "All data is sent to the user's own Hash Health account. No data goes to third parties," but the documented endpoint suggests the token and user data will be sent to that third-party host — this inconsistency is unexplained and concerning.
Instruction Scope
Runtime instructions require the agent to immediately upload user images ("Call hash_upload_image immediately" and "do NOT describe or ask first") and to call analysis endpoints without prior user confirmation for text triggers. That means the skill will forward potentially sensitive images and meal descriptions to the configured endpoint automatically. The instructions also ask to include detailed visual analysis in requests, increasing the amount of personal data transmitted.
Install Mechanism
No install spec and no code files — instruction-only skill. Nothing is written to disk or installed by the skill itself, which minimizes installation risk.
Credentials
The skill requests a single API credential (HASH_HEALTH_TOKEN), which is reasonable for a service-integration skill. The proportionality concern arises because that token will be used in Authorization headers sent to the documented third-party endpoint; confirm that this endpoint is an official Hash Health host before supplying sensitive credentials.
Persistence & Privilege
always:false (not force-included) and no install actions. The skill can be invoked autonomously (platform default). Combined with the auto-upload instructions, autonomous invocation could cause unprompted transmission of images/text to the external endpoint — consider this when granting agent autonomy.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install hash-health
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /hash-health 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.9
- Added SKILL.md file for detailed skill behavior instructions and API usage. - Removed skills.md file. - Documentation and metadata changes only; no impact on user-facing features or core functionality.
v1.0.8
**Hash Health 1.0.8 — Workflow update for meal logging from images** - Revised image meal logging: Now requires uploading images first with `hash_upload_image` before ingredient detection. - Added `visual_notes` to `detectIngredients` for better context and accuracy. - Stricter workflow: Do not provide nutrition info or ask before calling analysis tools. - Improved auth instructions and error messaging for API key setup. - Updated API base URL in metadata. - Clarified tool response handling and confirmation steps before saving data.
v1.0.7
hash-health 1.0.7 - Clarified instructions for handling food images: always call detectIngredients first, with no text output before the tool call. - Emphasized that the ingredient list passed to detectIngredients must be as detailed as possible, including ingredient types and estimated weights. - Removed option to upload an image as a "thumbnail"—now focuses only on the required detection and confirmation flow. - Strengthened the rule: absolutely no output or pause before detectIngredients when a food image is received. - Minor formatting and language updates for critical rules to improve clarity and adherence.
v1.0.6
- Enforces a stricter image logging flow: now calls detectIngredients immediately when a food photo is received—no user output before tool response. - Removes all initial user-facing food/meal description and calorie estimation from image input flow. - Meal logging from text is also silent (no initial message) and directly invokes hash_analyze_and_log. - Clarifies: only ask for meal save confirmation after detectIngredients returns a result (ingredient list). - Image upload is now optional—prompt user about saving with a photo only after ingredient confirmation. - Streamlines critical rules for improved meal logging accuracy and a more seamless user experience.
v1.0.5
**No code changes; SKILL.md instructions simplified and strict “no ask-first” rules for meal logging added:** - Added clear, critical rules: never wait or ask before logging food images or text; always act immediately. - Step-by-step meal-from-image instructions explicitly enforce immediate tool calls—no output or nutrition estimates before logging. - Text logging standardized to always trigger the tool call without user confirmation prompt. - Post-detectIngredients is now the only pause point for user confirmation. - Reorganized and clarified setup and tool call examples. - No changes to API structure; only documentation and process updates.
v1.0.4
Version 1.0.4 - Replaced SKILL.md with skills.md for documentation. - Updated instructions for meal logging from images: steps for ingredient detection and tool calls are now immediate, without initial user confirmation. - Clarified when to call detectIngredients and how to handle image uploads. - Various adjustments to step order, confirmation prompts, and response examples to improve logging flow.
v1.0.3
**Image meal logging now supports image uploads and improved saving.** - Added step to upload meal images so photos display as thumbnails in the app. - When saving a photo meal, now pass both a structured ingredient list and the uploaded image path for accurate analysis and display. - Enforced new requirements: use `selected_ingredients` (name array) and `ingredient_sizes_g` (grams object) when analyzing/saving meals from images; no longer use plain `ingredients_list` for this step. - Improved docs for image upload from both base64 and multipart file, including fallback if upload fails. - All other logging, medication, history, and summary flows remain unchanged.
v1.0.2
**Summary:** Improved meal-logging workflow for images with new ingredient detection steps. - Introduced a multi-step process for logging meals from images, including visual inspection and a new detectIngredients tool call before analysis and saving. - Added confirmation step for users to review and edit detected ingredients prior to nutrition analysis. - Updated instructions to call detectIngredients with textual analysis before calling analyze_food to log image-based meals. - Maintained all other features and tool flows. - No file/code changes beyond updated instructions.
v1.0.1
**Major update: Adds mandatory auth check and new image meal logging flow** - Now requires an authentication check before any health, food, or medication request. Will not proceed if the token is invalid or missing. - Introduces a step-by-step workflow for logging meals from images: analyze the image, confirm details with user, then log on approval. - Adds detailed instructions for parsing and displaying meal history data from two possible formats, ensuring consistent nutrition info display. - Clarifies that JSON parsing of the meal analysis field is required before extracting dish and nutrition data. - Retains all previous features for meal, nutrition, and medication management, but with stricter validation and user confirmations.
v1.0.0
Initial release of hash-health skill. - Tracks nutrition, meal logging, medication management, and delivers daily/weekly health dashboards. - Supports logging meals, checking daily totals, viewing and deleting meal history. - Includes medication listing, adding, and deletion workflows. - Provides bedtime summaries and nutrition Q&A via chat. - Requires user API token (`HASH_HEALTH_TOKEN`) for all actions.
元数据
Slug hash-health
版本 1.0.9
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 10
常见问题

hash health 是什么?

Hash Health — personal nutrition tracking, meal logging, medication management, and daily health dashboard. Use when user mentions food, meals, eating, loggi... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 135 次。

如何安装 hash health?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install hash-health」即可一键安装,无需额外配置。

hash health 是免费的吗?

是的,hash health 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

hash health 支持哪些平台?

hash health 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 hash health?

由 C.K.DEVAK(@devak208)开发并维护,当前版本 v1.0.9。

💬 留言讨论