This is very well done. There’s success to be had in asking the model to list its own steps in the preamble of the output, too. “Give it space to think”. In the context of an app wrapped around the LLM, you can ask it to wrap those steps in a <plan> tag, and then trim those plans out of the conversation context (and display!) when the completion has returned.