Where we are now (May 2026)

This is the first of what I plan to write every month or so: a plain account of what the two projects can actually do, today, together.

My bet is in the manifesto. Software that is personal, private, and sovereign, with an agent that works for me, all running on hardware I own. I'm working on two projects to test it. assist is the agent. emacsos is the phone the agent reshapes.

The two halves

assist is a local-first agent. It runs against a small open-weight model (currently Qwen3.6-27B) on a box at home, so nothing I say to it leaves the house. It has the parts you would expect, tools and memory and skills and sub-agents for research and exploration, but tuned for a small model, where reliability is the hard part. Each conversation works inside its own git branch of a repo I choose, so the agent's edits stay isolated until I merge them. It has a web UI, a CLI, and an Emacs integration, all sharing one agent core.

emacsos is the phone. It is Emacs on a small touchscreen (sounds fun, right?), a 320x240 frame with a nine-key keyboard, on a Raspberry Pi. I chose this as the starting point because the phone is the most personal device I own, so it should be the most malleable. Everything on it is elisp and changeable at runtime. The catch is that editing elisp on a 320x240 screen with a nine-key keyboard is miserable. So I don't. The agent does!

What's possible today

The two are wired together. The phone has a chat page. I type a request, it streams to a small server sitting next to assist, and the agent answers token by token in the buffer. I can abort mid-answer.

The part I care about most works: I can change the phone by talking to it. "Set the cursor blue." The agent reads the current config, writes the new elisp, and applies it. Every change is a git commit, with the agent's own summary as the commit message. So the history of how my phone became what it is, is just git log. When a change is wrong, one tap reverts it. That rollback is not a feature I built. It is git revert, which I already understood.

EmacsOS on a Raspberry Pi: a small touchscreen showing a cursor-change chat with the T9 keyboard below, next to a USB battery pack.
Figure 1: The phone, mid-chat about a cursor change.

All of this runs at home, on my hardware, against my model. The phone depends on no remote service to keep working. The config, the history, and the decisions stay on machines I own.

What's still rough

Let's be honest: this is all very painful, input being the weakest link. The keyboard has no number or symbol keys yet, which means I cannot type a wifi password or a URL on the device. Speech-to-text is planned but not built. The phone and the agent assume they are on the same network. Taking the phone out into the world, over a tunnel home, is designed but not done. And it is not a phone in the way you mean. No cellular modem, no audio, no calls, no texts. Those need hardware I have not connected yet.

So today it is a malleable Emacs handheld that I talk to my own agent through, and that the agent reshapes for me on command. That is less than a phone, and in the one way that matters to me, more.

What's next

The next step just unblocked. Until this week the agent could not reliably read the current config after a reset, which made targeted edits fragile. That is fixed now. So the next experiment is conversational, targeted revert: "undo the cursor change but keep the font change," driven from chat, mapped to the right commit, reverted without disturbing the rest. After that the road runs through input, numbers first and then speech, and then the actual phone build: a modem, audio, and the slow work of making this thing ring.

None of it is finished. That is why I want to write it down every month. For the why, read my manifesto.