The brain advertises a service with several characteristics, there’s an exchange done where the brain id has to be entered to avoid ad-hoc connections, then you essentially end up with two bidirectional pipes that act the same as the two USB CDC channels. One is for admin messages, to download programs etc. the other is for IO to/from user programs.
As far as user code is concerned, the same stdio commands are used. Using std::cout will direct to whatever is connected, if USB and BLE are both active, then the data will go to both.