I only saw the castle. The mason knows every stone.
Mason is a Mac app that sits in the background and shows how I work across my AI apps. I vibe-code, and I kept finishing things I could not explain. Before I jump to the next project, it makes me look back at what I actually built.
- role
- Gustaf Garnow. Product, UX and visual design, and direction of the build, solo.
- my part
- Every call on what to keep and what to cut. AI coding agents wrote the code.
- what
- A native menu bar app for macOS, its landing page and docs, and a design system.
- proof
- I use it every day · open source, v0.4.0 · one user so far: me
- when
- 2026 · live at mason.tools
- built with
- Claude Code
- Codex
- Grok
- Swift
- Node
- ElevenLabs
Someone asked how I built it. I said three trendy words.
what happenedclose
I got that question about a project of mine, Kammaren. I sat there and said about three trending words: deterministic, script and Vercel? A mason knows exactly how every stone was laid. I don’t. I only see the finished castle, or the cathedral nobody walks into.
So I built a Mac app that watches how I work. It stung.
what stungclose
It started as a hackathon entry: something that sits in the background while I jump between Claude, Cursor, Codex, Grok and a pile of bots, and holds up a mirror. It is called Mason. What stung was that I jumped between programs and tasks more or less all the time. Hyperactive. And then the hours: how many I had spent.
It asked me a question. I typed: I donw know.
whyclose
The first version did what the brief asked: it stopped me in the middle of work and asked me to set a rule. I had just installed it. I did not know what boundary to set, and I did not want to. I wanted something smart, not one more input field with manual work in it.
There was room in the menu bar. So it lives there.
howclose
The first overlay hung over my own windows, and the app was in the way. I took a screenshot, drew a green box around the empty stretch between the menus and the notch, and wrote one line. Now the island lives inside the menu bar, grows left from the notch and covers nothing.
It did not reach the final. I kept building.
whyclose
The product was very useful to me personally. I probably have ADHD, and it was crystal clear that I need something that shows me my flow.
I built a button that rewrites my AI’s rules. Then I took it out.
what happenedclose
Mason notices what I keep telling my agents and proposes it as a rule. The first version had a button that wrote the rule into their instruction files for me. I said: no button that does it for you. Now it shows the words the rule rests on and opens a prompt that is ready and not sent. The agent proposes, I press send. I cut other things the same way: Teach, which I could not explain, and a daily goal that lasted an hour.
161 prompts. One in three said: not that.
howclose
I read this case out of the logs of the build. Every brick is one prompt I wrote to my agents. Red is a prompt where I rejected what they had made. The two towers are the hackathon deadline and the launch. The agents wrote the code. My part was to say what was wrong.
deadline
day three
launch
- asked for
- asked about
- said: not that
- “too much text”
too much text
“Too much text. Show only the simplest. Every screen has 1 to 3 seconds.”
One brick is one prompt I wrote. Step through them with the arrows.
I said “too much text” eight times in eight days.
whyclose
Nobody wrote the rules of this product down first. They are what I kept repeating until it stuck: a screen gets one to three seconds. Mason does the same for anyone who uses it. It notices what you tell your agents again and again, and proposes it as a rule.
The ninth time was about the first draft of this page.
I fell in love with my own metaphor. Nobody understood the wall.
what happenedclose
The landing page was a castle, built brick by brick as you scrolled. I was proud of it. On my phone I wrote: I don’t even understand what is happening. And then: we are a bit too in love with this wall metaphor. What if you don’t get the wall? Now the page starts with the reader’s problem, and the name is in no headline.
The page said nothing leaves your Mac. That was not true.
what happenedclose
I vibe-coded the landing page. An agent wrote “Local-first: nothing leaves your Mac”, it read perfectly, and I let it through. It was live for hours before I checked what the app really does: summaries go to your own AI by default, so something does leave. Nothing in the way I work would have caught it. Now the page says four things can leave, each with its own switch, and what the docs claim is tested against the code.
It shows me how I work. It has not taught me anything yet.
and nextclose
On day three I said it was only confirmation: the mirror showed me, but I did not feel that I learned anything. That is still the open question, and so far I am the only user. Next is five people who have never seen it, and a month of my own days to see whether a mirror changes anything.
in short
A mirror, not a manager.
- Read in one to three seconds
- Nothing to declare
- The last step is yours
- Local-first
- Open source
- Built with AI agents