I’ve seen people have success figuring out model reasoning by adding a required `reasoning` parameter to tool calls. Might be worth experimenting with this for the `write` tool call in a coding agent harness.
Also "divide and conquer" is still applicable. Tired of waiting 10 minutes for the model to come up with a plan that ends up being wrong? Divide the problem into pieces and attack the pieces individually, worst case scenario the model spends 2 minutes and got some detail wrong, but way easier to correct the tiny stuff.
Once you've done with the pieces, do one "integrate them together" part, then you have a fully formed plan with less chance of wrong stuff in it. Yes, this requires a bit more interactivity than "prompt model then come back after making and drinking a coffee", but personally I prefer that.
Also "divide and conquer" is still applicable. Tired of waiting 10 minutes for the model to come up with a plan that ends up being wrong? Divide the problem into pieces and attack the pieces individually, worst case scenario the model spends 2 minutes and got some detail wrong, but way easier to correct the tiny stuff.
Once you've done with the pieces, do one "integrate them together" part, then you have a fully formed plan with less chance of wrong stuff in it. Yes, this requires a bit more interactivity than "prompt model then come back after making and drinking a coffee", but personally I prefer that.