Spent a chunk of Saturday on this and felt obligated to share.
The setup: Claude Code wrote a clean, working function that passed every test. Looked perfect. Pushed to staging. Production crashed.
The bug: the agent had quietly used a deprecated method that worked in tests because of a mock. The mock didn't trigger the deprecation warning. The agent had no way to know it was using something on its way out.
Stack settled into this after breaking it a few times:
Cursor for IDE work. Claude Code for longer agentic runs when I trust the spec. Codex for boring tickets while I'm in meetings. v0 when a client needs a UI mock in 10 minutes.
The thing that actually changed how I use all of it: stopped treating them as interchangeable and just routing by task type. Refactors go to Cursor. Full feature from a spec goes to Claude Code. Tedious backlog stuff goes to Codex.
disclaimer: I'm not an engineer. i do growth and marketing.
when people talk about vibe coding they usually mean shipping a product. an app, a saas, a tool with real users. that's the version that gets posted. but it's not where things actually changed for me.