Mike: Telegram to coding agents
I often think of a coding task when I am away from my desk. I wanted to type it on my phone and have an agent start on it. The agent runs on one of my machines. I do not want to open a terminal.
The parts
- Mike is my assistant on Telegram. It runs on Hermes Agent, an open source agent gateway. I named it Mike.
- T3 Code is the app where my coding agents run as chats. It runs on my desktop and on my laptop.
- t3ctl is a small command line tool I wrote. It talks to both T3 servers over MCP.
The flow
- I send a coding request to Mike on Telegram.
- Mike picks the machine and the project. It writes a brief.
- Mike runs
t3ctl launch. A new chat starts in T3 Code on that machine. - The chat works. Each chat lists its output files as
ARTIFACT:lines. - A watcher job runs every minute. It reports finished chats and pending questions, and sends a progress note every 10 minutes.
- Mike checks the result against the brief. If proof is missing, it sends a follow-up to the chat, at most twice. Then Mike relays the result to me with the files.
Reply buttons also work. t3ctl ask sends tap buttons to Telegram. When I tap
one, Mike knows which chat the answer belongs to.
Two rules that mattered
The model ignored my routing rules until I wrote a strict rule with a wrong and a right example. It also ignored context that lived only in a skill file. In the three days before I added a rule, Mike loaded that skill once. Now a rule forces it to load the skills before any launch.
What broke
- The watcher saved its state only when the state was not empty. The last finished chat stayed in the list, and its report repeated every minute. It now saves every tick.
- One review worker exited after 26 seconds with no log. I do not know why. A retry covers it.
Still open
- My laptop can be offline. Tasks for it wait in a queue, and the watcher starts them later.
- I wrote down that the Mac has no route. Work for it runs in a chat on the desktop over SSH.
- I do not know yet if the streaming preview works on the phone. I tested only in the web client.