skills$openclaw/oura-ring-data
visionik6.1k

by visionik

oura-ring-data – OpenClaw Skill

oura-ring-data is an OpenClaw Skills integration for data analytics workflows. Access Oura Ring health data using the ouracli CLI tool. Use when user asks about "oura data", "sleep stats", "activity data", "heart rate", "readiness score", "stress levels", or wants health metrics from their Oura Ring.

6.1k stars7.4k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026data analytics

Skill Snapshot

nameoura-ring-data
descriptionAccess Oura Ring health data using the ouracli CLI tool. Use when user asks about "oura data", "sleep stats", "activity data", "heart rate", "readiness score", "stress levels", or wants health metrics from their Oura Ring. OpenClaw Skills integration.
ownervisionik
repositoryvisionik/ouracli
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @visionik/ouracli
last updatedFeb 7, 2026

Maintainer

visionik

visionik

Maintains oura-ring-data in the OpenClaw Skills directory.

View GitHub profile
File Explorer
52 files
.
src
ouracli
__init__.py
78 B
chart_utils.py
2.8 KB
charts_ascii.py
8.2 KB
charts_html.py
8.0 KB
charts_mermaid.py
2.9 KB
cli.py
13.5 KB
client.py
8.8 KB
date_parser.py
2.9 KB
format_dataframe.py
1.1 KB
format_html.py
11.2 KB
format_json.py
2.9 KB
format_markdown.py
8.7 KB
format_tree.py
7.3 KB
format_utils.py
5.6 KB
formatters.py
2.3 KB
llm_help.py
13.3 KB
tests
fixtures
activity_2024-11-01_to_2024-11-14.json
39 B
activity_2024-12-01_to_2024-12-14.json
39 B
activity_recent_14days.json
50.1 KB
heartrate_2024-11-01_to_2024-11-03.json
48 B
heartrate_recent_3days.json
84.8 KB
personal_info.json
147 B
readiness_recent_14days.json
2.6 KB
rest_mode_recent_14days.json
3 B
session_recent_14days.json
3 B
sleep_2024-11-01_to_2024-11-14.json
48 B
sleep_recent_14days.json
1.7 KB
spo2_recent_14days.json
893 B
stress_recent_14days.json
2.0 KB
tag_recent_14days.json
3 B
workout_recent_14days.json
375 B
test_all_methods_all_formats.py
14.8 KB
test_charts_html.py
10.1 KB
test_charts_mermaid.py
8.5 KB
test_cli.py
6.0 KB
test_client.py
2.5 KB
test_coverage_boost.py
12.3 KB
test_date_parser.py
3.1 KB
test_formatters_extended.py
16.6 KB
test_formatters.py
4.5 KB
test_fuzz.py
15.8 KB
test_output_snapshots.py
12.3 KB
_meta.json
275 B
CHANGELOG.md
1.1 KB
pyproject.toml
1.5 KB
README.md
2.1 KB
SKILL.md
6.6 KB
Taskfile.yml
1.2 KB
SKILL.md

name: oura-ring-data description: Access Oura Ring health data using the ouracli CLI tool. Use when user asks about "oura data", "sleep stats", "activity data", "heart rate", "readiness score", "stress levels", or wants health metrics from their Oura Ring. allowed-tools: Bash

Oura Ring Data Access

Retrieves health and fitness data from the Oura Ring using the ouracli command-line interface.

CRITICAL: Authentication Required

ALWAYS check for authentication before running ouracli commands. The tool requires a PERSONAL_ACCESS_TOKEN environment variable.

Available Data Types

Core Health Metrics

  • activity - Daily activity (steps, MET values, calories)
  • sleep - Sleep data (stages, efficiency, heart rate)
  • readiness - Readiness scores and contributors
  • heartrate - Time-series heart rate data (5-minute resolution)
  • spo2 - Blood oxygen saturation data
  • stress - Daily stress levels

Additional Data

  • workout - Workout sessions
  • session - Activity sessions
  • tag - User-added tags
  • rest-mode - Rest mode periods
  • personal-info - User profile information
  • all - All available data types

Date Range Specification

✅ SUPPORTED FORMATS (Use These!)

# Single date (no quotes needed)
ouracli activity 2025-12-25
ouracli sleep today
ouracli heartrate yesterday

# Relative ranges from today (MUST use quotes)
ouracli activity "7 days"      # Last 7 days including today
ouracli sleep "30 days"        # Last 30 days
ouracli readiness "2 weeks"    # Last 2 weeks
ouracli stress "1 month"       # Last month

# Date + duration (MUST use quotes)
ouracli activity "2025-12-01 28 days"    # 28 days starting Dec 1
ouracli sleep "2025-09-23 7 days"        # Week starting Sept 23

⚠️ CRITICAL: Use quotes when the date range contains spaces!

❌ UNSUPPORTED FORMATS (DO NOT USE)

# ❌ WRONG - Two separate dates
ouracli activity 2025-09-23 2025-09-30

# ❌ WRONG - "to" syntax
ouracli activity "2025-09-23 to 2025-09-30"

# ❌ WRONG - Range operators
ouracli activity "2025-09-23..2025-09-30"

# ❌ WRONG - Relative past expressions
ouracli activity "3 months ago"

Converting Date Ranges

If user requests data between two specific dates:

Step 1: Calculate the number of days (inclusive)

Example: Sept 23 to Sept 30 = 7 days
         Dec 1 to Dec 31 = 30 days

Step 2: Use the "date + duration" format

# ✅ CORRECT
ouracli activity "2025-09-23 7 days"
ouracli activity "2025-12-01 30 days"

Output Formats

ALWAYS use --json for programmatic data analysis. This is the most reliable format for parsing.

# ✅ RECOMMENDED for AI analysis
ouracli activity "7 days" --json

# Other formats (human-readable)
ouracli activity today --tree        # Default: tree structure
ouracli activity "7 days" --markdown # Markdown with charts
ouracli activity "7 days" --html > activity.html  # Interactive HTML charts
ouracli activity "7 days" --dataframe  # Pandas DataFrame format

Common Usage Patterns

Quick Data Check

# Today's activity
ouracli activity today --json

# Recent sleep data
ouracli sleep "7 days" --json

# Current readiness
ouracli readiness today --json

Detailed Analysis

# Weekly health summary
ouracli all "7 days" --json

# Monthly activity report
ouracli activity "30 days" --json

# Heart rate for specific date
ouracli heartrate "2025-12-15 1 days" --json

Multi-Day Reports

# All data grouped by day (HTML report)
ouracli all "7 days" --by-day --html > weekly-report.html

# All data grouped by type
ouracli all "7 days" --by-method --json

Key Notes

Readiness Contributors Warning

⚠️ IMPORTANT: The contributors.resting_heart_rate field in readiness data is a SCORE (0-100), NOT actual BPM:

  • Low score (19, 47) = RHR elevated vs. baseline (negative impact)
  • High score (95, 100) = RHR optimal vs. baseline (positive impact)
  • Actual BPM values are in the heartrate command output

DO NOT interpret contributor scores as actual heart rate measurements.

Oura API Quirks

  • Single-day queries sometimes return empty results due to timezone issues
  • Use date ranges (e.g., "YYYY-MM-DD 2 days") for more reliable results
  • When querying specific dates, consider adding a buffer day

Data Availability

  • Ring must be synced recently for current data
  • Historical data availability depends on user's Oura subscription
  • If no data is returned, suggest broader date range or check sync status

Troubleshooting

Error: "Got unexpected extra argument"

Cause: Used two separate date arguments instead of one quoted range

# ❌ WRONG
ouracli activity 2025-09-23 2025-09-30

# ✅ CORRECT
ouracli activity "2025-09-23 7 days"

Error: "Invalid date specification"

Cause: Used unsupported syntax like "to", "..", or relative expressions

# ❌ WRONG
ouracli activity "2025-09-23 to 2025-09-30"

# ✅ CORRECT
ouracli activity "2025-09-23 7 days"

No Data Returned

Solutions:

  1. Try a broader date range: ouracli activity "7 days" --json
  2. Add buffer days: ouracli activity "2025-12-25 2 days" --json
  3. Check if Ring has synced recently
  4. Verify date is within available data range

Example Responses to User Queries

"Show me my activity for the last week"

ouracli activity "7 days" --json

"What was my sleep like last night?"

ouracli sleep today --json

"How was my readiness in December?"

ouracli readiness "2025-12-01 30 days" --json

"Get all my data from Sept 23 to Sept 30"

# Calculate: Sept 30 - Sept 23 = 7 days
ouracli all "2025-09-23 7 days" --json

"Show my heart rate from yesterday"

ouracli heartrate yesterday --json

Quick Reference

User IntentCommand
Today's activityouracli activity today --json
Last week's sleepouracli sleep "7 days" --json
Current readinessouracli readiness today --json
Heart rate todayouracli heartrate today --json
Monthly summaryouracli all "30 days" --json
Specific date rangeouracli [TYPE] "YYYY-MM-DD N days" --json
All data typesouracli all "7 days" --json

Notes

  • Always prefer --json format for AI analysis
  • Use quotes for all date ranges with spaces
  • Calculate day counts for specific date ranges
  • Check authentication if commands fail
  • Consider timezone quirks when querying specific dates
README.md

OuraCLI

CLI tool for accessing Oura Ring data.

Activity Chart

Appreciate the fine elegance of the terminal braille charts

Installation

# Clone the repository
git clone <repository-url>
cd ouracli

# Install dependencies
task py:install

Configuration

Set up your Oura API personal access token:

cp secrets/oura.env.example secrets/oura.env
# Edit secrets/oura.env and add your token

Usage

# Get daily activity data
ouracli activity "7 days" --json

# Get sleep data for yesterday
ouracli sleep yesterday

# Get all data for today
ouracli all today --json

# Available output formats: tree (default), json, dataframe, markdown, html
ouracli sleep today --markdown

AI/LLM Agent Help

For AI agents and LLMs, use the --ai-help flag to get comprehensive usage instructions in structured formats:

# Get usage guide in markdown format (default)
ouracli --ai-help

# Get usage guide in JSON format for programmatic parsing
ouracli --ai-help --ai-help-format json

This follows the dashdash-spec v0.2.0 convention for providing machine-readable CLI documentation.

Available Commands

  • activity - Daily activity data
  • sleep - Daily sleep data
  • readiness - Daily readiness scores
  • heartrate - Heart rate time series
  • workout - Workout summaries
  • session - Session data
  • spo2 - Daily SpO2 data
  • stress - Daily stress data
  • personal-info - Personal information
  • rest-mode - Rest mode periods
  • all - All available data

Date Ranges

Flexible date range options:

  • today - Current day
  • yesterday - Previous day
  • 1 day or 1 days - Today
  • 2 days - Today and yesterday
  • n days - Last n days
  • n weeks - Last n weeks
  • n months - Last n months
  • YYYY-MM-DD + period - Start date plus period (e.g., 2024-01-01 7 days)

Development

# Format code
task py:fmt

# Lint code
task py:lint

# Type check
task py:type

# Run tests
task test

# Run tests with coverage
task test:coverage

# Pre-commit checks
task check

License

MIT

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

FAQ

How do I install oura-ring-data?

Run openclaw add @visionik/ouracli in your terminal. This installs oura-ring-data into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/visionik/ouracli. Review commits and README documentation before installing.