一键导入
apply
Generates ATS-optimized resume and cover letter in LaTeX from a job description URL or pasted text.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Generates ATS-optimized resume and cover letter in LaTeX from a job description URL or pasted text.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | apply |
| description | Generates ATS-optimized resume and cover letter in LaTeX from a job description URL or pasted text. |
| argument-hint | <job description text or URL> |
Generate a tailored LaTeX resume and cover letter from a job description, optimized for ATS screening while sounding authentically human.
Portability: This is a tool-agnostic skill. It needs four generic capabilities — fetch a URL, read files, write files, and run a shell — plus the ability to ask the user a question. Any agent (Claude Code, Codex, etc.) can run the skill by mapping these to its own tool equivalents. Wherever this file says "your skill directory", it means the folder this
SKILL.mdlives in.
Setup before first use: Fill in
assets/profile.mdwith your own background (work history, skills, education, awards). The shippedprofile.mdis an empty template with section scaffolding only. Optionally editassets/resume-template.texto replace the placeholder contact block with your name and links.assets/lessons.mdstarts empty and grows as you give feedback (Phase 8).
Determine how to obtain the job description:
$ARGUMENTS is empty or missing, ask the user to provide a job description (URL or pasted text).$ARGUMENTS starts with http:// or https://, fetch the page content with your web-fetch capability. If fetching fails (login wall, paywall, 403, etc.), inform the user and ask them to paste the JD text directly.$ARGUMENTS as the raw job description text.Extract the following from the job description:
Present a short summary to the user and ask them to confirm or correct before proceeding:
Company: X | Role: Y | Level: Z Must-have skills: ... Nice-to-have skills: ... Key themes: ...
Does this look right? Any adjustments?
Spotting hidden optional skills: Some JDs blur the line between required and preferred. When a sentence like "Experience or interest within the above-mentioned areas is a good foundation" follows a skill list, those skills are effectively optional, not hard requirements. Read the prose, not just the "Required / Preferred" headings, and classify accordingly in your summary.
Read the following files from the assets/ folder in your skill directory:
profile.md — Personal information and experience inventory. If this file is missing or mostly empty, STOP and tell the user:
Your profile is not set up yet. Please fill in
assets/profile.mdwith your information first.
resume-template.tex — LaTeX resume template.cover-letter-template.tex — LaTeX cover letter template.lessons.md — Past feedback and learned preferences. If missing or empty, skip silently — this is expected for first-time use.When lessons.md has entries, treat every rule in it as a hard constraint during generation.
Note on multilingual profile content: profile.md may be written in a language other than English (or a mix). Read and fully understand all of it — do not skip or skim sections because they are not in English. When generating English output, translate accurately and preserve all details, including metrics, project names, technical specifics, and competition results.
Before writing any file, present the planned approach to the user and wait for explicit confirmation.
The preview must cover:
Resume strategy:
Cover letter strategy:
Present this as a concise bullet-point outline (in the user's working language), then ask:
Does this approach look right? Once you confirm, I'll start generating the files.
List every work-experience entry from profile.md and state how each is handled (kept / down-weighted / omitted) with a reason. Do not silently drop a role, even a low-relevance one — name it and explain, and let the user decide whether to include it.
Do not write any .tex file until the user confirms.
profile.md. Select and prioritize bullets that best match the JD's required and preferred skills.profile.md — never drop a whole role. Control length by trimming bullets, not by omitting jobs: 4-6 bullets for the most relevant role, 2-4 for moderately relevant ones, and as few as 1 for the least relevant. Every position the candidate held must still appear (company, title, dates), even if it carries a single bullet.\cvitemstart/\cvitemend inside an award entry. Combine the award name and its contextual note into a single bullet using a comma (e.g., Example Cert: 390/500 (top 1\%), \textit{national-level timed exam.}). Do NOT use --- as a separator.tabular* for layout (name left, role + contacts right, and the metric-badge row); keep the body itself strictly single-column with no tables.Mon YYYY -- Mon YYYY or Mon YYYY -- PresentThe template ships a header band: name (left, large) + role title and contacts (right), a thin rule, then a row of four metric badges. When generating, fill these per JD/profile:
\href targets to match profile.md.\linespread reduction and the header \vspace values already in the template before trimming any content.Banned words/phrases — never use these:
—, Unicode em dash, or LaTeX ---) anywhere in body text — they are a strong AI writing signal. Rewrite using a comma, colon, parentheses, or split into two sentences. En dashes (--) in date ranges are fine.Required style:
After drafting resume content, verify every skill listed in the Skills section against profile.md only:
Prompt Engineering, Parallel Programming, Distributed Systems), not a descriptive phrase. Don't let a category label over-claim breadth beyond the terms actually listed on that line (e.g., don't label a line "Full-Stack" if it only lists backend tools). De-noise per target role: drop terms irrelevant to the current JD (they stay in the relevant Experience bullet, just not in the Skills scan band).[skill] → profile.md line: "[exact quote]". Any skill you cannot fill in must be removed.At this point the resume content exists as a confirmed draft in context only. Do NOT write any .tex file yet — file writing happens in Phase 7, after HR approval.
The cover letter is a delivery document, not a personal essay. It has two jobs in sequence:
Everything in the letter must serve one of these two readers. Content that serves neither gets cut.
Length: 250–350 words, 3–4 paragraphs. Shorter is better. Every sentence must earn its place.
Opening (1 paragraph, 2–3 sentences): State who you are, your most relevant qualification, and why this specific company. Be direct: "I have X years doing Y, and [specific thing about this company] is why I'm applying." If you have a prior connection (internship, event, used their product), mention it in one sentence here, not as a separate paragraph.
Career-arc sentence (MANDATORY when the profile shows a non-linear path): If the candidate's trajectory is not self-evident — e.g., years of industry experience → returned for a master's → job market, or an experienced engineer who did a summer internship — the opening MUST include exactly one confident sentence framing the arc as deliberate capability-building. Not an apology, not a defense. Without it, the reader cannot tell whether they are looking at a new grad or a senior engineer, and that confusion alone sinks the application. Example (generic — adapt to the candidate's real arc): "After several years building production systems in industry, I went back for a master's to deepen the foundations I had been working around, and I am now looking to combine both." One sentence only; do not over-explain. This lives in the cover letter, never the resume (the resume stays clean and lets the timeline speak).
Body (1–2 paragraphs): This is the core. Map 2–3 key JD requirements to your experience using the impact formula:
Impact formula: [What you did] + [in what context] + [what changed as a result]
Bad: "I developed the service in language X across platforms A, B, and C" (process only) Good: "I owned the service across platforms A, B, and C, shipping it to 4 clients" (process + outcome) Better: "I owned the service that shipped to 4 clients, cutting integration time by designing a cross-platform abstraction layer" (process + outcome + how)
For each JD requirement you address, the reader should understand: (a) you have the skill, (b) you used it at scale, (c) something measurable improved. If you can't show (c), at least show (b).
Scannable body option (recommended default): For technical roles with clear skill requirements, carry the 2–3 core matches in short bullets, each with a bold topic heading (e.g., "From prototype to production", "Depth across platforms"), so HR/managers can see "why we need this person" in 30 seconds instead of reading prose word-by-word. Each bullet = what you did + result/scale. Alternatively, use inline bold markers for key skills in prose (e.g., "My C/C++ experience comes from..."). Don't overdo bold — 2–3 terms max.
Closing (2–3 sentences): Express interest in a conversation. If profile.md mentions a relevant local-language ability and the JD lists a language requirement, place it here naturally and honestly (state the real level — e.g., "I have been actively learning the local language", not "fluent enough for casual chat" unless that is true). By default, if the JD has no language requirement, do not mention language learning — it reads as filler. Mention availability. No restating credentials, no contact info (already in header).
Same banned words as resume. Additionally:
This section ships with a Nordic / Swedish-market default (lagom tone) as a worked example. It is replaceable. If you are applying in a different market, swap this block for your target market's norms (e.g., a more assertive, achievement-forward register is expected by many US tech companies). You can also let Phase 2's culture keywords drive the register. Keep the underlying principle in all cases: plainness of language must not mean absence of argument.
The default tone is lagom — balance, competence without bravado, collective contribution over individual heroics. But lagom does NOT mean vague or directionless. The letter must have a clear through-line: "Here is specifically why I am right for this role."
Tone principles (these are the DEFAULT for the example market, not optional adjustments):
Mandatory checks before finalizing:
Cover letter content is now a confirmed draft in context only. Do NOT write any .tex file yet. Both resume and cover letter drafts are now ready for HR review in Phase 6.
⛔ Hard precondition: this phase reviews the in-memory draft content; nothing has been written to disk yet. Do NOT write any .tex file or run pdflatex before the HR review passes.
Review the resume and cover letter drafts from a strict HR / hiring-manager perspective (based on the Phase 2 JD analysis and the Phase 4/5 drafted content). The goal is to find and fix problems before writing files.
## HR Review Report
**Overall verdict:** 🟢 Pass / 🟡 Optimization suggested / 🔴 Needs revision
### Hard-requirement match
| JD requirement | Resume evidence | Status |
|----------------|-----------------|--------|
| xxx | xxx | ✅/⚠️/❌ |
### Nice-to-have coverage
Covers X/Y items (XX%)
### Risk items
- [issues found, or "none"]
### Cover-letter assessment
- [targeting, appeal, template-feel, etc.]
- [where applicable: tone / values-alignment assessment]
### Improvement suggestions
- [specific, actionable suggestions in priority order]
⛔ Hard gate: until the HR review is complete and the conditions below are met, do NOT write any .tex file or run pdflatex. This is a mandatory wait point and must not be skipped.
Precondition: Only run this phase after the Phase 6 HR review is complete (🟡 user asked and an explicit response received, or 🟢 straight pass). This is the first time files are written to disk.
Create the output directory ~/Documents/job/{company}-{role}/ (kebab-case, lowercase, ASCII-only) if it doesn't exist. (Adjust the base path to wherever you keep applications.)
Write both files now:
~/Documents/job/{company}-{role}/resume-{company}-{role}.tex~/Documents/job/{company}-{role}/cover-letter-{company}-{role}.texCheck if pdflatex is available:
command -v pdflatex
.tex files to PDF, running pdflatex twice each (for references). Use -interaction=nonstopmode. Report any compilation errors clearly. After successful compilation, delete auxiliary files. Note: in zsh, a single rm -f *.aux *.log ... aborts if any one glob has no match (nomatch). Use a find form that won't error on no-match:
find . -maxdepth 1 \( -name "*.aux" -o -name "*.log" -o -name "*.out" -o -name "*.toc" \
-o -name "*.fls" -o -name "*.fdb_latexmk" -o -name "*.synctex.gz" \) -delete
Output written on ... (N pages, ...)). If the resume is more than 1 page, fix the .tex file and recompile — apply these levers in order, stopping as soon as it fits:
\linespread (template default is 1.18; try 1.06 first, then 1.0 if needed)\vspace values in \cvheading, \cvitemend, \cvitem, or \titleformat, and do NOT add \addtolength{\textheight} or override itemize spacing with \setlist. The template's spacing values form a balanced system — changing one without adjusting all others causes text overlap or disproportionate section gaps. \linespread is the only safe global spacing lever.\linespread or cut more content — never patch individual \vspace values. Re-compile and re-inspect until clean.
pdflatexnot found. To compile:
- macOS:
brew install --cask mactex-no-guiorbrew install basictex- Ubuntu:
sudo apt install texlive-latex-base texlive-latex-recommended- Or upload the
.texfiles to Overleaf.
⛔ Hard gate: this step must run after Phase 7 compilation completes and before Phase 8 begins, without exception. No matter how many review iterations Phase 6 went through, do not skip this step.
In the resume output directory ~/Documents/job/{company}-{role}/, generate job_summary.md summarizing this application. No user confirmation needed — write it directly.
Content structure:
# {Company} - {Role}
## Application info
- **Posting link:** {original JD URL; if the user pasted text, write "provided directly by user"}
- **Company:** {company}
- **Role:** {role}
- **Level:** {seniority level}
- **Date applied:** {YYYY-MM-DD}
## Requirements summary
### Must-have skills
{extracted from Phase 2 analysis}
### Nice-to-have skills
{extracted from Phase 2 analysis}
### Key responsibilities
{extracted from Phase 2 analysis}
## Resume strategy
{the resume strategy confirmed in Phase 3.5: Summary positioning angle, core experience selection, Skills grouping emphasis, Certifications handling}
## Cover letter strategy
{the cover letter strategy confirmed in Phase 3.5: opening hook angle, JD requirements covered in the body and the experience mapped to each, closing personalization detail}
## HR review notes
{the full Phase 6 review report: overall verdict, hard-requirement match table, nice-to-have coverage, risk items, cover-letter assessment, improvement suggestions}
When done, proceed to Phase 8.
After presenting the results, ask:
Any feedback? I can adjust the resume/cover letter, or you can tell me preferences to remember for next time.
When the user provides feedback that should persist (e.g., "never use the word X", "always put projects before education", "I prefer shorter bullets"):
assets/lessons.md in your skill directory### YYYY-MM-DD: [Short description]
- [Specific rule or preference]