# Wukong Resume

> 悟空非空也的个人简历构建 skill。当用户需要制作简历、生成简历、写简历、更新简历、做一份 PDF/Word 简历、把简历导出成 docx、ATS 友好简历时使用。触发词包括但不限于：做简历、简历、生成简历、写简历、更新简历、简历模板、HTML 简历、PDF 简历、docx 简历、投简历、找工作、换工作。即使用户只说「帮我搞份简历」或「我要换工作了想整理下简历」，只要上下文涉及简历制作，都应触发。 也适用于：用户拿到一份招聘 JD 想针对性调整简历、想从零搭一份简历、想把现有简历内容重新整理成结构化格式的场景。 **不适合的场景**：领英 profile 优化、个人作品集网站、求职信/cover letter、简历内容润色改写（这些是不同的输出物，本 skill 只管结构化呈现）。

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

---


# 悟空非空也简历构建

## 价值观（先读这一段）

**AI 的角色是结构化呈现，不是编造内容。

经历、数据、成就、公司名、时间——这些事实必须用户提供。AI 帮的是「把散乱的信息整理成 YAML + 套进模板」，不是「凭空写一份简历」。

如果用户说「帮我写份前端工程师简历」但没给任何个人信息，先停下来问：姓名、经历、公司、时间、技能。绝不能编造经历或编造数据。这条无例外。

---

## 💡 简历内容优化建议（帮助用户提供更好的内容：

### 工作经历写法建议：
- ❌ 不好：「负责前端开发工作
- ✅ 好：「主导前端重构，首屏从 3.2s 降至 1.1s
- 💡 提示：用「动词 + 量化成果」的格式

### 成果量化建议：
- 用数字、百分比、时间、金额
- 例如：「用户留存率提升 15%」而非「提升了用户体验」
- 例如：「日均 PV 100万+」而非「访问量很大」

### 简历长度建议：
- 一页简历约 600-800 字 + 列表
- 工作经历 3-5 条最合适
- 每条经历的 highlights 3-5 条

---

## 工作流（触发后按顺序执行）

### 第一步：探明需求

不要假设。先问清楚以下三个问题：

1. **需要中文还是英文简历？**（影响文案、纸张、国内字段显隐）
2. **需要单栏模板还是双栏模板？**（单栏简约/双栏侧边栏）
3. **喜欢的风格是什么？**（使用对话卡片引导用户选择）：
  1. **tech** - 技术/程序员风格（蓝色系，现代科技感）
  2. **creative** - 设计/创意风格（紫色系，大胆创意）
  3. **business** - 商务/管理风格（深蓝黑系，专业稳重）
  4. **finance** - 金融/咨询风格（绿色金色系，高端精致）
  5. **academic** - 学术/研究风格（深灰系，简洁清晰）
  6. **literary** - 文学/文字工作者风格（米黄棕色系，优雅书卷气）
  7. 自定义风格 - 用户可以自行修改 CSS 变量

另外确认：
- 是「从零做」还是「更新已有简历」？
- 有没有现成的 `index.html` / 旧简历文本 / LinkedIn 导出？

如果用户只说「帮我做份简历」什么都没给，把这些问题问一遍。一次问完，别挤牙膏。

### 第二步：收集/整理信息（后台用 YAML 当临时结构化数据，用户不用碰）

- **从零做**：直接对话收集信息，按顺序问：
  1. 姓名（中文/英文都问）
  2. 职位定位（headline）
  3. 联系方式（email/phone/website/github/linkedin，至少要一个）
  4. 个人简介（summary，可选）
  5. 工作经历（至少一条，每条要：公司名、职位、起止时间、地点、成果列表）
  6. 教育背景（至少一条，每条要：学校名、学位、专业、起止时间）
  7. 技能（可选，按分类列）
  8. 项目/获奖/证书/语言（有就问，没有就跳过）
  9. 国内字段（性别/政治面貌/籍贯/婚姻/生日，可选）
  10. 照片（可选，询问用户是否有照片，并说明由于技术限制，需要用户手动将照片放到 assets/photo.jpg）
- **更新已有**：
  - 有 `index.html` → 读取 HTML 内容，把内容整理成后台临时 YAML，然后问「要改什么？」
  - 有旧简历文本/LinkedIn 导出 → 整理成后台临时 YAML，然后问「哪些地方要调整？」

校验必填信息（缺了就停下来问用户，别瞎编）：
- 姓名（至少一个）
- 职位定位
- 联系方式（至少一个）
- 工作经历（至少一条）

**后台临时 YAML 的字段含义和完整 schema 见 `references/yaml-schema.md`。** 这一步你（AI）自己读，不用给用户看。

**安全红线**：身份证号绝对不存。要证明身份就用布尔值标记，看到用户提供身份证号立刻拒绝并解释。

**重要提示 - 照片处理**：
- 如果用户在对话中提供了照片，AI 必须明确告知用户：由于技术限制，无法直接访问和保存对话中上传的图片文件
- 指导用户手动将照片放到项目的 `assets/photo.jpg` 路径下
- 生成 HTML 时仍然引用 `assets/photo.jpg`，但要向用户说明需要手动放置照片文件
- 如果用户没有照片，可以跳过，简历仍然可以正常使用

### 第三步：直接生成彩色网页版（HTML + CSS）

**产出定位**：给人看的彩色网页版简历，也是后续黑白 Word 版的信息源。

1. 用第二步整理好的后台临时 YAML，根据用户选择的风格引入对应的样式文件：
   - `tech` → 引入 `styles/style-tech.css`（技术/程序员风格）
   - `creative` → 引入 `styles/style-creative.css`（设计/创意风格）
   - `business` → 引入 `styles/style-business.css`（商务/管理风格）
   - `finance` → 引入 `styles/style-finance.css`（金融/咨询风格）
   - `academic` → 引入 `styles/style-academic.css`（学术/研究风格）
   - `literary` → 引入 `styles/style-literary.css`（文学/文字工作者风格）
   - 都必须同时引入 `styles/base.css`
   - 根据用户选择的模板类型设置 body class：
     - 单栏模板 → `<body class="template-single">`，引入 `styles/single-column.css`
     - 双栏模板 → `<body class="template-sidebar">`，引入 `styles/sidebar.css`
2. 根据 `meta.language` 选文案：
   - `zh` → 「工作经历」「教育背景」「技能」「项目」「获奖」「证书」「语言」
   - `en` → "Experience" "Education" "Skills" "Projects" "Awards" "Certifications" "Languages"
3. 根据 `meta.page_size` 设 `<html data-page="a4">` 或 `data-page="letter"`，并在 `@page` 写对应 size。
4. 日期格式化（临时 YAML 里是 `2022-03`，显示时转成）：
   - 中文：「2022.03 – 至今」
   - 英文：「Mar 2022 – Present」
5. `birthdate` 计算年龄（当前年份减出生年份，未到生日减一岁）。
6. 按下面的**字段白名单规则**决定哪些字段渲染、哪些隐藏。
7. 确保所有样式文件都在用户项目的 `styles/` 目录下。

**文件命名规范**：
- 网页版文件名格式：`{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.html`
- 中文/英文：`中文` 或 `英文`
- 单栏/双栏：`单栏` 或 `双栏`
- 风格：`tech`、`creative`、`business`、`finance`、`academic`、`literary`
- 随机数：4位数字
- 示例：`江沐恒-中文-双栏-tech-1234.html`

**HTML 生成规范、section 结构、class 命名见 `references/html-template-guide.md`。** 生成 HTML 阶段读这个文件。

完成后告诉用户：「彩色网页版已生成，使用的是【{风格名称}】风格，打开 `{文件名}.html` 即可预览 → Cmd/Ctrl+P → 另存为 PDF。接下来将基于此 HTML 生成黑白 Word 版。你也可以通过修改 styles 目录下的 CSS 文件来自定义风格。」

### 第四步：生成表格形式的黑白 Word 版（国内求职常用）

**产出定位**：给国内 HR 看的表格形式简历。从第三步生成的 HTML 文件中提取信息，生成表格布局的 Word 文档。

1. **检测 pandoc 是否安装**：
   ```bash
   which pandoc
   ```
   - 已装 → 继续
   - 未装 → 告诉用户：「表格 Word 版需要 pandoc。安装：macOS `brew install pandoc`，Windows 从 https://pandoc.org 下载安装包，Linux `sudo apt install pandoc`。不装也能用，彩色网页版和 PDF 照常输出。」然后跳过这步。

2. **读已生成的 HTML 文件**，从 HTML 结构中提取信息：
   - 姓名、联系方式、个人简介
   - 工作经历（公司、职位、时间、地点、成果）
   - 教育背景（学校、学位、专业、时间）
   - 技能（按分类）
   - 项目、获奖、证书、语言（有就提取）
   - 国内字段（性别、政治面貌、籍贯、婚姻、生日，中文简历才包含）

3. 根据语言（中文/英文）和模板（单栏/双栏）生成对应的 Markdown 文件（包含表格语法）

**文件命名规范**：
- Markdown 中间文件：`{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.md`
- Word 版文件名：`{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.docx`
- 中文/英文：`中文` 或 `英文`
- 单栏/双栏：`单栏` 或 `双栏`
- 风格：`tech`、`creative`、`business`、`finance`、`academic`、`literary`
- 随机数：4位数字，与网页版保持一致
- 示例：`江沐恒-中文-双栏-tech-1234.md`、`江沐恒-中文-双栏-tech-1234.docx`

4. 跑 pandoc 生成表格形式的 docx：
   ```bash
   pandoc {姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.md -o {姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.docx \
     --from=gfm \
     --reference-doc=<skill路径>/assets/table-reference.docx
   ```

**完整表格简历生成规则和 HTML→Markdown 提取映射表见 `references/docx-table-rules.md`。** 生成 docx 阶段读这个文件。

### 第五步：交付与后续

按产出顺序列出生成的文件清单，明确告诉用户两份简历的定位：

**彩色网页版（先交付）：**
- `{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.html` + `styles/*.css` → 浏览器打开预览彩色简历，Cmd/Ctrl+P 打印成 PDF

**黑白 Word 版（后交付）：**
- `{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.md` → 中间产物，包含表格语法
- `{姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.docx` → 表格形式的黑白简历，国内求职常用

> 彩色版用于展示 / 打印 PDF；表格版用于国内 HR 投递。

然后提示后续工作模式（**这是零依赖路线的必然结果，必须说清楚**）：

> 改简历内容 → 直接跟我说「把 XX 公司的经历改成 YY」「把技能改成 ZZ」 → 我会更新 HTML 并重新生成 docx。
> 切换中英文 / 切换模板 → 直接跟我说「换成英文」「换成双栏模板」 → 我会更新 HTML 并重新生成 docx。
> 没有 `build` 命令，AI 就是渲染器。

## 后台临时 YAML 速查（内部参考，不用给用户看）

完整 schema 见 `references/yaml-schema.md`。

```yaml
meta:
  language: zh              # zh | en
  template: single          # single | sidebar
  page_size: A4             # A4 | Letter
  name_zh: 张三
  name_en: Zhang San

basics:
  headline: 高级前端工程师
  photo: assets/photo.jpg   # 可选
  birthdate: 1995-06        # 渲染器算年龄
  gender: 男                # 国内字段
  political_status: 中共党员
  hometown: 浙江杭州
  marital_status: 未婚
  location: 上海
  email: ...
  phone: ...
  website: ...              # 可选
  github: ...               # 可选
  linkedin: ...             # 可选
  summary: |
    ...

experience:
  - company: ...
    role: ...
    start: 2022-03
    end: 至今
    location: ...
    highlights: [...]

education: [...]
skills: [...]
projects: [...]        # 可选
awards: []             # 可选
certifications: []     # 可选
languages: []          # 可选
```

## 字段白名单规则（铁律，渲染时硬编码）

同一份 `resume.yaml`，三种产出的字段显隐不同。**这是 ATS 合规和海外简历禁忌的核心，不能靠用户自觉。**

| basics 字段 | HTML 中文模板 | HTML 英文模板 | docx |
|---|---|---|---|
| photo | 显示 | **隐藏** | **剥离** |
| birthdate→年龄 | 显示 | **隐藏** | **剥离** |
| gender | 显示 | **隐藏** | **剥离** |
| political_status | 显示 | **隐藏** | **剥离** |
| hometown | 显示 | **隐藏** | **剥离** |
| marital_status | 显示 | **隐藏** | **剥离** |
| headline | 显示 | 显示 | 显示 |
| location | 显示 | 显示 | 显示 |
| email | 显示 | 显示 | 显示 |
| phone | 显示 | 显示 | 显示 |
| website | 显示 | 显示 | 显示 |
| github | 显示 | 显示 | 显示 |
| linkedin | 显示 | 显示 | 显示 |
| summary | 显示 | 显示 | 显示 |

**实现方式**：
- HTML 生成时，英文模板直接不输出 `photo / domestic-fields` 节点。
- docx 生成时，这些字段一行都不写进 `resume.md`。

## 生成产物清单

每次触发 skill 完成后，用户项目里应有：

```
用户项目/
├── assets/
│   └── photo.jpg                    ← 用户提供（如声明了 photo 字段）
├── {姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.html      ← 彩色网页版，浏览器打开打印 PDF；也是黑白 Word 版的信息源
├── styles/
│   ├── base.css                     ← 从 skill assets 复制
│   └── <template>.css               ← 单栏或双栏，从 skill assets 复制
├── {姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.md        ← 从 HTML 提取信息生成的中间产物（黑白 Word 的 Markdown 源）
└── {姓名}-{中文/英文}-{单栏/双栏}-{风格}-{随机数}.docx      ← pandoc 生成的纯黑白 Word 版（需 pandoc 已装）
```

**文件命名说明**：
- 姓名：用户的中文姓名或英文姓名（根据语言选择）
- 中文/英文：`中文` 或 `英文`
- 单栏/双栏：`单栏` 或 `双栏`
- 风格：`tech`、`creative`、`business`、`finance`、`academic`、`literary`
- 随机数：4位数字，如 1234
- 示例：江沐恒-中文-双栏-tech-1234.html、江沐恒-中文-双栏-tech-1234.md、江沐恒-中文-双栏-tech-1234.docx

## 排查（用户反馈问题时读）

- 「打印出来侧边栏变白了」→ 读 `references/print-stability.md`，背景色丢失排查清单。
- 「分页把经历切断了」→ 读 `references/print-stability.md`，分页控制部分。
- 「docx 里 ATS 读不出经历」→ 读 `references/docx-ats-rules.md`，检查层级和 bullet 用了原生 Markdown 语法。

---

## ⚡ 快速修改菜单（完成简历后提供给用户）

当用户说「帮我改一下」但没说具体改什么时，提供这个菜单：

### 常用修改选项：
1. **修改联系方式** - 更新电话、邮箱、GitHub 等
2. **更新工作经历** - 添加新经历、修改旧经历
3. **添加/修改技能** - 更新技能列表
4. **换个风格** - 切换不同的视觉风格（tech → creative 等）
5. **换个模板** - 单栏 ↔ 双栏切换
6. **中英文切换** - zh ↔ en
7. **添加项目/获奖/证书** - 补充其他信息
8. **微调排版** - 调整边距、字体等
9. **重新生成** - 基于现有内容重新生成 HTML + docx
10. **导出为 PDF** - 指导如何打印成 PDF

### 快捷命令示例：
- 「把电话改成 139-xxxx-xxxx」
- 「换用 literary 风格」
- 「加个最近的项目」
- 「把性别去掉」

---

## 📋 简历完成后检查清单

交付简历时，可以提醒用户检查：

### 📝 内容检查
- [ ] 姓名、联系方式正确无误
- [ ] 工作经历时间线合理（无重叠、无空白）
- [ ] 成果描述量化（有数字、百分比）
- [ ] 没有拼写错误或语法错误

### 🎨 样式检查
- [ ] 选择的风格适合目标岗位
- [ ] 简历长度控制在 1-2 页
- [ ] 排版清晰，重点突出

### 🔧 功能检查
- [ ] 链接可以正常访问（GitHub、LinkedIn、个人网站）
- [ ] 照片位置正确（中文简历）
- [ ] 打印预览效果满意

### 📄 导出检查
- [ ] PDF 导出时背景色正常
- [ ] 没有页眉页脚（URL、日期等）
- [ ] Word 版本 ATS 友好

