Quoting nickcraux.com:

• I like Composer (now called Agent) for simple, low impact changes. And Chat (Ask) for everything else. Just the step of manually having to click apply and taking that extra second to think about the changes it’s making, and in which files it’s happening, rather than just be presented with a wave of green changes ready to get smashed in. • Don’t blindly accept code. It’s always gonna come back to bite you. • Every so often make sure you read and fully understand the most integral parts of your code, and refactor it manually. You will find a lot of gaps, and fixing it up means future AI-written code will be better. • Ask "is this the best way to do this?" or "have you considered xyz". • Learn when a problem is best solved manually. • Take extra care when using AI to fix bugs. I think it’s particularly weak at fixing anything but the silliest of bugs. And it can cause a lot of damage in the process. • If it’s a big and important task or you are setting the foundations for a feature, ask it to ask you any questions before writing code to make sure it has a full understanding of what you are trying to do.

The reason for shitty AI output is not because it forgot about DRY or SOLID. And I find that giving it too much input, and having longer chats, is when it starts to fall apart a bit. So keep it light.

if you notice the same issues popping up again and again, just add a quick line telling it not to. Or even better, in your cursor chat just say "please write me a cursorrule so that you stop doing this particular thing."