BikS2013 · project notes

Your desktops
have names
now.

Jumpee is a small macOS menu bar app that names your Mission Control desktops, jumps you between them from the keyboard, and prints the name of the one you are on straight onto the wallpaper.
A product tour · what it does, how to install it, how to configure it
Version 1.9.1 · September 2026
Introduction
Mission Control gives you numbers, not names.
The symptom

Desktop 3 is a guess

macOS labels spaces Desktop 1, 2, 3 and stops there. Nothing on screen tells you that Desktop 3 holds the mail and Desktop 5 is the build machine.

The gap

Renaming is not a feature

There is no supported way to name a space — no public API, no System Settings switch, no checkbox anywhere in Mission Control.

The friction

Windows land in the wrong place

Sending a window to another desktop means dragging it to the screen edge and waiting, or enabling a Mission Control shortcut most people never touch.

Jumpee closes all three. It reads the space you are on, keeps a name against it, and gives you a keyboard route to every other one.
Introduction
A menu bar app that knows where you are.
01

Name

Give every desktop a name. Names are stored against the space itself, so they survive reordering in Mission Control.

02

Jump

A global hotkey opens the list from anywhere, and number keys jump. ⌘J, then 3.

03

Show

The current desktop's name sits in the menu bar, and a faint watermark prints it on the wallpaper itself.

04

Manage

Send the focused window to another desktop, pin a window on top, and keep an eye on the keyboard language.

One small native app. No dock icon, no main window, no account, no network. It lives in the menu bar and gets out of the way.
01
What it does
Naming and jumping, the wallpaper watermark, and the three window-and-keyboard features that grew out of them.
01 · The menu bar
The name of the desktop you are on, always in sight.
2: llama.cpp
A synthetic representation — the menu bar, with Jumpee's status item reading 2: llama.cpp. Everything but that item is an abstract mark.
1

The display symbol

Shown beside the name, so a two-screen setup still tells you which display you are reading.

2

The desktop number

Settings › General decides whether it comes along — 2: llama.cpp or just llama.cpp.

3

The name you gave it

Whatever you typed when you renamed that desktop — and it follows the space, not its position in the row.

Unnamed desktops still read Desktop 2, so the status item is never blank — and it is the same name the wallpaper overlay prints.
01 · The list
Every desktop on this display, one click away.
The Jumpee dropdown, captured from the running app
The dropdown, captured from the running app.
1

Where you are

The header repeats the menu bar's context — the desktop's name, its number and the display it belongs to.

2

Filter desktops

Type to narrow a long list. The group header above the names says which display these spaces belong to.

3

The desktops themselves

Only the active display's spaces, numbered as that display numbers them. A tick marks where you are, and ⌘1–⌘9 jump straight there.

4

Rename, Move Window, Pin Window

The three actions, one click each — ⌘N to rename, ⌃⌘P to pin.

5

The footer line

Reports which overlays are running, beside the button that opens Settings. About and Quit live there now, in the Advanced pane, rather than in this list.

01 · The keyboard
Everything is reachable without the mouse.
ActionKeyNotes
Open the desktop list⌘JGlobal — works from any app. Configurable in Settings › Shortcuts.
Jump to a desktop⌘1 … ⌘9While the list is open. Numbers follow the active display.
Move the focused window⇧⌘1 … ⇧⌘9While the list is open; also the Move Window To… submenu.
Pin or unpin a window⌃⌘PGlobal toggle. Present only when Pin windows on top is enabled.
Rename this desktop⌘NRenames the desktop you are on.
Open Settings⌘,The standard macOS shortcut.
The two global hotkeys are yours to reassign. One word of warning from the project's own notes: the move-window default ⌘M collides with the system Minimize command, so change it to ⇧⌘M in Settings › Shortcuts.
01 · Naming
Type a name. It sticks to the space, not the position.

macOS identifies a space by a stable internal ID. Jumpee stores your name against that ID — so when you drag desktops around in Mission Control, the names travel with what is actually on them.

  • Return renames, Escape cancels — a focused panel, not a stacked alert.
  • Remove Name clears a desktop back to Desktop 2.
  • Renaming applies to the desktop you are on right now.
  • Names are written to the config file the moment you confirm.

Rename Desktop 2

Give this desktop a name that is easy to recognize.
llama.cpp
Press Return to rename
Remove Name Cancel Rename

A synthetic representation of the rename panel, drawn in the deck's palette.

01 · The wallpaper
The name, printed faintly on the desktop itself.
FinderFileEdit ▣ Development09:41
DEVELOPMENT
1

Seven anchors

Any corner, top or bottom centre, or dead centre of the screen.

2

Opacity and colour

Default is a 15% red. 10–20% reads as a watermark; 30–50% is meant to be noticed.

3

Font, size and weight

Any installed font, from ultralight to black, plus a margin from the screen edge.

4

Click-through

The overlay never takes a click and never appears in screenshots of your other windows.

01 · Windows
Send the front window to another desktop — without dragging.
1

Focus the window you want to move

Click it once. Jumpee always acts on the frontmost window of the frontmost app.

2

Open Jumpee and pick Move Window To…

From the dropdown, from the submenu, or with ⇧⌘1–⇧⌘9 while the list is open. A global hotkey can open the same list at your cursor.

3

Pick the destination

The window moves and your view follows it. The current desktop is left out of the list — you cannot move a window onto the desktop you are already on.

Two things to know. The system's Move window to Desktop N shortcuts must be enabled first — Jumpee reports their status in Settings › Advanced. And on macOS 15 and later the move always brings you along: "move without following" is a platform limitation, not a setting. Windows that cannot move — fullscreen, or assigned to all desktops — are simply left alone.
01 · Windows
Keep one window above all the others.

Focus a window, press the pin shortcut, and it stays floating above everything else — including windows belonging to other apps.

  • Press ⌃⌘P again on the same window to unpin it.
  • Several windows, from different apps, can be pinned at once.
  • The menu item changes with the focused window: Pin Window on Top or Unpin Window.
  • Pin state lives in memory only — quitting Jumpee releases every window it was holding.
FinderFileEdit ▣ Development09:41
PINNED Stays on top of every other window
The window keeps working normally — it simply never falls behind another app again.

Two unpinned windows behind, one pinned window holding the front.

Pinning is the one feature that needs Screen Recording permission, because the app works from a captured image of the window. Jumpee asks the first time you pin, and takes you to the right pane.
01 · The keyboard language
See the keyboard language without hunting for it.
EN
just below the menu bar · centred
A synthetic representation of the indicator — the pill floats just under the menu bar, over whatever you happen to be working in.
1

Just below the menu bar

Centred, notch-aware, on whichever display holds the space you are on.

2

Changes the instant you switch

No polling — it listens for the system's input-source notification. Duplicate notices are ignored.

3

No new permissions

The keyboard input-source APIs need nothing beyond what Jumpee already holds.

4

Independent of the watermark

Size, font, weight, colour, opacity and the background pill, plus a per-language label and colour of your own.

Section 02
02
More than one display
What changes when there is a second screen, and why the numbering stays local to each display.
02 · Displays
Each display keeps its own set of desktops.
The list
Shows only the spaces belonging to the display you are working on — not a flattened list of everything.
The numbers
⌘1–⌘9 follow that display's own numbering, starting at 1 on each screen.
The watermark
Appears on the display holding the active space, and repositions when you move to the other one.
The indicator
Same rule — the keyboard language follows the active display, with the menu bar height measured per screen so notched and external displays both sit correctly.
Plugging in
Connecting or disconnecting a display rebuilds the menu and the overlays for the new layout. Nothing restarts.
Window moves respect the same topology: a window is sent to a desktop on the active display, using the global numbering the system shortcuts expect.
03
Installing it
One Homebrew line or a disk image — then two settings macOS will not let Jumpee change on its own.
03 · Install
One line, if you use Homebrew.
# add the tap, then install the cask
brew tap BikS2013/jumpee
brew install --cask jumpee

# launch it
open -a Jumpee

# and when you want it gone
brew uninstall --cask jumpee
1

Or download a release

A .dmg to drag onto Applications, or a .zip to unpack. Both are on the project's releases page.

2

Signed and notarized

From v1.6.0 every release is Developer ID signed, checked by Apple and stapled — so Gatekeeper opens it without a warning. Only v1.5.1 and older need the quarantine flag cleared.

3

macOS 13 or later

Ventura, Sonoma, Sequoia and Tahoe. One universal download covers Apple silicon and Intel.

4

No dependencies

A single native Swift binary. Building it yourself needs only the Xcode Command Line Tools — no full Xcode.

03 · Setup 1 of 3
Grant Accessibility. Nothing switches without it.

Jumpee never reaches into another app. To change desktop, it asks macOS to run the system's own shortcut — and synthesising that keystroke sits behind Accessibility, which macOS will not let an app grant to itself.

1

Open the pane

System Settings › Privacy & Security › Accessibility.

2

Switch Jumpee on

If it is not listed, click + and add /Applications/Jumpee.app.

3

Or follow the prompt

Jumpee asks on first launch and takes you straight there.

Privacy & Security › Accessibility
J Jumpee
T Terminal

Switching desktops and moving windows both need this one permission.

03 · Setup 2 of 3
Turn on Switch to Desktop 1–9.

There is no public API for changing desktop. Jumpee presses macOS's own ⌃1…⌃9 shortcuts — and those ship switched off.

1

Open the shortcut list

System Settings › Keyboard › Keyboard Shortcuts › Mission Control.

2

Tick the desktop shortcuts

Switch to Desktop 1 through Switch to Desktop 9.

3

Leave them alone afterwards

Changing them to another key breaks navigation — Jumpee expects the system defaults.

Keyboard Shortcuts › Mission Control
Switch to Desktop 1⌃1✓
Switch to Desktop 2⌃2✓
Switch to Desktop 3⌃3✓
Switch to Desktop 4⌃4—

Skip these and the list still draws correctly — but clicking a desktop goes nowhere.

03 · Setup 3 of 3
Screen Recording is only for pinning.
Required — for pinning only

Screen Recording

Pinning works from a captured image of the window, so macOS gates it behind Screen Recording. Leave it off and everything else still works; the first time you pin, Jumpee asks and opens the pane for you.

System Settings › Privacy & Security › Screen Recording

Optional

Launch at login

Jumpee does not install itself as a login item. If you want it waiting at every start, add it yourself — it is one toggle in System Settings › General › Login Items.

Until then, start it from Spotlight whenever you want it.

The whole setup in one line: one permission for naming, switching and the overlays, a second only for pinning, and one set of system shortcuts that macOS keeps switched off by default.
Section 04
04
Settings and configuration
Four panes in a real macOS Settings window, one JSON file underneath, and no Apply button anywhere.
04 · Settings
A real macOS Settings window — four panes.
Pane 01

General

Which features exist at all: the menu bar icon, the desktop number, overlay, indicator, window moving and pinning.

Pane 02

Appearance

How the two overlays look — type, colour, opacity, anchor — with a live preview beside the controls.

Pane 03

Shortcuts

Three global hotkeys, recorded by pressing them, with conflict checking and a reset on every row.

Pane 04

Advanced

Permission status, the config file in Finder, and Reload Now for edits made by hand.

No Apply button. Every control writes straight through to the configuration and takes effect immediately. The window resizes and retitles itself to match the pane you pick, and ⌘, opens it from anywhere.
04 · General
General decides what exists.
General
General Appearance Shortcuts Advanced
Menu Bar
Show desktop number
Show Jumpee in the menu bar
Dropdown
Open the desktop list at
The global shortcut can follow the pointer or use the menu-bar item.
Menu BarPointer
Features
Desktop overlay
Input source indicator
Move windows between desktops
Pin windows on top
A synthetic representation of the General pane, drawn in the deck's palette.
Menu bar icon
Show Jumpee in the menu bar — or hide the icon and keep the hotkeys working.
Desktop number
2: llama.cpp or just llama.cpp.
Dropdown at
The menu bar item, or wherever the pointer happens to be.
Desktop overlay
The wallpaper watermark.
Input source indicator
The keyboard-language overlay.
Move / Pin
Each feature brings its own menu entries and hotkey, and takes them away when switched off.
04 · Appearance
Appearance, with a live preview.
Appearance
General Appearance Shortcuts Advanced
Desktop Overlay
Position:Top Center
Font:Aptos Bold
Size:72
Color:
Opacity:9%
Margin:40
Input Source Indicator
Label size:40
Text color:
Background:
Opacity:30%
Preview
Watermark
Font, size, weight, text colour, opacity, anchor and margin from the edge.
Indicator text
Size, font, weight, colour, opacity and a vertical offset below the menu bar.
Indicator pill
Background colour, background opacity and corner radius.
Live preview
Both overlays drawn together under the controls — the watermark and the pill at once, before you commit to anything.
Restore defaults
Resets the visuals but keeps each feature's on/off state — and keeps your per-language labels.
04 · Shortcuts
Record a shortcut by pressing it.
Shortcuts
General Appearance Shortcuts Advanced
Global Shortcuts
Open Jumpee
Show the desktop list from anywhere
⌘J↺
Move Current Window
Choose a destination desktop
⌘^M↺
Pin or Unpin Window
Keep the focused window above others
^⌘P↺
Menu Shortcuts
Switch to Desktop 1–9⌘1 … ⌘9
Rename Current Desktop⌘N
Jumpee warns you if a shortcut conflicts with another Jumpee action. Press Escape while recording to cancel.
Restore Defaults

No checkbox-and-text-field fiddling. Click a shortcut, press the chord you want, and it is captured whole — modifiers and all, including named keys like Space, Return, Tab and Escape.

  • Escape with no modifiers cancels recording.
  • A shortcut needs at least one modifier, a key from the supported set, and no clash with the other two.
  • Applying it re-registers the hotkey immediately — no restart, no manual reload.
  • Every row has its own reset, and there is one Restore Defaults for all three.
  • Rows for disabled features stay visible, greyed out, so you can see what is available.
04 · Advanced
Advanced tells you what macOS is holding back.
Advanced
General Appearance Shortcuts Advanced
System Setup
AccessibilityGrantedOpen System Settings…
Mission Control ShortcutsDetectedReview Shortcuts…
Screen RecordingGrantedGrant Access…
Configuration File
Configuration file~/.tool-agents/jumpee/config.json
File actionsReveal in FinderReload Now
Changes made outside Jumpee take effect after reloading.
Application
Jumpee 1.9.1
Native desktop navigation utility
About Jumpee…
Quit Jumpee
1

System Setup

Accessibility, Mission Control shortcuts and Screen Recording, each with a live status dot and a button through to the right System Settings pane. No guessing why a feature is quiet.

2

Configuration File

The path in full, Reveal in Finder, and Reload Now — which re-reads the file and re-registers every hotkey without a restart.

3

Application

The running version, About Jumpee… and Quit. Everything the Settings panes write lands in that same JSON file, so hand-edits and UI edits never diverge.

04 · Configuration
Everything the app knows, in one file.
{
  "hotkey":        { "key": "j", "modifiers": ["command"] },
  "moveWindow":    { "enabled": true },
  "pinWindow":     { "enabled": true },
  "overlay": {
    "enabled": true, "fontSize": 72, "fontWeight": "bold",
    "opacity": 0.15, "position": "top-center",
    "textColor": "#FF0000", "margin": 40
  },
  "showSpaceNumber": true,
  "spaces": { "42": "Mail & Calendar", "15": "Development" }
}
1

~/.tool-agents/jumpee/config.json

The folder is created 0700 and the file 0600. It is written for you on first run and it is the only configuration method — no environment variables, no command-line flags.

2

Spaces are keyed by ID, not position

"42" is the space's stable internal ID. That is why names survive a reshuffle — and why you should rename from the menu rather than editing keys by hand.

3

Coming from an older build?

Legacy configs are migrated automatically — position-keyed spaces to ID-keyed, and the old ~/.Jumpee/ folder to the new path on first launch.

05
Where it fits
Three working habits it suits, and an honest list of what it still will not do.
05 · Use cases
Three places it earns its keep.
01

One machine, four jobs

Comms, development, terminal, browser — four desktops, four names, no memorising. ⌘J then the number, from inside any app, without losing your place.

The menu bar answers "where am I?" before you have to ask.

02

Presenting and screen sharing

Your audience sees the space name printed on the desktop you are sharing, and the input-source pill stops the mid-sentence "why is my typing in Greek?" moment before it happens.

Both overlays are click-through, so nothing you demo is blocked.

03

A reference that must not vanish

Pin the document, dashboard or call transcript you are working from above everything else, then edit underneath it. Unpin when you are done — or quit, and Jumpee releases it for you.

Several pinned windows at once, from different apps.

It suits anyone who already thinks in desktops but cannot remember what is on each one — and anyone whose work mixes two keyboard languages across two screens.
05 · Worth knowing
What it does not do.
LimitWhy
Nine desktops per displaySwitching rides on the system's ⌃1–⌃9 shortcuts, so there is nothing beyond the ninth.
Moving a window always follows itmacOS 15 and later force the view across with the window. Not a setting, a platform rule.
Space detection rests on private APIsmacOS offers no public way to read the current space, so Jumpee uses undocumented CoreGraphics calls. A future release could break them.
The watermark shows the current space onlyPrinting each name into the Mission Control thumbnails is not reachable on current macOS.
Pins are forgotten at quitPin state is kept in memory by design, so nothing is left floating after Jumpee exits.
The ⌘M default clashes with MinimizeChange it to ⇧⌘M — a known trade-off recorded in the project's own notes.
30
Start here

Three steps
and you are done.

1

Install it

brew install --cask jumpee after tapping the repository, or take the disk image from the releases page.

2

Grant Accessibility and switch on Desktop 1–9

One permission and one set of system shortcuts. Settings › Advanced confirms both.

3

Name your first desktop

Press ⌘N, type the name, press Return. The menu bar answers to it from that moment on.

Jumpee v1.9.1 · macOS 13 or later · universal binary · signed and notarized
BikS2013 · project notes · September 2026