公司用 AI 筛你,你为什么不用 AI 选公司?这个工具它做到了。
公司用 AI 筛人,你为什么不用 AI 选公司?一个丹麦工程师把这句话变成了 2 万 Star 的开源项目。

你上次投简历,花了多长时间
不是点"一键投递"那种——是认真投的那种。
改简历、写求职信、研究公司、对照 JD 调整表述……一份用心的申请,两三个小时打底。然后可能石沉大海,连拒信都没有。
现在有个开源项目想把这个过程自动化,而且做法出乎意料地聪明。
项目叫 AI Job Search,作者是丹麦工程师 Mads Lorentzen,基于 Claude Code 构建,MIT 协议,上线后迅速冲上 GitHub Trending,目前 Star 数突破 2 万,单日最高涨超 5000 Star。

它不是你想象的那种"一键投简历"工具
市面上的 AI 求职工具基本分两类:一类是帮你批量海投的 bot,一类是帮你润色简历的 SaaS。前者适合广撒网,后者产出通常是一份看起来 AI 味很重的稿子。
AI Job Search 做的是第三件事:把 Claude Code 变成一个懂你的求职代理人,专注于每次申请的质量,而不是数量。
整个框架的核心只有三个命令:
/setup # 建立个人档案
/scrape # 搜索并筛选职位
/apply # 对指定职位跑完整申请流程

三步工作流,拆开看看
第一步:/setup 建立你的"职业档案"
这是整个框架的地基。你可以把它理解成一次深度自我盘点,有三条路可以走:
-
文件夹导入:把 CV PDF、LinkedIn 导出文件、学历证书、推荐信丢进
documents/目录,Claude 自动读取并结构化 -
CV 粘贴导入:直接把简历文本粘进对话框
-
问答引导:Claude 像面试官一样问你过去的经历
最终,Claude 会把这些信息整理成一批结构化的 Markdown 文件:候选人档案、行为风格评估、写作语气偏好、岗位评估框架、STAR 案例库……全部存在仓库里。
你的 git 仓库就是你的职业数据库,每次申请都是一次可 review 的 diff。
这个设计有个微妙的好处:档案越详细,后续输出越精准。作者在 README 里专门强调:不要只写"Python",要写"用 scikit-learn 构建客户流失预测模型"。语境决定质量。
第二步:/scrape 搜索多平台职位
跑完设置之后,一个命令同时搜索多个求职平台,去重,然后按匹配度排序呈现结果。
内置的平台搜索工具主要针对丹麦市场(Jobindex、Jobnet 等),但也包含两个全球通用的:
-
**
linkedin-search**:调用 LinkedIn 未授权的公开接口,零依赖,支持任意地区参数——-l "Beijing, China"、-l "Shanghai"或者-l "Remote"都可以用 -
**
freehire.dev**:面向技术岗位的聚合平台,REST API 直调,无需 API Key,支持多国市场和远程筛选
如果想接入 Boss 直聘、拉勾、猎聘,还有一个命令可以做——后面说。
第三步:/apply <url> 这才是真正精彩的部分
/apply 的工作流,比你想象的复杂得多
大多数 AI 写简历工具的流程是:给我 JD → 给你简历。一次生成,结束。

这个框架不是。它跑的是一套八步闭环流水线:
① 解析 JD → ② 匹配度评估 → ③ 起草定制 CV + 求职信(LaTeX) → ④ 召唤第二个审阅 Agent → ⑤ 根据批评修改 → ⑥ 编译 PDF + 视觉检查布局 → ⑦ ATS 文本层验证 → ⑧ 输出最终结果附核查清单
其中有几个设计,值得细说。
双 Agent 起草-审阅分离
起草 Agent 写完初稿之后,框架会召唤第二个 Claude Agent——给它一个全新的上下文窗口,让它研究这家公司,然后像一个刁钻的 HR 一样批评初稿:关键词有没有遗漏?表述有没有太通用?哪里像在对每家公司说同一套话?
起草 Agent 拿到批评意见后修改,产出最终版本。
为什么这个有用?因为写作者对自己的盲点天然免疫。一个从零开始读稿子的审阅者更容易发现废话和套话。两个 Agent,两个角色,一个输出。
PDF 验证循环
LaTeX 排版出 PDF 之后,Claude 会视觉检查布局:职位标题有没有孤立到下一页?求职信有没有超过一页?字体有没有静默回退到默认字体?
如果有问题,自动加 \needspace、\enlargethispage,重新编译,再检查,直到排版干净为止。
这解决了一个真实痛点——LaTeX 模板在特定内容组合下排版会出问题,手动调是很烦的事,这里做成了自动迭代。
ATS 文本层验证
这个设计最有工程味。
LaTeX 有时会生成看起来正常、但文字提取出来是乱码的 PDF。 图标字体渲染成方块、多栏布局导致阅读顺序颠倒——人眼看没问题,但 ATS 系统用 pdftotext 提取出来一塌糊涂,联系方式全丢。
这个框架在 PDF 编译完成后,用 pdftotext 提取文本层,验证:联系方式是否以可读文本存在、阅读顺序是否正常、JD 里的关键词是否覆盖。
还有一条诚信规则:档案里没有依据的关键词,标记为差距,绝不填充进去。
相关性加权裁剪
简历超过两页时,大多数工具的处理方式是从最老的条目开始删。
这个框架不是。它对每一条内容打三维度分:
-
与目标 JD 的相关度
-
在文档内的唯一性
-
求职信是否引用了这条内容
然后删掉总分最低的那条——而不是最旧的那条。一条五年前的工作经历如果命中 JD 关键词,它比一条没啥含金量的近期经历更值得保留。
七个扩展命令,把求职做成闭环
核心三步之外,还有七个命令覆盖求职全周期:
|
命令 |
干什么 |
|---|---|
/rank |
批量给所有抓取到的职位打分,按优先级排序,标记截止日期紧急程度 |
/interview |
面试准备:研究公司和面试官,把你的 STAR 案例映射到可能的问题,模拟面试 |
/outcome |
记录申请结果(拒绝/面试/录用),归档提交材料 |
/expand |
扫描你的 GitHub、Portfolio、Kaggle、Google Scholar,发现档案里没写但实际有的技能 |
/upskill |
分析你的技能差距,给出学习计划和资源(附时间估算) |
/add-template |
注册自定义 LaTeX 简历模板 |
/add-portal |
为任意求职平台生成搜索工具 |
最后一个值得展开说一下。
中国开发者怎么用?
项目自带的平台搜索工具是为丹麦市场写的,但 /add-portal 命令是通用的:给它一个求职网站的 URL,它会分析该网站的搜索 URL 结构、结果页面布局和访问规则,自动脚手架出一个对应的 CLI 搜索工具,测试一次真实查询,确认没问题再注册进来。
理论上,Boss 直聘、拉勾、猎聘这类平台,如果页面是公开可爬取的,都可以这样接入。社区 discussions 里有一个专门的帖子汇总各国分叉版本——如果有人做了适配中国市场的版本,可以去那里找或者贡献。
全球通用的 linkedin-search 里,地区参数直接支持 "Beijing, China",这条路现在就能走。
上手需要什么
依赖不少,有必要说清楚:
# 必需
Claude Code CLI # 核心驱动
Python 3.10+
Bun # 求职平台 CLI 工具
LaTeX(TeX Live / MacTeX / TinyTeX) # CV 和求职信编译
# 可选
pdftotext(poppler) # ATS 文本层验证,没有也能跑
LaTeX 的安装是唯一稍微麻烦的地方,尤其是 Windows 上的 MiKTeX 和 fontawesome5 字体的兼容问题,README 里有专门的说明。整体算下来,全新环境大概需要 30-60 分钟完成首次配置。
适合谁,不适合谁
适合:
-
技术开发者,有一定折腾 CLI 工具的意愿
-
在意申请质量,每个职位都想认真打磨
-
需要投外企、国际公司,简历要求精准和 ATS 友好
-
想学习用 Claude Code 构建 Agent 框架的开发者(这个项目本身就是很好的参考实现)
不适合:
-
想一键海投几百家的
-
不熟悉命令行,不想装 LaTeX 的
-
只需要简单的中文简历场景
最后说一句

这个项目上线才几个月,2 万 Star,30 名贡献者,还在快速迭代。更重要的是,它的架构本身就是一个教材级的 Claude Code Agent 实现——双 Agent 起草-审阅、子 Agent 并行评分、git 仓库作为状态存储、slash command 作为工作流入口——这套思路可以直接迁移到任何其他领域的 Agent 开发上。
不管你现在是不是在找工作,都值得看一眼这个项目是怎么设计的。
GitHub 地址: https://github.com/MadsLorentzen/ai-job-search
如果觉得有收获,去给项目点个 Star ⭐——作者在 README 里说:如果这帮你省了一个周日写求职信,请他喝杯咖啡;如果帮你拿到了 offer,两杯。
你平时怎么处理求职申请?有没有自己摸索出的效率技巧?欢迎评论区聊聊。
谢谢你阅读我的文章~
我是顾北,我们下期再见!
PS:本文部分内容由AI辅助创作
更多推荐



所有评论(0)