I have this setup: XLR mic → ext. USB audio interface → Mac. The name of the audio interface (UMC22) has a trailing space, which macOS gets confused by every other day. It sanitizes the stored name, can’t find the device anymore, removes it, then finds a “new” device it doesn’t know and re-adds it. The mic works fine, but setting the audio interface as the default for anything doesn’t, because macOS keeps forgetting it.
This has been going on forever, but it has gotten progressively worse with every major macOS update. (Don’t at me; I’ll keep using macOS because I write software for it-this is how I make my money.) Since macOS 26 rolled around, it happens every two days-basically every time I dock the MBP.
I finally got fed up and started looking into a new USB mic — €100+ for quality products, naturally — which pissed me off because I like my existing mic; it’s good, and it works. It’s just that shitty interface issue + macOS, damn it.
In the past, I’d tried setting up an aggregate (virtual) audio device that contained the audio interface, but that didn’t change anything. The interface would vanish and reappear as a new device, and the aggregate device wouldn’t know about it. I had to manually add the new device to the aggregate — no good.
Anyway. Today I asked Claude to research that problem for me. It did and came back with a lot of technical detail, which boiled down to “Carlo, you were right about what’s going on."
But all my describing the issue, plus the research, gave Claude a metric shit-ton of insight, so I then asked it to write me a Swift CLI tool that would let me add a named device to an existing aggregate device. And it did! When it was almost done, the 5-hour limit window struck, so I handed the prototype script over to Kimi K2 Thinking1, and it hammered out the rest for me.
Frens, I was tickled fancy, let me tell you.
Now I have a script that runs automatically in the background every time the USB device is connected. And since the aggregate doesn’t change (it’s just updated!), I can use that as the default device.
Sure, without Claude and K2, I could’ve written that script myself, but it probably would have taken several days of my free time (since I have a day job) for research, trial, and error. This way, it took less than an hour to fix this specific issue.
And I can keep using my old stuff. Win!
-
It’s a monster! A slow, slow monster. ↩︎