---
name: wx-resume-manager
agent_created: true
description: "端到端简历管理：JD生成与共创、简历解析与岗位匹配、面试准备（题库+评分维度+红旗项）、面试记录归档、候选人管道跟踪、录用决策辅助。适合同步进行多岗位招聘的个人或团队。触发词：简历管理、招聘、简历分析、岗位匹配、面试准备、面试题、面试记录、候选人对比、录用决策、JD生成。"
tags: [recruiting, hiring, interview, resume, jd, candidate-tracking]
user-invocable: true
---

# WX Resume Manager — 简历管理助手

## 概述

轻量级简历管理助手，以 JD 为中心组织招聘全流程。所有数据保存在当前工作空间的 `简历管理/` 目录中，纯 Markdown 文件。

五大核心功能：
- **JD 维护**：基于模板的交互式 JD 共创
- **简历分析**：上传简历 → 匹配 JD → 生成匹配报告（支持批量）
- **面试准备**：基于 JD 和简历分析，LLM 直接生成面试题、评分维度、红旗项
- **面试记录**：面试沟通内容的结构化归档 + 管道跟踪
- **录用决策**：多候选人对比矩阵 + 录用建议

## 触发条件

任一满足即加载本 skill：
1. 用户使用 `/resume` 前缀的斜杠命令
2. 用户提及"简历管理"、"招聘流程"、"JD 生成"、"简历评分"、"候选人评估"、"面试准备"、"简历分析"、"面试记录"、"录用决策"、"该选谁"、"对比候选人"等关键词
3. 用户上传简历文件（.pdf / .docx / .txt / .md）并提到评估/打分/分析

## 目录架构

```
<workspace>/简历管理/
├── AI产品经理/
│   ├── jd.md                              # JD 文件（assets/jd-template.md）
│   ├── 候选人管理表.md                        # 候选人管道总表（assets/candidate-tracker.md）
│   └── 候选人/
│       ├── 张三/
│       │   ├── 简历基本情况.md              # 简历摘要
│       │   ├── 简历分析结果.md              # 匹配报告
│       │   ├── 面试准备材料.md              # 面试题+评分维度+红旗项
│       │   └── 面试记录-20260616.md         # 面试记录（可选，多份）
│       ├── 李四/
│       │   ├── 简历基本情况.md
│       │   ├── 简历分析结果.md
│       │   ├── 面试准备材料.md
│       │   └── 面试记录-20260618.md
│       └── ...
├── 后端开发工程师/
│   ├── jd.md
│   ├── 候选人管理表.md
│   └── 候选人/
│       └── ...
└── ...
```

**规则：**
- 每个岗位一个文件夹，文件夹名即为岗位名称
- 岗位下必须有 `jd.md` + `候选人管理表.md`（创建 JD 时自动生成）
- 每个候选人在 `候选人/` 下有独立子文件夹，文件夹名即为候选人姓名
- 同名候选人自动加序号：`张三/`、`张三-2/`、`张三-3/`
- 候选人文件夹必须包含：`简历基本情况.md` + `简历分析结果.md`
- 面试记录以 `面试记录-YYYYMMDD.md` 命名，存放在候选人文件夹内

**如何发现已有 JD：** 扫描 `<workspace>/简历管理/` 下所有包含 `jd.md` 的子目录，目录名即为岗位名称。

---

## 管道状态定义

所有候选人在整个招聘流程中的状态，统一在 `候选人管理表.md` 中维护：

| 状态标记 | 含义 | 触发条件 |
|----------|------|----------|
| 📥 待筛选 | 简历已上传，尚未分析 | 上传简历时 |
| 👀 待面试 | 通过初筛，推荐面试 | 匹配度 ≥60% 时自动设置 |
| 🗓 已约面 | 已确认面试时间 | 用户手动更新 |
| 📝 面试中 | 正在进行第 N 轮 | 记录面试时自动设置 |
| ⏳ 待反馈 | 面试完成，等待面试官反馈 | 面试记录保存后 |
| ✅ 通过 | 本轮通过，进入下一轮或 Offer | 面试结论为"通过" |
| ❌ 不通过 | 本轮未通过，终止流程 | 面试结论为"不通过" |
| 🎉 已发 Offer | 已发出录用通知 | 用户手动更新 |
| 🤝 已入职 | 候选人已到岗 | 用户手动更新 |

---

## 业务操作

---

### 一、JD 维护

#### `/resume new-jd` — 创建新的岗位 JD

此命令进入**交互式 JD 共创模式**。JD 模板参考 `assets/jd-template.md`。

---

**第一阶段：启动 & LLM 预生成**

1. 询问职位名称：`请告诉我需要招聘的岗位名称（如"AI产品经理"）：`
2. 检查 `<workspace>/简历管理/` 下是否已存在同名岗位目录 → 存在则提示 `岗位「XX」已存在，是否基于现有 JD 修改？`
3. 用户确认岗位名称后，**使用 LLM 基于 `assets/jd-template.md` 模板预生成 JD 草案**，模板结构：
   - `# 岗位 JD — {岗位名称}`
   - `## 岗位概述`
   - `## 岗位职责`
   - `## 任职要求`（必须满足 + 加分项）
   - `## 能力模型`（维度 / 类别 / 权重 / 评估标准）
   - `## 岗位信息`（部门、汇报对象、地点、薪资、模式）
   - `## 面试流程`

4. 将预生成的 JD 展示给用户，引导讨论：

```
以下是根据「<职位名称>」预生成的 JD 草案，请审阅：

<展示完整 JD>

📋 接下来你可以：
• 直接对草案提出修改意见
• 上传一份已有的 JD 文档（.pdf/.docx/.txt/.md），我会提取并合并
• 输入"确认"直接保存当前版本
• 告诉我更多公司背景/行业信息，我重新生成更精准的版本

请提出你的修改意见：
```

---

**第二阶段：多轮讨论打磨**

交互循环，每轮：

1. 用户提出修改意见 / 上传 JD 文档 / 补充背景信息
2. **上传文件** → 使用 Read 工具提取内容，融入模板结构（上传内容优先，LLM 补充缺失项）
3. **文字修改** → 直接更新 JD 草案对应部分
4. 展示更新后的 JD
5. 询问：`是否还需要调整？输入"确认"保存，或继续提出修改意见：`

---

**第三阶段：保存**

用户确认后：

1. 创建目录：`<workspace>/简历管理/<岗位名称>/`
2. 创建子目录：`<workspace>/简历管理/<岗位名称>/候选人/`
3. 写入 `jd.md`
4. **自动创建 `候选人管理表.md`**：基于 `assets/candidate-tracker.md` 模板，初始化管道总表

```
✅ JD 已保存：<职位名称>
   候选人管理表.md 已创建

📎 接下来可以上传简历进行匹配分析：
   • 现在上传 → 直接拖入简历文件或粘贴文本
   • 稍后分析 → 使用 /resume evaluate
```

如果用户立即上传简历，无缝衔接 evaluate 流程。

---

#### `/resume edit-jd` — 修改已有 JD

1. 扫描 `<workspace>/简历管理/` → 列出所有岗位 → 用户选择
2. 展示当前 `jd.md` 内容
3. 进入多轮讨论（同 new-jd 第二阶段）
4. 用户确认后保存覆盖 `jd.md`

```
✅ JD 已更新：<职位名称>
```

---

#### `/resume list-jd` — 查看所有岗位 JD

扫描 `<workspace>/简历管理/` 下所有包含 `jd.md` 的目录，展示：

| 岗位名称 | JD 更新时间 | 候选人数量 |
|----------|------------|-----------|
| AI产品经理 | 2026-06-16 | 3 |
| 后端开发工程师 | 2026-06-14 | 1 |

（候选人数量 = `候选人/` 目录下子文件夹数量）

---

### 二、简历分析

**核心原则：每份简历必须对应一个 JD。**

---

#### `/resume evaluate` — 上传简历并分析

**第一步：接收简历**

```
请上传简历文件（支持 .pdf / .docx / .txt / .md），或直接粘贴简历文本：
```

支持批量：用户一次可上传多份简历，系统逐份处理后输出横向对比总览。

**第二步：结构化信息提取**

使用 LLM 从简历中按以下维度提取结构化信息：

| 维度 | 提取内容 |
|------|---------|
| 基本信息 | 姓名（必须）、手机号（可选）、年龄/工龄、现居城市、当前状态（在职/离职） |
| 教育背景 | 最高学历、学校、专业、毕业时间 |
| 工作经历 | 每段经历：公司、职位、起止时间、核心职责、关键产出 |
| 技能标签 | 技术栈、工具、证书、语言能力 |
| 项目/成果 | 代表性项目、量化成果、获奖 |
| 求职意向 | 期望岗位、薪资、行业偏好（如果简历中有） |

姓名提取失败则询问用户手动输入；手机号缺失直接用姓名作为标识。

**第三步：匹配 JD**

1. 扫描 `<workspace>/简历管理/` 下所有岗位
2. 如果没有 JD → 提示：`暂无岗位 JD，请先使用 /resume new-jd 创建岗位`，并直接引导进入 new-jd 流程
3. 有 JD → 使用 LLM 分析简历与每个 JD 的匹配度，展示推荐：

```
自动匹配结果：
  推荐岗位：「AI产品经理」（匹配度：高）
  理由：简历涉及产品规划、需求分析，与 JD 高度吻合

可选操作：
  1. AI产品经理 ✅ 推荐
  2. 后端开发工程师
  3. 创建新 JD

请选择编号或直接确认：
```

- 选择已有 JD → 继续分析
- 选择创建新 JD → 执行 new-jd 流程，完成后自动回到此处继续匹配
- **无"跳过"选项** — 简历必须对应一个 JD

**第四步：生成分析产物**

1. 确定候选人文件夹名：
   - 以姓名命名：`<姓名>/`
   - 如 `候选人/` 下已有同名文件夹，加序号：`<姓名>-2/`、`<姓名>-3/`
2. 创建候选人文件夹：`<workspace>/简历管理/<岗位名称>/候选人/<文件夹名>/`
3. 生成两份文件：
   - **`简历基本情况.md`**：按结构化提取维度的完整摘要
   - **`简历分析结果.md`**：基于 `assets/match-report-template.md` 模板的匹配报告，按 JD 能力模型维度评分
4. **更新 `候选人管理表.md`**：
   - 在候选人列表中添加该候选人的行
   - 更新管道概览计数
   - 状态设为 👀待面试（匹配度≥60%）或 📥待筛选（<60%）

**输出：**

```
✅ 简历分析完成
   岗位：<岗位名称>
   候选人：<姓名>
   匹配度：XX% — {强烈推荐 / 推荐 / 可面试 / 待观察 / 不推荐}
```

**第五步：批量处理**

当用户一次提供多份简历时：
- 每份简历独立执行第二步到第四步
- 全部处理完毕后，输出「横向对比总览表」：

```
📊 批量分析完成 — <岗位名称> | 共 N 份简历

| # | 候选人 | 匹配度 | 评级 | 亮点 | 风险 |
|---|--------|--------|------|------|------|
| 1 | 张三 | 85% | 强烈推荐 | 10年产品经验 | - |
| 2 | 李四 | 62% | 可面试 | 数据分析强 | 2年一跳 |
| 3 | 王五 | 45% | 不推荐 | - | 经验严重不符 |
```

**第六步：询问是否生成面试准备材料**

简历分析完成后（单份或全部批量），**主动询问**：

```
📋 是否需要为推荐面试的候选人生成面试准备材料？
   • 输入"是"或候选人姓名 → 立即生成面试题、评分维度、红旗项
   • 输入"否" → 跳过，稍后可用 /resume interview-prep 单独生成
```

用户选择"是"时，自动为匹配度 ≥60% 的候选人生成面试准备材料（流程见「三、面试准备」）。

批量场景下，用户可指定特定候选人姓名，或输入"全部"批量生成。

---

### 三、面试准备

在面试进行之前生成考题、评分维度和红旗项。**基于 JD 能力模型和简历分析结果，由 LLM 直接生成结构化面试准备内容。**

---

#### `/resume interview-prep` — 生成面试准备材料

**用途：** 为已通过初筛的候选人生成完整的面试准备包。

**交互：**

1. 扫描 `<workspace>/简历管理/` 下所有岗位 → 用户选择
2. 列出所选岗位 `候选人/` 下所有候选人 → 用户选择（可多选）

```
请选择需要准备面试的候选人：
1. [AI产品经理] 张三 | 85% | 强烈推荐
2. [AI产品经理] 李四 | 62% | 可面试
3. [AI产品经理] 王五 | 78% | 推荐面试

输入编号（多个用逗号分隔，如 1,3）或输入"全部"：
```

**处理流程：**

1. 加载目标候选人的 `简历基本情况.md` + `简历分析结果.md` + 岗位 `jd.md`
2. 使用 LLM 分析 JD 与候选人的匹配差异，直接生成 `面试准备材料.md`：

**输出文件结构（`面试准备材料.md`）：**

```markdown
# 面试准备材料 — {候选人姓名}

> 岗位：{岗位名称} | 匹配度：XX%

## 岗位理解
<基于 JD 提炼的核心岗位要求概述>

## 面试题库

### 行为面试（STAR 原则）
1. {问题1} — 考察：{维度}
2. {问题2} — 考察：{维度}
...

### 技术/场景题
1. {问题1} — 考察：{维度}
...

### 追问与深挖
1. {追问1}
...

（共 8-12 题）

## 评分维度

| 维度 | 权重 | 1分 | 3分 | 5分 | 评分依据 |
|------|------|-----|-----|-----|---------|
| {维度1} | {X}% | {标准} | {标准} | {标准} | {依据} |
| ... | | | | | |

## 红旗项 🚩

| 检查项 | 触发条件 | 关注原因 |
|--------|---------|---------|
| 频繁跳槽 | {条件} | {原因} |
| 经历断层 | {条件} | {原因} |
| 简历与实际不符 | {条件} | {原因} |
| 沟通表达问题 | {条件} | {原因} |
| 薪资期望过高 | {条件} | {原因} |
| 文化匹配度低 | {条件} | {原因} |

## 候选人体验提醒
- {面试环境建议}
- {沟通方式建议}
- {面试时间建议}

---
*生成时间：YYYY-MM-DD HH:MM*
```

4. 保存到候选人文件夹：`<workspace>/简历管理/<岗位名称>/候选人/<姓名>/面试准备材料.md`
5. **更新 `候选人管理表.md`**：状态更新为 👀待面试

**输出：**

```
✅ 面试准备材料已生成
   候选人：<姓名>
   面试题目：N 道（行为 N + 技术 N + 追问 N）
   评分维度：N 个
   红旗项：N 项
   文件：面试准备材料.md
```

---

### 四、面试记录

独立模块，用于面试/沟通后的结构化归档。使用 `assets/interview-record.md` 模板。

---

#### `/resume log` — 记录面试沟通

**第一步：定位候选人**

1. 扫描 `<workspace>/简历管理/` 下所有岗位的 `候选人/` 目录（二级子文件夹）
2. 收集所有候选人，展示列表供用户选择：

```
请选择候选人：
1. [AI产品经理] 张三
2. [AI产品经理] 李四
3. [后端开发工程师] 王五

请输入编号或姓名关键词：
```

**第二步：接收面试内容**

```
请提供本次面试/沟通的内容（面试记录、聊天记录、通话纪要等）：
• 直接粘贴文本
• 上传文件（.txt / .md 推荐，.pdf / .docx 也可）
```

**第三步：LLM 分析生成面试记录**

1. 加载候选人匹配报告 + 岗位 JD
2. 使用 LLM 分析沟通内容，基于 `assets/interview-record.md` 模板生成记录
3. 文件命名：`面试记录-YYYYMMDD.md`（如 `面试记录-20260616.md`）
4. 保存到候选人文件夹下
5. **更新 `候选人管理表.md`**：更新该候选人状态为 📝面试中（首次面试）或 ⏳待反馈（面试完成），更新最新评分和面试官字段

**输出：**

```
✅ 面试记录已保存
   候选人：<姓名>
   岗位：<岗位名称>
   面试日期：<YYYY-MM-DD>
   本轮结论：✅ 通过 / ❌ 不通过 / ⚠️ 待定
   候选人管理表.md 已同步更新
```

---

#### `/resume list` — 查看招聘总览

优先展示 `候选人管理表.md` 内容（如存在），否则扫描目录动态生成。

```
📋 AI产品经理 — 管道状态
| 总计 | 待筛选 | 待面试 | 面试中 | 待反馈 | 通过 | 不通过 |
|------|--------|--------|--------|--------|------|--------|
| 5 | 1 | 2 | 1 | 0 | 1 | 0 |

| # | 候选人 | 匹配度 | 当前状态 | 最新评分 | 下一步 |
|---|--------|--------|---------|---------|--------|
| 1 | 张三 | 85% | ✅通过 | 4.2 | 发 Offer |
| 2 | 李四 | 62% | 📝面试中 | - | 等待二面 |
| 3 | 王五 | 78% | 👀待面试 | - | 安排面试 |
```

---

### 五、录用决策辅助

#### `/resume decide` — 多候选人对比与录用建议

**触发条件**

用户说「帮我做个录用决策」「对比一下这几个候选人」「该选谁」「给 offer 建议」

**处理流程**

1. 读取目标岗位下的所有候选人匹配报告和面试记录
2. 汇总多轮评分，计算加权总分
3. 输出候选人对比矩阵
4. 给出录用建议 + 风险提醒

**输出规范：**

```
🏆 录用决策报告 — [岗位名称]
共评估 N 位候选人

📊 候选人对比矩阵
| 候选人 | 匹配度 | 一轮 | 二轮 | 综合 | 状态 |
|--------|--------|------|------|------|------|
| 张三   | 85%    | 4.2  | 4.5  | 4.35 | ✅ 推荐 |
| 李四   | 78%    | 4.0  | 3.5  | 3.75 | ⚠️ 备选 |

🥇 首推人选：[姓名]
理由：...

💰 薪资建议：[范围]，理由：...

⚠️ 风险提示
- ...
```

---

## 特殊场景处理

| 场景 | 处理方式 |
|------|----------|
| 用户说"跟上次那个 XX 岗位差不多" | 扫描已有 JD，找到最近修改的匹配岗位，基于它创建新 JD |
| 用户给了 JD 链接 | 使用 WebFetch 抓取内容，提取关键信息填入模板 |
| 用户说"把 XX 候选人也放到 YY 岗位看看" | 复制候选人文件夹到目标岗位，重新生成匹配报告 |
| 简历内容极少/不完整 | 标注「信息不足」而非编造，提示用户补充 |
| JD 中能力模型定义不完整 | 回退到默认四维度（技能40%/经验30%/学历15%/稳定性15%） |

---

## 错误处理

| 场景 | 处理 |
|------|------|
| `/resume evaluate` 无任何 JD | 引导先创建 JD，不提供"跳过"选项 |
| 无法从简历提取姓名 | 询问用户手动输入（姓名必须） |
| 候选人文件夹重复 | 自动加序号 `-2`、`-3` |
| `/resume log` 无候选人记录 | 提示"暂无可记录的候选人，请先使用 /resume evaluate 分析简历" |
| `/resume log` 无法识别沟通内容 | 提示"无法识别内容，请确认格式" |
| `/resume interview-prep` 岗位下无候选人 | 提示"该岗位暂无可分析候选人" |
| `/resume decide` 岗位下无候选人 | 提示"该岗位暂无可对比的候选人" |
| 不支持的简历文件格式 | 提示："支持 .pdf / .docx / .txt / .md" |
| 无法解析文件内容 | 提示："无法解析该文件，请尝试粘贴文本内容" |

## 模板文件

| 模板 | 用途 |
|------|------|
| `assets/jd-template.md` | JD 创建模板，定义 JD 结构和能力模型 |
| `assets/candidate-tracker.md` | 候选人管理表模板（`候选人管理表.md`），跟踪招聘全流程状态 |
| `assets/match-report-template.md` | 简历匹配报告模板，基于 JD 能力维度评分 |
| `assets/interview-record.md` | 面试记录模板，结构化归档面试过程 |

生成对应文件时，**加载对应模板并按其结构填充内容**。

面试准备环节由 LLM 直接生成 `面试准备材料.md`，包含面试题库、评分维度、红旗项、候选人体验提醒。

---

## 工作规则

1. **数据安全**：简历包含个人隐私信息，所有输出文件存于本地工作目录，不得上传到外部服务
2. **不替代决策**：匹配评分和录用建议是辅助参考，最终决策权在用户
3. **缺信息先问**：评分需要依据，不确定的维度标注「信息不足」而非编造
4. **渐进式输出**：大型报告（批量分析/录用决策）先给摘要，再展开细节
5. **文件持久化**：每次操作后，将结果写入对应的本地文件，而非仅输出在对话中
6. **状态同步**：每次候选人相关操作（分析/面试）后，同步更新 `候选人管理表.md`
