Introducing Diapason
Photograph by Dalibor Karlović
← Back to writing

Introducing Diapason

If you're as confused by musical cutlery as I am, Diapason is the right fork to get the tune out of your head and into a MIDI file.

If you’re anything like me, you love music.

You constantly listen to it while working or relaxing, you whistle some while riding your bike, you hum it to yourself while showering.

Unfortunately, you don’t play it on an instrument because life hasn’t found it necessary to burden you with the ability to do so. You did at some point buy a second-hand guitar, went through some lessons, but that didn’t last because your progress was much slower than you’d hoped for. You’ve since forgotten all the chords, and it’s sitting in a closet somewhere next to the umbrellas.

That’s a shame because you keep having various tunes stuck in your head and have no real way to get them out. If you want to make a tune, you need to go to BandLab and click on random keyboard keys until it sounds right because you don’t read/write notes or know what “in key” means.

No more!

What’s Diapason?

Diapason is a small in-browser tool which allows you to whistle or hum a tune into your mic, then have it intuit what you were going for as best it can, giving you a solid MIDI file.

The name comes from diapason, which is a tuning fork in Italian and French.

Features include:

Try it yourself

This is a fully functional demo:

How was Diapason built?

Diapason was built in a fully agentic way (AKA vibe coded) to test out various state-of-the-art approaches and skills available for this type of development. The agents I used were Anthropic’s Claude Code using opus-5.5 and OpenAI’s Codex using sol-6.1.

The primary skills used were superpowers and impeccable. The artifacts the skills created can be seen in the repo itself.

Rules are executable

The rule I’ve used on this and other projects with great success is realizing coding agent’s AGENTS.md is just a pinky promise: it’s just a text file stating a goal. The agent doesn’t need to follow that goal, it might choose not to or forget about it as the context gets filled.

This is why my AGENTS.md always includes:

This rule applies to every suggestion, refactor, or new pattern you introduce — always.

Executable tool > Agent skill > Written guideline > Nothing

When proposing or implementing any rule, convention, or best practice, assign it to the highest tier you can reach.

Agents must figure out a way to make the work happen without themselves doing it. If there’s a tool which can find an issue (e.g. oxlint with a custom AST rule), the agent must prefer that over just updating a skill file or doing it manually.

This makes the rules executable by the developer, CI and subsequent agentic sessions, highly improving the output.

Issues while building

A large gap in understanding the domains means my prompts are very verbose and hand-wavy due to me needing to explain a musical concept with paragraphs of text, upon which the agent says

You probably meant anacrusis.

to which I got to be honest - I’m not exactly sure that I did. Maybe?

If this was software engineering, it would be a word like monotonic, invariant or debounce: it’s a single word which covers two paragraphs of semantics, saying the word is not only very efficient, it’s super precise. This is because all those words in those two implicit paragraphs are transferred atomically (another such word).

You rely on the agent being able to recognize your intent by your vague (and probably partially incorrect) descriptions of things you don’t know the names of.

Conclusion

In the future, not knowing the domain you’re working in well enough to communicate within it efficiently, but also not having the incentive to learn it deeply enough to be able to will be the key to most of the problems we’ll encounter.

Strict, executable guardrails are what keep agents on track. With them in place, we actually can build in domains we’re not experts in, and the result will be just like my whistling: close enough to work.

Dalibor Karlović
Explore my writing