Health-Mate
Health-Mate is an executable OpenClaw skill, not a prompt-only package.
It reads structured Markdown logs from MEMORY_DIR, generates localized PDF reports, and can optionally deliver the final message to external services.
What It Does
- Parses meals, hydration, exercise, symptoms, medication, and custom monitoring sections
- Generates daily reports with scoring, detail sections, AI insight, risk alerts, and next-day actions
- Generates weekly reports with rings, paired trend charts, audience-specific insight modules, weekly review, and next-week plan
- Generates monthly reports with radar, branch-aware heatmaps, 30-day weight and BMR trend, specialty charts, follow-up reminders, and clinic suggestions
- Supports explicit report routing through
report_preferences.population_branch, while the setup wizard still auto-suggests lifestyle vs disease mode from the primary goal
- Switches
balanced / fat_loss reports into a lifestyle-review path with activity heatmaps, energy-balance, habit-progression, and lean-mass/fat-mass charts while skipping hospital lookup
- Supports multi-condition management in both LLM and local fallback paths
- Keeps core parsing, scoring, and PDF rendering local
Installation
pip install -r requirements.txt
Dependencies:
reportlab
pillow
matplotlib
Required Runtime Setup
Required:
Optional:
NVM_DIR
CRON_PATH
OPENCLAW_BIN
TAVILY_API_KEY
DINGTALK_WEBHOOK
FEISHU_WEBHOOK
TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID
LOG_FILE
REPORT_WEB_DIR
REPORT_BASE_URL
ALLOW_RUNTIME_FONT_DOWNLOAD
For ClawHub manual folder upload:
config/.env.example may be missing from the uploaded package
- use the top-level
env block inside config/user_config.example.json as the upload-safe reference template
- the setup wizard can create a commented project-local
config/.env template if the file does not already exist
- runtime scripts still read project-local
config/.env
- keep only the keys you intend this skill to read inside project-local
config/.env
Upgrade And Backup Notice
Before upgrading or reinstalling this skill, back up:
config/user_config.json
config/.env
- any local font file you manually placed under
assets/
Important:
- some platform upgrade or reinstall flows may overwrite, reset, or remove local configuration files
- after an upgrade, re-check
MEMORY_DIR, report preferences, scoring modules, webhook settings, and Tavily settings before running scheduled jobs again
- if needed, also verify
report_preferences.population_branch in config/user_config.json
Local And Network Behavior
Expected local file I/O:
- reads Markdown logs from
MEMORY_DIR
- reads project-local
config/.env when shell runners are used and the file exists
- the setup wizard may create a commented project-local
config/.env template when the file is missing
- may rely on
config/user_config.example.json as the upload-safe env reference during manual installation
- writes PDFs into
reports/
- writes logs into
logs/
- may create a temporary English memory mirror for rendering fallback
Expected network I/O:
- Tavily only when
TAVILY_API_KEY is configured
- webhook delivery only when the matching delivery credentials are configured
- runtime font download only when
ALLOW_RUNTIME_FONT_DOWNLOAD=true
Important:
- there is no implicit default
MEMORY_DIR fallback in the shell runners
- the skill exits if
MEMORY_DIR is missing
- shell runners use
NVM_DIR and CRON_PATH from the environment or project-local config/.env, with built-in defaults when those keys are missing
- the Python local-LLM resolver uses
OPENCLAW_BIN first and then tries common install paths without hardcoding a single fixed cron PATH
Commands
Memory Write Protocol
When writing into MEMORY_DIR, the model must act like a strict recorder.
Hard rules:
- Never write commentary, advice, summaries, emoji, or chat filler into the file.
- Meals, hydration, medication events, and exercise events must use level-3 headings with time markers.
- Hydration blocks must remain minimal and structured.
- Step totals must stay in one dedicated level-2 block.
- Monitoring modules must use stable level-2 headings.
- Use one language per block.
Core template:
# 2026-03-20 Health Log
## Meals
### Breakfast (around 08:30)
- Oatmeal 50g -> approx. 190kcal
- Skim milk 250ml -> approx. 87kcal
## Hydration
### Morning (around 09:45)
- Water intake: 300ml
- Cumulative: 300ml/2000ml
## Exercise
### Afternoon Cycling (around 17:17)
- Distance: 10km
- Duration: 47min
- Burn: approx. 300kcal
## Today Steps
- Total steps: 8500 steps
Chinese core template:
# 2026-03-20 健康记录
## 体重记录
- 晨起空腹:64.4kg
## 饮水记录
### 上午(约 08:45)
- 饮水量:300ml
- 累计:300ml/2000ml
## 饮食记录
### 早餐(约 08:50)
- 燕麦片 50g -> 约 190kcal
- 脱脂牛奶 250ml -> 约 87kcal
## 运动记录
### 下午骑行(约 17:10)
- 距离:10.2km
- 耗时:42min
- 消耗:约 290kcal
## 今日步数
- 总步数:8200 步
## 用药记录
- 胆舒胶囊:1 粒
Chinese monitoring-module constraints:
## 血压记录 / ## 血糖记录 / ## 体成分 / ## 生化记录 must stay as stable level-2 titles
- numeric monitoring blocks should use stable item labels such as
- 血压:128/82 mmHg, - 血糖:7.1 mmol/L, - ALT:34 U/L
- do not mix commentary into monitoring blocks
- do not turn monitoring blocks into tables
- do not rename the same monitoring module on different days unless the user intentionally changed the module name
Recommended LLM instruction:
- paste the English or Chinese template above directly into your system prompt,
soul.md, or memory-write policy so the model stays inside the parser-safe structure
- if custom modules are enabled in
user_config.json, add their exact section titles to the LLM write protocol and keep those titles stable across days
Expandable monitoring modules:
## Blood Pressure
### Morning (around 08:00)
- Blood Pressure: 128/82 mmHg
- Heart Rate: 72 bpm
## Glucose Record
### After Breakfast (around 10:10)
- Glucose: 7.1 mmol/L
- Timing: 2h after breakfast
## Body Composition
- Weight: 64.4kg
- Body Fat: 18.6%
## Biochemistry
- ALT: 34 U/L
- AST: 28 U/L
Forbidden content:
Assessment
Status
Summary
- motivational filler
- debug notes
- system logs
- tables inside daily memory files
Monthly Report Expectations
The monthly report now includes:
- macro adherence radar
- healthy-day donut chart based on the full calendar month
- symptom and medication heatmap
- 30-day weight and BMR trend
- condition-specific specialty charts
- lifestyle-mode specialty charts for
balanced / fat_loss: energy balance, four-week habit progression, and lean-mass/fat-mass composition
- AI monthly review
- follow-up reminders or periodic screening suggestions, depending on the active monthly mode
- residence-aware hospital-and-doctor suggestions with grouped recommendations, grades, booking hints, and optional fee / schedule fields for disease-management modes
If the user manages multiple conditions, the monthly report should combine them instead of collapsing to a single narrow perspective.
Font Fallback
Preferred CJK font paths:
assets/NotoSansSC-VF.ttf
assets/NotoSansJP-VF.ttf
If one of them is missing:
- the skill may switch to an English-compatible rendering path
- the output adds a rendering notice
- users who need Chinese PDF output should place
NotoSansSC-VF.ttf into assets/
- users who need Japanese PDF output should place
NotoSansJP-VF.ttf into assets/
Changelog
v1.5.4 - 2026-04-01
- Enhanced PDF visual styling with refined layout and improved readability
- Fixed minor formatting issues in daily, weekly, and monthly report generators
- Optimized symbol rendering for better cross-platform compatibility
v1.5.3 - 2026-03-29
- Sanitized local-LLM stdout before AI commentary is embedded into push text or PDFs, preventing OpenClaw plugin-registration logs from leaking into reports
- Added a second daily-PDF commentary filter as a defensive fallback for unexpected plugin log fragments
- Aligned direct Python execution with the shell runners by auto-loading project-local config/.env when variables are not already exported
v1.5.2 - 2026-03-25
- Updated the upload-safe env example with OpenClaw default
MEMORY_DIR, sanitized web-publish placeholders, and the shared LOG_FILE example
- Extended
init_config.py so first-time setup can create a commented project-local config/.env template without overwriting an existing one
- Clarified SKILL metadata and runtime notes around project-local
.env, cron PATH helpers, and optional-network behavior
- Verified that the setup wizard really creates the commented
config/.env template when the file is missing
- Added a monthly lifestyle-review split for
balanced / fat_loss, including new charts, renamed section titles, screening suggestions, and hospital-lookup bypass
v1.5.1 - 2026-03-24
- Optimized Cron environment configuration for reliable LLM invocation in scheduled tasks
- Embedded the upload-safe env reference into
config/user_config.example.json
- Kept
daily_health_report_pro.sh, weekly_health_report_pro.sh, and monthly_health_report_pro.sh loading environment variables from .env
- Changed all shell script comments to English for better internationalization
- Ensures scheduled daily/weekly/monthly reports can successfully call local LLM for AI insights
v1.5.0 - 2026-03-23
- Removed the legacy
scripts/health_report_pro.py and scripts/pdf_generator.py wrappers
- Extended
init_config.py to cover ja-JP
- Clarified env-first local LLM resolution through
OPENCLAW_BIN and common-path auto-discovery
- Added explicit Japanese font fallback guidance and English-fallback notice behavior
v1.4.0 - 2026-03-21
- Added monthly reporting
- Added weekly and monthly symptom and medication heatmaps
- Added monthly weight and BMR trend output
- Added residence-aware monthly medical planning
- Refreshed README, README_ZH, SKILL metadata, and package metadata
1---2name: health-mate3description: Executable OpenClaw health-report skill with Chinese, English, and Japanese report flows. It reads Markdown logs only from an explicitly configured MEMORY_DIR, writes reports and logs locally, can create a commented project-local config/.env template during setup, sanitizes local-LLM stdout before AI commentary is embedded into reports, separates monthly disease mode from balanced/fat-loss lifestyle mode, and only performs Tavily, webhook, or font-download network activity when the corresponding runtime options are configured.4---56# Health-Mate78Health-Mate is an executable OpenClaw skill, not a prompt-only package.910It reads structured Markdown logs from `MEMORY_DIR`, generates localized PDF reports, and can optionally deliver the final message to external services.1112## What It Does1314- Parses meals, hydration, exercise, symptoms, medication, and custom monitoring sections15- Generates daily reports with scoring, detail sections, AI insight, risk alerts, and next-day actions16- Generates weekly reports with rings, paired trend charts, audience-specific insight modules, weekly review, and next-week plan17- Generates monthly reports with radar, branch-aware heatmaps, 30-day weight and BMR trend, specialty charts, follow-up reminders, and clinic suggestions18- Supports explicit report routing through `report_preferences.population_branch`, while the setup wizard still auto-suggests lifestyle vs disease mode from the primary goal19- Switches `balanced` / `fat_loss` reports into a lifestyle-review path with activity heatmaps, energy-balance, habit-progression, and lean-mass/fat-mass charts while skipping hospital lookup20- Supports multi-condition management in both LLM and local fallback paths21- Keeps core parsing, scoring, and PDF rendering local2223## Installation2425```bash26pip install -r requirements.txt27```2829Dependencies:3031- `reportlab`32- `pillow`33- `matplotlib`3435## Required Runtime Setup3637Required:3839- `MEMORY_DIR`4041Optional:4243- `NVM_DIR`44- `CRON_PATH`45- `OPENCLAW_BIN`46- `TAVILY_API_KEY`47- `DINGTALK_WEBHOOK`48- `FEISHU_WEBHOOK`49- `TELEGRAM_BOT_TOKEN`50- `TELEGRAM_CHAT_ID`51- `LOG_FILE`52- `REPORT_WEB_DIR`53- `REPORT_BASE_URL`54- `ALLOW_RUNTIME_FONT_DOWNLOAD`5556For ClawHub manual folder upload:5758- `config/.env.example` may be missing from the uploaded package59- use the top-level `env` block inside `config/user_config.example.json` as the upload-safe reference template60- the setup wizard can create a commented project-local `config/.env` template if the file does not already exist61- runtime scripts still read project-local `config/.env`62- keep only the keys you intend this skill to read inside project-local `config/.env`6364## Upgrade And Backup Notice6566Before upgrading or reinstalling this skill, back up:6768- `config/user_config.json`69- `config/.env`70- any local font file you manually placed under `assets/`7172Important:7374- some platform upgrade or reinstall flows may overwrite, reset, or remove local configuration files75- after an upgrade, re-check `MEMORY_DIR`, report preferences, scoring modules, webhook settings, and Tavily settings before running scheduled jobs again76- if needed, also verify `report_preferences.population_branch` in `config/user_config.json`7778## Local And Network Behavior7980Expected local file I/O:8182- reads Markdown logs from `MEMORY_DIR`83- reads project-local `config/.env` when shell runners are used and the file exists84- the setup wizard may create a commented project-local `config/.env` template when the file is missing85- may rely on `config/user_config.example.json` as the upload-safe env reference during manual installation86- writes PDFs into `reports/`87- writes logs into `logs/`88- may create a temporary English memory mirror for rendering fallback8990Expected network I/O:9192- Tavily only when `TAVILY_API_KEY` is configured93- webhook delivery only when the matching delivery credentials are configured94- runtime font download only when `ALLOW_RUNTIME_FONT_DOWNLOAD=true`9596Important:9798- there is no implicit default `MEMORY_DIR` fallback in the shell runners99- the skill exits if `MEMORY_DIR` is missing100- shell runners use `NVM_DIR` and `CRON_PATH` from the environment or project-local `config/.env`, with built-in defaults when those keys are missing101- the Python local-LLM resolver uses `OPENCLAW_BIN` first and then tries common install paths without hardcoding a single fixed cron `PATH`102103## Commands104105- `/health`106 Daily report107108- `/health summary`109 Weekly report110111- `/health month`112 Monthly report113114## Memory Write Protocol115116When writing into `MEMORY_DIR`, the model must act like a strict recorder.117118Hard rules:1191201. Never write commentary, advice, summaries, emoji, or chat filler into the file.1212. Meals, hydration, medication events, and exercise events must use level-3 headings with time markers.1223. Hydration blocks must remain minimal and structured.1234. Step totals must stay in one dedicated level-2 block.1245. Monitoring modules must use stable level-2 headings.1256. Use one language per block.126127Core template:128129```markdown130# 2026-03-20 Health Log131132## Meals133### Breakfast (around 08:30)134- Oatmeal 50g -> approx. 190kcal135- Skim milk 250ml -> approx. 87kcal136137## Hydration138### Morning (around 09:45)139- Water intake: 300ml140- Cumulative: 300ml/2000ml141142## Exercise143### Afternoon Cycling (around 17:17)144- Distance: 10km145- Duration: 47min146- Burn: approx. 300kcal147148## Today Steps149- Total steps: 8500 steps150```151152Chinese core template:153154```markdown155# 2026-03-20 健康记录156157## 体重记录158- 晨起空腹:64.4kg159160## 饮水记录161### 上午(约 08:45)162- 饮水量:300ml163- 累计:300ml/2000ml164165## 饮食记录166### 早餐(约 08:50)167- 燕麦片 50g -> 约 190kcal168- 脱脂牛奶 250ml -> 约 87kcal169170## 运动记录171### 下午骑行(约 17:10)172- 距离:10.2km173- 耗时:42min174- 消耗:约 290kcal175176## 今日步数177- 总步数:8200 步178179## 用药记录180- 胆舒胶囊:1 粒181```182183Chinese monitoring-module constraints:184185- `## 血压记录` / `## 血糖记录` / `## 体成分` / `## 生化记录` must stay as stable level-2 titles186- numeric monitoring blocks should use stable item labels such as `- 血压:128/82 mmHg`, `- 血糖:7.1 mmol/L`, `- ALT:34 U/L`187- do not mix commentary into monitoring blocks188- do not turn monitoring blocks into tables189- do not rename the same monitoring module on different days unless the user intentionally changed the module name190191Recommended LLM instruction:192193- paste the English or Chinese template above directly into your system prompt, `soul.md`, or memory-write policy so the model stays inside the parser-safe structure194- if custom modules are enabled in `user_config.json`, add their exact section titles to the LLM write protocol and keep those titles stable across days195196Expandable monitoring modules:197198```markdown199## Blood Pressure200### Morning (around 08:00)201- Blood Pressure: 128/82 mmHg202- Heart Rate: 72 bpm203204## Glucose Record205### After Breakfast (around 10:10)206- Glucose: 7.1 mmol/L207- Timing: 2h after breakfast208209## Body Composition210- Weight: 64.4kg211- Body Fat: 18.6%212213## Biochemistry214- ALT: 34 U/L215- AST: 28 U/L216```217218Forbidden content:219220- `Assessment`221- `Status`222- `Summary`223- motivational filler224- debug notes225- system logs226- tables inside daily memory files227228## Monthly Report Expectations229230The monthly report now includes:231232- macro adherence radar233- healthy-day donut chart based on the full calendar month234- symptom and medication heatmap235- 30-day weight and BMR trend236- condition-specific specialty charts237- lifestyle-mode specialty charts for `balanced` / `fat_loss`: energy balance, four-week habit progression, and lean-mass/fat-mass composition238- AI monthly review239- follow-up reminders or periodic screening suggestions, depending on the active monthly mode240- residence-aware hospital-and-doctor suggestions with grouped recommendations, grades, booking hints, and optional fee / schedule fields for disease-management modes241242If the user manages multiple conditions, the monthly report should combine them instead of collapsing to a single narrow perspective.243244## Font Fallback245246Preferred CJK font paths:247248- `assets/NotoSansSC-VF.ttf`249- `assets/NotoSansJP-VF.ttf`250251If one of them is missing:252253- the skill may switch to an English-compatible rendering path254- the output adds a rendering notice255- users who need Chinese PDF output should place `NotoSansSC-VF.ttf` into `assets/`256- users who need Japanese PDF output should place `NotoSansJP-VF.ttf` into `assets/`257258## Changelog259260### v1.5.4 - 2026-04-01261262- Enhanced PDF visual styling with refined layout and improved readability263- Fixed minor formatting issues in daily, weekly, and monthly report generators264- Optimized symbol rendering for better cross-platform compatibility265266### v1.5.3 - 2026-03-29267268- Sanitized local-LLM stdout before AI commentary is embedded into push text or PDFs, preventing OpenClaw plugin-registration logs from leaking into reports269- Added a second daily-PDF commentary filter as a defensive fallback for unexpected plugin log fragments270- Aligned direct Python execution with the shell runners by auto-loading project-local config/.env when variables are not already exported271272### v1.5.2 - 2026-03-25273274- Updated the upload-safe env example with OpenClaw default `MEMORY_DIR`, sanitized web-publish placeholders, and the shared `LOG_FILE` example275- Extended `init_config.py` so first-time setup can create a commented project-local `config/.env` template without overwriting an existing one276- Clarified SKILL metadata and runtime notes around project-local `.env`, cron PATH helpers, and optional-network behavior277- Verified that the setup wizard really creates the commented `config/.env` template when the file is missing278- Added a monthly lifestyle-review split for `balanced` / `fat_loss`, including new charts, renamed section titles, screening suggestions, and hospital-lookup bypass279280### v1.5.1 - 2026-03-24281282- Optimized Cron environment configuration for reliable LLM invocation in scheduled tasks283- Embedded the upload-safe env reference into `config/user_config.example.json`284- Kept `daily_health_report_pro.sh`, `weekly_health_report_pro.sh`, and `monthly_health_report_pro.sh` loading environment variables from `.env`285- Changed all shell script comments to English for better internationalization286- Ensures scheduled daily/weekly/monthly reports can successfully call local LLM for AI insights287288### v1.5.0 - 2026-03-23289290- Removed the legacy `scripts/health_report_pro.py` and `scripts/pdf_generator.py` wrappers291- Extended `init_config.py` to cover `ja-JP`292- Clarified env-first local LLM resolution through `OPENCLAW_BIN` and common-path auto-discovery293- Added explicit Japanese font fallback guidance and English-fallback notice behavior294295### v1.4.0 - 2026-03-21296297- Added monthly reporting298- Added weekly and monthly symptom and medication heatmaps299- Added monthly weight and BMR trend output300- Added residence-aware monthly medical planning301- Refreshed README, README_ZH, SKILL metadata, and package metadata