kovidgoyal/kitty · warning · SystemExit
This must be run as kitten desktop-ui
Error message
This must be run as kitten desktop-ui
What it means
On macOS, kitty failed to obtain the UNUserNotificationCenter singleton because +currentNotificationCenter threw an NSException (kitty/cocoa_window.m:470). This happens when the app has no bundle information - UNUserNotificationCenter refuses to run for processes without a valid bundle identifier, which kitty works around by creating a fake NSBundle.
Source
Thrown at kittens/desktop_ui/main.py:57
)
opt(
'+file_chooser_kitty_conf',
'',
long_text='Path to config file to use for kitty when drawing the file chooser window. Can be specified multiple times. By default, the'
' normal kitty.conf is used. Relative paths are resolved with respect to the kitty config directory.',
)
opt(
'+file_chooser_kitty_override',
'',
long_text='Override individual kitty configuration options, for the file chooser window.'
' Can be specified multiple times. Syntax: :italic:`name=value`. For example: :code:`font_size=20`.',
)
egr()
def main(args: list[str]) -> None:
raise SystemExit('This must be run as kitten desktop-ui')
if __name__ == '__main__':
main(sys.argv)
elif __name__ == '__conf__':
sys.options_definition = definition # type: ignore
View on GitHub (pinned to 6d5d0c4406)
Solutions
- Run kitty from its proper kitty.app bundle (or a complete brew cask install).
- Update kitty to the latest version - the bundle workaround is periodically fixed for new macOS releases.
- Check Notifications in System Settings to confirm kitty is listed; toggling its permission can reset the center.
- If notifications are unneeded, ignore - kitty falls back gracefully (center is nil).
Defensive patterns
Strategy: fallback
Prevention
- Launch kitty via its .app bundle, not the raw binary.
- Update kitty alongside macOS upgrades.
- Check System Settings > Notifications lists kitty.
When it happens
Trigger: Calling the notification path (notify cmdline, OSC 99/777 notifications, remote control) on macOS when the bundle-identifier workaround failed - e.g. sandboxed environments, changed kitty bundle layout, or macOS updates tightening the check.
Common situations: kitty installed outside an app bundle, running the kitty binary directly from a build dir, macOS security changes, or notification center daemon issues.
Related errors
- Must be run as kitten diff
- This should be run as kitten dnd
- Should be run as kitten hints
- This should be run as kitten hyperlinked_grep
- The value {val} is not a valid choice for window_title_bar
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/74780cbda302f379.
Report an issue: GitHub.