Why the output reads like everyone else's
A model asked for 'a cover letter for a job' has nothing to work with but the average of every cover letter ever written, which is exactly what it returns. The letter is not bad because the model is weak. It is bad because you supplied no facts it could not have guessed.
Give it one number it could not invent
Name the company, the role, and one measurable thing you did: 'led a payments migration that cut checkout latency by 40%'. A single concrete proof point changes the letter more than any instruction about tone. If you cannot name a number, name a decision you made and what happened next.
Constrain the shape
Say the word count and the paragraph plan up front — 'under 250 words, three paragraphs: why this role, the strongest proof point, the close'. Without a shape you get five paragraphs of throat-clearing and one sentence of substance.