For a long time, I refused to touch them.
Here's the problem I kept running into: if you're generating more code than you can actually review, you shouldn't ship it. Full stop.
And even when you do review every line, you still miss things. Things you'd only catch if you'd built the system yourself, from the ground up.
So I used them, but very carefully.
Then I dove into the ICM rabbit hole.
Instead of asking the agent to generate code, you describe in text what the program is supposed to do. The agent works in that same text, as the source of truth.
The moment you translate intent into code, you lose precision. ICM never makes that translation. The rules stay in plain language, all the way through. And at any point you can read line by line to see the intent.
That's what makes it the first form of "vibe coding" I actually trust. You can build genuinely complex systems with minimal effort, and without needing to read a single line of code to verify it's right.
It's not a shortcut. It's a different way of specifying software entirely. And what's great is you don't need previous software experience to make it work!