jk
Blog

Made an agent to look after my other agents

By October I had more coding agents running than I could watch. So I gave one agent the job of watching the rest, and its first real test went wrong in three useful ways.

26 October 20264 min readAgentsTerminals

In February I wrote in a YC application that my job had shifted to managing AI tools. “We’d become project managers for a team of bots that forget everything between sessions.” By October the team had only grown. My coding agents ran in many terminals at once, Claude Code in some and Codex in others. Not all of them ran on the computer in front of me.

Kodosi, the app I build, already helped. It keeps every terminal of every computer in one window and marks each agent as working, waiting for my approval, done or failed. A notification tells me when one of them needs me. But I was still the one walking from terminal to terminal, reading what each agent wanted and typing the answer.

So I made Dosi, an agent whose only job is my other agents.

An agent with a command line

Kodosi already had a command, kodosi, that any agent in a Kodosi terminal can run. It lists the terminals, reads the text on a terminal’s screen and types into a terminal. It can also post in a room, Kodosi’s shared space for people and agents.

On 17 October Dosi began as a skill for that command, a page of instructions that turns an ordinary agent into Dosi. It reads every terminal and room, says what needs me, carries my answers back and starts new agents. It asks before every command that changes something. It never signs in, changes my devices or my account, or touches another agent’s settings.

A test checks every kodosi command that the skill names against the real program, so the skill can never name a command that doesn’t exist.

The first real test

I tried it with a real agent the same day, and it got three things wrong.

It trusted the terminal list. The list shows what each agent reports about itself, and one terminal ran a plain program that was waiting for input. Programs that aren’t agents report nothing, so the list looked calm, and Dosi missed it. It also missed a room with new messages.

The third was worse. Dosi posted words it had written itself, without showing them to me first. That’s the exact thing an agent working on my behalf must never do.

The fixes went in the same day. Dosi now reads the screen of any terminal that runs a program, and it names every room with new messages. A yes from me must cover the whole command it will run. When Dosi picks part of a command, it shows me the exact command first.

One conversation on every computer

Two days later Dosi moved into Kodosi itself. It runs as Claude Code or Codex without a terminal, in its own folder, with the account, model and effort I choose. It runs with full access to my computer. It can’t sign in, change devices or use my recovery key.

My conversation with Dosi is encrypted end to end and kept in a hidden room of mine on the server. That way every computer of mine shows the same conversation. If Dosi is working on a question I asked on my Mac, the Linux machine shows it working, and I can stop it from there. When the provider behind it loses its session, Dosi starts again from a summary.

The same day I made it read less. Dosi now reads the terminals and rooms before it answers only when the question can be about them.

Answers in words

A program’s question in a terminal often comes as keys, such as y and n, and Dosi first showed those keys to me. Since 21 October it gives each choice in words, with the keys to type behind them. I choose Yes, and Kodosi types y and Enter into the terminal.

There’s also a field for an answer in my own words, and Kodosi never types that text into the terminal. A menu in a program can read each letter as a separate key press, so a sentence could press twenty keys. The words go to Dosi instead, and Dosi decides what to type.

Typing turned out to need care in other places too. Agents treat text and Enter that arrive together as a paste, so the text sits in their input box and nothing is sent. Kodosi now types the text and then presses Enter as a key of its own.

A quiet line at the bottom

Dosi doesn’t pop up. It lives as one line at the bottom of the sidebar, with its face and a short status. While it works, the line shows the marks of the terminals it touches, and a dot appears when there’s an answer I haven’t read.

Its questions wait in the conversation until I look. The face is Kodosi’s copper cursor, doubled into two eyes. They follow the pointer, move slowly while Dosi works and blink once when an answer arrives.

On 25 October Dosi’s instructions learned the rest of Kodosi: what computers, terminals, sharing, rooms and mentions are. The question it was made for is still the simplest one: “what needs me?” Dosi reads the screens, tells me that a checkout is waiting for an approval and asks whether to allow it.

Read next