Every suggestion has a price.
Even a good suggestion is expensive at the wrong moment. It breaks focus and demands a decision. A bad one is worse: now you reject it, close it, and find your place again. You pay for the interruption whether or not the help was any good.
Cheap rejection is a design property.
Ghost text, underlines, command palettes, reviewable diffs. They work because ignoring them is free and dismissing them is one gesture. We learned the opposite version the hard way: when saying no takes a negotiation, users start resenting the assistant, and then the product.
What to build.
Wait to be invoked instead of guessing at the moment. If you must volunteer a suggestion, keep it peripheral, dismissible in one gesture, and gone for good once dismissed. Never make a user say no to the same idea twice. Then count the dismissals. Every one marks a spot where your product was rude.