Your Oura scores in Raycast, one keystroke away
There is a version of this integration nobody should ship: paste your Oura credentials into a launcher, let it call an API on every keystroke, and quietly create a second copy of your health data somewhere you will forget about. Vitra's Raycast extension does none of that, and the reason is a design decision made long before Raycast was on the list. It reads one small file Vitra already writes on your own machine.
On this page
What you get for ⌘-Space
Today's readiness, sleep and activity, each next to your own thirty-day average rather than a population norm — the same comparison the app makes, because it is literally the same number. Underneath, the file also carries HRV, resting heart rate, hours slept, steps, temperature deviation and SpO₂, so the extension never has to compute a statistic of its own or invent a second definition of "normal".
Why there is no Oura login in Raycast
Vitra writes a small read-only file called `snapshot.json` next to its database, and that file is the entire integration surface. The alternative was to hand outside tools the app's local API — and that API is deliberately gated behind a per-launch token precisely to stop other processes on your machine touching it, because those routes can write. Handing out the token to make an integration convenient would dismantle the reason the token exists. A file a consumer can only read has no such problem.
So the extension holds no credentials, asks for none, and makes no network calls of its own. Your Oura account is a thing Vitra talks to; Raycast never meets it.
It inherits the app's rules, because they are in the file
Two of them matter. If Vitra is still waiting on your own read of the day, the snapshot says so and the scores are withheld rather than shown — a score you saw before you rated your own morning is a contaminated one, and that is true in a launcher as much as in the app. And if your heart rate is set by a device or by medication, the file carries a flag that says: show the numbers, never a verdict. An integration that re-derived its own scores would have quietly dropped both. This one cannot.
What it will not do
It will not sync. It reads what Vitra last wrote — the file carries the timestamp of the write, not of your night, so a stale reading is visibly stale rather than silently wrong. It will not work without the Vitra desktop app, because there is no file otherwise. And it will not write anything back: nothing you do in Raycast changes your history.
Installing it
Install from the Raycast store, have Vitra running, and that is the whole setup — there is nothing to configure, because there is nothing to authorise. If the extension reports no data yet, Vitra writes the first snapshot shortly after launch and refreshes it periodically.
Frequently asked questions
- Raycast: the Vitra extension's listing — it requires the Vitra desktop app, reads Vitra's local snapshot, and states that it needs no Oura credentials and makes no network calls
- Oura: the Oura API is public, anyone with an Oura account can build against it, and data files can be downloaded from the Membership Hub
Pedro Thomaz builds Vitra, a desktop app that reads Oura data against your own baseline instead of a population average. He has worn a ring daily for years and reads these same numbers every morning — which is where most of what is written here comes from. Vitra is not a medical device and nothing on this blog is medical advice.
Local AI on your Mac or PC. One-time purchase, 7-day trial, no Vitra subscription.
Download Vitra →Oura and Oura Ring are trademarks of Ōura Health Oy. Vitra is an independent product and is not affiliated with, endorsed by, or sponsored by Ōura Health Oy.