Install
openclaw skills install medication-managerFamily medication management skill using file-based storage (no database required). Supports medication entry via photo/image (prescription, medicine box), text description, or voice input. Manages medication inventory, batch tracking, expiry alerts, and member health records. Works with any reminder platform (Feishu, Telegram, QQ, etc.). Use when: (1) user sends photos of prescriptions or medicine boxes, (2) user describes medications to record, (3) checking medication inventory or expiry, (4) reviewing medication history, (5) logging medication intake, (6) managing family health records.
openclaw skills install medication-managerFamily medication management with file-based storage. No database required — works anywhere.
| Feature | How |
|---|---|
| Medication catalog | Markdown files in data/medications/ |
| Member profiles | Markdown files in data/members/ |
| Batch tracking | Embedded in medication files |
| Expiry alerts | scripts/check_expiry.py or manual scan |
| Reminders | Your platform's cron/reminder system (configurable) |
| Notifications | OpenClaw cron, webhooks, email, local OS — you choose |
| Media archive | data/media/ with date-based folders |
This is always the first step. Before recording any medications, create profiles for each family member.
See references/member-profile.md for the complete template, role-specific fields, and data collection guide.
Setup flow (follow this every time):
data/members/{name}.md for each memberMinimal profile (user can fill in details later):
# {姓名}
| Field | Value |
|-------|-------|
| Name | {姓名} |
| Role | 成人 / 儿童 / 老人 |
| Birth Date | YYYY-MM-DD |
| Weight | {kg} |
| Allergies | {list or "无已知过敏"} |
Before setting reminders, configure how the user wants to be notified.
This skill does not hardcode any notification channel. The user chooses their own method.
If running on OpenClaw, the cron system supports all configured channels automatically.
# Example: daily 8am reminder via current channel
openclaw cron add \
--name "med-{member}-{drug}" \
--schedule "0 8 * * *" \
--agent-id your-agent \
--message "⏰ 用药提醒\n\n💊 {药品名}\n剂量:{剂量}\n\n请按时服药!"
Supported channels (via --target):
| Channel | Target Format | Example |
|---|---|---|
| Feishu | feishu:{open_id} | feishu:ou_xxxxx |
| Telegram | telegram:{chat_id} | telegram:-1001234567 |
| QQ Bot | qqbot:c2c:{openid} | qqbot:c2c:xxxxx |
| Discord | discord:{channel_id} | discord:123456789 |
| Signal | signal:{phone} | signal:+86138xxxx |
Tip: Omit
--targetto send to the current conversation (auto-detected).
If the user has a webhook URL, send a POST request with the reminder message. See references/notifications.md for full templates.
See references/notifications.md for:
What the agent should do:
Create the storage structure:
data/
├── medications/ # One .md per medication
├── members/ # One .md per family member (created in Step 1)
├── prescriptions/ # Prescription records (optional)
├── logs/ # Medication intake logs (YYYY-MM-DD.md)
├── config/ # Optional: notification config
│ └── notifications.yaml
└── media/ # Photos of prescriptions/boxes
└── YYYY-MM-DD/
When a user describes or sends a photo of a medication:
data/medications/{generic_name}.md# {Generic Name} ({Brand Name})
## Basic Info
| Field | Value |
|-------|-------|
| Generic Name | {name} |
| Brand Name | {name} |
| Specification | {spec} |
| Manufacturer | {manufacturer} |
| Approval No | {批准文号} |
| Drug Type | 处方药 / OTC / 外用药 |
| Category | 抗生素 / 感冒药 / 退烧药 / etc. |
| Indications | {适应症} |
| Contraindications | {禁忌} |
| Storage | {储存条件} |
## Batches
| Batch No | Mfg Date | Expiry | Qty | Unit | Location | Status |
|----------|----------|--------|-----|------|----------|--------|
| {batch} | {date} | {date} | {n} | 盒/支/瓶 | {location} | active |
## Usage Notes
- Adult dose: {dosage}
- Child dose: {dosage by weight}
- Food: before/after meals
- Special notes: {warnings}
## History
| Date | Member | Action | Notes |
|------|--------|--------|-------|
| YYYY-MM-DD | {name} | added/prescribed | {source} |
User sends image → Analyze with vision model → Extract medication info
→ Confirm with user → Create/update medication .md file → Set reminders if requested
Steps:
data/media/YYYY-MM-DD/User describes medication → Parse → Confirm → Create .md file
Use structured extraction from user's text description. Always confirm before creating.
Get member + medication + schedule → Check notification config
→ Create platform-specific reminder → Record in member file → Test it
openclaw cron add --name "..." --schedule "..." --message "..."python3 /path/to/medication-manager/scripts/check_expiry.py /path/to/data/medications/
Or manually scan medication files for expiry dates. Alert levels:
| Level | Threshold | Action |
|---|---|---|
| 🔴 Expired | Past date | Notify immediately, mark as expired |
| ⚠️ 7 days | Within 7 days | Daily reminder to use or dispose |
| 🟡 30 days | Within 30 days | Weekly reminder |
| 🔶 90 days | Within 90 days | Monthly review |
Scan all files in data/medications/ for:
When a family member takes a medication:
data/logs/YYYY-MM-DD.md:
| Time | Member | Medication | Dose | Status | Notes |
|------|--------|-----------|------|--------|-------|
| 08:15 | 张三 | 氨氯地平 | 5mg | ✅ taken | 饭后 |
| Reference | Path | Purpose |
|---|---|---|
| Member profiles | references/member-profile.md | Template & collection guide |
| Notifications | references/notifications.md | All notification options & templates |
| Storage layout | references/storage-layout.md | File organization & naming |
| Drug interactions | references/drug-interactions.md | Check when multiple drugs prescribed |
| Pediatric dosage | references/pediatric-dosage.md | Calculate child doses by weight |
| Setup guide | references/setup.md | Installation & first use |
This skill is platform-agnostic. The notification layer adapts to whatever the user has:
| Platform | Method | Setup |
|---|---|---|
| OpenClaw (any channel) | Built-in cron | Auto-detected, no config needed |
| Feishu | message tool or cron | Set --target "feishu:{open_id}" |
| Telegram | Bot API or cron | Set --target "telegram:{chat_id}" |
| QQ Bot | qqbot_remind / qqbot_cron | Set target via cron |
| Webhook | POST JSON | Provide webhook URL |
Full details: references/notifications.md
If you have existing medication data (e.g., from a spreadsheet or another system):
data/medications/