Skip to content

Releases: Hash-7777/HashNotch

HashNotch 1.4.0

Choose a tag to compare

@Hash-7777 Hash-7777 released this 04 Sep 20:08
v1.4.0
4e733c2

HashNotch turns the MacBook notch into a live display — what is playing, your internet speed and which programs used your data, battery, temperatures, memory, storage, timers, AI token spend, and alerts from your AI coding tools. Native Swift. No account, no telemetry, no network access except album artwork. Free, and GPL v3.

1.4.0 is seventeen commits after 1.3.1, and it is about three things your Mac has never told you: who is watching you, what you missed, and what you actually got done.


Your camera, not just your microphone

The moment any app opens your camera, the island says so — with a running timer, and the app's own icon when it can name one. When something holds both, it is one row and not two, because a video call is one thing happening. A microphone symbol, a camera symbol, or both, so a glance tells you whether you are heard, seen, or both.

They are drawn in the colours macOS itself uses: orange for the microphone, green for the camera. The dots in your menu bar and the marks in the notch now say the same thing in the same language.

And it names the app you are actually in. During a meeting in Safari the readout used to say "Safari Graphics and Media" beside an empty square. That is a real process, and it is not one anybody has heard of — which is the worst thing this particular readout can do. A browser does not open your microphone in the process you can see, so every holder is now traced back to the app it belongs to.

Two things it will not do. A camera cannot be traced to an app — macOS publishes no way to ask — so a camera on its own is shown as live and named as nothing, rather than blamed on whichever app seems likely. And it reports that an app holds your microphone, which is not the same as you being heard: plenty of apps, Google Meet among them, keep it open and mute in software.

It reads one yes-or-no per app and one per camera. It never listens, watches, records or transcribes, and holds no microphone or camera permission of its own.

What happened while you were away

Shut the lid, come back, and one line appears for a few seconds before folding away:

Away 47 min · 1.2 GB used · battery −14%

Every other readout in the app answers what is true right now. This is the only one that answers what you missed — and nothing on macOS answers it at all. You close the lid, come back to a warm laptop and a flat battery, and the machine says nothing about the two hours it spent alone.

It reads nothing new to do it. Every figure was already being kept by another indicator; this subtracts two moments of them. An indicator you have switched off takes no part.

It is deliberately hard to trigger. Under five minutes away, or nothing that moved by enough to matter, and it stays quiet — a line that greets every unlock is wallpaper within a day.

A focus timer that does not flatter you

A stretch of work, a short rest, a longer one every few rounds, counted down in the notch with the edge lit while you are meant to be working. You set the lengths. A stretch survives the screen sleeping and the app quitting, and the alert is handed to the system so it lands on time even with the display off — which matters, because the whole point is that you are not looking at the screen.

Underneath it, one sentence:

You focused 9 hr 20 min in the last 7 days.

Every timer of this kind is self-reported. You start it, you forget to stop it, and the number at the end of the week is a guess. This app already knew when your screen went away — so a stretch you walked out of ends when you left, counts only the time it actually served, and never counts as finished.

It keeps seven days so that sentence has something to add up. A date and two numbers a day, never what you were working on. Delete all of it in one press in Settings. Nothing about your day is ever sent anywhere.

Macs without a notch

The island was hanging over your wallpaper. On a Mac with no notch it is drawn exactly as tall as your menu bar — but a minimum height left over from the very first version made it three or four points taller than that, every time. On a notched Mac the minimum never applied, so it could not be seen on the hardware the app is built on. It applied on every Mac without one, permanently.

The Position page also told you the island "sits just below the menu bar instead of covering it", which stopped being true a release ago. It asks the measurement where the island is now, so the two cannot drift apart again.


Also in this release

  • A reading running high looks different from one that is not. The warning colour sat 6.7 ΔE from the accent the app starts on — one colour, on a thin bar, at a glance. A disk at 74% and a disk at 76% were indistinguishable.
  • The small marks beside each heading are drawn at the weights they were designed at. The lighter weight for lines inside a shape was written into six of them and reached the screen in none.
  • The settings window fits its tabs. Adding a page made every label narrower and quietly truncated "Appearance".

Install

  1. Download HashNotch-1.4.0.dmg below and open it. Drag HashNotch onto Applications, then eject the disk image.
  2. Open it from Applications.

Requirements: macOS 12 or newer, Apple Silicon or Intel.

If macOS refuses to open it

The app is not signed with a paid Apple certificate, so macOS may block it outright instead of offering "Open Anyway". Run this once, in Terminal:

xattr -dr com.apple.quarantine "/Applications/HashNotch.app"

What that actually does, because you should never paste something into a terminal on trust alone: xattr reads and edits the hidden labels macOS attaches to files. com.apple.quarantine is the one meaning "this was downloaded". The -d deletes that one label and -r applies it through the app's folder. It touches nothing else on your Mac, needs no password, and affects only this one app. You can see the label before removing it with xattr "/Applications/HashNotch.app".

Check you got the file I built

shasum -a 256 ~/Downloads/HashNotch-1.4.0.dmg

Should print:

d909999c4f24d1cc55deaad7289f017cecf41c8d1b90c3e6e87a8df27e8dc658

This is how you know the download was not tampered with in transit. If the line you get does not match this one character for character, do not open it.


1,058 automated checks run on a clean machine on every push — the parsers, the geometry, the privacy rules, and the arithmetic behind every readout. Every commit is signed. On a new install the app has read nothing: a window names what each indicator reads and what it will never do, and nothing starts until you accept.

Everything it reads is spelled out in SECURITY.md. The full list of changes is in CHANGELOG.md.

HashNotch 1.3.1

Choose a tag to compare

@Hash-7777 Hash-7777 released this 26 Aug 15:28
v1.3.1
26a736a

HashNotch turns the MacBook notch into a live display — processor, memory, temperatures, battery, storage, network, AirPods, timers, AI token spend, and alerts from your AI coding tools. Native Swift, no telemetry, no account, no network access except album artwork. Free and GPL v3.

1.3.1 is a small release about one thing: putting the indicators in the order you want. In 1.3.0 you could not.


Reordering the indicators works

Dragging a row on the Indicators page moved the whole settings window instead of the row, so the order could not be changed at all.

The window has no title bar, so it is told it may be moved by its background — and then every view inside it gets a say in whether a press moves it. Nearly every kind of view says yes unless it is told otherwise, including the two that fill this one. Between them the entire window was a place to pick it up, and a window that moves on a press takes that press with it, so the drag never reached the list.

The window now moves from its header, the full width up to the close button, which is what a title bar is. Everything else on the panel belongs to whatever is drawn there.

Moving an indicator looks like moving something

The order used to change between one frame and the next: rows in one arrangement, then another, with nothing in between to tell you what had happened. Every row that has to move now travels to its new place on one spring, so you can watch the row you are carrying pass the ones it overtakes — at whatever you have set under Motion, and a little slower on an older Mac that would otherwise drop frames through it.

What follows the pointer is a small piece naming the indicator, rather than a picture of the whole row with a working switch and a menu inside it. The row you took it from stays behind as a shallow well, so it is clear where it will land if you let go. Rows also light faintly as the pointer crosses them, which is the part that says they can be picked up at all.

The carried piece needs macOS 13 or newer. On Monterey the drag works exactly as it does here, with the system's own picture of the row.

A page title is no longer pressed against the tabs

There were eleven points between the row of tabs and the heading of the page they open, so the two read as one block and the page title looked like a caption belonging to the tab above it. There is proper room now.

Everything the panel shows

Thirteen indicators, and this is the page that decides which of them you see and in what order. Every mark is drawn from geometry in the source rather than borrowed from the system, at two line weights so it stays readable at nine points.

Full list of changes: CHANGELOG.md


Install

  1. Download HashNotch-1.3.1.dmg below and open it. Drag HashNotch onto the Applications folder beside it, then eject the image.
  2. macOS will say it cannot verify the developer. This build is ad-hoc signed and not notarised — there is no paid Apple certificate behind it, and that is deliberate. Click Done, then open System Settings → Privacy & Security, scroll to the bottom and click Open Anyway. Once only.
  3. The app has no Dock icon and no menu-bar item. It lives at the notch: move your pointer there.

If there is no "Open Anyway", or clicking it changes nothing

That is not a broken download. macOS attaches a hidden quarantine label to anything that came from the internet, and for an app with no paid certificate behind it macOS will sometimes refuse outright rather than offer you the choice. One command removes the label:

xattr -dr com.apple.quarantine "/Applications/HashNotch.app"

Open Terminal, paste that line, press Return. It prints nothing, which means it worked. Run it after the app is in Applications, then open the app normally.

Upgrading from 1.3.0: replace the app and your settings carry across. The Claude Code hook is unchanged at version 17, so nothing needs reinstalling.

Requires macOS 12 or newer on Apple Silicon or Intel. A Mac without a notch gets the same panel, drawn at the top of the screen.

Check the download is the one I published

Optional, and worth doing if you care where your software came from. This prints a fingerprint of the file you downloaded; if it matches the one below, your copy is byte-for-byte the one built and uploaded here, and nothing altered it in between. Run it in Terminal in the folder you downloaded to:

shasum -a 256 HashNotch-1.3.1.dmg

It should print exactly this:

f29c70283135f3a19ddb163d089bb0548b41ff13af936323e9ec387a943ac834

926 automated checks run before every push, and again on GitHub for every change: the parsers, the geometry, the privacy rules and the arithmetic behind every readout. Every commit and every tag is signed. What the app reads, why, and both private Apple interfaces it uses are written down in SECURITY.md.

HashNotch 1.3.0

Choose a tag to compare

@Hash-7777 Hash-7777 released this 26 Aug 01:00
v1.3.0
9a9dafc

HashNotch turns the MacBook notch into a live display — processor, memory, temperatures, battery, storage, network, AirPods, timers, AI token spend, and alerts from your AI coding tools. Native Swift, no telemetry, no account, no network access except album artwork. Free and GPL v3.

1.3.0 is 84 commits after 1.2.0 and the largest release so far. Temperatures now work on every Mac rather than only Apple Silicon, the network readout tells you which programs used your data, the timer survives a locked lid, and every heading in the panel is drawn by the app instead of borrowed from the system.


Temperatures on every Mac

The temperature rows read the SMC directly, so an Intel Mac gets real processor, drive and battery readings instead of an empty section. The rows also hold one order whatever the numbers do — sorting hottest-first meant they swapped places while you were looking at them, which makes a value impossible to follow.

Your data, program by program

Under the data-used figure there is now a list you can open and shut: which programs used the most, and how much each of them used. It reads Apple's own nettop, per process, with no address, no port and no remote host requested or returned.

A program can never be shown using more than your Mac used. The first version could: it treated "absent from the last sample" as "started since the last sample" and counted a process's entire lifetime counter. It now asks the kernel when each process actually started. Anything unknowable is counted as history, because a breakdown larger than its own total is the error that costs trust.

A timer that survives a locked lid

Locking your Mac used to cancel a running timer. Silently — no alert, no trace. Display sleep at ten minutes against a twenty-five minute timer is most timers anybody sets. Sleeping now suspends the samplers without touching a deadline, and the alert is scheduled with the system so it arrives even while the screen is off.

The length is set with a wheel you drag or press, it remembers what you chose, and a finished timer takes the strip and lights the notch amber like anything else that wants you.

A total that does not look like a speed

How much you have used sat directly under how fast you are going, drawn identically — two readings answering completely different questions, looking like one answer given twice. They are told apart now by their mark, their unit, and the space between them.

AI spend on one line

Today's token total across Claude Code, HashCortX and HashCerebrum, on a single row with how old the figure is beside it, and the per-tool breakdown on hover. It counts on its own schedule rather than only when you happen to look.

The agent side sets itself up

Connecting an AI tool to the notch used to mean finding a shell script inside the app bundle and running it in a terminal. There is a page in Settings now with a button that connects Claude Code, says whether it is already connected, and offers to update the installed copy when it falls behind the app.

It tells you; it never intercepts. When a tool stops for a permission or a question, the notch says so and holds its edge amber until it is dealt with — click it and the waiting window comes forward. Nothing here can allow or refuse a tool call: the hook writes a local file and returns nothing your agent acts on, so no tool call is ever held open waiting for the notch.

Any tool works, not only the ones named here. One line in your shell profile and a ; after the command you already run.

The panel draws its own marks

Every heading has a mark drawn from geometry in the source, at two line weights so a mark stays readable at nine points instead of inking into a blob. These are the same paths the app draws — the pictures above are generated from that geometry, so the release notes and the panel cannot drift apart.

The notch lights up around its edge

A hairline traces the physical notch: green when a tool finishes, amber while something waits on you, breathing a little faster the longer it waits. The black is now exactly the hardware — the lit border is drawn outset onto the screen below it, rather than the app painting over the notch itself.


Also in this release

Settings no longer offers choices that do nothing — a display option now has to change what somebody sees, and a check holds the options against the code so one cannot drift from the other. The battery is drawn to the level it is actually at. A figure is never cut short to fit. A panel row cannot break in two. Graphs no longer turn into a solid slab when a reading sits high. Closing the app no longer loses the day's traffic.

Full list: CHANGELOG.md


Install

  1. Download HashNotch-1.3.0.dmg below and open it. Drag HashNotch onto the Applications folder beside it, then eject the image.
  2. macOS will say it cannot verify the developer. This build is ad-hoc signed and not notarised — there is no paid Apple certificate behind it, and that is deliberate. Click Done, then open System Settings → Privacy & Security, scroll to the bottom and click Open Anyway. Once only.
  3. The app has no Dock icon and no menu-bar item. It lives at the notch: move your pointer there.

If there is no "Open Anyway", or clicking it changes nothing

That is not a broken download. macOS attaches a hidden quarantine label to anything that came from the internet, and for an app with no paid certificate behind it macOS will sometimes refuse outright rather than offer you the choice. One command removes the label:

xattr -dr com.apple.quarantine "/Applications/HashNotch.app"

Open Terminal, paste that line, press Return. It prints nothing, which means it worked. Run it after the app is in Applications, then open the app normally.

Upgrading from 1.2.0: replace the app and your settings carry across. If you use the Claude Code hook, the panel will tell you the installed copy is behind and put an Update button on the notice — the hook is at version 17 in this release.

Requires macOS 12 or newer on Apple Silicon or Intel. A Mac without a notch gets the same panel, drawn at the top of the screen.

Check the download is the one I published

Optional, and worth doing if you care where your software came from. This prints a fingerprint of the file you downloaded; if it matches the one below, your copy is byte-for-byte the one built and uploaded here, and nothing altered it in between. Run it in Terminal in the folder you downloaded to:

shasum -a 256 HashNotch-1.3.0.dmg

It should print exactly this:

ec48568685972a0e7c547503b415e6c9557d11a6826de0915ae3bfee94eab6e0

917 automated checks run before every push, and again on GitHub for every change: the parsers, the geometry, the privacy rules and the arithmetic behind every readout. Every commit and every tag is signed. What the app reads, why, and both private Apple interfaces it uses are written down in SECURITY.md.

HashNotch 1.2.0

Choose a tag to compare

@Hash-7777 Hash-7777 released this 17 Aug 17:41
v1.2.0
484269d

The name comes back, and the quit button works.

The app is called HashNotch again

Everything carries the name: the app in your Applications folder, the words in its windows, the settings it saves, and the folder other tools post activities into.

Nothing you have set up is lost. Your settings are carried across the first time you open it. The notch also keeps reading the old activities folder for as long as anything is still writing there, so alerts from Claude Code and other tools keep arriving before you have re-run anything.

When you get a chance, re-run the Claude Code installer — it points Claude Code at the new folder and brings any logos you added across with it:

"/Applications/HashNotch.app/Contents/Resources/scripts/install-claude-hooks.sh"

Upgrading from Hash D Island — read this first

Drag the old Hash D Island app to the Trash. This one does not replace it: the names differ, so both sit in Applications, and macOS remembers "open at login" against the old one by file reference. Leave it there and every restart quietly opens the old app instead of this one — which looks exactly like the new app losing everything. The panel comes back with none of your settings, and the permission questions are asked again.

Nothing is lost when that happens. The old app keeps its own separate settings, and those are what you are looking at.

Then open System Settings → General → Login Items and remove any leftover Hash D Island entry with the button. Deleting the app does not clear that entry on its own.

Fixed

The power button in the panel now actually quits. It looked broken in three ways at once, and all three are gone:

  • The panel did not close. The button set it closed without telling hover to stand down, so the pointer still resting on the panel put it straight back up.
  • The question went up as a system alert, which stops the whole app dead while it waits — freezing the panel half shut.
  • Because the app never takes focus, that alert could open behind whatever you were working in, leaving a question you could not see in front of an app that looked hung.

The confirmation is now an ordinary window of the app's own. It opens in the middle of the screen, above the island, on whatever desktop you are on, with the island still running behind it. Escape backs out, Return quits.

A finished AI tool shows only its name. "HashCortX finished" was arriving with the model that answered trailing it in small grey text. The work is over by the time you read it, so that line offered nothing to act on while crowding the part you were looking for. It now reads just "HashCortX finished", for any tool that posts one. A tool that is waiting on you still shows its reason, because there the second line is the whole point.

The disk image is named without a space in it. GitHub turns a space in a download's name into a dot, which made every instruction naming that file wrong at the one moment somebody reads it.

Install

  1. Download HashNotch-1.2.0.dmg below and open it. Drag HashNotch onto the Applications folder shown beside it, then eject the disk image.
  2. macOS will say it cannot verify the developer. This build is ad-hoc signed and not notarised — there is no paid Apple certificate behind it, and that is deliberate. Click Done, then open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway. Once only.
  3. Hover the notch. There is no Dock icon and no menu-bar item — the notch is the whole interface. The gear beside it opens settings.

If there is no "Open Anyway", or it changes nothing

That is not a broken download. macOS attaches a hidden quarantine label to anything from the internet, and for an app without a paid certificate it will sometimes refuse outright rather than offer you the choice. One command removes the label:

xattr -dr com.apple.quarantine "/Applications/HashNotch.app"

Open Terminal, paste that line, press Return. It prints nothing — that means it worked. Run it after the app is in Applications.

Verified

  • 547 automated checks pass — the parsers, the geometry, the privacy rules, and the arithmetic behind every readout.
  • Builds clean with no warnings in both debug and release.
  • The bundle's signature verifies (codesign --verify --strict), ad-hoc.
  • Every commit and this tag are signed.

Requires macOS 12 or later. Apple Silicon. GPL-3.0.

SHA-256 of the disk image:

c0a95d2e77d5f8bdfcfacc7e5497587c08219efb636f409715ce53b2d276a989

Hash.D.Island.1.1.0

Choose a tag to compare

@Hash-7777 Hash-7777 released this 28 Jul 03:34
v1.1.0
fc9d21b
Hash D Island 1.1.0

The panel behaves, and the notch follows what you turned to last.

The opening window can now be refused — that quits and removes the
settings file, so a Mac that said no is left as it was found. A Mac with
no battery no longer shows one. Covers are a separate switch per service.
Two resets added. Settings pages moved to a strip across the top.

530 automated checks, all passing.

Hash D Island 1.0.0

Choose a tag to compare

@Hash-7777 Hash-7777 released this 27 Jul 06:46
v1.0.0
28d4c67
The first release. The notch becomes a living surface: quiet when nothing is
happening, alive the moment something is.

Now Playing for any app that publishes a track, a microphone-in-use indicator
that never listens, live internet speed, battery with adapter wattage and an
80% health cap it counts down to correctly, AirPods charge, real Apple Silicon
temperatures, processor and memory, storage, a timer, download notices, AI
token totals, and a local live-activity feed anything can post to.

Nothing leaves your Mac. One kind of network request exists — fetching a cover
from Spotify's or YouTube's image hosts — and nothing else in the app touches
the network. The island leaves the screen the moment the Mac locks. Switching
an indicator off stops it reading, not just showing.

Built for Apple Silicon, macOS 12 Monterey through macOS 26 Tahoe.
Released under the GNU General Public License v3.

Verified at this tag:
  swift build, and swift build -c release from a clean scratch path - no
  warnings in either configuration.
  swift run HashDIslandChecks - 471 checks, all passing.
  ./scripts/build_app.sh - bundle assembled, ad-hoc signature verified.
  ./scripts/make_dmg.sh - image checksum valid, signature inside verified.
  Idle cost measured on the packaged app, panel shut: 0.13-0.19% of one core
  and about two idle wake-ups a minute.

Distributed directly rather than through the Mac App Store, because reading
system-wide Now Playing and the real temperature sensors needs Apple interfaces
the store does not allow. The app is ad-hoc signed and not notarized, so the
first launch takes an extra step - the README explains it, including the
quarantine command for the case where macOS offers no button.