把求职做成流水线:69 份申请、20 个一面,这套开源框架拆开给你看
相关搜索
这篇用到的 skill(3)
本文主体。核心技能包,负责岗位评估、简历定制、求职信与面试准备;外面再套 12 个斜杠命令组成流水线(MIT)。
npx skills add MadsLorentzen/ai-job-search -g不想装 LaTeX 时的轻量替代。只做简历这一环,纯提示词,无需 Python / Bun / TeX 环境。
下载技能包 → https://github.com/anbeime/skill/tree/main/skills/tailored-resume-generator/tailored-resume-generator如果你所在的市场只收 Word 简历,用它把 Markdown 定稿转成 .docx,跳过 LaTeX 编译。
npx skills add anthropics/skills -g
值得抄的不是"AI 帮你写简历",是它把求职拆成了可验证的流水线:先用两个硬门槛砍掉不该投的岗位,再让第二个 Agent 挑刺,最后验 PDF 文本层。门户是丹麦的,方法论不是。
2025 年底,Mads 的岗位被撤了。地球物理学家,四十岁上下,要去找一份 AI 工程师的活。
他没有海投。他打开 Claude Code,写了一套斜杠命令:建档、搜岗、打分、写简历、写求职信、让另一个 Agent 挑刺、编译 PDF 验 ATS、准备面试。半年后他签了合同。仓库叫 ai-job-search,现在 5.4 万星、1.7 万个 fork,MIT。
他在 README 里写了一句话,比那 5.4 万星更值得看:每次和雇主聊,他都主动说这套申请材料是自己搭的 AI 流水线做的。本以为会扣分,结果"通常会变成一场真正的技术讨论"。
这事跟"AI 帮你润色简历"是两码事。润色是修饰,流水线是流程:每个环节有输入、有判定、有退出条件,跑完能复查。所以这篇不吹"AI 让你变强",只拆这套流程哪几段能搬到你自己身上,哪几段搬不动。
先说清楚:这篇适合谁,不适合谁
先把容易被搞混的事实摆出来。下面这张表的每一条,我都对着仓库文件核过,不是从别人的转述里抄的。
| 项目 | 事实 |
|---|---|
| 是什么 | 一个基于 Claude Code 的求职框架:1 个核心技能包 + 12 个斜杠命令 + 4 个丹麦招聘门户的搜索 CLI |
| 谁写的 | Mads Lorentzen,地球物理学家,被裁后自用,2026 年 6 月入职做 AI 工程师 |
| 热度 | 写作时 54,382 star / 17,590 fork;2026-03-18 建仓,2026-10-18 还在推 |
| 许可 | MIT。可商用、可改、可闭源分发 |
| 依赖 | Claude Code(无免费额度,需 Pro/Max/Team 或 API 额度)、Python 3.10+、Bun、带 lualatex 与 xelatex 的 LaTeX |
| 与 Anthropic 的关系 | 无。README 明确写了不隶属、未获背书、无赞助 |
| 怎么支持作者 | 只有 Ko-fi 和提交代码。明确声明没有任何代币、加密项目或付费赞助 |
| 招聘门户 | 默认丹麦:Jobindex、Jobnet、Akademikernes Jobbank、Jobdanmark;另有 LinkedIn 与 freehire 两个跨市场入口 |
| 硬门槛 | 两个先于打分的 gate:居留/公民资格、语言。任一不过,直接不评分、不写材料 |
适合:在职想跳、被裁在找、打算转行;愿意花半天装环境;投英文岗或北欧市场;能接受"每个岗位仍要自己看一遍再按提交"。
不适合:想要一键海投的(这套流程每个岗位都要你点确认);完全不想碰命令行的;只投中国大陆岗位又不愿自己写门户适配的;以及指望 AI 替你决定职业方向的人——它只做筛选和表达,不做决策。
三、操作步骤:从 fork 到投出去,命令照抄
1. 别急着 fork,先建一个私有库
这是全篇最容易被忽略、后果最重的一步。
GitHub 不允许把公开仓库的 fork 设为私有。而 /setup 会把你的姓名、联系方式、工作经历、薪资期望写进被 git 跟踪的文件。你 fork 完、跑完 setup、顺手 push,简历就挂在公网上了。
正确顺序是这样:
# 1) 建一个空的私有库(网页或 gh 都行),然后
git clone https://github.com/你的账号/你的私有库名.git my-job-search
cd my-job-search
# 2) 把上游当 upstream,而不是当 fork
git remote add upstream https://github.com/MadsLorentzen/ai-job-search.git
git fetch upstream
git merge upstream/master # 或合并某个 release tag,更稳
# 3) 以后只在本地提交,或推到自己的私有库
git push origin master真正敏感的几类文件(投递跟踪表、薪资数据、documents/、历史申请归档)本来就在 .gitignore 里。会泄露的是你的画像文件,不是这些原始材料。
2. 装四样东西,一样都不能少
# Python 依赖(ATS 检查要用 pypdf,可选)
pip install pypdf
# 招聘门户 CLI 的依赖,脚本会自动发现所有门户并安装
python3 tools/install_portal_clis.py
# LaTeX 检查:两个引擎都得在
lualatex --version
xelatex --version四个前置条件里,LaTeX 是最容易劝退的。README 里有一句很实在的提醒:CV 用 lualatex 编译,因为在较新的 MiKTeX 上 pdflatex 常因为 fontawesome5 的字体扩展报错;求职信用 xelatex,因为它的 cover.cls 依赖 fontspec。装 TinyTeX 或 BasicTeX 还得补包,SETUP.md 里有清单。
别跳过这步去手改模板。这套流程后面所有的页数控制、孤立标题修复,都建立在"能编译出 PDF 并且能读回来"之上。
3. 用 /setup 建档,深度决定后面所有输出
claude
# 进入 Claude Code 后
/setup它会给你三条路:读你 documents/ 文件夹里已有的材料(CV 的 PDF、LinkedIn 导出、学位证、推荐信、历史申请)、直接粘贴一份 CV、或者走一遍访谈。它会先探测你有哪些材料再问,重复跑也不会把已有内容覆盖乱。
官方 README 里有一句大实话:输出质量最大的变量是你的档案有多厚。只写"Python、项目管理"和写"用 scikit-learn 搭过客户流失预测的 ML 流水线",后面能定制出的东西完全不是一个量级。
档案里还有两样别省:语言表(每个语言 + 你的水平)和底线条件(不接受的排班、最低薪资、要育儿假条款)。前者决定语言门槛怎么判,后者在打分时真的有否决权。
4. /scrape 搜岗,/rank 批量打分
/scrape # 多门户搜索、去重、按匹配度排序
/rank # 岗位太多时,先批量打分出一张短名单
/apply https://jobindex.dk/job/1234567真正值钱的是打分规则,不是搜索。它的评估框架有五维加权,外加两个先于评分执行的硬门槛:
| 维度 | 权重 | 判什么 |
|---|---|---|
| 技术技能匹配 | 30% | 核心要求是不是你的主力技能 |
| 经历匹配 | 25% | 按"做过什么"比,不按职位名比 |
| 行为/文化匹配 | 15% | 工作方式与环境偏好 |
| 职业契合与动机 | 30% | 这条路径是不是你想走的 |
| 地点与后勤 | 通过/不通过 | 不计权重,但不过就是不投 |
| 总分 | 结论 |
|---|---|
| 75+ | 强匹配,全套定制 |
| 60–74 | 可以投,求职信里正面处理缺口 |
| 45–59 | 谨慎,先和人商量 |
| 30–44 | 大概率放弃,除非有战略理由 |
| <30 | 放弃 |
两个门槛值得单独说,因为它们比分数更省时间:
- 资格门槛:招聘启事里写了"必须本国公民/永居"或要求任何级别的安全审查,直接判不通过,不评分、不写材料,并把原文引给你看。最容易搞错的一点是——沉默不等于允许。大公司校招经常把资格条件写在自己官网而不是招聘广告里,这一点框架里专门标了高风险行业。
- 语言门槛:招聘启事要求的语言你档案里根本没登记,判不通过;登记了但对方写的标准("流利""母语""C1+")看起来高于你的水平,判"标记后继续"——照常评分、照常写,但在报告里把两边原文都引给你,让你自己判断。
这两条的设计意图很清楚:把不该投的岗位在写材料之前砍掉。写一封定制求职信要花的不是钱,是你的晚上。
5. /apply:一个 Agent 写,另一个 Agent 挑
/apply https://jobindex.dk/job/1234567
# 打不开就粘全文
/apply <把招聘启事全文粘在这里>跑起来是八步:解析启事 → 五维评分 → 写 LaTeX 简历和求职信 → 另起一个全新的 Agent 去研究这家公司并挑刺 → 按意见改 → 编译并逐页检查 PDF → 验 ATS 文本层 → 交付并附核验清单。
第二个 Agent 是这套流程最像"工程"的地方。它拿到的是新上下文,不继承起草那个 Agent 的自我辩护,专门负责找漏掉的关键词、站不住的表述、以及那种一眼就能看出来的套话。挑完再回去改。
还有一个细节我很喜欢:当简历超过两页要砍内容时,它不是机械地砍"最老的经历",而是给每一行算三个分——和目标岗位的相关度、在这一份文档里的独特性、求职信是否依赖它——然后砍总分最低的那行。一条十年前但命中岗位关键词的经历,会排在一条近两年却无关的经历前面。
6. PDF 和 ATS:编译完必须读回来
大部分人止步于".tex 看着没问题"。这套流程要求的是:简历必须正好两页、没有孤立在页首的条目标题;求职信必须正好一页、签名可见、字体一致。编译一次、读渲染结果、改、再编译。
然后是 ATS 检查,这一步是很多模板的盲区:
# 用 pypdf 或 pdftotext 提取 PDF 的文本层
pdftotext cv.pdf - | head -40ATS 读的是 PDF 里嵌的文本,不是你屏幕上看到的画面。LaTeX 完全可能生成一份"人看着漂亮、机器读出来是乱码"的 PDF:邮箱位置变成图标字形、双栏排版的行交错在一起。所以框架会把文本层提出来,逐项确认联系方式是字面文本、阅读顺序正常、招聘启事的关键词覆盖到了哪些。
覆盖不到的关键词怎么办?规则是硬的:档案里真有的才补,真没有的留成缺口,不硬塞。这条和我站之前那篇用 AI 按 JD 定制简历里的结论完全一致——ATS 那关能骗过去,面试那关骗不过去。
7. 面试和复盘:/interview、/outcome
/interview # 为某个已投岗位生成面试准备包
/outcome # 记录结果,归档这次投出去的简历和求职信/interview 不是给你一堆通用面试题。它从这次申请的归档里取出三样东西:面试官真正读过的那版简历和求职信、招聘启事原文、之前几轮记下的反馈。然后研究公司和面试官(带"先核实再使用"的规则),把可能的问题映射到你自己的 STAR 例子上,最后可以跑一场角色扮演的模拟面试。缺口给"诚实的过渡答案",不给编造的经历。
/outcome 除了记录结果,还有个低调但实用的功能:/outcome followup 会把超过 10 天没动静的申请捞出来,用你已提交材料里的事实,起草一封短的跟进信。只起草,不发送,每份申请最多两次。
它管不到的地方:同类四个仓库的对照
求职这个方向的 skill 最近半年冒出来一堆。下面这几个我都点开看过仓库,区别写在"什么时候别用"那一列。
| 方案 | 规模 | 强在哪 | 什么时候别用 |
|---|---|---|---|
| ai-job-search(本文) | 54.4k star | 全链路 + LaTeX 双 Agent + PDF/ATS 双向验证 + 12 个命令 | 你不想装 LaTeX;或只投中文岗位且不愿写门户适配 |
| career-ops | 75.5k star | 同样是全流程 Agent,自述 740 条评估 / 68 投递 / 12 面 / 1 offer;带 ATS 适配器与网页仪表盘 | 你要的是 LaTeX 级排版控制与逐页 PDF 检查,它更偏"串联各招聘系统" |
| ResumeSkills | 2.8k star | 简历方向的 skill 合集,挑着用,不必上整条流水线 | 你需要搜岗、跟踪、面试准备,它只覆盖材料这一段 |
| proficiently-claude-skills | 427 star | 求职 + 简历 + 求职信三件套,轻 | 需要 PDF 编译验证或门户搜索时,它没有 |
| tailored-resume-generator | 本站实测过 | 纯提示词,零依赖,十分钟能跑完一份定制简历 | 只有简历一环;默认提示词会替你编数字,必须自己加约束 |
| 纯手工 | — | 完全可控,关键岗位最稳 | 每版 1–2 小时,投不了几份 |
选择逻辑很朴素:要全链路就选前两个,要单点就选后三个。已经在用 Claude Code、机器上有 LaTeX 的,ai-job-search 的边际成本最低;不想装环境的,先用 tailored-resume-generator 把简历这一环跑通,别一上来就搭全套。
真话段:这套流程会在哪儿卡住你
说完好的,说难听的。以下每一条都是这套框架自带的结构性限制,不是"用不好怪自己"。
| 坑 | 实情 | 怎么办 |
|---|---|---|
| 环境门槛 | LaTeX 报错能劝退一半人;pdflatex 在新 MiKTeX 上会挂 | 严格按 README 用 lualatex / xelatex;或用 /add-template 换成 Typst |
| 门户是丹麦的 | 四个默认门户全在丹麦,跨市场的只有 LinkedIn 和 freehire | 换市场跑 /add-portal 生成;中国大陆平台反爬严格,得自己写并接受不稳定 |
| 它是"跑量 + 筛得准",不是"变强" | 69 份定制申请 → 20 个一面 → 1 份合同。一面率约 29% | 把它当筛子和写作工具,别当能力放大器 |
| 一个样本 | 作者只有一个人,且是转行成功的幸存者 | 看方法,不看结果数字;你自己的转化率要自己统计 |
| ATS 通过 ≠ 面试 | 关键词覆盖只是入场券,决定权在人对内容的判断 | 别为了覆盖率往技能栏塞不会的东西 |
| 不是零成本 | Claude Code 无免费额度;PDF 渲染迭代会烧 token | 先用 /rank 批量筛,筛剩的再跑 /apply |
| 招聘启事是不可信输入 | 框架不执行启事里嵌的指令、不点正文链接,但这是指令级防御,不是沙箱 | 在不熟的网站上跑之前,自己扫一眼它抓了什么、写了什么 |
| fork 会公开 | 公开仓库的 fork 无法私有,/setup 写的画像进的是跟踪文件 | 用私有库 + upstream,见第 1 步 |
还有一条不太技术、但更重要的:这套东西的价值在"先砍后写",不在"多写"。它的两个门槛和五维打分,本质是让你在打开 Word 之前就承认"这个岗位我不该投"。很多人用 AI 求职工具的真实动机是缓解焦虑——投得越多越安心。这套流程恰好相反,它会告诉你不投,而你得听得进去。
你多半还想问(FAQ)
一定要装 LaTeX 吗?
默认模板要。CV 用 moderncv 的 banking 风格,求职信是自带的 cover.cls,两个都是 LaTeX。但框架留了口子:/add-template 可以注册任何能命令行编译出 PDF 的工具链,包括 Typst。注册时会强制跑一次测试编译,通不过就不让启用。机器实在装不了 TeX,就退回只做简历那一环的轻量 skill。
中国大陆的岗位能用吗?
方法论能,门户不能。默认四个门户全是丹麦的,跨市场的两个入口里,LinkedIn 的个人自动化访问本身违反其服务条款(仓库里也标了"仅限个人使用、控制频率"),freehire 偏技术岗且以海外为主。要投国内平台,得用 /add-portal 自己生成,而国内招聘站点的反爬强度会让这个 CLI 三天两头失效。更现实的做法:用它的建档、打分、双 Agent 改稿和 ATS 验证,搜岗仍然手动。
用 AI 做申请材料算不算作弊?
分界线是内容,不是工具。Mads 的做法是每次都主动说明,结果多数变成了技术交流——但这是他一个人的样本,别当成通用规律。稳妥的判断标准还是那句:写进去的每一句,你能不能在面试里展开讲五分钟。讲不出来就删掉,不管是谁写的。
免费吗?会不会有代币之类的东西?
代码 MIT,随便用。但跑起来要 Claude Code,而 Claude Code 没有免费档,需要订阅或 API 额度。作者明确声明项目与 Anthropic 无关联,也没有任何代币、加密项目或付费赞助,唯一的支持渠道是 Ko-fi 和提交代码。看到"官方代币""投资返利"之类说法,直接当诈骗处理。
5.4 万星说明它很好用吗?
星数是热度,不是效果。更有信息量的是仓库结构:335 个文件里,tests/ 下几十个 test_*.py,覆盖门户抓取契约、PDF 页数、权限白名单、隐私引导这些具体行为,还有 CI 跑 LaTeX 冒烟编译和 skill lint。这说明维护者在认真对待"改坏了会不会悄悄生成一份烂 PDF"这件事。星数可以刷,测试不好刷。
和我站之前那篇「用 AI 按 JD 定制简历」什么关系?
那篇解决的是单点:一份 JD 对一份简历,怎么不编造、怎么留占位符、怎么校验。这篇解决的是链路:从"投不投"开始,到"投完之后怎么复盘"。如果只想先试水,从单点那篇开始;如果已经在系统性找工作,直接上链路,把单点那篇里的"禁止编造 + 占位符"规则搬进 /apply 的提示词里。
最后:今晚能做的一件具体事
不用先装 LaTeX,也不用先 fork。
打开 ai-job-search 的 04-job-evaluation.md,把那张五维权重表和两个门槛抄进你自己的笔记,然后拿你最近投过的三个岗位重新打一遍分。
我猜至少有一个会不到 45 分。那个岗位你当初花了两个小时改简历——这就是这套流水线真正想帮你省下的东西。
参考来源
- MadsLorentzen/ai-job-search(MIT,本文核对的主仓库)
- ai-job-search · SETUP.md 第 8 节(私有库 + upstream 的更新方式)
- ai-job-search · 五维评估与两个前置门槛(04-job-evaluation.md)
- career-ops(另一个高星 AI 求职 Agent,自述 740 评估 / 68 投递 / 12 面 / 1 offer)
- Paramchoudhary/ResumeSkills(简历方向 skill 合集)
- proficientlyjobs/proficiently-claude-skills(求职 + 简历 + 求职信 skill)