← THE BUILD LOG
002TOOLING

A markdown editor an agent can type into

A mechanical keyboard and a fountain pen side by side on dark wood.
A mechanical keyboard and a fountain pen side by side on dark wood. Illustration.

What it is

Omawrite is a fork of the markdown editor that ships with Omarchy. It adds tabs, a sidebar, image paste, wikilinks, a focus mode, and a command line over D-Bus. The last one is the reason the rest exist.

158 commits since 21 June 2026, and about 105 of them are ahead of upstream. 112 tests pass on every build.

Why I built it

I write in one window and run agents in another, and the two were fighting over the same files. An agent would rewrite a document while I had it open, and whichever of us saved last won. That is a silly way to lose a paragraph.

The fix I wanted was not an editor plugin. It was for the editor to have an address: something an agent could speak to, so it could ask what is open, open something else, or reload a file it had just changed, without going round the filesystem and hoping.

The problem

Merging the upstream work was the part I did not expect to take as long as it did. Twenty-one pull requests had been opened against the original by people who had never seen each other’s branches, and several of them touched the same files for different reasons. I reconciled them by understanding what each was trying to do and rewriting it, rather than resolving conflict markers until the compiler stopped complaining. That is slower and it is the only way the result makes sense afterwards.

The subtler problem was state. Session data on disk and the live window could disagree, and the window was sometimes up to 750 milliseconds behind. If an agent asked what was open and got the answer from the wrong side of that gap, it edited the wrong thing. The decisions log has the version of that story with the reasoning in it.

What I learnt

A tool becomes a different tool when something other than a human can drive it. I set out to add a command line to an editor and ended up with a component in a workflow, and most of the design decisions after that point were about which of us is allowed to be authoritative about what.

I also learnt that reconciling other people’s pull requests is a good way to read a codebase. Twenty-one people each showed me a thing they thought was worth fixing, which is a better map of a project’s weak points than reading it cover to cover.

The wider thing is that I would not have started this two years ago. Forking an editor meant owning it, and that was the wrong use of anyone’s evenings. The sum has changed. What has not changed is who is answerable when it breaks, and the only reason I can be this relaxed about how it was built is that if something slips past the tests, the person affected is me. That is about as small as a blast radius gets. I have written about where that argument stops holding in Blast radius.

What’s next

Nothing large. It does the job, it is in use every day, and it is still being pushed. The next real change will come from wanting something while writing, which is how all of the others arrived.


Built with C++, Qt Quick, QML, D-Bus
JOHN · #AlwaysBuildingSomething