Skip to content

开源工具评测:ai-job-search把求职变成一条可编程的自动化流水线 ​

一、开篇:找工作的痛,AI 真的能帮上忙吗? ​

如果你正在找工作,或者经历过求职季,一定对下面这些场景深有体会:

  • 为每个岗位手动改简历,改到第 20 份时已经分不清哪个版本投了哪家公司;

  • 精心排版的 LaTeX 简历,投进 Workday/Lever 后邮箱变成乱码、bullet 列表消失、多列布局读出火星文;

  • 求职信写来写去都是"我非常重视这个机会"的模板话,自己看着都尴尬;

  • 面试前对着 JD 瞎猜会考什么,准备了半天结果问的全是没料到的方向;

  • 海投 200 份没有回音,想复盘哪个环节出了问题,却连投了哪些岗位都记不清。

市面上大多数"AI 简历工具"做的事,就是把你的名字和岗位名称丢进模板,生成一份看起来还行的 PDF——表面定制,实则填空。

今天要介绍的这个开源项目 ai-job-search,走的是完全不同的路线。它不是一个"AI 帮你写简历"的小工具,而是一个把求职变成可编程流水线的完整 Agent 工作台——从搜索职位、评估匹配度、定制简历、ATS 验证、面试准备到结果追踪,一条命令链全跑完。作者本人用它投了 69 份申请、拿到 20 次一面、最终成功入职 AI 工程师。

Image


二、ai-job-search 是什么? ​

ai-job-search 是丹麦开发者 Mads Lorentzen 打造的一款基于 Claude Code 的端到端求职自动化框架,2026 年 3 月开源,GitHub 收获约 19k Star,MIT 协议完全开源。

它的核心理念一句话概括:Fork 仓库 → 填写你的职业档案 → 让 Claude 替你评估职位、定制简历、撰写求职信、准备面试。

整个框架围绕 13 个 Slash 命令构建,分为核心工作流和扩展能力两层:

类别命令功能
核心流程/setup建立候选人档案(文档文件夹 / 粘贴 CV / 访谈式 三选一)
核心流程/scrape扫描多个招聘门户,去重后按匹配度排序
核心流程/rank批量打分岗位,返回 Top-N 短名单
核心流程/apply完整起草→审查→编译→ATS 验证流程
核心流程/outcome记录申请结果,归档材料,反推校准档案
扩展能力/interview阶段专属面试准备包 + 模拟面试
扩展能力/expand从 GitHub/Portfolio/Kaggle 补齐技能档案
扩展能力/upskill分析技能差距,生成带资源的学习计划
扩展能力/add-portal为本地市场生成招聘门户搜索 Skill
扩展能力/add-template注册自定义 CV/求职信模板(LaTeX/Typst)
扩展能力/notion-sync单向同步申请管线到 Notion 数据库
扩展能力/gmail-sync从 Gmail 自动检测面试邀请/拒信等状态
扩展能力/html-report生成离线可交互的申请追踪仪表盘

这些命令不是孤立的——上一步的输出就是下一步的输入,所有命令共享同一份候选人档案,档案随流程持续演进。

最关键的设计是 Drafter-Reviewer 双 Agent 协作:起草者(Drafter)写简历和求职信,审查者(Reviewer)从全新空上下文启动,独立调研公司、审查草稿,然后起草者根据反馈修订。这种分离避免了"自己写的自己看不出问题"的常见 AI 陷阱。

Image


1. 不是模板填空,是真正的岗位级定制 ​

大多数 AI 简历工具的逻辑是:通用模板 + 关键词替换。ai-job-search 的做法是:先对你的档案和目标岗位做 5 维匹配评分(技能、经验、行为特质、地点、职业方向),然后根据评分结果有针对性地重写简历的每一条经历描述——突出匹配的部分,弱化不相关的部分,对真实存在的短板给出诚实的桥接表述,绝不编造技能或经验。

2. PDF 视觉 + ATS 文本层双重验证 ​

这是整个项目最硬核的设计。所有用过 LaTeX 写简历的人都踩过这个坑:.tex 文件看起来没问题,PDF 打开也挺漂亮,但投进 ATS 系统就变成一团乱码。

ai-job-search 把验证作为强制不可跳过的一步写死在 /apply 流程里:

  • 视觉验证:编译 PDF 后 Claude 亲自"看"渲染结果,确保 CV 恰好 2 页、无孤立标题、Cover Letter 恰好 1 页、签名与正文同页;

  • ATS 验证:用 pdftotext 提取 PDF 文本层,检查联系方式是否为明文字符、阅读顺序是否正确、岗位关键词覆盖度如何。

不是让 AI 承诺"一定没问题",而是编译出真实 PDF 后客观验证。

3. 贵/便宜命令分离,工程化控制成本 ​

为什么要拆成 /rank 和 /apply 两个命令?因为:

  • /rank 廉价、快速、可并行——一次跑 30 个岗位,只做文本匹配打分;

  • /apply 昂贵、精细、单发——一次一个,要起独立 Reviewer Agent、做公司调研、编译 PDF、双重验证。

用便宜的排序过滤,让昂贵的申请只花在 Top-N 上。 这是成熟 AI Agent 工作流的工程思维,而不是"把所有事扔进一个大 Prompt"。

4. 求职是流水线,不是单一步骤 ​

找工作的完整链路是:搜岗位 → 评估匹配 → 写简历 → 写求职信 → 编译 PDF → 检查 ATS → 面试准备 → 跟踪结果 → 反推校准。任何一个环节掉链子,整条链白跑。ai-job-search 把每个环节都做成了独立命令,又通过共享档案串成完整流水线。

5. 作者亲自验证有效 ​

这不是一个"为了开源而开源"的项目。作者 Mads Lorentzen 是地球物理学家出身,2025 年底被裁后用这个框架跑自己的求职,69 份定制申请、20 次一面、1 份 offer,2026 年 6 月入职 AI 工程师。他对每个雇主都坦诚说了自己用 AI 工具求职,反而引发了很多技术讨论。


四、核心优势:和同类工具比,强在哪? ​

对比维度ai-job-searchAIHawkcareer-ops普通 AI 简历生成器
核心思路深度定制 + 验证自动填表海投管道化批量处理模板填空生成
追求目标质量数量效率速度
简历定制5维评分 + 相关性加权裁剪通用模板A-F评分系统关键词替换
PDF/ATS 验证✅ 双重强制验证❌⚠️ 部分❌
多Agent协作✅ Drafter-Reviewer分离❌⚠️ 多Worker❌
面试准备✅ 阶段专属包+模拟❌❌❌
结果追踪✅ CSV+HTML仪表盘⚠️ 基础✅ TUI仪表盘❌
技能差距分析✅ /upskill❌❌❌
本地运行✅ 数据全在本地⚠️ 浏览器自动化✅ 本地❌ 云端
开源可扩展✅ MIT + 门户/模板扩展⚠️ 部分开源✅❌ 闭源
是否帮你点提交❌ 只帮你写好,提交自己来✅ 自动提交⚠️ 半自动❌

ai-job-search 的差异化亮点总结:

  1. 双 Agent 审查机制——Reviewer 从空上下文启动,独立调研公司后审查草稿,避免"自写自夸";

  2. 真实产物验证——不依赖 AI 的"自我感觉良好",编译 PDF 后视觉检查 + 文本层 ATS 校验;

  3. 相关性加权裁剪——简历超页时不是机械删最旧的经历,而是按"岗位相关性 × 独特性 × 求职信依赖度"评分后删最低分;

  4. 完整流水线覆盖——从搜岗到面试到复盘,13 个命令覆盖求职全链路;

  5. 高度可扩展——/add-portal 支持任意招聘市场,/add-template 支持任意 PDF 模板工具链;

  6. 数据本地优先——所有职业档案、申请记录都在本地 Fork 仓库里,不依赖云端服务。

Image


五、手把手实操:跑通你的第一条求职流水线 ​

环境准备 ​

ai-job-search 的硬性依赖:

工具用途安装方式
Claude Code CLI整个框架的运行载体npm install -g @anthropic-ai/claude-code
Python 3.10+薪资工具、CI 脚本系统包管理器
Bun职位搜索 CLI 工具的运行时`curl -fsSL https://bun.sh/install
LaTeX 发行版编译 CV 和 Cover Letter PDFTeX Live / MacTeX / MiKTeX(需含 lualatex + xelatex)
poppler-utils(可选)ATS 文本层验证macOS: brew install poppler;Ubuntu: apt install poppler-utils

第一步:Fork 并克隆项目 ​

bash
# Fork 到你的 GitHub 账号,然后克隆
gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search

💡 为什么要 Fork 而不是直接 Clone?因为你需要把自己的职业档案、申请记录提交到自己的私有仓库里。Fork 后建议设为 Private。

第二步:安装职位搜索 CLI 依赖 ​

bash
# Linux / macOS / Git Bash
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search freehire-search; do
  (cd .agents/skills/$tool/cli && bun install)
done
powershell
# Windows PowerShell
$tools = @("jobbank-search", "jobdanmark-search", "jobindex-search", "jobnet-search", "linkedin-search", "freehire-search")
foreach ($tool in $tools) {
  Push-Location ".agents/skills/$tool/cli"
  bun install
  Pop-Location
}

内置 6 个门户搜索工具:4 个丹麦市场(Jobindex、Jobnet、Jobbank、Jobdanmark)+ LinkedIn(全球通用)+ freehire(技术岗位聚合)。其他市场可以用 /add-portal 扩展。

第三步:建立你的职业档案 ​

bash
# 启动 Claude Code
claude

# 在 Claude Code 中运行
/setup

/setup 提供三条路径,自动检测你有什么材料:

  • 路径 A(推荐):Documents 文件夹模式——把 CV PDF、LinkedIn 导出、学位证、推荐信、过往申请材料丢进 documents/ 文件夹,命令自动读取。幂等设计,可安全重复运行;

  • 路径 B:粘贴 CV——在聊天中直接粘贴完整 CV 文本;

  • 路径 C:访谈式——通过问答访谈一步步建立职业档案。

⚠️ 关键提醒: 资料深度直接决定输出质量。不要只写"Python, Machine Learning",而要写"用 Python 和 scikit-learn 构建了客户流失预测的 ML 管道,AUC 从 0.78 提升到 0.89"。

第四步:搜索岗位 ​

bash
/scrape

这会同时搜索所有已启用的招聘门户,抓取符合你档案的职位,去重后按匹配度排序展示。如果返回的岗位太多看不过来:

bash
/rank --top 10

/rank 会并行派多个 Agent 对新抓取的岗位批量打分(5 维评估),返回排名前 10 的短名单,每个岗位附诚实的优势和差距分析。

第五步:申请一个岗位(核心流程) ​

bash
/apply https://jobindex.dk/job/1234567

如果 URL 无法抓取(部分门户屏蔽自动化访问),可以直接粘贴职位描述:

bash
/apply <粘贴完整职位描述>

/apply 会自动执行完整的 6 步流水线:

  1. 解析职位描述(URL 或文本)

  2. 评估匹配度——5 维评分,标注优势和差距

  3. 起草——生成定制化 LaTeX 格式 CV 和 Cover Letter

  4. 审查——启动独立 Reviewer Agent(空上下文),调研公司后审查草稿

  5. 修订 + 编译——按反馈修订,lualatex 编译 CV、xelatex 编译 Cover Letter,视觉检查页数和排版

  6. ATS 验证——pdftotext 提取文本层,校验联系方式、阅读顺序、关键词覆盖

最终输出两份经过双重验证的 PDF,附带验证清单。系统不会替你点提交按钮——它只负责把申请材料做到最好,投递的决定由你自己做。

第六步:记录结果与复盘 ​

bash
# 记录申请结果(面试、offer、拒信、沉默)
/outcome

# 收到面试邀请后准备面试
/interview

# 生成申请追踪仪表盘
/html-report

/outcome 会归档已提交的 CV、Cover Letter 和职位原文到 documents/applications/<公司>_<职位>/,更新追踪表,并在积累一定数据后建议你回到 /setup 校准匹配框架。

/interview 基于申请存档构建阶段专属准备包:STAR 示例映射、公司/面试官调研、模拟面试角色扮演、薄弱点的诚实桥接答案。

进阶功能速查 ​

命令说明
/expand扫描你档案中链接的 GitHub/Portfolio/Kaggle,自动补齐技能
/upskill分析档案与目标岗位的技能差距,生成带学习资源的计划
/upskill <URL>针对单个岗位做技能差距分析
/add-portal为你的本地招聘市场生成搜索 Skill(自动探测 + 测试)
/add-template注册自定义 CV/求职信模板(LaTeX/Typst/任意命令行编译工具)
/notion-sync单向同步管线到 Notion(OAuth,无需 API Key)
/gmail-sync从 Gmail 自动检测面试邀请/拒信,批量确认后更新追踪
/setup --section search只重新配置搜索条件,不重建整个档案
/reset profile清除档案数据,保留框架规则
/reset all全部重置(需输入 RESET 确认)

Image


六、适用场景 & 落地案例 ​

场景一:精准求职,少投多中 ​

你的策略是"少投几份但每一份都高度定制"。每天早上启动 Claude Code,/scrape 扫新岗位,/rank 排出 Top 5,选 1-2 个跑 /apply,5-10 分钟拿到经过 ATS 验证的定制申请材料。投出去后 /outcome 记录,收到面试就 /interview 准备。

场景二:转行/跳槽期的系统化工具体验 ​

你正在从一个领域转向另一个领域(比如作者从地球物理转向 AI 工程)。/upskill 帮你分析技能差距并生成学习计划,/expand 从你的 GitHub 和作品集里挖掘可迁移技能,/apply 在写简历时诚实地桥接经验短板而不是编造。

场景三:学习 Claude Code 多 Agent 工程实践 ​

即使你不找工作,这个项目也是学习 AI Agent 工作流设计的绝佳范本:双 Agent 上下文管理、贵/便宜命令分离、真实产物验证循环、可扩展门户架构。读懂它的 .claude/commands/ 和 .claude/skills/ 结构,能直接套用到自己的多阶段 Agent 项目中。

场景四:欧洲市场求职 ​

如果你在丹麦或欧洲其他国家求职,内置的 4 个丹麦门户 + LinkedIn + freehire 开箱即用。LaTeX 简历在欧洲市场几乎是标配,而 ai-job-search 的 PDF 验证流程专门解决了 LaTeX 简历最常见的渲染坑。

场景五:非技术岗位的简历工程化 ​

虽然项目作者是技术背景,但框架本身是语言和国家无关的。/add-template 可以接入任何 PDF 模板,/add-portal 可以接入任何招聘网站,核心的档案-评估-起草-审查-验证流程对任何岗位都适用。

Image


七、客观优劣总结 ​

✅ 优势 ​

  • 真正的岗位级定制:5 维匹配评分 + 相关性加权裁剪,不是模板填空;

  • 双重验证机制:PDF 视觉检查 + ATS 文本层校验,强制不可跳过,解决 LaTeX 简历最常见的投递坑;

  • 双 Agent 审查:Reviewer 从空上下文启动,独立调研后审查,避免自写自审的盲区;

  • 完整流水线覆盖:13 个命令覆盖从搜岗到复盘的全链路,共享同一份演进式档案;

  • 工程化成本控制:贵/便宜命令分离,廉价并行排序 + 昂贵单发申请;

  • 高度可扩展:门户搜索、文档模板、评估标准都是扩展点,不绑定特定市场或工具链;

  • 数据本地优先:所有职业数据在自己的 Fork 仓库里,隐私可控;

  • 作者实战验证:69 份申请 → 20 次一面 → 1 份 offer,不是纸上谈兵。

⚠️ 局限性 ​

  • 环境搭建有门槛:需要 Claude Code、Python、Bun、LaTeX 发行版,对非技术用户不友好;

  • 不帮你点提交:只生成申请材料,投递动作需要手动完成(这是设计选择,不是缺陷);

  • 内置门户偏丹麦市场:非丹麦用户需要用 /add-portal 扩展或依赖 LinkedIn/freehire;

  • Claude Code 绑定:核心流程依赖 Claude Code,虽然框架可移植到 Codex/Gemini CLI 但需要额外配置;

  • API 费用累积:/apply 一次需要 Drafter + Reviewer 两个 Agent + PDF 编译迭代,长篇申请的 Token 成本不低;

  • 档案质量决定上限:输入单薄的档案只会得到泛泛的输出,需要花时间认真填写;

  • LaTeX 学习曲线:默认模板是 LaTeX,虽然 /add-template 支持 Typst 等,但自定义模板仍需技术能力。

⚠️ 安全提醒: 职位描述被视为不可信输入——框架不会执行其中嵌入的指令、不会抓取其中的链接。但这是指令级防御而非沙箱,遇到不熟悉的招聘网站,提交前务必 skim 一下抓取和生成的内容。从第三方 Fork 复制门户 Skill 时,务必先读代码(检查网络调用、依赖、生命周期脚本),因为这些 CLI 在你的机器上以预授权方式运行。


八、写在最后 ​

ai-job-search 真正的价值,不在于"又一个 AI 简历生成器",而在于它展示了一种成熟的 AI Agent 工作流设计范式:

  • 多命令 + 单档案:所有命令共享同一份演进式数据,每个命令按需读取;

  • 贵/便宜分离:替 AI 决定什么时候可以省 Token、什么时候必须多花;

  • 验证挂在真实产物上:不是让 AI 承诺"没问题",而是编译出 PDF 后客观验证。

这三条原则可以套用到任何多阶段 AI Agent 项目——代码审查、文档生成、数据分析,都是一样的逻辑。

如果你正处在换工作的窗口期,或者想找一个把 Claude Code 用得很深的项目来学习多 Agent 架构——这个仓库值得 Fork 下来跑一遍 /setup,半小时就能感受到 Drafter-Reviewer 循环的价值。

项目地址:https://github.com/MadsLorentzen/ai-job-search

快速上手:

bash
gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search
# 安装门户依赖后启动
claude
/setup

试试吧,也许下一个拿到 offer 的就是你。


如果这篇文章对你有帮助,欢迎收藏、转发,也可以去 GitHub 给作者点个 Star 支持一下开源项目。

📖本文阅读--次|📊全站访问--次|👥访客--人