My resume-tailoring agent is structurally incapable of lying about me. Not discouraged — incapable.
A tailoring agent's entire incentive gradient points toward embellishment: the "helpful" move is always to invent the missing skill. The interesting engineering is refusing that gradient. Skills I genuinely lack are never written into bullets — they surface in the UI as honest gaps, front and center.
flowchart LR
up[Upload] --> g1{Magic bytes?} -->|fail| e415[415]
g1 -->|ok| g2{Under 10 MB?} -->|fail| e413[413]
g2 -->|ok| g3{Scanned or encrypted?} -->|fail| e422[422]
g3 -->|ok| intake
subgraph seq [SequentialAgent: resume_tailor]
subgraph intake [ParallelAgent: intake]
jd[jd_parser — flash-lite]
rp[resume_parser — flash-lite]
end
intake -->|session state, Pydantic-validated| ma[match_analyzer — flash-lite]
ma -->|output_key handoff| t[tailor — flash]
endjd_parser = LlmAgent(
model="gemini-2.5-flash-lite",
instruction="Extract requirements from: {job_description}",
output_schema=JDParsed, # Pydantic — downstream agents get structured data, never free text
output_key="jd_parsed", # written to session state, not stuffed into the next prompt
)The tripwire
The no-fabrication guarantee isn't a prompt instruction — it's an acceptance gate. An eval harness runs labelled resume/JD pairs and reports covered recall, missing recall, and fabrication failures. The input guards exist to protect this invariant: a scanned or encrypted PDF is rejected with a 422 before any model call, because the guarantee can't survive garbage extraction.
report = run_eval(labelled_cases)
print(f"covered recall: {report.covered_recall:.2f}")
print(f"missing recall: {report.missing_recall:.2f}")
print(f"fabrication failures: {report.fabrication_failures}")
# The acceptance gate. Not low - zero.
assert report.fabrication_failures == 0, "fabricated skill in a tailored bullet"The system can't make me look better than I am. That's the feature.