Skip to main content
skill CX Codex

health-data — Claude Code skill: what it does, how to install

Queries a local Apple Health SQLite database for vitals, sleep, activity, and workouts with output in Markdown, JSON, ASCII, or FHIR R4.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add glebis/claude-skills --skill health-data -a claude-code
Open on GitHub

What health-data does

This skill connects your coding agent to a local SQLite database at ~/data/health.db. The database contains 6.3M+ records across 43 metrics, from heart rate and sleep stages to mobility and workout logs. The agent accesses data through scripts/health_query.py or by executing direct SQL queries via sqlite3.

Output formats include Markdown tables, structured JSON, terminal ASCII charts, and FHIR R4 bundles mapped with LOINC codes. Pre-built commands let the agent inspect daily summaries, compute week-over-week trends, analyze deep sleep hours, and check activity rings.

The skill will fail immediately if ~/data/health.db does not exist. You must export your Apple Health data and import it into SQLite beforehand.

What it helps with

  • query daily summaries for steps, calories, and heart rate
  • inspect sleep stages across deep and REM sessions
  • export Apple Health metrics into FHIR R4 Bundles
  • review workout history filtered by exercise type

Example prompts for the agent

  • Show my daily health summary for 2025-11-29 in markdown format
  • Analyze my sleep stages over the past 14 days using scripts/health_query.py
  • Run a query on ~/data/health.db to compare resting heart rate weekly trends

How to install health-data

1Skills CLI (Vercel)

npx skills add glebis/claude-skills --skill health-data -a claude-code

2Manually: put the files in place

~/.claude/skills/health-data/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/health-data/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about health-data

How to install health-data in Claude Code?

Run npx skills add glebis/claude-skills --skill health-data -a claude-code in your terminal.

What does the health-data skill do?

It queries Apple Health records from a local SQLite database and formats health metrics into Markdown, JSON, ASCII, or FHIR R4.

Where does health-data look for the database?

The scripts look for the SQLite database at ~/data/health.db. If that file is missing, queries cannot run.

Source text

SKILL.md · MIT
---
name: health-data
description: Query Apple Health SQLite database for vitals, activity, sleep, and workouts. Supports Markdown, JSON, and FHIR R4 output formats. This skill should be used when analyzing health metrics, generating health reports, answering questions about fitness or sleep patterns, or exporting health data in standard formats.
---

# Apple Health Data Query Skill

Query and analyze health data from the local SQLite database containing 6.3M+ records across 43 health metrics.

## Database Location

```
~/data/health.db
```

## Query Methods

### 1. Python Script (Recommended for Common Queries)

Use `scripts/health_query.py` for pre-built queries with automatic formatting:

```bash
# Daily summary
python ~/.claude/skills/health-data/scripts/health_query.py --format markdown daily --date 2025-11-29

# Weekly trends
python ~/.claude/skills/health-data/scripts/health_query.py --format json weekly --weeks 4

# Sleep analysis
python ~/.claude/skills/health-data/scripts/health_query.py --format fhir sleep --days 7

# Latest vitals
python ~/.claude/skills/health-data/scripts/health_query.py vitals

# Activity rings
python ~/.claude/skills/health-data/scripts/health_query.py --format json activity --days 30

# Workout history
python ~/.claude/skills/health-data/scripts/health_query.py workouts --days 30 --type Running

# Custom SQL
python ~/.claude/skills/health-data/scripts/health_query.py --format json query "SELECT * FROM workouts LIMIT 5"
```

**Output formats:** `markdown`, `json`, `fhir`, `ascii`

### 2. Direct SQL (For Custom/Ad-hoc Queries)

For flexible queries, run SQL directly against the database. See `references/schema.md` for table structures and query templates.

```bash
sqlite3 ~/data/health.db "SELECT AVG(value) FROM health_records WHERE record_type LIKE '%HeartRate%' AND start_date LIKE '2025-11%'"
```

## Pre-built Queries

### Daily Health Summary

Get today's key metrics:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py daily
```

Returns: steps, calories, heart rate (avg/min/max), exercise minutes, distance, activity ring status.

### Weekly Trends

Compare week-over-week performance:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py weekly --weeks 4
```

Returns: average daily steps, resting HR, exercise minutes, workout count per week.

### Sleep Analysis

Analyze sleep patterns:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py sleep --days 14
```

Returns: nightly duration, sleep stages (Core, Deep, REM), average sleep hours.

### Latest Vitals

Get most recent vital readings:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py vitals
```

Returns: Heart Rate, HRV, Resting HR, Blood Oxygen, Respiratory Rate with timestamps.

### Activity Rings

Track ring completion:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py activity --days 30
```

Returns: daily ring values/goals, completion percentages, perfect day count.

### Workout History

Review exercise sessions:
```bash
python ~/.claude/skills/health-data/scripts/health_query.py workouts --days 30 --type Running
```

Returns: workout type, duration, distance, calories, summary by type.

## Output Formats

### Markdown (default)

Human-readable tables and lists. Best for reports and summaries.

### JSON

Structured data for programmatic use:
```json
{
  "date": "2025-11-29",
  "metrics": {
    "steps": 8542,
    "active_calories": 450.5,
    "heart_rate": {"avg": 72.3, "min": 52, "max": 145}
  }
}
```

### FHIR R4

Healthcare interoperability format. Outputs as FHIR Bundle with Observation resources using LOINC codes. See `references/fhir_mappings.md` for code mappings.

### ASCII

Terminal-friendly output with bar charts and statistics:
```
============================================================
  DAILY SUMMARY - 2025-11-29
============================================================

METRICS
----------------------------------------
  steps                      2620
  active_calories           234.5
  heart_rate           avg:  67.5  min:  52  max: 108

ACTIVITY RINGS
----------------------------------------
  move       [███████░░░░░░░░░░░░░]  36.7% (238/650)
  exercise   [░░░░░░░░░░░░░░░░░░░░]   0.0% (0/35)
  stand      [████████████████████] 100.0% (10/10)
```

## Common SQL Patterns

For ad-hoc queries, use these patterns from `references/schema.md`:

**Heart rate by hour (circadian pattern):**
```sql
SELECT strftime('%H', start_date) as hour, ROUND(AVG(value), 1) as avg_hr
FROM health_records
WHERE record_type = 'HKQuantityTypeIdentifierHeartRate'
AND value BETWEEN 40 AND 200
GROUP BY hour ORDER BY hour;
```

**Steps per day this month:**
```sql
SELECT DATE(start_date) as day, SUM(value) as steps
FROM health_records
WHERE record_type = 'HKQuantityTypeIdentifierStepCount'
AND start_date >= DATE('now', 'start of month')
GROUP BY day ORDER BY day;
```

**Sleep quality (deep + REM hours):**
```sql
SELECT DATE(start_date) as night,
       ROUND(SUM(duration_minutes)/60.0, 1) as quality_hours
FROM sleep_sessions
WHERE sleep_stage IN ('Deep', 'REM')
GROUP BY night ORDER BY night DESC LIMIT 14;
```

**Workout summary:**
```sql
SELECT REPLACE(workout_type, 'HKWorkoutActivityType', '') as type,
       COUNT(*) as count, ROUND(SUM(duration_minutes)) as total_min
FROM workouts
WHERE start_date >= DATE('now', '-30 days')
GROUP BY type ORDER BY count DESC;
```

## Record Types Available

The database contains 43 health metric types including:

**Vitals:** Heart Rate, HRV, Resting HR, Blood Oxygen, Respiratory Rate, Blood Pressure

**Activity:** Steps, Distance, Active Calories, Basal Calories, Flights Climbed, Exercise Time, Stand Time

**Mobility:** Walking Speed, Step Length, Walking Asymmetry, Stair Speed, Walking Steadiness

**Body:** Weight, BMI, Body Fat %

**Audio:** Environmental Noise, Headphone Exposure

**Other:** VO2 Max, Time in Daylight, UV Exposure

## Data Coverage

- **Records:** 6.3M+ measurements
- **Date range:** 2015-10-13 to present
- **Workouts:** 1,435 sessions
- **Sleep sessions:** 40,514 records
- **Activity days:** 1,875 daily summaries

## Resources

### scripts/

- `health_query.py` - Main query tool with Markdown/JSON/FHIR output

### references/

- `schema.md` - Database schema, record type mappings, SQL query templates
- `fhir_mappings.md` - LOINC codes and FHIR R4 templates

## Troubleshooting

**Database not found:**
Ensure `~/data/health.db` exists. Run the import script from `/Users/server/apple_health_export/`:
```bash
python import_health.py --status
```

**No data for date range:**
Check available date range:
```sql
SELECT MIN(start_date), MAX(start_date) FROM health_records;
```

**Outlier values:**
Filter physiologically valid ranges (e.g., heart rate 40-200 bpm):
```sql
WHERE value BETWEEN 40 AND 200
```

© glebis · MIT · glebis/claude-skills

Similar skills

All skills for Data and databases →

From the same set8

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor