Stage actions open a stage window by running a script, or by opening a file, a folder or a URL, instead of launching the app
The action runs only when that window isn't open yet, so activating the stage again focuses it
Scripts run in
zshor as AppleScript. Add one inconfig.yaml, withrcmd config stage-item add, or have an agent write it through MCP
Configuration by record lets agents and the
rcmd config command read and change stages, app keys, saved
windows, search pins and window title patterns one record at a time
rcmd config schema stageslists every field and allowed valueA change is checked as a whole before anything is written, and a mistake names the record, the field and the line
More agents in Settings -> MCP: Codex, Copilot CLI, pi, OpenCode and Gemini CLI join Claude Code at the top, with Antigravity, Amp, Factory Droid, Goose, Crush, Qwen Code, Kimi Code and Devin under See more
Codex, Goose and Crush configs are edited in place, the rest of the file stays as it was
The Codex row also counts the ChatGPT desktop app, and Windsurf is now the Devin row
List settings take
+itemand-item, so one entry changes without sending the whole list:rcmd settings set ignoredApps "-QuickTime Player"
rcmd logs persist on keeps rcmd's debug logs on disk
for bug reports, and agents can do the same behind an administrator
password promptCommand+tab going to the wrong app
sometimesState grouping lines windows up from the left on a shared bottom edge, so the icons sit at the same height
/ in Exposé to
fuzzy search app names and window titles across every Space
The placement keys keep working while you type, press
Enterto keep only the filtered windows visible
Press / to search through them. Expand an app to see its tabs and panes, type to search and narrow them down
Left Command+tab switches windows and
Right Command+tab switches apps
Pick the layout under Replace the macOS ⌘ Tab app switcher in Settings -> Window switcher
Download rcmd 3.6.0 → This is a release with breaking changes, trying to unify the many different switchers and OSDs into a simpler mental model.
From now on, we only care about a single modifier:
rcmd for appsdouble tap and hold rcmd for everything else
(windows, tabs, stages)The app switcher will also focus more on switching apps than searching, while the window switcher becomes a fuzzy search based OSD.
ralt +
letter is gone, windows are found by fuzzy searchingcapslock
by default to ralt (can be changed back, it's mostly
for people that get surprised by capslock not working
properly)Left Command+tab is now app-only
switching, while Right Command+tab switches
windowsLens: rcmd can now list and switch browser tabs, terminal panes, System Settings panes, Reminders lists and more
The system is extensible, each Lens being a set of scripts that define how to fetch lens items (tabs, panes etc.) and how to switch to them
A lens is a folder in
~/.config/rcmd/lenses: alens.yamland its scripts.The included MCP allows an LLM agent to write those scripts for you, with a prompt like: "write an rcmd Lens for X" where
Xcan be anything like:
- cmux panes
- Finder folders in
~/Invoices- SSH servers you connect most often
- Figma projects
MCP: AI agents can now communicate with rcmd
Install the MCP server from Settings -> MCP
This allows an LLM like
claude,codexand others to:
- create Lens scripts for focusing tabs, panes, projects through rcmd
- create Stages as whole arrangements of apps described in natural language with position, display, size, projects or files to open, commands to be run etc.
- troubleshoot config problems like why search doesn't return expected things, why hotkeys misbehave etc.
- one-shot controlling of apps, windows, spaces etc.
Window switcher: double tap and hold
rcmd to fuzzy search windows, tabs, panes
Assign a letter to any window by holding that letter for a few seconds
Press
rcmd-app letter-window letterfor quick focusing assigned windows or tabs
Cycle apps is back from rcmd v2 and can be set
for the When already focused action
pressing the same letter again cycles the running apps that start with that letter
Choose which display the OSD opens on: the main display, the one with the active window, or the one under the cursor
config.yaml with a retired setting discarding
every other setting in the filecmd+W/Q/H/R
chips showing where nothing was selectedshift+tab stepping
forwardsrcmd no longer fires permission prompts on its own
Screen Recording is required, macOS hides window titles without it and the switcher comes up empty
Same controls live in Settings > General > Permissions
weixinorwxfinds 微信,wangyifinds 网易云音乐,moskvafinds МоскваCovers Chinese, Japanese kana, Cyrillic and Greek names; accented Latin names also match without the accents (
cafefinds Café)Kanji romanize by their Chinese reading, so 東京 answers to
dongjing, nottokyo
Hold the trigger key and press a number to jump to that Space and close Exposé; the number on its own still expands the Space to manage it
Press
F, then the number shown on a fullscreen Space, to jump to itTurn on Click Space to focus in the gear menu to switch by clicking a Space cell
A Space with a single window shows that window larger
Keys excluded from capture no longer appear on the keyboard
New key caps:
Spaceshows the sticky search, and[/]show the adjacent-Space switch when it's enabled
Press your
trigger key+.to spread every switchable window over the desktop, Mission Control style, with live thumbnails. Apps sit where their switch key sits on the keyboard, so the layout teaches the keys. Type a letter to zoom into one app, place a window with the bracket and quote keys, drag or send it to another Space or display, all without leaving the overlay.
rcmd doctor reports it.With "Always show scroll bars" turned on, every switcher (apps, windows, search, and the tab / backtick cycles) keeps a lane for the scrollbar, so the keys and titles on the right edge aren't hidden behind it
Saving a browser or terminal window for "recently closed" no longer waits on a stuck app to answer, discovering installed apps no longer reads each app's info on the main thread, and the first app scan at launch no longer freezes when you have a lot of apps installed
Turn it on in Settings, and the indicator shows just the Space you're on instead of the whole row
~/.config/rcmd/config.yaml, or the whole
~/.config/rcmd folder, into your dotfiles and rcmd reads
and writes the real file instead of replacing your linkoverrideUserDefaults: true option, so your config is
reapplied on every launch even if a setting changed in the app
sincercmd only ever restores windows it hid itself, so a window you parked off-screen, or one on a display that went to sleep, is left alone
Typing a letter now favors apps whose name (or a word inside it) begins with that letter, skipping common prefixes like "The" or "Microsoft". Pick between Anchored and Contains in Settings, and edit the ignored-prefix list to taste.
Tap the trigger and Space again to close it
Each group (Code editors, JetBrains IDEs, Safari, Xcode) lists the apps it covers plus two patterns: one picks the window switcher key, the other pulls a cleaner name (like the project, without the file name) that shows in the window switcher and gets saved into a Stage.
Add or drop apps from a group, tweak a pattern, start a new group, or reset everything back to the built-in defaults.
tt for Tailscale)
Create one in Settings (App switcher > Fuzzy search): type the query, pick the app.
Or do it in the switcher: type a query, tap Pin "…" to an app, then choose the app from the list that follows.
⌥+Return on a highlighted app to open its menu bar
icon (the same as clicking it), even when the icon is hidden behind the
notch or scrolled off screenWindow refresh now caps its total time, times out per app, and skips an app that went slow until it recovers. Ignoring an app now also skips its window scanning entirely, so an unresponsive app you've ignored can't freeze switching or drop your keypresses.
A window button in the search bar flips whether windows appear at all. Hide them to keep search and switching to apps only.
Running apps are marked by a green key instead of a separate dot.
Window results in fuzzy search sit at the top level instead of indented under a small header, and the footer hints fold onto one line when the OSD is wide enough.
Activation timing chooses when an app key acts,
set in Settings under Mode (or search settings for
adaptive)
On press focuses the moment you press the letter. On release waits until you release the keys. Adaptive, the new default, decides per key.
Adaptive focuses instantly in the everyday case and pauses for a moment only when your next key could change the outcome: an app with several windows, or a letter that also starts a saved multi-letter search. Release during the pause and it focuses right away; a quick tap never waits.
On release works even with the switcher panel hidden, for navigating by memory or with a screen reader.
Window numbers reach a specific window in one shot: press an app's key, then its number
Each window keeps its number for as long as it stays open, and the numbers show on the window rows in the switcher next to the letter.
Apps only keeps the app switcher and search to apps, no window rows mixed in. On by default in Switcher mode
Windows stay one keystroke away:
Cmd-Taband double-tap-and-hold still search every open windowTurn it off in Settings to bring window rows back
All windows focus brings every window of the app to the front when you switch to it, not just the main one. Your last-used window keeps the keyboard and cursor, and windows that are minimized or on another Space stay put
Menu-bar app windows you close (like a Settings window) stop lingering in the window switcher and window list, instead of leaving a phantom entry behind
tg no longer lists Tailscale or Grila)
Type a multi-word app's initials to jump to it:
fcpfor Final Cut Pro,vscfor Visual Studio CodeSpelling an app's name reaches the app, not one of its open windows (
xcodelands on Xcode, not a project window)The Settings window stops appearing in results for unrelated letters
1rcmd osd app / rcmd osd window
[ / ]: send the focused
window one Space to the left or right and follow it
The same
[/]keys that switch Spaces with thercmd, except the window travels with you
Could strike in the background while the menu bar Spaces indicator refreshed the stage letters shown on each Space
A busy Space switch could misread fast typing as separate per-letter app switches or slip keystrokes through to the wrong app
Switcher is the classic zero-UI experience: apps switch the instant you press a key, and search covers only running and assigned apps. Launcher shows a Spotlight-like panel that finds and launches any installed app
⌘P on a search
result to lock the typed query to that app
Assign multi-letter queries so
spalways opens Spotify orffalways opens Firefox
rcmd search learned, pin, unpin,
learn and unlearnA lone assigned letter was treated as a typed search, which capped the delay at 150ms
Focusing an app mid-search could make rcmd read the trigger as released, committing a half-typed search as if you had let go
rcmd now follows the Spotlight index live instead of checking once and possibly losing the race against indexing
Search results now appear only for unassigned letters or multi-letter queries
A window saved for Xcode opens in whichever Xcode is running, and the other way around, no matter which one you originally saved it from
macOS 27 changed the system gesture it relied on, so it (and the instant window-moving option) is hidden there, and Spaces switch with the standard animation instead
Only windows whose state can be captured reliably are kept, and they fade out after a day. Highlight one in the cycle and press
⌫to forget it without reopening it.
⌘R to re-scan every open window without closing the
switcher
Useful if there are leftover windows in the list or if rcmd can't see specific windows
That option only matters when the OSD is visible to watch, so it no longer delays the switch in UI-less mode
Tab or ⇧Tab to walk through the
window cycle instead of tapping repeatedly⌘W / ⌘Q /
⌘H actions`, [,
], -, =, and more), not just
lettersTurning off a key stops every action bound to it, and passes the key through to the frontmost app instead.

CPU usage decrease: improved caching of window metadata and running apps
Clickable OSDs: the window switcher and Stage switcher respond to mouse clicks
Proportional OSD offset: the vertical position scales with each screen's height
Snappier cycling: the highlight of
⌘Tab / ⌘` moves instantly instead of having a
small lag
Quiet quick-switch: a fast single
⌘Tab or ⌘` switches with no OSD flash
Tap and release to switch instantly. Keep the modifier held after releasing the key to reveal the cycle OSD and keep cycling.
Ignore key repeats: holding Tab,
the backtick cycle key, or other action keys will not cause the action
to fire continuously
Dynamic OSD height: OSD will now shrink to fit the number of apps and windows
ralt) can again cycle same-letter
windows in multi-space mode⌘Tab work when Cycle
Through is Adaptive⌘` (same-app window cycle) could appear unresponsive in
some appsnow/Nm/Nh/Nd/Nw)
on the right of tab cycle and open-windows search rows, optional toggle
in their settingsrcmd window focus-last CLI command, same MRU toggle
as <rcmd>+0rcmd + [/] in Settings ->
Spaces<rcmd>+0 remembers last window/space correctly
after opening and closing Mission Control in a fullscreen appUse your HyperKey or fn key for app switching, window switching, stage opening etc.
rcmd can now jump between the windows of an app on its own.
Hold the window trigger key (Right Option by default) and press a letter to focus a specific window, or type to search window titles. Earlier versions leaned on the Hammerspoon helper app to work around App Store sandbox limits. That dependency is gone, and window jumping is no longer marked experimental.
Hold the trigger and type to fuzzy-search across installed apps, running apps and open windows in one ranked list. Picks are remembered per query, so your next "f" lands on the same app without re-ranking from scratch.
A Stage is a set of apps and windows saved under a single key.
Recall a stage and rcmd focuses, launches and arranges everything in it at once, with each window placed where you left it. Use them to jump between contexts, like a writing setup or everything you need open for one project.
Closing a stage can close its windows, minimize them, or move them off screen, and rcmd can reopen anything it closed the next time you recall the stage.
New Stages section in Settings for trigger keys, the close action and per-stage editing.
rcmd can take over ⌘Tab and ⌘` and run its own window cycle instead.
Each Tab press moves to the next most recently used window. Typing during the cycle filters by fuzzy match on app name and window title.
rcmd can switch to a Space by number straight from the keyboard. With instant switching Pro, you land on the target Space without the macOS slide animation.
Small Space indicators sit next to the rcmd icon in the menubar so you can see which Space you are on and which number takes you elsewhere. Windows can also be sent to another Space Pro with ⌥ Right Option + 0-9.
The cursor warps to the app rcmd just brought forward, so the pointer is already inside the window you are about to use. Especially handy on multi-display setups.
Hold the trigger and rcmd can summon Keylume to overlay your live key bindings on an on-screen keyboard, with light and dark themes that follow your system appearance. One-click install from the Keylume settings tab; everything stays in sync as you reassign keys or focus different apps.
rcmd now ships a companion rcmd command that drives
every feature over a local connection to the running app.
rcmd status
rcmd app focus safari
rcmd window place left-half
rcmd stage activate w
rcmd space switch 3Every command accepts --json for scripting.
All of your assignments, stages and settings now live in a readable
YAML file at ~/.config/rcmd/config.yaml.
Edit it by hand, keep it in a dotfiles repo, or move it between
machines. rcmd config export and
rcmd config import handle backups and transfers.
The first-run flow was rebuilt. It walks you through picking a trigger, granting permissions, resolving key conflicts, and trying out app switching, window switching and the Tab cycle before you start.