Would you take an honest look at how you work with AI?

Illustration generated with ChatGPT from one of my paintings and a written description of my water-first technique.
Role: Solo project: research, product decisions and the build, with AI coding tools
Context
I was working on three projects in parallel. I had different agents asking for my attention every two minutes and I found myself constantly switching between the screens. I was replying to the first one and I saw the new one popping up asking for an answer, then I started building a queue in my head: “first I say yes to this one, then I’ll check the next one, afterwards I’ll reply to the chat on the other project…” and no! Another chat replied faster than expected. I realized I was lowering my bar and started to say yes to most of the options the AI was suggesting to me. Nothing broke, it mostly led to some rework later. I didn’t feel good about finding myself in this situation so I decided to start questioning how I worked with AI and what I could do about it.
To have an honest look, I needed a Mirror. Since I couldn’t find one that fitted my needs I decided to build it myself.
Problem
The answers sound convincing and most of the time nothing breaks, so nothing tells you when you’ve stopped checking. I wanted to know if that was only me.
Discovery first
Before building more, I asked other people about their habits: two rounds of an open questionnaire (15 replies, then 9) and conversations with people in my bootcamp. Some of it matched my story. 5 people had followed an AI somewhere they never meant to go, and 12 had learned to use AI from advice about the prompt, never about themselves. Some of it didn’t. The theme people raised most was framing the work before building, which none of Mirror’s numbers measure, and in the second round most people said they check what the AI gives them. Nothing in the product has changed because of the forms yet.
What I built
- A local tool that reads Claude Code, Codex and Cursor session logs and shows four numbers: challenge rate, approvals, delegation depth, focus. Comparisons are only with your own earlier days
- A report of your own weeks, opened with
/mirror:reportin Claude Code or$mirror:reportin Codex. It is mobile first, like everything I build: no button under 44 px, checked in a browser at phone width, not on a real phone - A plugin for Claude Code and Codex: after a run of messages without a question or pushback, it holds that one message and shows one line to you, never to the model. Enter sends it anyway
- No network code. A test fails if a networking library is imported. Messages are labelled by simple rules as they are read and are not kept

The nudge in a real Claude Code session. Enter sends the message anyway.

The report at phone width, built from made-up data.
Evaluation
I labelled 154 of my own messages by hand and checked the rules against them. They get the exact label right 58% of the time. On the one decision the nudge depends on (did I ask or push back, or not?) they are right 86% of the time. One labeller, so it is a rough check.
I then read 30 messages the rules got wrong and found 7 kinds of mistakes. I tried a fix, but on messages I had set aside for testing beforehand, it scored 64% against 68% for the current rules, so I kept the old rules. The 84 automated tests run on macOS, Linux and Windows.
What I changed along the way
- I switched my own trigger from an unbroken streak to the share of my last 20 messages without a question or pushback, because one question reset the whole count. The streak stays the default; the share is a setting
- In my setup, half of the nudges are held back at random, so I can compare what I did with and without one. It is off by default. The success bar was written before any result: +10 points in how often I act on a nudge
- I tried four ways to show the nudge. A system message never appeared, a macOS notification got missed, and passing it through Claude made it sound like the AI talking. Holding the message once, in the chat, was the only one that reached me
- When I showed Mirror to a product strategy writer, his point was that asking people to adopt a new habit is the weak side. So I planned a weekly moment that rides on a habit people already have: opening their AI tool after a break. Planned, not built

Mirror’s status in a live Codex session. Six shown and three held back is a direction, not a result.
First-run quiz
A one-time quiz on a new install, in Claude Code and Codex, once there are about 30 messages. Before any numbers, the first report asks for four guesses: how often you push back, how often you just say “ok”, how much the AI does per message, and how many approvals come in under 15 seconds. Then it shows each guess next to what Mirror counted, as a gap, not a score. The guesses stay in the page.

The quiz, then the reveal. Screenshots use made-up data.
Every question has to match a number Mirror really measures. I dropped “how often do you check an answer?” because Mirror can’t see checking, even though it is what most people in the second questionnaire said they do. The first version used buttons and “0.5 of 10”; I changed it to one question per screen and typed numbers after trying it myself. Only I have used it so far, so I don’t know yet whether people’s guesses differ from their logs.
Limits
- One user so far: me. I shared it with a few friends and a product strategy writer, with no feedback on using it yet
- At about 0.7 nudges a day, the hold-back test needs roughly two months to reach 40 moments, so there is no result yet
- Cursor logs have no reply times, so quick approvals cannot be measured there
- Web and phone chats leave no local log, so Mirror can’t see them
Key tradeoff
Mirror would be more accurate with an AI model reading your messages. I chose simple rules and no network instead, because privacy first is one of my principles. There is a second reason: a tool that measures how people work with AI could easily become a way to rate employees. Mirror only compares you with yourself and sends nothing. If you want to share, the share card holds numbers only, and you pass it on yourself. The cost for me: I can only study how the numbers change across people if they choose to send them.