把求职做成流水线:69 份申请、20 个一面,这套开源框架拆开给你看

更新 2026-10-18 半天搭环境 + 每个岗位约 20 分钟 难度 ★★★☆☆作者 Skills 编辑部

相关搜索

这篇用到的 skill(3)

值得抄的不是"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,简历就挂在公网上了。

正确顺序是这样:

bash
# 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. 装四样东西,一样都不能少

bash
# 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 建档,深度决定后面所有输出

bash
claude
# 进入 Claude Code 后
/setup

它会给你三条路:读你 documents/ 文件夹里已有的材料(CV 的 PDF、LinkedIn 导出、学位证、推荐信、历史申请)、直接粘贴一份 CV、或者走一遍访谈。它会先探测你有哪些材料再问,重复跑也不会把已有内容覆盖乱。

官方 README 里有一句大实话:输出质量最大的变量是你的档案有多厚。只写"Python、项目管理"和写"用 scikit-learn 搭过客户流失预测的 ML 流水线",后面能定制出的东西完全不是一个量级。

档案里还有两样别省:语言表(每个语言 + 你的水平)和底线条件(不接受的排班、最低薪资、要育儿假条款)。前者决定语言门槛怎么判,后者在打分时真的有否决权。

4. /scrape 搜岗,/rank 批量打分

bash
/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 挑

bash
/apply https://jobindex.dk/job/1234567
# 打不开就粘全文
/apply <把招聘启事全文粘在这里>

跑起来是八步:解析启事 → 五维评分 → 写 LaTeX 简历和求职信 → 另起一个全新的 Agent 去研究这家公司并挑刺 → 按意见改 → 编译并逐页检查 PDF → 验 ATS 文本层 → 交付并附核验清单。

第二个 Agent 是这套流程最像"工程"的地方。它拿到的是新上下文,不继承起草那个 Agent 的自我辩护,专门负责找漏掉的关键词、站不住的表述、以及那种一眼就能看出来的套话。挑完再回去改。

还有一个细节我很喜欢:当简历超过两页要砍内容时,它不是机械地砍"最老的经历",而是给每一行算三个分——和目标岗位的相关度、在这一份文档里的独特性、求职信是否依赖它——然后砍总分最低的那行。一条十年前但命中岗位关键词的经历,会排在一条近两年却无关的经历前面。

6. PDF 和 ATS:编译完必须读回来

大部分人止步于".tex 看着没问题"。这套流程要求的是:简历必须正好两页、没有孤立在页首的条目标题;求职信必须正好一页、签名可见、字体一致。编译一次、读渲染结果、改、再编译。

然后是 ATS 检查,这一步是很多模板的盲区:

bash
# 用 pypdf 或 pdftotext 提取 PDF 的文本层
pdftotext cv.pdf - | head -40

ATS 读的是 PDF 里嵌的文本,不是你屏幕上看到的画面。LaTeX 完全可能生成一份"人看着漂亮、机器读出来是乱码"的 PDF:邮箱位置变成图标字形、双栏排版的行交错在一起。所以框架会把文本层提出来,逐项确认联系方式是字面文本、阅读顺序正常、招聘启事的关键词覆盖到了哪些。

覆盖不到的关键词怎么办?规则是硬的:档案里真有的才补,真没有的留成缺口,不硬塞。这条和我站之前那篇用 AI 按 JD 定制简历里的结论完全一致——ATS 那关能骗过去,面试那关骗不过去。

7. 面试和复盘:/interview、/outcome

bash
/interview      # 为某个已投岗位生成面试准备包
/outcome        # 记录结果,归档这次投出去的简历和求职信

/interview 不是给你一堆通用面试题。它从这次申请的归档里取出三样东西:面试官真正读过的那版简历和求职信、招聘启事原文、之前几轮记下的反馈。然后研究公司和面试官(带"先核实再使用"的规则),把可能的问题映射到你自己的 STAR 例子上,最后可以跑一场角色扮演的模拟面试。缺口给"诚实的过渡答案",不给编造的经历。

/outcome 除了记录结果,还有个低调但实用的功能:/outcome followup 会把超过 10 天没动静的申请捞出来,用你已提交材料里的事实,起草一封短的跟进信。只起草,不发送,每份申请最多两次。

它管不到的地方:同类四个仓库的对照

求职这个方向的 skill 最近半年冒出来一堆。下面这几个我都点开看过仓库,区别写在"什么时候别用"那一列。

方案规模强在哪什么时候别用
ai-job-search(本文)54.4k star全链路 + LaTeX 双 Agent + PDF/ATS 双向验证 + 12 个命令你不想装 LaTeX;或只投中文岗位且不愿写门户适配
career-ops75.5k star同样是全流程 Agent,自述 740 条评估 / 68 投递 / 12 面 / 1 offer;带 ATS 适配器与网页仪表盘你要的是 LaTeX 级排版控制与逐页 PDF 检查,它更偏"串联各招聘系统"
ResumeSkills2.8k star简历方向的 skill 合集,挑着用,不必上整条流水线你需要搜岗、跟踪、面试准备,它只覆盖材料这一段
proficiently-claude-skills427 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 分。那个岗位你当初花了两个小时改简历——这就是这套流水线真正想帮你省下的东西。

参考来源

相关场景

换个场景也能用