[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1613":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":16,"starSnapshotCount":16,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},1613,"OpenVitals","arvohealth-ai\u002FOpenVitals","arvohealth-ai","Your health never sleeps.","https:\u002F\u002Farvohealth.ai",null,"TypeScript",106,15,13,5,0,43.61,"Other",false,"main",[],"2026-06-12 04:00:10","\u003Ch1 align=\"center\">OpenVitals\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Agent-native health operating system for proactive wellness software.\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Farvohealth-ai\u002FOpenVitals\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg alt=\"CI\" src=\"https:\u002F\u002Fgithub.com\u002Farvohealth-ai\u002FOpenVitals\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" \u002F>\u003C\u002Fa>\n  \u003Cimg alt=\"License: PolyForm Noncommercial\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-PolyForm%20Noncommercial-blue\" \u002F>\n  \u003Cimg alt=\"Wellness only: not medical advice\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnot%20medical%20advice-wellness%20only-red\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg alt=\"Node.js 22+\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-22%2B-339933?logo=node.js&amp;logoColor=white\" \u002F>\n  \u003Cimg alt=\"pnpm 10.x\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpnpm-10.x-F69220?logo=pnpm&amp;logoColor=white\" \u002F>\n  \u003Cimg alt=\"TypeScript 5.x\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.x-3178C6?logo=typescript&amp;logoColor=white\" \u002F>\n  \u003Cimg alt=\"MCP agent-ready\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMCP-agent--ready-6f42c1\" \u002F>\n  \u003Cimg alt=\"ARVO open-source core\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FARVO-open--source%20core-14b8a6\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg alt=\"Apple Health: HealthKit\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FApple%20Health-HealthKit-000000?logo=apple&amp;logoColor=white\" \u002F>\n  \u003Cimg alt=\"Oura: real-data-beta\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOura-real--data--beta-2b6cb0\" \u002F>\n  \u003Cimg alt=\"WHOOP: real-data-ready\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWHOOP-real--data--ready-111111\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\".\u002FREADME.md\">English\u003C\u002Fa> |\n  \u003Ca href=\".\u002FREADME.zh-CN.md\">简体中文\u003C\u002Fa>\n\u003C\u002Fp>\n\nOpenVitals is an agent-native health data plane for personal wellness software.\nIt ingests data from phones, wearables, and provider APIs; keeps provenance and\nfreshness visible; derives deterministic wellness state; and exposes safe\ninterfaces for apps, MCP tools, OpenClaw workspaces, SDKs, and local agents.\n\nIt is built for the failure modes that make health agents unsafe in practice:\nstale data, mirrored records, provider summaries mistaken for raw streams, and\nopaque scores that cannot be explained.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fassets\u002Fopenvitals-workflow.png\" alt=\"OpenVitals workflow: ingest, reason, and act\" width=\"100%\" \u002F>\n\u003C\u002Fp>\n\n> OpenVitals is wellness infrastructure, not a diagnostic system or medical\n> device. It should not be used for clinical decision-making.\n\n## Open Source Core For ARVO\n\n[ARVO](https:\u002F\u002Farvohealth.ai) is the proactive health OS and product experience:\nit connects wearables, labs, and daily habits so a health companion can notice\nmeaningful changes and nudge users toward action. Ari is ARVO's first health\ncompanion agent.\n\nOpenVitals is the open source core underneath that product direction. It focuses\non the reusable infrastructure that health agents need before they can be\ntrusted with personal wellness context:\n\n- ingesting Apple Health, Apple Watch, Oura, WHOOP, Health Connect, and future\n  provider data;\n- preserving provenance, freshness, source priority, and dedupe evidence;\n- making provider delays, mirrored records, stale data, and missing signals\n  explicit to agents;\n- exposing the same semantics through REST, MCP, SDKs, OpenClaw workspaces, and\n  mobile collector examples.\n\nThe ARVO product can build proactive coaching, reminders, and companion-agent\nworkflows on top of this layer. OpenVitals stays focused on the data plane,\nruntime semantics, and developer surfaces.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fassets\u002Fopenvitals-insight.png\" alt=\"Example insight: low HRV, low ferritin, and a new vegetarian diet can indicate an iron deficiency alert\" width=\"100%\" \u002F>\n\u003C\u002Fp>\n\n## Why It Exists\n\nMost health integrations stop at \"we connected the API.\" OpenVitals goes further:\n\n- **Honest data semantics**: every record carries granularity, latency, source,\n  confidence, freshness, and capture mode.\n- **Agent-safe outputs**: MCP and REST responses say when data is delayed,\n  mirrored, stale, missing, or incomplete.\n- **Local-first runtime**: a single-node SQLite setup works for development,\n  self-hosting, and hardware QA.\n- **Explainable scores**: recovery, sleep, strain, circadian, and alert outputs\n  can be traced back to evidence.\n- **Provider dedupe**: direct Oura\u002FWHOOP data can win over mirrored Apple Health\n  copies without destroying the raw audit trail.\n- **Mobile collector path**: iPhone HealthKit is the primary Apple Health\n  connector; Apple Watch live heart rate is optional and only live during an\n  active workout session.\n\n## Quickstart\n\nRequirements:\n\n- Node.js 22+\n- pnpm 10+\n\n```bash\npnpm install\npnpm demo\n```\n\nIn another terminal:\n\n```bash\nexport OPENVITALS_AGENT_TOKEN=ov_demo_user_ada_derived\n\ncurl -H \"Authorization: Bearer $OPENVITALS_AGENT_TOKEN\" \\\n  \"http:\u002F\u002F127.0.0.1:3000\u002Fv1\u002Fscores?userId=user_ada\"\n```\n\nOpen the local tools:\n\n- Dashboard: \u003Chttp:\u002F\u002F127.0.0.1:3000\u002Fdashboard>\n- API playground: \u003Chttp:\u002F\u002F127.0.0.1:3000\u002Fplayground>\n- OpenAPI JSON: \u003Chttp:\u002F\u002F127.0.0.1:3000\u002Fv1\u002Fopenapi.json>\n\n## What You Can Build With It\n\n- A local personal health agent that refuses to overclaim when data is stale.\n- A family recovery dashboard with per-profile credentials and scoped tokens.\n- An MCP server that gives another agent freshness-aware health context.\n- A mobile companion app that uploads HealthKit \u002F Health Connect samples.\n- A provider adapter for a new wearable or fitness platform.\n- An OpenClaw workspace that runs daily briefings and recovery check-ins.\n\n## Repository Map\n\n| Path | Purpose |\n| --- | --- |\n| `apps\u002Fapi` | Fastify API, SQLite runtime state, OAuth\u002Fconnect flows, SSE\u002Fwebhooks, OpenAPI, explainability endpoints. |\n| `apps\u002Fdashboard` | Engineering dashboard for connector state, scores, alerts, freshness, and provenance. |\n| `apps\u002Fdevplayground` | Browser playground for exercising local endpoints. |\n| `packages\u002Fcontracts` | Shared Zod schemas and public TypeScript contracts. |\n| `packages\u002Fruntime` | Ingest, dedupe, source precedence, baseline, scoring, workflow, and explainability pipeline. |\n| `packages\u002Fmcp` | MCP server exposing daily brief, recovery status, sync status, freshness, and explanation tools. |\n| `packages\u002Fsdk-ts`, `packages\u002Fsdk-py` | TypeScript and Python SDKs. |\n| `packages\u002Fcollector-*` | Mobile collector primitives for iOS, Android, React Native, Flutter, and shared lifecycle logic. |\n| `packages\u002Fllm` | LLM provider adapter layer, including OpenRouter smoke support. |\n| `providers\u002F*` | Provider adapters for Apple Health, Health Connect, Oura, WHOOP, Garmin, and Strava. |\n| `examples\u002F*` | Runnable examples and mobile templates. |\n| `docs\u002F*` | Quickstarts, hardware QA, credential setup, OpenClaw, OpenRouter, and self-hosting guides. |\n\n## Data Semantics\n\nOpenVitals treats health data as evidence with context, not just numbers.\n\n| Field | Values | Why it matters |\n| --- | --- | --- |\n| `dataGranularity` | `provider_payload`, `sample`, `episode`, `daily_summary`, `score`, `live_signal` | Separates source payloads, samples, windows, summaries, scores, and true live signals. |\n| `latencyClass` | `live`, `near_realtime`, `delayed_sync`, `daily`, `manual` | Prevents agents from making current-state claims from delayed data. |\n| `connectionMode` | `cloud_oauth`, `mobile_permission`, `device_pairing`, `mock` | Explains how data entered the system. |\n| `captureMode` | `direct`, `mirrored`, `manual`, `mock` | Prevents double counting when Oura\u002FWHOOP also write into Apple Health. |\n\nProvider boundaries are explicit:\n\n- Apple Watch live heart rate requires the optional live workout collector path\n  using `HKWorkoutSession` and `HKLiveWorkoutBuilder`.\n- Historical Apple Health \u002F Apple Watch data arrives through iPhone HealthKit as\n  samples or episodes, not as a server-side live stream.\n- Oura cloud APIs provide provider-mediated time series, daily summaries, and\n  scores. They are not continuous raw sensor streams.\n- WHOOP cloud APIs provide provider-mediated recovery, sleep, workout, strain,\n  HRV, resting heart-rate, and zone summaries. They are not continuous raw HR\n  streaming.\n\n## Provider Status\n\n| Provider | Connection | Data shape | Status | Notes |\n| --- | --- | --- | --- | --- |\n| Apple Health \u002F Apple Watch | iPhone HealthKit + optional Watch workout app | samples, episodes, daily summaries, live workout HR | `sdk-ingest-ready` | iPhone app is the primary connector. Watch app is optional for active workout HR only. |\n| Health Connect | Android device permission | samples and summaries | `prototype` | Android smoke path after iOS is green. |\n| Oura | OAuth cloud API or env-token dev path | provider payloads, samples, daily summaries, scores | `real-data-beta` | Delayed\u002Fprovider-mediated. Direct Oura should beat mirrored Apple Health copies for matching windows. |\n| WHOOP | OAuth cloud API or env-token dev path | provider payloads, summaries, scores | `real-data-ready` | Delayed\u002Fprovider-mediated. No continuous raw HR streaming claims. |\n| Garmin | mock | provider payloads and summaries | `demo-only` | Demo coverage only. |\n| Strava | mock | workout payloads and summaries | `demo-only` | Demo coverage only. |\n\nRun `pnpm docs:generate` to generate provider and MCP reference docs locally.\n\n## Runtime Modes\n\n`demo` mode seeds deterministic data and demo tokens:\n\n```bash\npnpm demo\n```\n\n`live` mode starts without seeded user state and is intended for real connector\nflows:\n\n```bash\nOPENVITALS_MODE=live pnpm --filter @openvitals\u002Fapi demo\n```\n\nBootstrap a live user:\n\n```bash\ncurl -X POST \"http:\u002F\u002F127.0.0.1:3000\u002Fv1\u002Flive\u002Fbootstrap\" \\\n  -H \"x-openvitals-admin: ${OPENVITALS_ADMIN_TOKEN:-openvitals-dev-admin}\" \\\n  -H \"content-type: application\u002Fjson\" \\\n  -d '{\"userId\":\"user_live\",\"name\":\"Live User\",\"timezone\":\"UTC\",\"createTokens\":true}'\n```\n\nBy default, runtime SQLite state is stored at `.openvitals\u002Fopenvitals.sqlite`.\nOverride it with `OPENVITALS_DB_PATH`.\n\n## Real Data Setup\n\nCopy the example environment file and fill in only the providers you need:\n\n```bash\ncp .env.example .env.local\n```\n\nUseful guides:\n\n- [Documentation Index](.\u002Fdocs\u002FREADME.md)\n- [Real Data Quickstart](.\u002Fdocs\u002Freal-data-quickstart.md)\n- [Credentials Setup](.\u002Fdocs\u002Fcredentials-setup.md)\n- [iOS Companion Guide](.\u002Fdocs\u002Fios-companion-guide.md)\n- [iOS Hardware QA Runbook](.\u002Fdocs\u002Fios-hardware-runbook.md)\n- [Hardware Test Plan](.\u002Fdocs\u002Fhardware-test-plan.md)\n- [Self-Hosting](.\u002Fdocs\u002Fself-hosting.md)\n- [OpenRouter LLM](.\u002Fdocs\u002Fopenrouter-llm.md)\n- [OpenClaw E2E](.\u002Fdocs\u002Fopenclaw-e2e.md)\n\nNever commit `.env`, `.env.*`, OAuth codes, access tokens, refresh tokens,\nprovider client secrets, Apple device identifiers, or real HealthKit exports.\n\n## OpenClaw And MCP\n\nThe upstream OpenClaw repository is pinned as a submodule at `vendor\u002Fopenclaw`.\n\n```bash\ngit submodule update --init --recursive\npnpm openclaw:e2e\n```\n\nThe automated E2E starts the demo API, registers the OpenVitals MCP server in an\nisolated OpenClaw config, generates skill\u002Fworkspace assets, and calls\n`health.sync_status` plus `health.daily_brief` over MCP stdio.\n\nGenerate an OpenClaw daily brief workspace:\n\n```bash\npnpm --filter @openvitals\u002Fopenclaw-skill exec openvitals-openclaw-init \\\n  --out-dir . \\\n  --api-base-url http:\u002F\u002F127.0.0.1:3000 \\\n  --user-id user_ada \\\n  --timezone UTC \\\n  --daily-cron \"0 8 * * *\" \\\n  --weekly-cron \"0 9 * * 0\" \\\n  --webhook-secret local-dev-secret\n```\n\n## Development\n\n```bash\npnpm docs:generate\npnpm build\npnpm test\npnpm smoke:e2e\npnpm typecheck\npnpm smoke:apple-health\npnpm provider:new fitbit\n```\n\nCI runs docs generation, build, unit tests, smoke E2E, and typecheck.\n\nContributor guardrails:\n\n- Keep score computation deterministic and explainable.\n- Preserve raw\u002Fprovider payload history and normalized records.\n- Do not hide stale, mirrored, missing, or incomplete data from agent-facing outputs.\n- Do not weaken token scope behavior, OAuth handling, webhook signing, or admin boundaries.\n- Do not make diagnostic, treatment, or medical-device claims.\n\nSee [CONTRIBUTING.md](.\u002FCONTRIBUTING.md) for more.\n\n## License\n\nOpenVitals is source-available for noncommercial use under the\n[PolyForm Noncommercial License 1.0.0](https:\u002F\u002Fpolyformproject.org\u002Flicenses\u002Fnoncommercial\u002F1.0.0).\nCommercial use requires a separate commercial license. See\n[COMMERCIAL.md](.\u002FCOMMERCIAL.md).\n\nThis is intentionally not an OSI-approved open-source license because the project\ndoes not grant unrestricted commercial use.\n\n## Disclaimer\n\nOpenVitals is for wellness, coaching, self-tracking, and agent context workflows.\nIt is not a diagnostic system, not a medical device, and not a substitute for\nclinical judgment. Always show provenance, confidence, and freshness before\nmaking health-related claims.\n","OpenVitals 是一个面向个人健康和福祉的原生代理健康数据平台。它能够从手机、可穿戴设备以及提供商API中收集数据，保持数据来源和新鲜度透明，并推导出确定性的健康状态，为应用程序、MCP工具、OpenClaw工作区、SDKs以及本地代理提供安全接口。项目采用TypeScript编写，支持Node.js 22+版本及pnpm 10.x，集成了Apple HealthKit、Oura（测试版）和WHOOP等健康数据源。适用于需要构建主动健康管理软件或服务的场景，特别是那些希望在确保数据准确性和隐私保护的前提下开发健康助手应用的开发者。需要注意的是，OpenVitals定位为健康基础设施而非诊断系统或医疗设备，不应用于临床决策。",2,"2026-06-11 02:45:02","CREATED_QUERY"]