AI · writing
A generated letter is easy. A letter that is true about this person is not.
Every tool in this category will draft you a rejection. Most write the same one for everybody, which is why candidates can tell, why they post it, and why teams quietly stop sending them at all.
A draft here is written from what is actually on the record — the rounds they did, what the panel found, the requirement that decided it. And when it cannot be produced, something still goes out today.
- Grounded in this record
- A fallback that still sends
- Nothing leaves unapproved
A letter · and what it was written from
“Thank you for the time you gave us across two rounds. The panel was consistent that your platform work is strong. On this role the gap was regulated-domain exposure, which we had marked essential…”
- Applied 14 Feb · Senior data engineer
- Interviewed round 2 · panel of three
- Gap recorded: regulated-domain exposure
If the draft cannot be produced, a deterministic version is sent instead. The failure mode is a plainer letter, never a blank page and never an invented reason.
The problem, specifically
The interesting question is not the good draft. It is the bad day.
Every demonstration of generated text shows you the left-hand version below. The case that decides whether you can put this in front of a candidate is the right-hand one — the model is unavailable, or returns something malformed, and a hundred letters still have to go out today.
Most products answer that with a held queue and a retry. Which means the letters go out three days late, in a batch, which candidates also notice.
Written from the record
“Thank you for the time you gave us across two rounds. The panel was consistent that your platform work is strong — the payments migration in particular. On this role the gap was regulated-domain exposure, which we had marked essential at the outset…”
- Two rounds
- Panel note · platform
- Gap · regulated domains
When it cannot be produced
“Thank you for the time you gave us across two rounds. We have decided not to progress your application for this role. The deciding factor was regulated-domain exposure, which the role requires…”
Built deterministically from the same record. Never a blank page, never a held queue, never a reason that was invented to fill the gap.
What grounds it
Specific because the record is specific, not because it was told to sound warm.
The difference between the two letters above is not tone. It is that one of them names the migration the panel actually praised and the requirement that actually decided it, because both were recorded at the time rather than reconstructed afterwards.
That is only possible where the reading layer and the interview layer already put them on the record — which is why this page is the fourth of five rather than a feature on its own.
Candidate feedback
Written from the rounds they did and the gap that decided it, and held back entirely for the rejection reasons you do not put in writing.
Follow-ups from a call
Drafted from the commitments actually made, with the moments they were made — not a template with a name merged into it.
Campaigns, as their own area
Audiences, multi-step sequences, your own sending domains, suppression lists and deliverability. An area you can take or leave, not a second product.
How generated text fails
Three failures, and only one of them is the model's fault.
The letter that fits anybody
Generated from the rejection reason and nothing else, so every candidate rejected for the same reason receives the same paragraph.
Two candidates from the same company compare letters and find them identical, including the sentence about their “particular strengths”.
The invented kindness
Asked to sound warm with nothing specific to be warm about, it fills the gap — with praise for work nobody recorded.
A letter compliments a candidate's “leadership of the migration”, which no interviewer mentioned and which they did not do.
The queue that waits
The draft cannot be produced, so the letter is held for a retry, and the retry is held too.
Ninety rejections go out on Thursday in one batch, eleven days after the decisions were made.
The guarantees
Three rules that make generated text safe to send.
- A draft, never a send —
Nothing leaves without somebody approving it. What is saved is the blank page, not the judgement — and that distinction is the reason legal teams sign this off.
- Suppressible by reason —
Letters can be switched off for the workspace, and held back for particular rejection reasons. There are reasons you do not put in writing, and the product should not make you.
- It cannot invent the reason —
The gap it names is the gap that was recorded against the requirement. If nothing was recorded, the letter says less rather than making something up to sound considered.
What you receive
A draft, its grounds, and a version that sends regardless.
- The record it was written from —
Which rounds, which panel note, which requirement decided it — shown with the draft, so the approver can check the claim before the candidate reads it.
- A deterministic fallback —
Plainer, built from the same record, sent on the same day. Never a blank page and never a held queue.
- An approval step that is real —
Nothing leaves unapproved. What is saved is the blank page, not the judgement — which is the distinction that gets this signed off.
- Suppression by reason —
Switched off for the workspace, or held back for the rejection reasons you do not put in writing.
Objections first
What a talent lead asks before letting this near a candidate.
›Will candidates know it was generated?
They will know it was about them, which is the thing they actually notice. A letter that names the round they did and the requirement that decided it is not the letter anybody screenshots.
›What if we do not want to give a reason at all?
Then you do not. Suppression is there for exactly that, per rejection reason, and switching letters off entirely is a setting rather than a conversation with us.
›What happens when the model fails?
A plainer letter, built deterministically from the same record, sends anyway. Never a blank page, never a held queue, and never a reason that was invented to fill the space.
›Does it write job descriptions too?
It can draft one, and we would rather you judged us on the reading layer than on that — drafting a requirement is the easiest thing in this category to demo and the least load-bearing thing in the process.
›Can we edit the drafts?
Every one, before it goes. The approval step is not a formality; it is where the judgement stays.
Book a demo
Turn the model off and watch what sends.
The demo worth having is the one where something fails. Ask for that one.
- Show me a letter that could only be about this candidate
- Break it, and show me what goes out instead
- Suppress a rejection reason and show me no letter went
- Show me the approval step, and who holds it