The Problem

macOS Hot Corners only trigger at the four screen corners and offer a fixed set of system actions. SuperCorners extends that concept with additional trigger zones (middle of screen edges), a wider action library (launch apps, run shortcuts, execute AppleScripts, open URLs), and modifier-key or click-based activation. It targets users who want the corner-trigger paradigm but need more control and automation than the OS provides.

What This Does

SuperCorners is a SwiftUI macOS app (requires macOS 13+) that listens for mouse position and triggers configured actions. The core logic lives in SuperCorners/Actions/: CornerMousePosition.swift detects zone entry, CornerActions.swift dispatches to the appropriate handler, and ActionsLibrary.swift (2,698 lines) defines the action catalog. The UI is split across Views/Main/ (corner configuration, settings, toasts) and Views/Floating Windows/ (calculator, note, color converter, counter).

The app runs as a menu bar component (SuperCornersApp.swift) and requires Accessibility permission to simulate key presses (Utils/KeyPress.swift, Utils/SimulateKeyHelper.swift).

How It Is Wired

Execution starts in SuperCornersApp.swift which instantiates the main ContentView. Mouse tracking flows through CornerMousePosition.swift → CornerActions.swift → the specific action handler in ActionsLibrary.swift. The app touches the filesystem only for user preferences and AppleScript execution; no network calls or database are involved. The widest blast radius is ActionsLibrary.swift — it contains the action definitions, dispatch logic, and most UI logic for the action picker. Changes there ripple across the entire feature set.

Key files by responsibility:

  • Actions/ActionsLibrary.swift — action catalog and dispatch (2,698 lines, oversized)
  • Actions/CornerMousePosition.swift — hit-testing for zones
  • Actions/CornerHotkey.swift — modifier/click activation logic
  • Views/Modals/ActionSetEditor.swift — per-corner action assignment
  • Utils/KeyPress.swift, Utils/SimulateKeyHelper.swift — system interaction layer
  • Views/Floating Windows/ — six utility popovers (calculator, note, etc.)

How To Use It

Setup: Build with Xcode (project file: SuperCorners.xcodeproj). No package manager config present; Homebrew install is documented but requires the upstream cask.

git clone https://github.com/moses-y/SuperCorners
cd SuperCorners
open SuperCorners.xcodeproj

Configuration: Grant Accessibility permission on first launch (required for key simulation). Configure corners/zones in the app's settings UI.

Running it: Build and run from Xcode, or install the release build. The app runs as a menu bar item.

Real-World Use

A developer sets the top-left corner to open a terminal at a specific project directory, the top-right to run a build shortcut, and the bottom edge midpoints to trigger a clipboard history tool. The modifier-key option prevents accidental triggers during normal mouse movement.

Code Health & Issues

Static analysis found 28 issues (19 high, 9 medium) across 4 categories:

  • High — Deep nesting (21 instances) in ActionsLibrary.swift, CornerMousePosition.swift, ContentView.swift: max indentation depth 8, control flow is hard to follow.
  • High — Duplicated code (155 repeated 6-line blocks across 20 files): shared helpers should be extracted.
  • High — Oversized files (2): ActionsLibrary.swift (2,698 lines) and ActionSetEditor.swift need splitting.
  • Medium — High branching density (4 files): CornerHotkey.swift, CornerMousePosition.swift, CornerTitle.swift have 69 branch points over 233 lines.

Repository hygiene: no CI pipeline, no test files despite 35 Swift sources, and three PNG assets exceed 5MB (largest 6.0MB) inflating clone size. A license file is present.

The Bottom Line

SuperCorners is a functional, feature-rich utility with a clear value proposition, but the codebase needs structural work before significant contributions: the oversized action library and duplicated logic will make changes risky. The lack of tests and CI means regressions ship silently. Worth using for the feature set, but treat the code as a prototype, not a stable foundation.