BTT + Trackpad Gestures

Heaviest stack for the main thread of the target process:
11 start + 6992 (dyld + 130560) [0x1877dbe00]
11 NSApplicationMain + 880 (AppKit + 18352) [0x18c04f7b0]
11 -[NSApplication run] + 368 (AppKit + 180540) [0x18c07713c]
11 -[NSApplication(NSEventRouting) nextEventMatchingMask:untilDate:inMode:dequeue:] + 72 (AppKit + 12379580) [0x18cc195bc]
11 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688 (AppKit + 12380336) [0x18cc198b0]
11 _DPSNextEvent + 576 (AppKit + 233604) [0x18c084084]
11 _DPSBlockUntilNextEventMatchingListInMode + 228 (AppKit + 7230300) [0x18c73035c]
11 _BlockUntilNextEventMatchingListInMode + 48 (HIToolbox + 2400588) [0x194bc814c]
11 ReceiveNextEventCommon + 488 (HIToolbox + 788668) [0x194a3e8bc]
11 RunCurrentEventLoopInMode + 320 (HIToolbox + 775520) [0x194a3b560]
11 _CFRunLoopRunSpecificWithOptions + 532 (CoreFoundation + 1372612) [0x187d281c4]
11 __CFRunLoopRun + 820 (CoreFoundation + 510036) [0x187c55854]
11 __CFRunLoopDoSources0 + 232 (CoreFoundation + 515120) [0x187c56c30]
11 __CFRunLoopDoSource0 + 172 (CoreFoundation + 515780) [0x187c56ec4]
11 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 28 (CoreFoundation + 515888) [0x187c56f30]
11 UC::DriverCore::continueProcessing() + 84 (UpdateCycle + 4852) [0x27ee8c2f4]
11 stepIdle + 608 (AppKit + 9907524) [0x18c9bdd44]
11 CA::Transaction::commit() + 316 (QuartzCore + 9168) [0x191c863d0]
11 CA::Transaction::run_commit_handlers(CATransactionPhase) + 120 (QuartzCore + 15784) [0x191c87da8]
11 NSDisplayCycleFlush + 656 (AppKit + 901088) [0x18c126fe0]
11 NSDisplayCycleObserverInvoke + 168 (AppKit + 901988) [0x18c127364]
11 __NSWindowGetDisplayCycleObserverForLayout_block_invoke + 364 (AppKit + 904800) [0x18c127e60]
11 -[NSWindow(NSConstraintBasedLayoutInternal) layoutIfNeeded] + 240 (AppKit + 17045368) [0x18d08c778]
11 -[NSWindow(NSConstraintBasedLayoutInternal) _layoutViewTree] + 120 (AppKit + 17044832) [0x18d08c560]
11 -[NSView layoutSubtreeIfNeeded] + 96 (AppKit + 517904) [0x18c0c9710]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 -[NSView _layoutSubtreeIfNeededAndAllowTemporaryEngine:] + 100 (AppKit + 518016) [0x18c0c9780]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __56-[NSView _layoutSubtreeIfNeededAndAllowTemporaryEngine:]_block_invoke + 908 (AppKit + 14038428) [0x18cdae59c]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 684 (AppKit + 14035716) [0x18cdadb04]
11 -[NSView _layoutSubtreeWithOldSize:] + 100 (AppKit + 519076) [0x18c0c9ba4]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 __36-[NSView _layoutSubtreeWithOldSize:]_block_invoke + 372 (AppKit + 14035404) [0x18cdad9cc]
11 _NSViewLayout + 96 (AppKit + 519184) [0x18c0c9c10]
11 NSPerformVisuallyAtomicChange + 128 (AppKit + 500440) [0x18c0c52d8]
11 ___NSViewLayout_block_invoke + 624 (AppKit + 14077144) [0x18cdb7cd8]
11 ??? (AppKit + 5414264) [0x18c574d78]
11 ??? (AppKit + 5412652) [0x18c57472c]
11 ??? (AppKit + 5653696) [0x18c5af4c0]
11 ??? (AppKit + 5653656) [0x18c5af498]
11 -[NSTableView layout] + 152 (AppKit + 784736) [0x18c10a960]
11 -[NSTableRowData updateVisibleRowViews] + 600 (AppKit + 787012) [0x18c10b244]
11 -[NSTableRowData _keepTopRowStableAtLeastOnce:andDoWorkUntilDone:] + 248 (AppKit + 15409620) [0x18cefd1d4]
11 __59-[NSTableRowData _automaticRowHeightsUpdateVisibleRowViews]_block_invoke + 40 (AppKit + 2495760) [0x18c2ac510]
11 -[NSTableRowData _updateVisibleRowEntries] + 640 (AppKit + 788460) [0x18c10b7ec]
11 -[NSTableRowData _addRowViewForVisibleRow:] + 316 (AppKit + 790504) [0x18c10bfe8]
11 -[NSTableRowData _addRowViewForVisibleRow:withPriorView:] + 268 (AppKit + 790976) [0x18c10c1c0]
11 -[NSTableRowData _preparedRowViewForRow:storageHandler:] + 148 (AppKit + 791288) [0x18c10c2f8]
11 -[NSTableRowData _initializeRowView:atRow:] + 328 (AppKit + 796668) [0x18c10d7fc]
11 -[NSTableRowData _addViewToRowView:atColumn:row:] + 232 (AppKit + 804776) [0x18c10f7a8]
11 -[NSTableView(NSTableViewViewBased) makeViewForTableColumn:row:] + 176 (AppKit + 807060) [0x18c110094]
11 -[NSTableView(NSTableViewViewBased) _delegate_viewForTableColumn:row:] + 96 (AppKit + 1465812) [0x18c1b0dd4]
11 ??? (BetterTouchTool + 8148216) [0x1054594f8]
11 ??? (BetterTouchTool + 8119796) [0x1054525f4]
11 ??? (BetterTouchTool + 8118048) [0x105451f20]
11 ??? (BetterTouchTool + 7105772) [0x10535acec]
11 ??? (BetterTouchTool + 7070212) [0x105352204]
11 ??? (BetterTouchTool + 7090928) [0x1053572f0]
3 ??? (BetterTouchTool + 474660) [0x104d07e24]
3 -[NSString longLongValue] + 76 (Foundation + 280224) [0x18948a6a0]
1 objc_msgSend$length + 20 (Foundation + 16589396) [0x18a418254]

Process: BetterTouchTool [21647]
UUID: 3B78F7F1-65E6-3171-BC52-701B0EAEC80B
Path: /Applications/BetterTouchTool.app/Contents/MacOS/BetterTouchTool
Identifier: com.hegenberg.BetterTouchTool
Version: 6.573 (2026061010)
Team ID: DAFVSXZ82P
Is First Party: No
Beta Identifier: C077A8C2-67AC-5437-8613-10BE17A939A7
Shared Cache: FF7119A7-F64D-305D-8135-7E6EB1C207D1 slid base address 0x1876a8000, slide 0x76a8000 (System Primary)
Architecture: arm64
Parent: launchd [1]
UID: 501
Memory Limit: 0MB
Jetsam Priority: 100
Footprint: 122.60 MB
Time Since Fork: 1295s
Num samples: 11 (1-11)
CPU Time: 1.001s (4.0G cycles, 26.9G instructions, 0.15c/i, 3.99GHz avg)
Note: Unresponsive for 575 seconds before sampling
Num threads: 7
Note: 2 idle work queue threads omitted

Hi All,

I bought BTT because I’ve heard great things about it and wanted to really make the most of my trackpad. I’ve tried to create trackpad gestures a few times, but it seems to hang almost every time. I like the consistency, though. Let me explain what happened in more detail. I don’t have a lot of patience when I sit down to create gestures with the old UI, so I made a JSON file and tried to import it. Unfortunately, there’s no way to check if the imported JSON is correct because there’s no parser available. I asked about it on the community forum, but it didn’t get the developer’s attention.

With the latest version 6.573, I decided to give it another shot. Instead of importing JSON, I thought, ‘Why not use the AI Integration that BTT offers?’ So, I connected Claude and gave it a simple but heavy prompt: ‘Create the most commonly used trackpad gestures for VS Code, Xcode, Safari, Word, Excel and PowerPoint’. After about five minutes, BTT froze. I thought it froze because it was taking too long to run. After about 15/20 minutes of waiting, I closed the application and restarted it. Now, when I restart BTT, it hangs. I was happy because it didn’t disappoint me by working perfectly.

I tried to log a bug report on the community forum, but even the website hung while I was attaching the crash report. Maybe my stars and BTT aren’t aligned properly.

I think in this case the AI might have hallucinated a wrong format for keyboard shortcuts and the keyboard shortcut renderer didn't like that.

6.582 alpha (uploading) might resolve the hang, but the generated actions will not work if the AI didn't correctly understand the shortcut format. I slightly updated the instructions to make this scenario more clear for the LLM. Which model did you use?

https://folivora.ai/releases/btt6.582-2026061211.zip

Hi Andreas,

Thanks for your reply. I’m using Claude CLI with Sonnet 4.6 and I think I need to reset BTT and delete any presets it’s created.

As you suggested, I updated to the 6.583 alpha version and was able to delete some presets.

I’d really appreciate it if you could take a look at the JSON parser when AI tools create presets. I tried creating new presets again and it worked. Thanks for the update.

yep, this ai trigger generation is very much beta. BTT has long had a parser, the problem is it would need a validator that returns meaningful messages to the AI in addition to that. This is very complicated to achieve in BTT, but is something I‘m actively working on.