← 返回博客
Ai预计阅读 11 分钟

把 Claude Code 变成求职流水线的人,投了 69 份简历,面了 20 场

发布于 2026年10月18日
把 Claude Code 变成求职流水线的人,投了 69 份简历,面了 20 场

“AI 求职”这一类工具一直有信誉问题,而且问题不在技术上。所有人都怀疑,它产出的不过是一份塞满关键词的 PDF,招聘官四秒就能闻出味儿来。

所以关于 ai-job-search,第一件值得报告的事,是作者拿它做了什么。这个由 Mads Lorentzen 开发、MIT 许可的框架,把 Claude Code 变成了一条求职流水线。他用它投了 69 份申请,拿到 20 场首轮面试,最后签下一份 AI 工程师的 offer。他还说,每一家雇主他都告知了自己用了这个工具。这要么是个特别好的迹象,要么是运气特别好。大概两者都有。

第二件值得报告的事是:真正有意思的工程不在写作环节,而在检查环节。

真正重要的三个命令

/setup 用来填充你的档案。三种入口:指向一个 documents/ 文件夹,粘贴一份简历,或者回答面试式的问题。作者说得很直白:档案的厚度是决定产出质量的唯一最大因素——档案单薄,产出的申请就千篇一律,再聪明的提示词也救不回来。

/scrape 会搜索招聘网站、去重、按匹配度排序。门户支持是按市场划分的:内置的覆盖丹麦(Jobindex、Jobnet、Jobbank、Jobdanmark),另外还有两个跨境技能——一个针对 LinkedIn 无需登录的公开接口,带地区参数;一个针对专注技术岗位的免费 REST API。其他市场需要用 /add-portal,它会生成并测试一个新的技能。

/apply <url> 是最有意思的那个。它跑八个步骤:解析职位描述、给匹配度打分、起草定制化的 LaTeX 简历和求职信、把两者交给一个独立的评审 agent(它有自己的上下文,可以去研究这家公司并挑草稿的毛病)、修改、编译、检查渲染出来的 PDF,最后跑一遍 ATS 检查。

为什么“编译完再看一眼 PDF”才是全部的诀窍

用语言模型生成过 LaTeX 文档的人都知道那种翻车方式。源码看着完美无缺。PDF 里第一页底部挂着一个孤零零的标题,求职信溢出到第二页、上面只有一行字,某个列表悄悄掉回了另一种字体。

这个项目把这一环闭上了。简历必须用 lualatex 编译成正好两页,且不能有孤行标题。求职信必须用 xelatex 编译成正好一页,签名要看得见。agent 会去读渲染后的页面,反复迭代,直到满足约束。

简历超长时,它不会直接把最老的那份工作砍掉。它给每一行打分,看它和这个职位的相关性、在文档内的独特性、以及求职信是否依赖它,然后删掉总分最低的那行。这是个小细节,却是很大的差别:这是一个真的为某个具体岗位删减过简历的人的做法,而不是照着规则办事。

ATS 检查是别人都不做的那部分

申请人跟踪系统读的不是你漂亮的排版。它们读的是内嵌的文本层,而 LaTeX 出了名地擅长生产一种“技术上存在、实际上等于垃圾”的文本层——图标字体渲染成一个邮件符号、提取出来却是空白;连字破坏关键词匹配;分栏把阅读顺序搅乱。

这个框架用 pypdf 或 pdftotext 提取文本层,验证联系方式以字面文本出现,检查乱码和阅读顺序,然后拿关键词覆盖率去和职位描述比对。如果两个工具都没装,它会降级成视觉关键词检查,而不是悄悄跳过。

这就是“一个能产出文档的工具”和“一个能产出经得起招聘系统检验的文档的工具”之间的差别。

诚实的约束:它拒绝编造

明文规则是不虚构技能和经历。档案支撑不了的关键词,会被标成 gap,而不是硬塞进去。这既是伦理立场,也是务实选择——编造的经历总会在面试里露馅,而工具的任务只是把你送到面试那一步。

还有一道语言门槛。/setup 会收集你会说的每一种工作语言和水平;没声明的语言直接拒,水平不够的会被标出来而不是自动拒。大多数求职工具完全不管这一块,于是你就会产出一份读起来很流利的申请,去投一个要求德语 C1 的岗位。

那个你千万别踩的隐私坑

这部分我会用粗体写在下载页上,作者确实也这么做了,但值得再说一遍:公开仓库的 fork 永远是公开的。GitHub 不允许把公开仓库 fork 成私有仓库。而 /setup 会把你的姓名、联系方式、工作经历和薪资期望写进被 git 跟踪的文件里。

fork 一下,跑一遍 setup,push,你就把自己的简历和薪资期望,连同提交历史一起发布到互联网上了。

正确的做法写在项目的安装指南里:新建一个私有仓库,把原仓库添加为 upstream 远程。这样你能拿到同样的更新流程,却没有暴露风险。只有当你打算贡献代码时,才需要 fork。

安全姿态,说得明白点

职位描述被当作不可信输入处理:里面夹带的指令不会被执行,里面的链接不会被打开。作者很谨慎地说明,这是指令层面的防御,不是沙箱。门户技能会在你的机器上无审批运行,所以从别人 fork 里借来的技能应该逐行读过——看看网络请求发往哪里,看看包清单里的依赖和生命周期脚本,离线跑一遍测试。复制文件夹这个动作是刻意设计成手动的,原因正在于此。

LinkedIn 技能自带警告:自动化违反平台条款,应当低频使用,仅供个人用途。

这套循环的成本

这些都不是免费的,作者也直说了。Claude Code 没有免费额度;你需要订阅或 API 额度。“编译再看”这一步会额外烧 token,因为 agent 要读渲染后的页面并反复迭代——有时一份简历要来回三四次。

这笔交易值不值,取决于你怎么算自己的时间。为一份只会发出去一次的文档改四轮,挺多的。但如果这份文档本来会在页脚边缘挂一个孤零零的标题,那四轮就非常便宜——因为那个标题,就是读者第一印象里“细心”和“糊弄”的分界线。

还有第二项成本容易被忽略:档案上的功夫。/setup 奖励具体——项目、工具、量化的结果、你本人做了什么而不是你的团队做了什么。档案单薄,产出的就是这一类工具人人都在产出的通用申请。工具没法凭空造出它没有的素材,而作者异常直白地说:真正的瓶颈在这里,不在模型。

它做不到的事

它没法帮你拿到内推,而大多数工作其实是靠内推赢的。它不会谈判,关于薪资它唯一知道的就是你在 setup 时敲进去的那个数字。它不知道招聘经理是你以前的同事,也不知道这个岗位挂了七个月,是因为团队对职位本身还没谈拢。

它做的是把借口拿掉。申请会是定制的,PDF 会编译通过,文本层会可解析,语言要求会被尊重。至于拿这些去做什么,那仍然是求职本身。

这到底是什么

把 AI 的包装剥掉,这就是一个求职申请的构建系统:源码进,产物出,中间隔着一个验证阶段。模型是编译器,PDF 检查和 ATS 文本检查是测试,评审 agent 是代码评审。

正是这个视角,让它比它所属的那个品类更有意思。它不承诺帮你拿到工作。它承诺的是:你发出去的那份文档会是两页、机器可读、对你的短板诚实、并且针对职位描述定制——而当这些承诺不成立时,它会告诉你。

69 份申请、20 场面试,是个不错的样本,但不是证明。不过它比这个领域大多数工具手里的证据都更扎实,而产出它的那条流水线,你可以自己读。

相关文章