.claude/skills/verify-miri/features/setup-checks.md
Setup checks
Settings > Setup lists what Miri needs before it can manage windows. Three checks block start: Accessibility permission, Displays have separate Spaces, and Other window managers. Five checks only warn: Window-snapping apps, Stage Manager, macOS window tiling, and the four-finger and three-finger strip swipe conflicts. A check that blocks start keeps the engine stopped, and Miri starts it once the problem is gone.
Sub-features
competing-manager: a running Paneru, AeroSpace, Amethyst, or yabai showsQuit <name> before starting Miri.andBlocks start. Miri finds Paneru and AeroSpace by bundle ID or process name, Amethyst by bundle ID only, and yabai by process name only (SetupChecker.swift).snapping-app: a running Rectangle, Loop, or Magnet shows a warning that names it, and does not block start. Miri finds each app by bundle ID only, so a stand-in process cannot trigger it. Open the real app, then pressCheck Again. To move a window without a key press, useopen -g "rectangle://execute-action?name=maximize"oropen -g "loop://direction/maximize".check-again:Check Againreruns every check. It only refreshes the rows, and does not stop an engine that already runs.auto-start: Miri reruns the checks every 2 s while it waits, and starts the engine without a click when no check blocks start.permissions: the Accessibility row. Never change it: the command guard blockstccutil reset, and the permission selftest covers it.
How to get to it (user POV)
- Settings > Setup.
- The Set Up Miri window on first launch, which shows the status, the checks that block start, and the strip swipe choice.
- The General page status, which reads
Waiting for setup: <title of the first blocking check>while Miri waits for setup.
Driving it with verify-miri
Preconditions:
The baseline from the index, with Settings open through
V settings.No real competing window manager runs.
V doctorlists only Miri processes, so also check withpgrep -lx yabai.Clean state. Run
V ax test press Setup, thenV ax test dump | rg -A2 "Other window managers". It showsPassed.Add a blocker. Run
V standin yabai, thenV ax test press "Check Again". The dump showsQuit yabai before starting Miri. Miri leaves yabai's configuration untouched.andBlocks start.Blocked start. Run
V ax test press General, then pressStop Window ManagementandStart Window Management.V ax test statusprintsWaiting for setup: Other window managers, the General page showsOpen SetupandCancel Automatic Startinstead of Start, andV doctorshows no engine.Auto-start. Stop the stand-in by its process ID, which
log.txtrecords. Within 4 s a new engine runs, and the status readsManaging windows.
Gotchas
- Never copy an Apple binary to make the stand-in. macOS kills the copy at launch with exit status 137, so the check never sees it.
V standincompiles its own. - A stand-in started in a tool call's background job dies when that call ends.
V standindetaches it and records it forV end. - A stand-in cannot trigger the Amethyst check, which matches only a bundle ID.
V ax test statusprints nothing while the Setup page shows, because that page has no status text. PressGeneralfirst.