Back to all posts
August 16, 2026Jonas Höttler

Eyyo: a Mac app that looks back when you look away

Eyyo watches you through your webcam and reacts when you turn away, leave your desk, or reach for your phone — a sound, a full-screen overlay, a spoken nag, and a live thumbnail of your own face. All of it on-device, nothing stored, nothing sent. And it ships as a demo, on purpose.

FocusmacOSPrivacyDemo

You know the gap. Not the dramatic one where you open a social app and lose an hour — the small one. Your eyes drift off to the side. Something on the desk. The phone, face down, which you turn over "just to check the time". Twenty seconds later you are somewhere else entirely, and the honest part is that you never noticed the moment you left.

Every focus tool I have ever used works on the machine: it blocks a site, it counts a timer, it colours a calendar. None of them look at the one thing that actually decided the outcome — whether your eyes were on the screen. So I built the thing that does, and called it Eyyo.

Before anything else, the part that belongs in the first paragraph rather than the footnotes: Eyyo is a demo. Free, deliberately rough, provided as is. More on why below, and why I think that is the honest way to ship it.

What it actually does

Eyyo lives in the menu bar. You press Start watching, and from then on it reads a 640×480 camera frame roughly six times a second and asks three questions, locally, through Apple's Vision framework:

  • Is there a face?
  • Roughly which way is the head pointing?
  • Is there something phone-shaped in frame?

Get one of those wrong and it reacts — escalating, not all at once. First a sound. Then a full-screen overlay on every display, because a nudge on the screen you are not looking at is not a nudge. Then a spoken line, out loud. And from the second tier, a small live camera thumbnail of you, down in the corner of the overlay.

That thumbnail is the most uncomfortable thing in the app, and it is the feature that works best. A sound you learn to ignore in two days. Your own face, caught mid-drift, staring back at you — that you do not get used to.

Come back and it settles down. Twenty seconds of actual focus and the escalation tier drops by one on its own. Leave the chair entirely and it notices after four seconds.

There are five tones, and they are the whole personality of the app:

  • Chill — gentle nudges, brief overlay.
  • Annoying — sounds and pop-ups. The default.
  • Coworker — passive-aggressive. "Per my last nudge…"
  • Goblin — loud, fast, absurd.
  • Military — inappropriately loud. You asked for this.

All five are free. There is no paid tier, no in-app purchase, no ad.

The hard part was the second monitor

The naive version of this app takes about an afternoon: measure head yaw, and if it exceeds some threshold, shout. That version is unusable at any desk with two screens. Forty degrees to the side reads exactly like "turned away" — and is, in fact, work. Mine sat there yelling at me while I typed.

The fix is not a bigger threshold. A bigger threshold just means a phone in your lap stops registering too.

What Eyyo does instead is learn the directions you actually work in. If your head sits steady in one direction for a few seconds while you are typing or moving the mouse, that direction is accepted as a place you work. Up to three at a time, and a direction you stop using is forgotten again after twenty minutes.

The input gate is the entire trick. Staring off to the side without touching anything teaches Eyyo nothing — and that is precisely the difference between the second monitor and the phone in your lap. Same head angle, opposite meaning, and the keyboard is the only witness that can tell them apart.

The phone

Head pose cannot tell you about the phone. Looking down at your desk and looking down at a screen in your hand are the same number.

So Eyyo asks a second question: is there a phone in frame? That runs through Apple's built-in image classifier — no bundled ML model, no third-party AI, no network call. And because a classifier flickers, a detection has to hold for a second before it counts as "phone", and a single dropped frame does not count as putting it down. Both edges get hysteresis, or the app spends its day shouting at a reflection.

What happens to the frames: nothing

This is the part I would want to read first if someone told me to point a camera at myself all day.

Every frame is analysed in memory and discarded in the same moment. No file, no buffer, no upload, no "anonymised telemetry". macOS keeps the green camera indicator lit the entire time Eyyo is watching — deliberately, because that light is the one claim in this paragraph you do not have to take my word for.

Eyyo makes exactly one network connection in its life: the update check. It asks balane.app whether a newer build exists and downloads it from GitHub if you accept. No account, no identifier, nothing about your usage. Switch it off in Settings and the app talks to nobody at all.

Everything else in the box

  • Pomodoro — 25 on, 5 off. During the break Eyyo goes completely silent.
  • Focus journal — daily counts only: focused minutes, look-aways, phone grabs, app lapses. Local, optional, erasable in one click.
  • Distraction apps — flag an app and Eyyo reacts when it comes to the front. With Focus-Lock on, it hides again in the same instant.
  • Website flagging — optionally, Eyyo asks the active browser for the current tab's URL via macOS Automation, checks it against your list locally, and throws it away immediately.
  • Gaze zones — experimental. Calibrate against the corners of each screen and eye position starts counting too. Off by default, because on a laptop webcam it is genuinely shaky.

Why it ships as a demo

Because calling it a beta would be a lie about the future. A beta is a product on its way to a release. Eyyo is a showpiece: I wanted to know how far attention detection gets when it runs entirely on the device and phones nobody home, and this is the answer, published rather than left on my disk.

Detection is coarse. It guesses from a low-resolution image and it misjudges regularly — it speaks up when it shouldn't and goes quiet when it should. Features may change or vanish. Development may stop.

So the app says so in four places: the status on the site, the badge on the card, the first paragraph of the description, and a checkbox on first launch you cannot walk past — the camera does not turn on until you have ticked it. Four, because this is exactly the spot where someone would otherwise assume a reliability that was never promised.

Where the line is

On yourself, on your own machine. Not on other people: if anyone can enter the camera's field of view, you need their consent. Not on employees — monitoring behaviour or performance triggers co-determination and data-protection duties (in Germany §87 BetrVG, plus GDPR and §26 BDSG), and Eyyo ships with none of the controls that would require. And nowhere a wrong answer carries consequences: nothing medical, nothing safety-critical, not at the wheel, not at a machine.

Getting it

Eyyo is free, for macOS 15 and newer, Apple Silicon and Intel. Signed with a Developer ID and notarised by Apple, so it opens with a normal double-click — no Mac App Store, no Gatekeeper detour. Swift and SwiftUI throughout, Vision and AVFoundation for the detection, Sparkle for updates.

Everything above lives on the Eyyo app page, including the download and the demo disclaimer in full.

Tell me where it gets you wrong. That is the whole point of publishing it.

Featured apps

Apps mentioned in this post.