tailor-resume · git:20261023.9f9eaf2 · 2026-10-23 · sha256 24c88234b7636379
tailor-resume git:20261023.9f9eaf2A
Immutable. This exact content never changes and is served at /api/v1/blob/24c88234b7636379.
---
# GENERATED by scripts/kernel/sync.py from skills/tailor-resume/SKILL.md - do not edit
name: tailor-resume
description: "Use when an application is queued (fit at or above the queue threshold in the policy config, or the owner's override) and needs a tailored resume variant, cover letter or why-us note, or when resume-editor or ats_check returned findings on an existing variant."
---
# Tailor a resume variant
Owner: resume-tailor. Tier: T1. The resume-engine steps, the verbatim truthfulness pre-flight, the
selection algorithm, proof-over-claims and bullet rules are in `agents/resume-tailor.md`. Today is
!`date +%F`.
## Preconditions
- `applications/SLUG/fit.md` verdict `apply` or `priority` (or an override row).
- The general base verifies: `(cd resumes/bases/general && shasum -a 256 -c SHA256.txt)` (every variant
starts from it; there is no base per lens, the fit's `lens` is only the variant's emphasis label).
- The Role Package `research/targets/SLUG.md` (sections 1, 5, 6 Reader model and 7) and its filled matrix; the package's
questions asked; `scripts/reader_model.py check` clean on the package.
- Company signal from the package section 4 (a dossier in `companies/` is read too when present).
## Procedure
1. Work from the user's data folder; V = `resumes/variants/SLUG`;
`mkdir -p V`; `python3 scripts/jobs_manual.py set <job-id> --status tailoring`.
2. `cp resumes/bases/general/{resume.yaml,template-classic.yaml,template-inline.yaml} V/`; set
`sidecar: {lens: <fit lens>, base_of: general, job: jobs/<job id>.md}` per the YAML contract in
`resumes/templates/README.md`. Read `resumes/bases/general/README.md` first: keep its timeline arc,
change emphasis only; never edit the template copies.
3. `NOTES.md`: `## Target` (company, title, `apply_url`, `ats_vendor`, posted date), `## Plan` (as
agreed), `## JD highlights` (must-haves from `fit.md` with the evidence ids), `## Lead and order`
(`applied: <the package's section 7 lead bullet and order>` or `not applied: <why>`; rubric_check B24).
4. Re-select against the base: swap in bank bullets with r = 3 for this JD's must-haves, reorder by r,
keep one page and the arc. Reword only within the evidence (a JD term may replace a synonym only if
the corpus supports it).
5. `python3 scripts/render_resume.py lint --input V/resume.yaml --template V/template-classic.yaml --density one-page` → 0.
6. `python3 scripts/render_resume.py render --input V/resume.yaml --out V --template V/template-classic.yaml --density one-page --basename Resume`
(the PDF name is `identity.resume_pdf_name` in the config) and the inline copy: `... --out V/inline --template V/template-inline.yaml --density one-page --basename Resume_inline-dates`
(`--docx` for Workday).
7. `python3 scripts/ats_check.py check --pdf V/<pdf from V/meta.yaml> --jd applications/SLUG/jd.md --vendor <ats_vendor> --contact-email <identity.contact_email> --taxonomy profile/skills-taxonomy.yaml --source V/resume.yaml --out V`
→ exit 0. Copy the `missing_evidenced` and "must NOT add" lists into `NOTES.md` `## Keywords`.
Add evidenced terms only through evidenced bullets; never the must-not-add list.
Layout: `python3 scripts/page_layout_check.py V/<pdf>` and the same for `V/inline/<pdf>` exit 0; Read
`V/page-1.png` before the hand-off. A short page is filled with the strongest true work, never padded; a FAIL is
never handed in (apply_pack.py refuses it).
8. Only when the application asks: `V/cover.md`, `V/why-us.md`, `V/else.md` by the `letters` skill (the owner's
ideas in simple words, real experiences as proof, the company reverse-engineered first);
`python3 scripts/letters_check.py V/` exits 0. Then `python3 scripts/rubric_check.py --resume V/resume.yaml --base resumes/bases/general/resume.yaml --matrix research/targets/SLUG.matrix.yaml --jd applications/SLUG/jd.md` exits 0.
9. Pre-flight checklist into `NOTES.md`; `shasum -a 256 V/resume.yaml` into `## Handoff`; hand V
to resume-editor with this brief: "Review V against `jd.md`, `fit.md`, `companies/<company>.md`,
`profile/facts.yaml`, `profile/evidence.yaml`. Files only; no tailor notes beyond NOTES.md."
10. Findings round: answer each in `## Responses to review`, re-run steps 5 to 7, new hash, hand
back. On approval: approved hash in `## Handoff`; report to tracker-ops (event `tailored`) and the Recruiter.
- Current-employer lines: name the kind of system, how it is built and the problem class, in words already released on the record; never product internals, workflows, tool chains, customers, numbers or the roadmap (the policy config can tighten this).
## Output
The variant folder and a reply with the state, hash and anything waiting on the owner.
## Stop conditions
The general base's hashes do not verify; plan not agreed; a needed claim in an open conflict; a must-have with no honest
story (tell the Recruiter: the fit may be wrong); a third editor round.
## Worked example
SLUG `acme-agents-applied-ai-engineer-YYYYMM` (shape, not a real company): fit 4.3, lens
agentic-systems, Greenhouse. Must-haves: agents with tool use (covered: an agent-harness record,
ev-<harness-id>), evals (covered: a release-gating bullet, ev-<eval-id>), Python (covered), cloud deploys
(adjacent). Plan agreed. Copied from the general base with `base_of: general`, `lens: agentic-systems`. Changes
from the base: the release-gating bullet moves up (their JD stresses release gating); a class-imbalance
evaluation bullet drops to fit one page. ATS: `missing_evidenced` = one tool name (its bank bullet is tagged
"[confirm ...]", so it stays out until confirmed); must-not-add = two terms the record cannot back. Cover opens with
their docs on sandboxed tool execution [dossier source 5] and pairs it with the snapshot-rollback sandbox. Hash
recorded; editor round 1: 2 findings, both FIXED; approved.