Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Debug logging, Debug menu, runtime pitfalls, typing-latency-sensitive paths, SwiftUI list snapshot boundaries, OS-version repros, and local visual iteration for cmux. Use when adding debug probes, diagnosing UI/runtime issues, touching terminal rendering, tab/sidebar list views, drag/drop UTTypes, or using the Debug menu.
.claude/skills/manaflow-ai-cmux-debugging/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -29% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -18% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -53% | 0% |
Put debug event instrumentation (keys, mouse, focus, splits, tabs) in the unified DEBUG build log. This is not a requirement to log every new code path; most probes belong to a dogfood debug loop and are removed before merge.
bashtail -f "$(cat /tmp/cmux-last-debug-log-path 2>/dev/null || echo /tmp/cmux-debug.log)"
/tmp/cmux-debug.log; tagged (./scripts/reload.sh --tag <tag>) to /tmp/cmux-debug-<tag>.log.reload.sh writes the current log path to /tmp/cmux-last-debug-log-path and the selected dev CLI path to /tmp/cmux-last-cli-path, and points /tmp/cmux-cli and $HOME/.local/bin/cmux-dev at that CLI.Packages/macOS/CMUXDebugLog/Sources/CMUXDebugLog/DebugEventLog.swift. App shim: Sources/App/DebugLogging.swift. Both are #if DEBUG, so every call site must be wrapped in #if DEBUG / #endif.cmuxDebugLog("message") timestamps and appends in real time. A 500-entry ring buffer backs it; CMUXDebugLog.DebugEventLog.shared.dump() writes the full buffer to file.AppDelegate.swift (monitor, performKeyEquivalent); mouse/UI events inline in views (ContentView, BrowserPanelView).focus.panel, focus.bonsplit, focus.firstResponder, focus.moveFocus, tab.select, tab.close, tab.dragStart, tab.drop, pane.focus, pane.drop, divider.dragStart.DEBUG builds get a Debug menu in the macOS menu bar. When the user says "debug menu" or "debug window" they mean this, not defaults write.
Debug > Debug Windows holds panels for tuning layout, colors, and behavior, listed alphabetically with no dividers. To add one: create an NSWindowController subclass with a shared singleton, register it in the "Debug Windows" menu in Sources/cmuxApp.swift, and back it with a SwiftUI view using @AppStorage bindings for live changes.
Resources/Info.plist under UTExportedTypeDeclarations.ghostty_surface_draw loop; rely on Ghostty wakeups/renderer to avoid typing lag.WindowTerminalHostView.hitTest() in Sources/TerminalWindowPortal.swift runs on every event including keyboard. Add no work outside the isPointerEvent guard.TabItemView in Sources/ContentView.swift uses Equatable plus .equatable() to skip body re-evaluation during typing. Do not add environment/store/binding reads without updating == and keeping .equatable() at the call site.TerminalSurface.forceRefresh() in Sources/GhosttyTerminalView.swift runs on every keystroke. No allocations, file I/O, or formatting.SurfaceSearchOverlay must be mounted from GhosttySurfaceScrollView in Sources/GhosttyTerminalView.swift, not from SwiftUI panel containers.LazyVStack / LazyHStack / List / ForEach boundary receive immutable snapshots plus closures, never an observable store.body must not mutate state or schedule store writes.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | pass→pass | 10,594 | 3,933 | -63% | 1 | 1 | 0% | 1,817 | 1,567 | -14% | 0 | 0 | — |
case-20 | pass→pass | 12,696 | 7,870 | -38% | 1 | 1 | 0% | 2,276 | 2,458 | +8% | 0 | 0 | — |
case-21 | pass→pass | 16,838 | 14,818 | -12% | 1 | 1 | 0% | 3,000 | 3,857 | +29% | 0 | 0 | — |
case-01 | fail→pass | 25,815 | 6,251 | -76% | 1 | 1 | 0% | 2,756 | 2,047 | -26% | 0 | 0 | — |
case-02 | fail→pass | 13,821 | 5,264 | -62% | 1 | 1 | 0% | 2,796 | 1,999 | -29% | 0 | 0 | — |
case-03 | fail→fail | 21,418 | 3,269 | -85% | 1 | 1 | 0% | 3,310 | 1,380 | -58% | 0 | 0 | — |
case-04 | fail→pass | 12,333 | 3,306 | -73% | 1 | 1 | 0% | 2,306 | 1,740 | -25% | 0 | 0 | — |
case-05 | fail→pass | 16,192 | 8,172 | -50% | 1 | 1 | 0% | 3,007 | 2,479 | -18% | 0 | 0 | — |
case-06 | fail→pass | 19,038 | 2,534 | -87% | 1 | 1 | 0% | 2,861 | 1,355 | -53% | 0 | 0 | — |
case-07 | pass→pass | 14,589 | 3,518 | -76% | 1 | 1 | 0% | 1,588 | 1,562 | -2% | 0 | 0 | — |
case-08 | fail→pass | 10,284 | 7,471 | -27% | 1 | 1 | 0% | 1,869 | 2,283 | +22% | 0 | 0 | — |
case-09 | fail→pass | 16,010 | 3,607 | -77% | 1 | 1 | 0% | 2,185 | 1,571 | -28% | 0 | 0 | — |
case-10 | pass→pass | 16,198 | 5,398 | -67% | 1 | 1 | 0% | 2,762 | 1,988 | -28% | 0 | 0 | — |
case-12 | pass→pass | 9,672 | 2,304 | -76% | 1 | 1 | 0% | 1,556 | 1,338 | -14% | 0 | 0 | — |
case-13 | fail→pass | 12,339 | 2,454 | -80% | 1 | 1 | 0% | 2,012 | 1,405 | -30% | 0 | 0 | — |
case-14 | fail→pass | 14,583 | 6,033 | -59% | 1 | 1 | 0% | 2,604 | 1,946 | -25% | 0 | 0 | — |
case-15 | fail→pass | 13,211 | 3,071 | -77% | 1 | 1 | 0% | 2,105 | 1,444 | -31% | 0 | 0 | — |
case-16 | fail→pass | 14,688 | 12,276 | -16% | 1 | 1 | 0% | 2,271 | 1,984 | -13% | 0 | 0 | — |
case-17 | fail→pass | 19,099 | 3,651 | -81% | 1 | 1 | 0% | 1,672 | 1,679 | +0% | 0 | 0 | — |
case-18 | fail→pass | 10,470 | 2,977 | -72% | 1 | 1 | 0% | 1,652 | 1,350 | -18% | 0 | 0 | — |
case-19 | pass→pass | 11,095 | 5,192 | -53% | 1 | 1 | 0% | 2,110 | 2,149 | +2% | 0 | 0 | — |
case-22 | pass→pass | 10,217 | 7,985 | -22% | 1 | 1 | 0% | 2,053 | 2,659 | +30% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.