The interesting part ended up being the state machine. Claude Code fires PermissionRequest and PreToolUse within ~100μs of each other, out of order, and PostToolUse fires after every tool call (not just approvals). Getting the display to not flicker took more iterations than I'd like to admit.
MIT licensed: https://github.com/terraboops/lfg
brew tap terraboops/tap && brew install lfg
Happy to answer questions about the BLE protocol, the sprite system, or the state machine!