开源工具评测:ai-job-search把求职变成一条可编程的自动化流水线
一、开篇:找工作的痛,AI 真的能帮上忙吗?
如果你正在找工作,或者经历过求职季,一定对下面这些场景深有体会:
为每个岗位手动改简历,改到第 20 份时已经分不清哪个版本投了哪家公司;
精心排版的 LaTeX 简历,投进 Workday/Lever 后邮箱变成乱码、bullet 列表消失、多列布局读出火星文;
求职信写来写去都是"我非常重视这个机会"的模板话,自己看着都尴尬;
面试前对着 JD 瞎猜会考什么,准备了半天结果问的全是没料到的方向;
海投 200 份没有回音,想复盘哪个环节出了问题,却连投了哪些岗位都记不清。
市面上大多数"AI 简历工具"做的事,就是把你的名字和岗位名称丢进模板,生成一份看起来还行的 PDF——表面定制,实则填空。
今天要介绍的这个开源项目 ai-job-search,走的是完全不同的路线。它不是一个"AI 帮你写简历"的小工具,而是一个把求职变成可编程流水线的完整 Agent 工作台——从搜索职位、评估匹配度、定制简历、ATS 验证、面试准备到结果追踪,一条命令链全跑完。作者本人用它投了 69 份申请、拿到 20 次一面、最终成功入职 AI 工程师。
二、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 陷阱。
三、为什么你应该试试 ai-job-search?
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-search | AIHawk | career-ops | 普通 AI 简历生成器 |
|---|---|---|---|---|
| 核心思路 | 深度定制 + 验证 | 自动填表海投 | 管道化批量处理 | 模板填空生成 |
| 追求目标 | 质量 | 数量 | 效率 | 速度 |
| 简历定制 | 5维评分 + 相关性加权裁剪 | 通用模板 | A-F评分系统 | 关键词替换 |
| PDF/ATS 验证 | ✅ 双重强制验证 | ❌ | ⚠️ 部分 | ❌ |
| 多Agent协作 | ✅ Drafter-Reviewer分离 | ❌ | ⚠️ 多Worker | ❌ |
| 面试准备 | ✅ 阶段专属包+模拟 | ❌ | ❌ | ❌ |
| 结果追踪 | ✅ CSV+HTML仪表盘 | ⚠️ 基础 | ✅ TUI仪表盘 | ❌ |
| 技能差距分析 | ✅ /upskill | ❌ | ❌ | ❌ |
| 本地运行 | ✅ 数据全在本地 | ⚠️ 浏览器自动化 | ✅ 本地 | ❌ 云端 |
| 开源可扩展 | ✅ MIT + 门户/模板扩展 | ⚠️ 部分开源 | ✅ | ❌ 闭源 |
| 是否帮你点提交 | ❌ 只帮你写好,提交自己来 | ✅ 自动提交 | ⚠️ 半自动 | ❌ |
ai-job-search 的差异化亮点总结:
双 Agent 审查机制——Reviewer 从空上下文启动,独立调研公司后审查草稿,避免"自写自夸";
真实产物验证——不依赖 AI 的"自我感觉良好",编译 PDF 后视觉检查 + 文本层 ATS 校验;
相关性加权裁剪——简历超页时不是机械删最旧的经历,而是按"岗位相关性 × 独特性 × 求职信依赖度"评分后删最低分;
完整流水线覆盖——从搜岗到面试到复盘,13 个命令覆盖求职全链路;
高度可扩展——
/add-portal支持任意招聘市场,/add-template支持任意 PDF 模板工具链;数据本地优先——所有职业档案、申请记录都在本地 Fork 仓库里,不依赖云端服务。
五、手把手实操:跑通你的第一条求职流水线
环境准备
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 PDF | TeX Live / MacTeX / MiKTeX(需含 lualatex + xelatex) |
| poppler-utils(可选) | ATS 文本层验证 | macOS: brew install poppler;Ubuntu: apt install poppler-utils |
第一步:Fork 并克隆项目
# Fork 到你的 GitHub 账号,然后克隆
gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search💡 为什么要 Fork 而不是直接 Clone?因为你需要把自己的职业档案、申请记录提交到自己的私有仓库里。Fork 后建议设为 Private。
第二步:安装职位搜索 CLI 依赖
# 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# 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 扩展。
第三步:建立你的职业档案
# 启动 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"。
第四步:搜索岗位
/scrape这会同时搜索所有已启用的招聘门户,抓取符合你档案的职位,去重后按匹配度排序展示。如果返回的岗位太多看不过来:
/rank --top 10/rank 会并行派多个 Agent 对新抓取的岗位批量打分(5 维评估),返回排名前 10 的短名单,每个岗位附诚实的优势和差距分析。
第五步:申请一个岗位(核心流程)
/apply https://jobindex.dk/job/1234567如果 URL 无法抓取(部分门户屏蔽自动化访问),可以直接粘贴职位描述:
/apply <粘贴完整职位描述>/apply 会自动执行完整的 6 步流水线:
解析职位描述(URL 或文本)
评估匹配度——5 维评分,标注优势和差距
起草——生成定制化 LaTeX 格式 CV 和 Cover Letter
审查——启动独立 Reviewer Agent(空上下文),调研公司后审查草稿
修订 + 编译——按反馈修订,lualatex 编译 CV、xelatex 编译 Cover Letter,视觉检查页数和排版
ATS 验证——pdftotext 提取文本层,校验联系方式、阅读顺序、关键词覆盖
最终输出两份经过双重验证的 PDF,附带验证清单。系统不会替你点提交按钮——它只负责把申请材料做到最好,投递的决定由你自己做。
第六步:记录结果与复盘
# 记录申请结果(面试、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 确认) |
六、适用场景 & 落地案例
场景一:精准求职,少投多中
你的策略是"少投几份但每一份都高度定制"。每天早上启动 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 可以接入任何招聘网站,核心的档案-评估-起草-审查-验证流程对任何岗位都适用。
七、客观优劣总结
✅ 优势
真正的岗位级定制: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
快速上手:
gh repo fork MadsLorentzen/ai-job-search --clone
cd ai-job-search
# 安装门户依赖后启动
claude
/setup试试吧,也许下一个拿到 offer 的就是你。
如果这篇文章对你有帮助,欢迎收藏、转发,也可以去 GitHub 给作者点个 Star 支持一下开源项目。