Pres Mihaylov
pmihaylov.bsky.social
Pres Mihaylov
@pmihaylov.bsky.social
eng at Plain, ex-Uber, building stuff with AI and claude code

The stuff:
- http://claudecontrol.com
- http://tinyurl.com/ai-eng-with-go
- http://vibegest.com
Now you can get those out of the box. What's more, even if you miss a major event or post as you were busy one day, you can read your vibegest at a later point and still be caught on.
December 20, 2025 at 4:10 PM
That's definitely true, but also in the other direction!

A simple AI agent is often better than an overengineered SaaS. :)
October 24, 2025 at 6:48 AM
Perhaps it needs some more work on the tooling and data access for the agent but it looks like some problems are still best solved by traditional SaaS.
October 21, 2025 at 3:59 PM
Skills are way more effective than MCP tools because they don't bloat the agent's memory. They are persisted and loaded on demand and it seems Claude is fine-tuned to be very aware of them.
October 20, 2025 at 1:57 PM
In a nutshell, web sockets are hard. Even after using something like socket.io which automates a lot of the lifecycle management. There were times where I was considering just re-writing everything to use an HTTP API and polling for jobs.

But very happy with where I landed eventually!
Socket.IO
socket.io
October 9, 2025 at 1:01 PM
- I modified the backend to not unassign any jobs when an agent disconnects. Instead, jobs like that will temporarily stay in the database and a background job will periodically check if they've been stale for too long, at which point they're cleaned up.
October 9, 2025 at 1:01 PM
- I added a persistent identifier for the agent so that the backend can re-identify the agent for a job even after server restarts. It's passed as a header upon establishing the web socket connection.
October 9, 2025 at 1:01 PM
- I added backoff and retry mechanisms for the socket.io client on the agent to re-establish the connection in case it tears down. Turns out the out of the box "reconnectAutomatically" option doesn't work well on the Go SDK so had to roll up my sleeves and ship my own reconnection flow.
Socket.IO
socket.io
October 9, 2025 at 1:01 PM
- I made a sidecar container responsible for refreshing auth tokens and dynamically updating the ccagent's environment.

Also added some code to dynamically fetch the environment periodically from within the running app because the env is hardcoded at startup, despite it changing on the outside!
October 9, 2025 at 1:01 PM