Blog · October 9, 2026 · 7 min read · by Vilva Athiban P B
What a Notch App Can See: NotchFit's Local-First Design, What the Claude Code and Codex Hooks Send, and What Stays on Your Mac
A notch app that shows what your coding agent is doing has, by definition, a view into your coding agent. Before you install one, the right questions are the boring ones: what does it see, where does that go, what runs on the network, and what would it take to audit the answer. This post answers those questions for NotchFit, using the product's own stated design rather than marketing adjectives, and it explains what "local-first" actually buys you in a menu-bar app that sits next to Claude Code and Codex all day.
The one-sentence version
NotchFit runs locally on your Mac and talks to itself over localhost. It has no account, sends no telemetry, and never uses the microphone. The only things that reach it are the events the Claude Code plugin and the Codex hooks hand over on your own machine, and those stay on your own machine.
What the hooks actually send
NotchFit gets its information from the agent the same way any Claude Code or Codex integration does: hooks. When you click Install / update integrations in NotchFit's Setup screen, it adds a Claude Code plugin and a set of Codex skills and hooks. Those hooks fire on the agent's lifecycle events, and they report to the NotchFit app over localhost. That is how the notch knows a task started, how it shows live progress on the right-hand side of the panel, how it shows Claude's summary when the task is done, and how it knows the agent is waiting on a permission prompt.
Two properties of that path matter for privacy and one matters for performance. The hooks are local: the destination is the NotchFit process on the same Mac, not a server. The hooks are yours: in Codex you trust them once via /hooks, and in both tools they live in the normal hook configuration you can read. And the hooks run asynchronously, so they never make Claude or Codex wait; the agent does not slow down because a workout panel is listening. If you want the general background on how this mechanism works, our Claude Code hooks guide covers the lifecycle events and what a hook can see.
What never leaves the Mac
- Your code. NotchFit is not an editor and not a reviewer. The agent's progress text it displays is shown in the notch and goes nowhere else.
- Your workout history. Streaks, the history heatmap and the record of which sets you finished are kept locally. There is no account to sync them to.
- Your plan details. The weekly plan asks about age, height, weight, fitness level, goal, equipment, days per week, minutes per day and injuries. When you generate it with
/notchfit:planin Claude Code or$notchfit-planin Codex, those answers go to your AI agent, in your own session, under your own provider account, exactly like any other prompt you type there. NotchFit itself does not send them anywhere. If you would rather they not go to a model at all, the app's offline quick-plan generator builds a plan without any AI involvement. - Your voice. NotchFit never uses the microphone. The optional spoken alerts, which announce when your agent is done or needs permission, use on-device macOS voices and can be muted from the notch.
- Usage data. There is no telemetry. NotchFit does not report which exercises you do, how often you code, or how long your agent runs take.
Why local-first is the right default for this category
Menu-bar utilities are the apps people audit least and trust most. They start at login, sit in the background for months, and are forgotten. That combination is exactly why a utility that watches an AI agent should have as little reach as possible. An agent's lifecycle events can include the names of files being edited, the text of a task, and a summary of what was done; any of that leaving the machine would turn a workout app into a data pipeline. Keeping the whole loop on localhost removes the question rather than answering it.
It also makes the product honest about failure modes. There is no service to go down, no subscription to lapse, and no account to be breached. If NotchFit is not running, the hooks have nobody to talk to and your agent carries on as if the app did not exist.
The things that do touch the network, and why
Local-first does not mean a hermit. Three things involve the outside world, and it is worth being precise about each.
- Buying and downloading. NotchFit costs $20 once and is sold on Whop; after purchase you download the signed and notarized DMG from your Whop account. That is a web checkout and a download, not something the app does once installed. There is no trial and no license key, so there is also no license server to phone home to.
- macOS code signing. Because the app is signed with a Developer ID and notarized, macOS may check its signature and notarization ticket when you first open it. That is Apple's process, applies to every notarized Mac app, and is part of why you should prefer notarized apps for anything that runs at login.
- Your AI agent. Claude Code and Codex talk to their providers as they always do. NotchFit does not sit in that path; it sees the local events those tools emit and nothing of the traffic between them and the model.
How to check the claims yourself
You should not have to take a blog post's word for a privacy property. Three checks take ten minutes.
- Read the hooks. After Setup installs the integrations, open the Claude Code plugin's hook configuration and the Codex hooks and look at where they send events. You should see a localhost destination. The NotchFit user guide walks through where each integration is installed.
- Watch the network. Run a trial workout with a firewall utility or a packet capture open, with your agent idle. A local-first app produces loopback traffic and nothing else. Then start an agent task and confirm the only new connections belong to Claude Code or Codex, not to NotchFit.
- Check the microphone and permissions list. Under Privacy & Security in System Settings, NotchFit should not appear under Microphone at all, because it never requests it.
Where this sits next to other agent monitors
Many tools that notify you about agent activity are cloud services by necessity: if you want a message on your phone when Claude is done, some server has to relay it, and the right way to judge those tools is by how little they carry (an event name and a timestamp, not your diff). A phone-notification tool such as our own AI Done Now and NotchFit are complementary rather than competing: NotchFit is for the hours you are at the Mac, where it can show progress and a workout without any relay; a phone notification is for the hours you are not. The notch notifications post goes into how the at-desk alerts work, and why alerts wait until your set ends explains the one deliberate delay in the system.
The honest limits
Local-first solves the exfiltration question. It does not make the display private: whatever Claude's summary says will be visible in your notch, at the top of your screen, to anyone looking over your shoulder. If you work on sensitive code in a shared office, the Hide workout toggle does not hide the agent panel, and the panel collapses when nothing is running, so the exposure window is a running task, not the whole day. Plan accordingly, as you would with a terminal.
And local-first says nothing about what your agent itself sends to its provider. That is governed by Claude Code's and Codex's own settings and your account's data policies, not by anything NotchFit does. Keeping the workout app out of that conversation is the point; it is not a substitute for understanding the conversation.
Keep reading
Desk Exercises for Programmers: 15 Moves to Do While Your AI Agent Codes
7 min read
Exercise While Coding: Turn Claude Code Wait Time Into Micro-Workouts
7 min read
Claude Code Notch Notifications on Mac: See When Claude Is Done Without Watching the Terminal
7 min read
Claude Code Tips and Tricks: 12 Ways to Use Claude Code Effectively
8 min read
Claude Code Multiple Sessions: How to Run Agents in Parallel Without Losing Track
6 min read
A Claude Code Workflow That Doesn't Involve Watching the Terminal
5 min read
Claude Code Hooks: A Practical Guide to Automating Your Agent Workflow
7 min read
Claude Code Auto Mode: Fewer Permission Prompts Without Living Dangerously
7 min read
Claude Code Subagents: How to Delegate Work to Specialized Agents
7 min read
Claude Code Context Management: Treat the Context Window Like a Budget
6 min read
Per-Subagent Model Selection: Route the Grunt Work Down, Keep the Judgment Up Top
7 min read
Skills and Plugins: How to Teach Claude Code Your Way of Working
7 min read
Claude Code Background Tasks: Run Long Commands Without Blocking Your Session
6 min read
Codex CLI Notifications: How to Get a Ding When Codex Is Done or Needs Input
7 min read
Cursor Notification When Done: Every Way to Get Notified When Cursor Finishes
6 min read
Claude Code Notifications: How to Get Notified When Claude Code Finishes or Needs Your Input
6 min read
Want to Be Notified When Claude Responds? How Claude Notifications Work on Web, Desktop, and Mobile
5 min read
Claude Code Notification Scripts: Copy-Paste Recipes for Every Platform
6 min read
Get a Ding the Moment Codex Needs Your Response
6 min read
Get Notified the Moment Claude Code Is Waiting for Your Input
6 min read
“Notifications Are Turned Off for Claude” — Here Is the Fix
6 min read
Codex Sound When Done: Make Codex CLI Play a Sound When It Finishes
6 min read
terminal-notifier + Claude Code: Native macOS Alerts When Your Agent Finishes
6 min read
Gemini CLI Notifications: How to Get a Sound or Alert When Gemini Finishes
6 min read
Get Claude Code Notifications on Your Phone
6 min read
Claude Code Remote Control, Explained
7 min read
preferredNotifChannel: Claude Code's Built-In Notification Setting
6 min read
Claude Code Notifications in tmux and Over SSH
7 min read
Claude Code Effort Levels: Why Your Setting Keeps Getting Ignored
8 min read
Codex vs Claude Code Notifications: How Each One Tells You It Is Done
8 min read
Claude Code Notifications Not Working: A Diagnostic Checklist
10 min read
Claude Code Notifications Inside Your Editor's Terminal
7 min read
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS Explained
7 min read
CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP Explained
8 min read
Cursor Alerts Explained: Every Alert Cursor Raises, and How to Control Them
7 min read
Claude Code Environment Variables: The Groups That Actually Matter
10 min read
Claude Code Notifications on WSL and Windows
9 min read
Claude Code Checkpoints and /rewind
8 min read
Claude Remote Control: How It Works, Turning It Off, and Auto Mode
7 min read
Claude Code /loop: Poll a Deploy, Babysit a PR, and Get Told When It's Done
8 min read
Setting Up NotchFit With OpenAI Codex CLI: Hooks, $notchfit-plan, and the Daily Flow
7 min read
Claude Mods Explained: What the New Plugin Layer Can Do, and How to Turn On 'You Should Know'
9 min read
NotchFit vs Mac Break Reminder Apps: A Clock or a Signal From Your Coding Agent?
8 min read
Claude Code Headless Mode: Running claude -p in Scripts and CI, and the Three Signals That It Finished
10 min read
Building a Movement Habit at a Desk: Use the Agent Run as the Cue, One Set as the Unit, and Streaks Carefully
8 min read
Claude Code MCP Servers Explained: Adding Servers, Choosing a Scope, Handling Secrets, and Why Long Tool Calls Go to the Background
10 min read
/notchfit:plan Explained: How Claude Code or Codex Writes a Weekly Workout Plan the Notch Can Actually Run
8 min read
Claude Code Spinner Verbs Explained: What “Pondering” and “Brewing” Mean, How to Change Them, and Why You Should Stop Watching the Spinner
7 min read
Why NotchFit's Done and Permission Alerts Wait Until Your Set Ends, When That Costs You, and How to Turn the Workout Off
7 min read
How to Resume a Claude Code Session: --continue vs --resume, Naming Sessions, the Session Picker, Branching, and What Comes Back
9 min read
NotchFit on a Mac Without a Notch: How Pill Mode Works on Mac mini, iMac, Mac Studio and a MacBook With the Lid Closed
6 min read
How to Run a Claude Code Session in the Background: /background, claude --bg, Agent View, and Getting Back to It
9 min read