TakeLab is a Bitwig Studio extension I wrote in Java. I do not work in Java, and I had never written a Bitwig extension before. This is how I did it.
It starts in a notepad
Before I open any AI tool, I open my notepad. I do this for every project. I went feature by feature with what I already knew about the Bitwig extension API, described each one, and tried to solve the problems on paper first. What comes out of that is a spec, and the spec is what makes a good prompt.
Planning mode before any code
Then I opened Claude Code and started in planning mode. I asked it to interview me about the plan and find the gaps in what I had written. It found some, and we closed them there. After that the execution was clean and took few iterations.
I use Claude Code because I am familiar with it and I already pay for the Max plan. For this project I used Fable. The first version ran in minutes. The version I actually wanted, with no bugs, took an hour or two.
Testing was the hard part
This is not web. It is a specific piece of software, so I had to test a lot to keep the quality up. The loop was better than I expected: I compiled after every change and Bitwig refreshed the extension on its own.
Bitwig cannot read your keyboard
The interesting problem was not the code. Bitwig extensions cannot listen for specific key presses. I wanted a double tap on the spacebar to retrigger the take, and there is no way to read that key. What TakeLab actually watches is Bitwig’s transport state, not the keyboard.
Reading the Java
I read the code that came out. My object-oriented programming classes in college were in Java, about ten years ago, and I built a few things in it then. Anyone who programs can follow what is happening in a language they do not use. I could have written this myself with enough time, but most of that time would have gone to relearning small things.
What is missing
There is not much I would change in the extension. The better version of this is Bitwig building it themselves, because they have the source and MIDI could work exactly the way audio already does. They do not seem to be working on it. I wanted the feature, and the forum has been asking for it for years.
Open source, MIT: github.com/iuri1911/takelab