What it is
osu! is a rhythm game whose levels, called beatmaps, are made by its players. n.ot.e is an editor for the levels of its drum mode, osu!taiko: a full authoring tool with a timeline, playback, in-editor testplay, and its own tools for the mode's scroll-speed effects.
It is collaborative in the way Google Docs or Figma are. Several people edit one map at the same time, in the browser with nothing to install, or in native apps for Windows, macOS, Linux, Android and iOS. I started it in July 2026 and release it under my osu! name, Nostril.
The guided tour at note.nostril.io/info shows what it does, one feature at a time. Every demo there is a live editor driven by a script, not a video, and the clips on this page are recorded from it.
How it's built
n.ot.e is built with an agent-driven workflow. I run several Claude Code sessions at once, and they write the code. I decide what gets built and how it should behave, and I review what comes back.
An agent starts every session knowing nothing about the project, and it cannot see the screen or hear the audio. The project's rules and decisions are written into the repository for it, and more than 2,700 tests hold it to them.
That leaves two slow steps: getting an idea clear enough to hand over, and checking that what comes back matches the real game. I built a tool for each, with the same workflow. It is AI development used to speed up AI development.
- The idea triageTakes a rough idea to one that is ready to hand to an agent.
- OsuTaikoCompareMeasures n.ot.e against the real game, frame by frame, so an agent can check its own work.
The idea triage: from a napkin to a merged branch
Some of my best ideas start on a napkin during lunch. When one is ready to hand to an agent as it stands, I do that from wherever I am: I use the Claude Code mobile app heavily when I am away from my desk.
The idea triage, at note.nostril.io/develop, is for the ideas that are not there yet. It is a different interface to Claude that I built for low-stakes brainstorming, and its job is to take a rough idea to one that is ready to prompt.
I jot notes on its napkin, as in a notes app. Claude reads the code and turns each note into a card: how it read the note, what the code already does, what it would build, and how ready the idea is. What it needs from me arrives as multiple-choice questions, so working an idea through takes a few taps.
From there a card can start a Claude Code session on a branch of its own, and it follows that branch through to merge and release. A read-only demo with sample cards is public.
OsuTaikoCompare: how I matched it with the real game
An editor is only useful if what it shows is what the game will do. n.ot.e's Full Testplay reproduces the original client's gameplay screen, down to the health bar, the mascot and the map's storyboard. Whether it really matches is a question an agent cannot answer by looking, and one I can only answer slowly.
OsuTaikoCompare is a harness I built to answer it by measurement. It plays one map in the real clients, osu!stable and osu!lazer, and in n.ot.e, and compares their frames at identical moments of the map: side by side, stacked, or as a per-pixel difference.
The trick is the clock. The harness adds a small machine-readable timecode to the test map, so every frame captured from a real client says which moment of the map it shows. n.ot.e is then driven to render exactly those moments, and its own timecode is read back to prove that it did.
It is made for agents as much as for me. Every command ends with one JSON object holding the facts of the run, the moments that differ most and their images, so a session can change the code, run the comparison and read the result on its own. And it had to be fast, because a slow experiment does not get run: rebuilding the pipeline took a standard run from 17 min 52 s to 1 min 21 s.
- A test mapAny map, with a timecode strip injected into its storyboard.
- The real clientsosu!stable and osu!lazer play it in real time, sandboxed and offline. Their frames are captured losslessly.
- LabellingEvery captured frame is tagged with the map time decoded from its timecode.
- n.ot.e, drivenn.ot.e renders exactly those map times, frame by frame, and proves it with its own timecode.
- ComparisonFrames from the same instant are paired: side by side, stacked, or as a per-pixel difference.
- ReportThe facts, the most different moments and their images, as JSON for a person or an agent.