Back to skills
SKILL.md
Oura Analytics
ASecurityOura Ring data integration and analytics. Fetch sleep scores, readiness, activity, HRV, and trends from the Oura Cloud API. Generate automated reports, correlations with productivity, and trigger-based alerts for low recovery days. Requires OURA_API_TOKEN (get at cloud.ouraring.com).
- 651 stars
- 0 votes
- 0 copies
- 1 view
- Added February 10, 2026
Works with
Security analysis
100/100Pro scans all 20 files and shows the line behind each finding
npx -y skills add sundial-org/awesome-openclaw-skills --skill oura-analytics --agent claude-codeAre you the author of Oura Analytics?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/sundial-org-oura-analytics)---
name: oura-analytics
description: Oura Ring data integration and analytics. Fetch sleep scores, readiness, activity, HRV, and trends from the Oura Cloud API. Generate automated reports, correlations with productivity, and trigger-based alerts for low recovery days. Requires OURA_API_TOKEN (get at cloud.ouraring.com).
metadata: {"openclaw":{"requires":{"bins":["python3"],"env":["OURA_API_TOKEN"]},"homepage":"https://github.com/kesslerio/oura-analytics-openclaw-skill"}}
---
# Oura Analytics
## Quick Start
```bash
# Set Oura API token
export OURA_API_TOKEN="your_personal_access_token"
# Fetch sleep data (last 7 days)
python {baseDir}/scripts/oura_api.py sleep --days 7
# Get readiness summary
python {baseDir}/scripts/oura_api.py readiness --days 7
# Generate weekly report
python {baseDir}/scripts/oura_api.py report --type weekly
```
## When to Use
Use this skill when:
- Fetching Oura Ring metrics (sleep, readiness, activity, HRV)
- Analyzing recovery trends over time
- Correlating sleep quality with productivity/events
- Setting up automated alerts for low readiness
- Generating daily/weekly/monthly health reports
## Core Workflows
### 1. Data Fetching
```bash
export PYTHONPATH="{baseDir}/scripts"
python - <<'PY'
from oura_api import OuraClient
client = OuraClient(token="YOUR_TOKEN")
sleep_data = client.get_sleep(start_date="2026-01-01", end_date="2026-01-16")
readiness_data = client.get_readiness(start_date="2026-01-01", end_date="2026-01-16")
print(len(sleep_data), len(readiness_data))
PY
```
### 2. Trend Analysis
```bash
export PYTHONPATH="{baseDir}/scripts"
python - <<'PY'
from oura_api import OuraClient, OuraAnalyzer
client = OuraClient(token="YOUR_TOKEN")
sleep_data = client.get_sleep(start_date="2026-01-01", end_date="2026-01-16")
readiness_data = client.get_readiness(start_date="2026-01-01", end_date="2026-01-16")
analyzer = OuraAnalyzer(sleep_data, readiness_data)
avg_sleep = analyzer.average_metric(sleep_data, "score")
avg_readiness = analyzer.average_metric(readiness_data, "score")
trend = analyzer.trend(sleep_data, "average_hrv")
print(avg_sleep, avg_readiness, trend)
PY
```
### 3. Alerts
```bash
python {baseDir}/scripts/alerts.py --days 7 --readiness 60 --efficiency 80
```
## Environment
Required:
- `OURA_API_TOKEN`
Optional (used for alerts/reports/timezone/output):
- `KESSLER_TELEGRAM_BOT_TOKEN` (fallback to `TELEGRAM_BOT_TOKEN`)
- `TELEGRAM_CHAT_ID`
- `USER_TIMEZONE`
- `OURA_OUTPUT_DIR`
## Scripts
- `scripts/oura_api.py` - Oura Cloud API wrapper with OuraAnalyzer and OuraReporter classes
- `scripts/alerts.py` - Threshold-based notifications (CLI: `python {baseDir}/scripts/alerts.py --days 7 --readiness 60`)
- `scripts/weekly_report.py` - Weekly report generator
## References
- `references/api.md` - Oura Cloud API documentation
- `references/metrics.md` - Metric definitions and interpretations
## Automation (Cron Jobs)
Cron jobs are configured in OpenClaw's gateway, not in this repo. Add these to your OpenClaw setup:
### Daily Morning Briefing (8:00 AM)
```bash
openclaw cron add \
--name "Daily Oura Health Report (Hybrid)" \
--cron "0 8 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--wake next-heartbeat \
--deliver \
--channel telegram \
--target "<YOUR_TELEGRAM_CHAT_ID>" \
--message "Run the daily Oura health report with hybrid format: Execute bash /path/to/your/scripts/daily-oura-report-hybrid.sh"
```
### Weekly Sleep Report (Sunday 8:00 AM)
```bash
openclaw cron add \
--name "Weekly Oura Sleep Report" \
--cron "0 8 * * 0" \
--tz "America/Los_Angeles" \
--session isolated \
--wake next-heartbeat \
--deliver \
--channel telegram \
--target "<YOUR_TELEGRAM_CHAT_ID>" \
--message "Run weekly Oura sleep report: bash /path/to/your/oura-weekly-sleep-alert.sh"
```
### Daily Obsidian Note (8:15 AM)
```bash
openclaw cron add \
--name "Daily Obsidian Note" \
--cron "15 8 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--wake next-heartbeat \
--message "Create daily Obsidian note with Oura data. Run: source /path/to/venv/bin/activate && python /path/to/daily-note.py"
```
**Note:** Replace `/path/to/your/` with your actual paths and `<YOUR_TELEGRAM_CHAT_ID>` with your Telegram channel/group ID.
Files in this skill
- CHANGELOG.md
- README.md
- SECURITY.md
- SKILL.md
- pyproject.toml
- references/SCHEMA.md
- references/TIMEZONE.md
- references/api.md
- references/metrics.md
- references/schemas.md
- requirements-dev.txt
- requirements.txt
- scripts/alerts.py
- scripts/baseline.py
- scripts/briefing.py
- scripts/cache.py
- scripts/config.py
- scripts/daily_summary.py
- scripts/data_manager.py
- scripts/debug_oura.py
Attribution
Comments
Loading comments…