Essays

I fired the intern

For a while Dustav had an intern — a second character I invented to explain the background inbox reader. Then the story started to lie: there's no task the intern does that Dustav can't. So I kept the safety boundary and fired the character.

For a while, Dustav had an intern.

When you connected your inbox, I told you a tidy little story: Dustav — the one you chat with — hands your email off to an intern who reads it in the background, files what matters, and drafts what's owed. Two characters, a clean division of labor. It was a good story. It was also a fiction that started to lie, so I took it out.

Why I invented a second character

The intern wasn't pure invention — there really are two runtimes under the hood. There's the Dustav you talk to: personality, the full toolset, you present and watching. And there's a background reader that grinds through hundreds of emails unattended — on a shorter leash, read-mostly, drafting replies but never sending them, handing back structured cards instead of chatting. Same brain, different configuration. It reads your whole inbox in the background so you don't have to.

When you have two modes that behave that differently, it's tempting to give the quiet one a face and a name. "The intern" made the split legible. It was an easy way to explain why the background pass is careful and bounded while the foreground Dustav is chatty and free.

The story started lying

The problem with a persona is that it implies a division of labor, and that part wasn't true.

"My intern handles that, I can't" is never the honest answer in Dustav, because there is no task the intern does that Dustav can't. When you ask Dustav to fix a row it misread, it doesn't reach into a database and hand-edit the cell — it re-reads the source email, the same way the background pass read it the first time, and re-files it. There's no second worker with different powers standing behind a curtain. There's one agent that sometimes works in the foreground with you and sometimes works in the background alone.

The moment the word "intern" implied Dustav couldn't do something Dustav does on every single sync, the story had crossed from helpful to dishonest — and this whole project has one rule about that.

Keep the boundary, drop the character

Here's the part I want to be precise about, because it's easy to over-correct: the boundary between the two runtimes is real and load-bearing. The background reader genuinely cannot send an email on its own. It genuinely runs read-mostly. Not because it's a junior employee who hasn't earned the keys — because it's operating over your entire inbox while you're asleep, and an unattended agent with a send button is a different risk than one you're watching type. That leash is a safety boundary, and it stays.

So I kept the boundary and removed the mask. The word "intern" survives now only in the code, as an internal label for a mode — never in anything you read, and never in anything the model is told about itself. What you see is Dustav: reading your inbox in the background, then talking to you in the foreground, the same operator either way.

Fewer Someones is the whole project

I've done this before. The entire pivot was me killing a Someone — the companion, the buddy you were supposed to bond with — because the market only ever wanted the tool underneath. The intern was a smaller Someone sneaking back in through the side door: not a friend to maintain, but a colleague to imagine.

Dustav has a voice, not a relationship — and it turns out that also means a voice, not a staff. It's a sharp operator doing a job. It does that job in the foreground when you're there and in the background when you're not, and pretending those were two different people was just one more character I had to stop maintaining.

The intern was a helpful fiction that became a dishonest one the moment it took credit — or dodged blame — for work that was Dustav's all along. So I fired the intern and gave the job back to the person who'd been doing it the whole time.