To answer your question directly "it depends". There are a lot of different subtasks to coding. Defining requirements, sketching/discussing architecture, coming up with a technical plan, executing it, creating tests, etc. Different interfaces are better at different things. Cursor/Windsurf agentic flows can be great at well defined tasks that are directly actionable within the abstractions of the existing codebase. If you want to build new things, you need to be a little more methodical, and this can mean using chat interfaces to have a dialogue with AI.
I use RepoPrompt [0] + Cursor Tab Complete (since it's easily the best on the market), but I don't use the in-IDE cursor/windsurf agentic flows unless I have a small task I need doing where I can describe it perfectly. RepoPrompt is an underhyped context selection tool that includes
- A prompt formatter so you can easily dump it + prompts into chat windows
- A built-in diff format prompt template that gets auto-inserted so you can auto-apply the resulting changes.
- A unique "Chat" mode that's an API frontend for multi-turn conversations with dynamic code context, templated prompting, etc.
- An incredible "delegate edit" feature where the results of your conversation get sent to cheaper/smaller LLMs to actually enact. The cost savings and increase in coherency are unreal. It's not unusual for a single turn to generate something like 50 specific edits across a dozen files that are completely coherent.
Right now my main workflow is to discuss architecture with a context dump + prompt to o3, settle on a solution, build a PRD, give that to 2.5 Pro to create a more granular plan, make edits, then send it back to 2.5 Pro to delegate edits to Flash 2.0/DeepSeekV3/o4-mini. Not unusal to see it produce 20-50 edits across a dozen files with perfect coherency. Any fixups or minor things I do in cursor.
There are also the CLI agentic code tools. I find claude code to be like a more powerful version of the cursor agent flow. They're great for directed tasks that involve a lot of exploration, like understanding how you need to integrate with some submodule on the other side of the codebase.
[0] https://repoprompt.com/