# Resume Builder

> 从零生成或全面优化一份中文简历，并导出 docx / pdf / markdown 多种格式。用 STAR 法则改写经历、做 ATS 关键词覆盖率检查、根据行业（互联网产品 / 技术 / 金融 / 通用）选模板。当用户说"帮我写简历 / 优化简历 / 简历不会写 / 我的简历太弱了 / 简历看起来不专业 / 简历改一改 / 给我做个简历模板 / 简历导出 / 简历加点关键词"，或者上传 .pdf/.docx 简历后说"看看怎么改"时，必须触发本 skill。即使用户只问"我的简历有什么问题"也要触发。

- Skill: `martin65536/resume-builder` (Agent Skill, multi-file: 13 files)
- Install (CLI): `npx skillmds@latest add martin65536/resume-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/martin65536/resume-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: martin65536 (https://skillmd.com/u/martin65536)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/martin65536/resume-builder

---


# Resume Builder（简历生成与优化）

这个 skill 干三件事：

1. **结构化生成**：从用户经历产出一份符合中文求职市场审美的简历
2. **STAR 法则改写**：把"参与了 X"这种弱句子，改写成"通过 X 实现 Y，结果 Z"
3. **ATS 关键词优化 + 多模板导出**：保证简历能过自动筛选，并支持 docx/pdf/md

不做：JD 定向改写（那是 jd-resume-tailor 的事，请在那里做"针对某 JD 改简历"）

---

## 何时触发

- "帮我写一份简历"
- "我的简历太弱了 / 没有亮点 / 看起来不专业"
- "把这段经历用 STAR 改一下"
- "简历里关键词够不够"
- "导出 PDF / docx 简历"
- 用户上传简历但没明确说"针对某 JD 改" → 触发本 skill；如果说了"针对 X 公司 / X 岗位改" → 调用 jd-resume-tailor

---

## 工作流

### Step 1: 摸清简历当前状态

如果用户**有简历文件**（.pdf / .docx / .md / .txt）：
- pdf 走 pdf skill 解析
- docx 走 docx skill 解析
- 提取出：基本信息、教育、工作经历、项目经历、技能、其他

如果用户**没有简历**：
- 用 AskUserQuestion 收集信息（参考 `references/intake_questions.md` 里的问题清单）
- 一次问 3~4 个问题，分轮收集，避免劝退

### Step 2: 选模板

读取 `references/templates/` 决定结构：

- 互联网产品 / 运营 / PM → `templates/internet.md`
- 技术 / 研发 / 数据 → `templates/tech.md`
- 金融 / 咨询 / 商科 → `templates/finance.md`
- 通用 / 跨行业 → `templates/general.md`

如果用户没指定方向，用通用模板，但**询问一句**："你下一步主要往什么方向投？我可以用更适合那个方向的版式。"

### Step 3: 用 STAR 改写每段经历

读取 `references/star_rewrite_guide.md`，对每条工作 / 项目经历做 STAR 改写。

**STAR 不是死板的四段式**，而是确保每条 bullet 都有：
- **背景信号**（一句话点出问题大小或情境）
- **动作**（你具体做了什么，要有动词）
- **结果**（数字 / 百分比 / 排名 / 规模）

如果用户提供的信息里**没有数字**，要主动追问："这个项目用户量大概是多少？""这个优化大概提了多少？记不准的话给个量级也行。"

### Step 4: ATS 关键词检查

调用脚本：

```bash
python scripts/ats_check.py --resume <resume.md> \
    --industry internet \
    [--jd <jd.txt>]
```

脚本会：
1. 抽取简历里的关键词
2. 对照行业关键词库（来自 job-intent-tracker 或本 skill 的 `references/keywords/`）
3. 输出"已覆盖 / 建议补充"两个清单
4. 给出 ATS 友好度评分（字体单一性、表格使用、特殊符号、图片等）

**ATS 友好的硬规则**：
- 不要用 word 表格放经历（很多 ATS 解析不了）
- 不要把日期放在装饰性图片里
- 不要写两栏布局（有些 ATS 会按列读，导致顺序混乱）
- 不要插图标 / emoji 在标题里
- 字体用宋体 / 思源宋体 / Arial / Helvetica 之一

### Step 5: 多格式导出

读取 `references/export_guide.md`，按用户需求选择：

**docx 导出**（最通用，国内 HR 优先要 docx）：
- 调用 docx skill
- 用 `assets/resume_template.docx` 作为模板（如果存在）

**pdf 导出**（最终投递版）：
- 推荐流程：先 docx → 再用 word/libreoffice 转 pdf
- 直接生成 pdf 用 reportlab 比较丑，不推荐
- 调用 pdf skill 做后处理（加密 / 元数据清理）

**markdown 导出**（备份 + GitHub）：
- 直接写 .md 文件即可

**默认行为**：除非用户指定，同时输出 docx + md 两个版本。

### Step 6: 自检 & 反馈

输出后做一次自检（写到聊天里给用户看，不用单独存文件）：

```
✓ 长度：< 1 页（应届）/ ≤ 2 页（社招）
✓ 联系方式齐全（手机 + 邮箱，可选 GitHub/作品集）
✓ 每段经历都有量化结果
✓ 关键词覆盖率（vs <industry> 行业库）：__%
✓ ATS 友好度：__/10
⚠ 待用户确认：<还需要补的信息>
```

---

## 反模式（不要做）

- ❌ 帮用户编数字（说"提升 30%"但用户根本没说过）—— 必须基于用户提供的信息，不知道就标 `[待补充：具体数字]`
- ❌ 用形容词堆砌（"具有出色的沟通能力" "认真负责" "有上进心"）—— 删掉
- ❌ 一段经历写超过 5 条 bullet —— 太密会被 HR 跳过
- ❌ 写"自我评价"长篇 —— 国内现在不流行，1~2 行 summary 即可
- ❌ 把所有公司都写一样的 bullet 数 —— 重要的多写，次要的少写
- ❌ 把"熟悉 / 了解 / 会用"当能力描述 —— 改成"用 X 做了 Y"

## 与其他 skill 的协作

- 用户接着说"针对这家公司改一下" → 转 `jd-resume-tailor`
- 用户接着说"准备面试" → 转 `interview-prep`
- 用户没确定方向就来改简历 → 先反问"你打算投什么方向？"，必要时转 `job-intent-tracker`

