English · Русский
Visor turns the MacBook notch into a working surface. It stays out of the way until the pointer reaches the notch, then shows a summary of what is going on — what is playing, which agent needs you, when the next meeting starts — and opens into a full panel if you pull down.
Visor works on macOS 15 or higher.
| Music | Artwork, track, a scrubber that seeks, previous / play / next. The source is anything macOS itself can see — a desktop player or a browser tab. A heart marks a track, and the list of marked ones opens it again in the service it was heard in. Apple Music and Spotify also show what is coming up next |
| Clipboard | The last 40 copies, searchable, each row showing the app it came from. A click puts an entry back on the clipboard; with pasting switched on it types straight into wherever the caret is. Survives a restart, and can be set to forget entries after an hour, a day or a week |
| Snippets | A hand-kept list of what you are tired of retyping. Also editable as a plain file |
| Calendar | The next meeting a week ahead, how long until it starts, and a button that joins the call |
| Translate | Type on the left, read on the right. Offline, through the system's own Translation framework |
| Notes | Scratch space. Blank notes sweep themselves out |
| Agents | Coding agents running in your terminals: which project, what state, how long |
Read this before downloading. Visor is signed ad-hoc, without a paid Apple Developer ID, and is not notarised. macOS will refuse to open it the first time and say it cannot be checked for malicious software. That is expected and it is allowed once, by hand — the two ways are below. If that is not something you want to do, this is the point to stop.
Download the latest .dmg from Releases
and drag Visor into Applications. Then, once:
System Settings → Privacy & Security, scroll to the bottom, where a line about Visor and an "Open Anyway" button will be waiting. Or from a terminal:
xattr -dr com.apple.quarantine /Applications/Visor.appOn macOS 15 the old Control-click route no longer works for this case, so it is one of those two.
Nothing further is needed after that — the app opens normally from then on, and so do later versions.
The panel has three states, and the pointer walks between them.
Folded, the strip carries only what is worth a glance: artwork while something plays, a dot while an agent works.
The summary opens when the pointer rests on the notch — one row with the track, the agent and the next meeting. Clicking a section opens the tab it stands for.
The full panel opens when the pointer is pulled down onto the lip below the summary. Moving back up folds it again, one step at a time; clicking the notch does the same.
The clipboard also lives in a window of its own on ⇧⌘V, which appears under the pointer over whatever you are working in, with the caret already in the search field. In both, ↑/↓ walk the list, Enter pastes, and Escape clears the search and closes on an already empty one.
Visor watches Claude Code, Codex and Gemini CLI. Settings → Agents connects them: it adds a hook to the agent's own settings file, leaving everything else in it alone, and removes it again without a trace when switched off.
Connected, an agent reports what it is doing — working, or waiting for you. Unconnected ones still appear, found by looking at running processes: enough to say one is running and where, which is the half of the answer that needs no cooperation.
A dot on the folded notch beats once for every step an agent takes, and the strip widens for a few seconds to say so when the state changes. There is an optional sound for when an agent wants you.
The button beside the heart shows what is coming up, and a click on a row plays it. Two sources, and they are not equivalent:
Apple Music answers over AppleScript with the playlist it is drawing from — the closest thing it exposes. The real Up Next list, with its shuffling and hand-added tracks, is not scriptable by anybody. Needs the Automation permission, nothing else.
Spotify answers with the actual queue, but only after signing in, and the sign-in needs an app of your own. Spotify puts every new app in development mode, where it serves five accounts that the owner adds by hand; lifting that is for registered companies with a quarter of a million monthly users. So there is no client id that could be shipped here and work for everybody.
To use it: create an app at developer.spotify.com,
add visor://spotify as a redirect URI, and paste the Client ID into Settings →
Spotify queue. The exchange is PKCE, so no secret is stored anywhere; the
refresh token goes to the keychain. Skipping to a track also needs Spotify
Premium — Spotify refuses that call for everybody else.
Every other source — a browser tab, a player nobody has taught this app about — has no queue to ask for, and the button does not appear.
Open them from the gear in the panel, or from the menu bar icon. The icon itself can be hidden — the gear stays.
Beyond the switches above: launch at login, the ⇧⌘V shortcut and what it opens, whether copied screenshots are saved, how long clipboard entries live, and whether the clipboard is cleared on quit.
The shortcut can also be set by hand:
defaults write com.visor.app hotkey "ctrl opt cmd v"Modifiers in any order, the letter last. The key is remembered by position, so changing keyboard layout does not break it.
None, unless you ask for something that needs one. The pointer is read through
NSEvent.mouseLocation, the clipboard through the public NSPasteboard, and
what is playing comes from macOS itself.
Calendar is needed by the Calendar tab, and the system dialog appears neither at launch nor when the tab is opened, but on a press of a button that explains why.
Accessibility is needed to paste on click — without it the system will not deliver the ⌘V. Off by default, and while it is off the permission is never asked for.
Touch neither and the app runs without permissions at all.
git clone https://github.com/wepaleen/visor.git
cd visor
./Scripts/bundle.sh
open build/Visor.appSwift 6 is needed; Command Line Tools are enough, the full Xcode is not.
./Scripts/dmg.sh makes the image, and the icon is generated in code by
Scripts/make-icon.swift.
An ad-hoc signature is a hash of the binary, and macOS identifies an app by it, so every rebuild looks like a new app and loses whatever permissions were granted. Any stable identity fixes that, including a self-signed one:
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
-keyout key.pem -out cert.pem -subj "/CN=Visor Dev" \
-addext "basicConstraints=critical,CA:false" \
-addext "keyUsage=critical,digitalSignature" \
-addext "extendedKeyUsage=critical,codeSigning"
# -legacy matters: without it OpenSSL 3 writes a container the keychain
# refuses with "MAC verification failed".
openssl pkcs12 -export -legacy -out visor.p12 -inkey key.pem -in cert.pem \
-name "Visor Dev" -passout pass:visor
security import visor.p12 -k ~/Library/Keychains/login.keychain-db \
-P visor -T /usr/bin/codesign -A
security add-trusted-cert -r trustRoot -p codeSign \
-k ~/Library/Keychains/login.keychain-db cert.pemScripts/bundle.sh picks it up by name from then on. The result is a
designated requirement of identifier "com.visor.app" and certificate leaf,
so macOS recognises the app across rebuilds and the permissions stay.
Does anything leave my machine?
Only if you ask. Update checking is off until the first launch asks you once and
you say yes; then it is one request a day to api.github.com carrying nothing
but the version. Cover art is fetched only when macOS does not supply it and
Spotify is playing. The Spotify queue talks to api.spotify.com, and only after
you have signed in for it. Nothing else opens a connection, and there is no
telemetry of any kind.
Where is my data kept?
~/Library/Application Support/Visor, in plain JSON. The clipboard file is
written with mode 600. Entries marked concealed — what password managers set —
never enter the history at all, so they never reach the disk.
Does it work on a Mac without a notch? Yes. The panel treats a 180 × 24 pt area at the top centre of the screen as one.
Why does translation say the language pack is missing? macOS does not preinstall them. System Settings → General → Language & Region → "Translation Languages…".
Why did my permissions disappear after rebuilding? See Build from source: an ad-hoc signature changes with every build, and macOS treats the result as a different app.
English and Russian, chosen by the system's own language preference. The tables
are Resources/en.lproj and Resources/ru.lproj; a build fails if a string in
the code has no key in either.




