---
name: jd-resume-tailor
description: 给定一份 JD 和一份现有简历，做"JD 拆解 + 简历定向改写"。拆 JD 抽出硬技能、软技能、加分项；对照简历做 gap 分析；产出针对该岗位重写后的简历，突出相关经验、补齐关键词缺口、并保留候选人真实经历不编造。当用户说"针对这个岗位 / 这家公司改简历""帮我对一下这个 JD""我想投这个职位你看怎么改""把这份简历针对 X 公司优化""做一份定向版简历"，或同时给出 JD 文本 + 简历文件时，必须触发本 skill。**请勿用本 skill 做"从零写简历"**——那是 resume-builder 的事。
---

# JD ⇄ Resume Tailor（JD 拆解 + 简历定向改写）

这个 skill 的边界很窄：**只解决"已有 JD + 已有简历，要改一份命中率最高的版本"**。

不做的事：
- 写新简历（去 `resume-builder`）
- 找方向 / 推荐岗位（去 `job-intent-tracker`）
- 出面试题（去 `interview-prep`）

---

## 何时触发

强信号：
- 用户给了 JD 链接 / JD 文本 + 一份简历 → **必触发**
- "针对这个岗位帮我改简历"
- "对照一下这个 JD"
- "我想投 X 公司的 Y 岗，帮我看简历"
- "做一份定向版"

弱信号（先确认）：
- 只给了 JD 没有简历 → 问"你的简历方便发我看一下吗？没有的话，我可以先帮你从零做一份（resume-builder）"
- 只给了简历说"改简历" → 问"是针对哪个 JD 改？没有 JD 就用 resume-builder 通用优化"

---

## 工作流

### Step 1: 解析 JD

输入可能是：
- 纯文本（用户粘贴）
- 链接（**不要**自动 fetch，提醒用户复制 JD 文本进来；若用户授权 fetch，使用 web_fetch）
- 截图（用 OCR / 视觉识别，让用户确认抽取结果）
- doc/pdf 文件

调用脚本：

```bash
python scripts/parse_jd.py --jd-file <jd.txt> --out jd_parsed.json
```

脚本会从 JD 抽出：
- **硬技能 must-have**（"必须" / "要求" / "至少 X 年" 等强信号词后面的技能）
- **硬技能 nice-to-have**（"加分" / "优先" / "熟悉者优先" 等弱信号）
- **软技能信号**（沟通 / 推动 / 跨部门 / 抗压 等）
- **职责动词 + 对象**（"负责 X" / "搭建 Y" / "推动 Z"）
- **特殊要求**（出差 / 学历 / 证书 / 语言 / 城市）

把结果展示给用户，让用户**确认 / 修正抽取是否准确**（关键 must-have 不能漏）。

### Step 2: 解析简历

输入：用户上传的简历文件（.pdf / .docx / .md / .txt）。

调用对应 skill 解析：
- pdf → pdf skill
- docx → docx skill

抽出：基本信息、教育、每段工作 / 项目经历的（公司、岗位、时间、职责 bullet）、技能列表。

### Step 3: Gap 分析

调用：

```bash
python scripts/jd_gap.py --jd jd_parsed.json --resume resume.txt --out gap.md
```

脚本输出三类清单：

1. **完美命中**（JD must-have 在简历里有明确证据）
2. **隐性命中**（JD 要求 X，简历里有 X 的近义经验，但用词不一样 → 改写时可以"提一下"）
3. **真缺口**（JD 要求但简历完全没有）

对"真缺口"分两类：
- **可补救**：简历里其实做过类似的事，只是没写出来 → 追问用户"你做过 X 吗？"
- **不可补救**：用户确实没做过 → **不能编**，建议用户在 cover letter 或 summary 里诚实说明并强调 transferable skill

### Step 4: 定向改写

按以下原则重写简历：

**a. 重排经历顺序**：与 JD 最相关的工作 / 项目放最前（不改时间真实性，但可以把项目经历拆成两块"相关项目 / 其他项目"）

**b. 重写每条 bullet**：
- 把 JD 里的"职责动词"自然嵌入 bullet（如 JD 说"主导 ___ 系统设计"，简历里就把"参与"改成"主导"——前提是用户确实主导了）
- 数字保留并放大（"用户 100 万"是好事，别藏起来）
- 补 JD 关键词（如 JD 说"A/B 测试"，但简历里写的是"灰度对比"，改成"A/B 测试（灰度对比）"）

**c. 重写 Summary**：用 2~3 行总结你为什么是这个岗位的合适人选，**直接对应 JD 的 must-have**

**d. 调整技能列表**：把 JD 提到的技能移到最前面（前提是真的会）

**e. 不改的事实**：
- 公司名、岗位名、起止时间、学历 —— 一字不改
- 项目规模、用户量、收入数据 —— 不能编，只能让用户确认后填准

### Step 5: 自检 + 报告

输出三个文件：
1. `resume_tailored_<公司>_<岗位>.md`（改写后的简历）
2. `gap_analysis.md`（gap 分析报告）
3. 聊天里给一个 ATS 命中率对比："改前 X% → 改后 Y%"

附：诚实提醒用户**哪些 bullet 是基于现有信息推测改写的**，让用户复核后再投。

---

## 反模式（不要做）

- ❌ 编造经历（"加上一段你没做过的项目"——绝对禁止，哪怕用户要求）
- ❌ 把 JD 的整段话直接粘进简历（很容易被 HR 一眼识破，且 ATS 反作弊会标记）
- ❌ 关键词堆砌（在末尾塞一长串技能词凑命中率，HR 一眼能看出）
- ❌ 把"参与"改成"主导"但没有问用户实际角色 → 必须先核实
- ❌ 不给用户看 gap，自己默默改 → 用户会失去对简历的"理解"

## 与其他 skill 的协作

- 改完后用户说"帮我准备这家公司的面试" → 转 `interview-prep`，把 JD + 改写简历传过去
- 用户说"我想知道还能投哪些类似的岗" → 转 `job-intent-tracker`
- 用户说"我现在简历不太行，能不能整体重做" → 转 `resume-builder`
