🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Oura Ring Analytics

by @kesslerio

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).

TERMINAL
clawhub install oura-analytics

πŸ“– About This Skill


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

# 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

    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

    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

    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)

    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 "" \
      --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)

    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 "" \
      --message "Run weekly Oura sleep report: bash /path/to/your/oura-weekly-sleep-alert.sh"
    

    Daily Obsidian Note (8:15 AM)

    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 with your Telegram channel/group ID.

    ⚑ When to Use

    TriggerAction
    - 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

    πŸ’‘ Examples

    # 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