简历筛选 → HR 评估报告
整个流程在本机完成:Mail(AppleScript)→ 提取文本和联系方式 → 通读评估 → 生成 PDF 报告。
脚本目录:~/.claude/skills/resume-screening/scripts/(下文记作 $S)。
工作目录:放在会话 scratchpad,例如 $W=<scratchpad>/screening-<岗位>。
0. 明确输入
- 岗位关键词:匹配邮件标题,逗号分隔,要覆盖各种写法,例如
ai开发,AI人工智能开发。不要用AI这种太短的词,会误中其他标题。 - 时间范围:默认最近 30 天。
- 岗位要求/薪资预算:优先从标题里读,例如
重庆10-15K。评估时把薪资匹配也算进去。 - 用户没说清楚岗位时才问,其余都用默认值。
1. 导出邮件
mkdir -p "$W/export"
osascript $S/export_mail.applescript "$W/export" "ai开发,AI人工智能开发" 30
- 每封邮件导出为
export/<邮件id>/body.txt加所有附件;返回值是清单,每行包含 id、账户、日期、标题。 ~/Library/Mail没有完全磁盘访问权限,所以只能走 AppleScript。第一次运行时 macOS 会弹窗请求控制 Mail,需要用户点允许。- 邮件多时比较慢,timeout 设为 600000。
- 先看一眼清单,确认标题都是目标岗位;混进来的无关岗位直接删掉对应目录。
2. 提取
python3 $S/extract.py "$W/export" "$W/candidates.json"
- 解析 BOSS直聘通知里的姓名/性别/年龄/城市/学历/年限/期望薪资/当前公司,从简历里提取电话和邮箱,并把 BOSS 水印清洗掉,写入
resume_clean.txt。 - 同名重复投递只保留最新的一封。
- 标了
[文本过少]的是图片型简历,要用 Read 直接读原 PDF。 - 联系方式没提取到的,在
resume_clean.txt里搜电话|手机|邮箱|@,手动补进 evaluation.json。
3. 逐份通读并评估
每份简历都要完整读完:用 Read 读 resume_clean.txt,可以并行读多份。不能只看摘要或前几行。
评估维度(按岗位调整权重):
- 岗位核心能力深度:以 AI 应用开发为例,看 RAG/Agent 是否真正落地,有没有做过评测闭环(金标、bad case、指标),部署和性能优化是否具体。
- 可信度:数字是否具体且合理,项目描述是否像亲手做过的。
- 匹配度:方向(应用开发、算法、前端、RPA 等)、年限、城市、薪资预算。
- 可验证的加分项:GitHub/开源 Star、论文、真实用户量。
常见风险信号,发现就写进"风险/核实":
- 工作时间和在校时间重叠:毕业前就算工作年限,或者多段经历时间交叉。
- 复制粘贴痕迹:项目领域前后不一致,例如电商项目里出现"医学文本分类"。
- 术语堆砌:满篇"精通"、MCP/A2A/AutoGen 全都有但没有细节;不同候选人的项目高度雷同。
- 明显夸大:例如小公司 10万+ QPS、每个指标都提升几十个百分点。
- 方向不符:纯后端/前端/RPA 投 AI 岗;或者本人意向是算法岗。
- 期望薪资明显超预算,或人在异地。
- 合规灰色地带:群控、账号池、Hook 微信之类。
分档:A 优先面试(贴岗且可信)/ B 备选(有亮点但有明显短板)/ C 不推荐(写清原因,一句话即可)。
4. 写 evaluation.json
路径 $W/evaluation.json。报告读者是 HR,文字要简洁、口语化,技术名词要附带解释:
{
"title": "AI开发工程师 简历评估报告",
"role": "AI开发工程师(重庆 10-15K)",
"source": "Mail「工作邮箱」收件箱 · BOSS直聘 · 8/26–9/14 · 共 19 份",
"generated": "2026-09-14",
"criteria": "岗位核心能力深度、项目可信度、方向匹配、薪资匹配",
"recommendations": ["先约 X、Y……", "Z 面试前电话核实工作时间线"],
"interview_questions": ["……"],
"attach_tiers": ["A", "B"],
"candidates": [
{"id": "26400", "tier": "A", "expect": "15-20K",
"headline": "硕士(重庆邮电) · 1年 · 传音 AI Agent 开发",
"highlights": ["……", "……"], "risks": ["……"]}
]
}
id对应 candidates.json 里的 id。姓名、电话、邮箱、期望薪资、PDF 路径会自动合并;evaluation 里写了同名字段则覆盖,例如 BOSS 昵称和真名不一致时写"name",手动补的联系方式写"phones"。candidates的顺序就是报告里的顺序,同一档内把更推荐的放前面。- C 档只需要写
risks,作为不推荐原因。
5. 生成 PDF
python3 $S/build_report.py "$W/candidates.json" "$W/evaluation.json" "<输出目录>/<岗位>_简历评估报告.pdf"
- 报告包含:概览、结论与建议、A/B 档联系方式速查表(带附件页码)、每人的评估卡片、C 档原因表、面试问题;后面按顺序附上 A/B 档原始简历 PDF。加
--no-attach则不附简历。 - 依赖:Google Chrome(HTML 转 PDF)、poppler 的
pdfinfo/pdfunite(brew install poppler)。 - 输出目录:用户没指定时,放在当前工作目录下的
<岗位>_简历筛选/。 - 生成后必须核对:用 Read 读输出 PDF 的前几页,确认中文、表格、页码显示正常,联系方式没有串行或错位。
6. 回复用户
在终端里汇报:A/B/C 档各几人,每人一句话结论,PDF 路径,以及需要人工核实的点。
隐私:报告里有候选人手机号和邮箱。不要发布成 Artifact,不要上传或发送到任何外部服务(包括代发邮件),除非用户明确要求。