Unless I have a very clear plan for what I want to build, I say I want to brainstorm X. I'll say what I had in mind, ask what it thinks. We then go back and forth, I might ask for alternatives and such along the way. Once I know what I want to build, I say make a detailed design document of what we've arrived at, include rationales for the decisions made. If it's a larger project I say to split the design into phases that can be implemented incrementally. The document is written to disk.
I'll look over the design document and perhaps do a few rounds of tweaking on it.
Once I'm happy I switch to plan mode, possibly with a fresh context, and say to make a detailed implementation plan for phase 0. I'll look it over and adjust until I am happy. If it didn't already I'll have it split the work into concrete steps or deliverables. This allows me to keep tabs on what it's doing and intervene if it goes off the reservation.
I'll tell it to write the implementation plan to a file before it starts work. After it's done if it didn't automatically I'll have it write a summary of the work done and issues that came up.
These summaries along with the main designs document becomes input to subsequent phases.
This has worked well for me with both Codex and GPT 5.x and OpenCode with Qwen 3.6 27B.