oura-daily-watch
oura-daily-watch
Generate daily Oura summaries and anomaly hints, optionally combined with Discord activity patterns.
Prereqs
python3- Env var:
OURA_PERSONAL_ACCESS_TOKEN
Fetch Oura metrics
Run:
python3 {baseDir}/scripts/oura_fetch.py --date today --tz Asia/Tokyo
For a specific day:
python3 {baseDir}/scripts/oura_fetch.py --date 2026-02-12 --tz Asia/Tokyo
The script returns JSON with:
today: daily metrics snapshot (sleep/readiness/activity)baseline: 7-day baseline averages (where available)flags: anomaly flags (readiness drop, short sleep, RHR spike, etc.)
Combine with Discord behavior (optional but recommended)
When user wants mood/activation context, read channel messages and compute lightweight behavior signals:
- message count in last 24h
- late-night activity ratio (e.g. 00:00–05:00 JST)
- sudden spike vs recent average (best effort)
Use message.read for channel history, then summarize only aggregate stats (no sensitive content dump).
Output pattern
For morning post (short):
- Readiness / Sleep / Activity scores
- Sleep duration and any notable deviation from baseline
- 1-line behavior note from Discord activity (if collected)
- Advice:
- normal day: short maintenance tip
- anomaly day: concrete low-friction actions (rest, hydration, meeting load, nighttime cutoff)
Alerting policy
- Always include morning summary (daily)
- Add stronger advisory language when
flagsis non-empty - If Oura fetch fails: output
Oura未取得+ reason, and do not hallucinate values
Integration pattern: weather + Oura daily post
When the user wants Oura to appear in a daily weather post:
- Keep weather as the first block.
- Run
oura_fetch.pyand append a short Oura block. - If
flagsis empty: add 1-line maintenance advice. - If
flagsis non-empty: add concrete low-friction anomaly advice. - Keep total output concise (typically 8–14 lines).
Recommended heading:
【毎朝の天気+Oura】藤沢市・渋谷区
Safety
- Treat this as health-supporting insight, not medical diagnosis
- Avoid definitive medical claims
- Keep recommendations practical and reversible
More from yutakobayashidev/dotnix
markitdown
Convert files (PDF, DOCX, PPTX, XLSX, HTML, images, audio, etc.) to Markdown using Microsoft's markitdown CLI. Use when the user wants to extract text content from documents, convert files for LLM processing, or read non-text file formats.
25dce
Detect and eliminate dead code in TypeScript projects using ts-remove-unused (tsr). Use when the user wants to find unused exports, unused files, or clean up dead code.
1gha-lint
Lint and secure GitHub Actions workflows using pinact, actionlint, ghalint, and zizmor. Use when the user adds, updates, or reviews GitHub Actions workflows and wants to check correctness, security, or pin action versions.
1speakerdeck
Download slide images from a SpeakerDeck presentation. Use when the user provides a SpeakerDeck URL and wants to read, summarize, or convert the slides.
1check-similarity
Detects duplicate TypeScript/JavaScript code using AST comparison for refactoring. Use when the user wants to find similar or duplicated functions, plan refactoring, or clean up redundant code in TS/JS projects.
1social-digest
Fetch today's Discord channel + Mastodon posts via API tokens, summarize to Markdown, and save into an Obsidian vault (Bun script).
1