The US Velux KLI300 series skylight/skylight shade remotes have an annoying design flaw, where they do not have any handling for dropped packets. For instance, if a remote is bound to 4 skylights, sometimes a button press will only trigger 2 or 3 of them.
This tutorial here shows one can solder wires onto each of the remotes buttons and the +/- battery terminals pretty easily (a labelled image from the tutorial is saved here in case it goes down): https://chiragdesai.uk/automating-velux-blinds-with-home-assistant/
From there, I've built a circuit shown in this diagram, with an ESP32C3, 3 10k resistors, and a capacitor:

The ESP32C3 is normally in a deep sleep mode. When a button on the remote is pressed, it wakes up and retriggers the button a few times before going back to sleep.
In this repo there is also some test code, for debugging reading the button inputs, as well as code for a more basic breadboard test.