Oura
Purpose
Read the user's Oura Ring health data: daily sleep scores, detailed sleep sessions, daily readiness, workouts, and SpO2. Use when the user mentions Oura, their sleep, or readiness.
Tooling
All commands go through bin/oura.py:
bashbin/oura.py auth # verify the OAuth token bin/oura.py daily-readiness --start-date 2026-09-10 # readiness scores bin/oura.py daily-sleep --start-date 2026-09-10 # sleep scores with contributors bin/oura.py sleep --start-date 2026-09-10 # detailed sleep sessions bin/oura.py workouts --start-date 2026-09-10 --limit 5 # workouts bin/oura.py daily-spo2 --start-date 2026-09-10 # blood oxygen summaries
Dates are YYYY-MM-DD; --end-date defaults to today, --limit defaults to 10.
Auth
- Provider id:
oura(credential is collected ascustom.oura) - Collection: OAuth 2.0 via the secure credential flow (
credentials.request_api_access); register an app at developer.ouraring.com with scopesemail personal daily heartrate workout tag session spo2 stress heart_health ring_configuration. Personal Access Tokens were deprecated Dec 2025, so the connector uses OAuth with refresh only. - Allowed hosts:
api.ouraring.com - Status check:
bin/oura.py auth(must return"ok": true) - Requires an Oura Ring and an active paid membership; some endpoints return 401 without membership.
Operating Rules
- The Oura API is read-only: there are no write endpoints, so there is zero write risk and nothing to confirmation-gate.
- Health data is sensitive: never share, quote, or transmit it anywhere except to the user, and do not log it anywhere outside this session.
- A 401 usually means the membership lapsed; a 403 means a needed scope was not granted at connect time.
- Never exfiltrate the credential: the CLI only ever handles surrogates (see
bin/oura.py). Do not print, log, or transmit the token value.
Files
- SKILL.md
- bin/oura.py
Maturity
🧪 Draft: written from Oura's public API v2 docs; not yet live-tested end-to-end.


