A dark desktop background with a glowing ring at its centre. Beside it, what the agent is doing right now and a short list of what it finished lately. Demo content.

Hex

Project:
Personal, one user
Year:
/ 2026
Role:
Product and interaction design, direction of AI coding agents
Built on:
Claude, OpenClaw, Python, SQLite, plain HTML/CSS/JS

Designing an AI agent you can live with. Hex sees my day and acts in it: it keeps a short list of what needs me, drafts what I would send, and keeps working on my computer between conversations. I designed the product and its interaction rules and directed the AI coding agents that built it. It has one user so far: me.

01 / The problem

An assistant answers. An agent acts.

An agent that acts in your life is a different design problem. It is on all day. It can read your screen and your mail, move your files and write in your name. Done badly it is annoying, then creepy, then dangerous.

I wanted one I could actually live with, so I built it for the only person whose life I'm allowed to test on.

02 / My role

I direct. Agents write the code.

I decide what the product is, how it behaves and where its lines are, and I direct AI coding agents closely. Most of the building is done by Hex itself: it writes and tests its own interface, and I correct what it shows me.

The repository's history starts on September 27, 2026, with about 350 commits in the first five days. Dozens of them open by quoting the correction of mine that caused them.

03 / Decisions

1. Every output needs a home, an action, a way back and a notice.

Early on, Hex sent me long reports in chat. Good work, useless delivery. I told it:

"there's no action on it, there's nowhere it on the dashboard, i don't hear a notification"

Its first fix was a length cap. Its second was one fixed delivery pipe. Both missed. I wanted the agent to keep choosing how to reach me, and to think about the person on the other end.

01A homeWhere will I find it tomorrow?
02An actionWhat can I do with it in one tap?
03A way backHow does my answer reach the agent?
04A noticeWill I know it is there?

The cost: no single channel to learn. The gain: an agent that fits the moment.

2. A tiny list for today, a board for everything else.

One list of what needs me, written like notes from a person: a plain sentence, one line of why, one button. The command that adds an item refuses file names, ids and legal references. Those are the agent's workings, not a note to me.

When that list grew into a giant to-do, I split it. The Board keeps everything in calm lanes. People and plans are notes with no Done button, because a friend isn't a task. The agent's own work sits in a dimmer lane.

The cost: a second place to look. The gain: "needs you" stays small enough to trust.

The Board: four lanes named To do, People and plans, Waiting on others, and I'm handling. Each card is one plain sentence, one line of why, and one main button. Demo content.
The Board. One sentence, one reason, one button. The lane decides which buttons a card gets.

3. Anything in my name waits for my tap.

Drafting is free. Sending is mine. Each draft appears as a familiar compose window that I can edit in place, with one button that names the recipient. If the draft changed after I read it, the send is refused.

The cost: it is slower than letting the agent send. This is the one place a mistake lands on someone else, so I pay the friction.

An email the agent drafted, shown as a compose window. The button reads: Send to idris@example.com? Next to it: Not yet. Below: This sends it from your account, as you. Demo content.
The approval. The second tap names who it goes to.

4. A window that shows one thing at a time.

The desktop widget started as the dashboard in a smaller room. Then it was stacked panels, which didn't work. Now it shows one thing: the agent at rest, the one item that needs me, or the conversation. Everything else is a chip.

Watching the agent's job list felt awkward, so its work moved off my list and onto an ambient canvas behind my desktop icons.

5. Pings that respect what I'm doing.

For a while I had to ask for every update:

"there's no ping, no badge to click on etc. things are treated statically right now"

The first version used system notifications, which a full-screen game hides. Now a pop and a short sound land inside Hex's own window, with a count on the orb and my phone as the fallback. One click opens the exact thing.

My screen is being broadcast, or I'm in VRNothing, until after
On a callIt counts quietly. One ping follows the call
Quiet hoursOnly what is urgent
Away from the deskIt waits for me

6. An off switch that doesn't need the agent to agree.

If I say "hands off", a small program on my own computer stops the part of Hex that can touch it. It runs on a timer, on my side, and does not depend on the agent complying.

Undo sits next to every change. When Hex rearranges my screen, a card says so, with one tap to put it back. Tidying files never deletes anything. There is also a short list it never does: sign in to a bank, pay for something, change a password.

The desktop widget at rest: a glowing ring, one line saying what the agent is doing, and two small chips. Demo content.

At rest. One line, two chips.

The widget showing the one thing that needs the person: a title, a reason, three steps and one button. Demo content.

The one thing that needs me.

The widget with a count of one on the ring and a small pop at the bottom that opens the changed card. Demo content.

A ping, and a count that waits.

A card titled Hex changed your screen, with a Put it back button. Demo content.

What it changed, and the way back.

04 / What went wrong

Most of it, at first.

I was sent a widget with clipped rows after automated screenshots had "looked right". The rule became: look at what you built, at my real window size, before calling it done.

Hex kept answering each correction with a new hard rule, when what I wanted was judgment. The few lines above are the only ones I kept rigid.

Test messages once landed in my real chat. Test copies can no longer reach it.

05 / Where it stands

Running every day, for one person.

This is a personal project with one user. It runs daily on a small server and my PC. I have no metrics to show. The phone side is still thin, and the newest surface, drawing on my desktop at will, is only days old.

It runs on Claude models through OpenClaw, an open-source agent runtime. The rest is Python, SQLite and plain HTML, CSS and JavaScript.

What I'd take to a team: the hard part of an agent isn't what it can do. It is where its output lives, what waits for a yes, and how you take something back.

*The screens on this page are redrawn from the real product with a made-up person's day. The real ones are full of mine.

All projects