这不是一个"自动投简历"的工具。它是一个求职辅助框架——帮你筛选职位、量身定制简历和求职信、准备面试,但每一步都由你决策。作者用这套框架在自己失业后完成了 69 次申请、20 次一面,最终拿到了 AI 工程师的 offer。现在它开源了。
目录
1. 这项目是干什么的?
一句话:ai-job-search 是一个基于 Claude Code 的开源求职框架,帮你完成从职位搜索、简历定制、求职信撰写到面试准备的完整流程。
它不是:
-
❌ 自动投递机器人(不会自动提交申请)
-
❌ 批量海投工具(每个申请都是量身定制)
-
❌ 替代你面试的作弊工具
它是:
-
✅ 求职辅助系统:帮你筛选、评估、定制
-
✅ 本地运行:所有数据在你自己的机器上
-
✅ 开源透明:你可以审查每一行代码
仓库数据
| 指标 | 数值 |
|---|---|
| GitHub Stars | 25,400+ |
| Forks | 8,300+ |
| 许可证 | MIT |
| 最新版本 | v1.0.0(2026-07-22) |
| 语言 | TypeScript 61.9% + Python 33.0% + TeX 5.1% |
| 作者 | MadsLorentzen |
2. 作者的故事:一个真实成功的案例
作者 Mads 原本是一名地球物理学家(geophysicist)。2025 年底,他的岗位被裁了。
他没有像大多数人一样海投简历。他写了一个让 Claude Code 帮他找工作的框架——就是你现在看到的这个仓库。
他每周用自己的框架跑 /scrape → /apply → /interview 流程,对自己的求职过程进行管理。他坦诚地告诉了每一个面试官"我用 AI 辅助做了简历和求职信",结果不仅没有被扣分,反而经常引发一场技术讨论。
最终数据:
-
69 次量身定制的申请
-
20 次第一轮面试
-
1 份签署的合同
2026 年 6 月,他正式入职成为 AI 工程师。
作者的原话:"人们不停地问我这东西到底管不管用。它帮我找到了工作。现在它是你的了。"
3. 核心工作流
┌─────────────────────────────────────────────────────────┐ │ /setup │ │ 填写你的个人资料:教育背景、工作经验、技能、求职偏好 │ └────────────┬────────────────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ /scrape / /rank │ │ 搜索职位 + 匹配度评分 + 排名推荐 │ └────────────┬────────────────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ /apply <url> │ │ 评估匹配度 → 定制简历 + 求职信 → 二审 → 编译 PDF → ATS 检查 │ └────────────┬────────────────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ /outcome │ │ 记录结果 → 存档申请材料 → 更新追踪表 │ └────────────┬────────────────────────────────────────────┘ ▼ ┌─────────────────────────────────────────────────────────┐ │ /interview / /upskill / /html-report │ │ 面试准备 / 技能差距分析 / 申请仪表盘 │ └─────────────────────────────────────────────────────────┘
核心原则:所有步骤由你决策,AI 只做辅助。简历和求职信的所有内容都基于你的真实资料,绝不编造经历。
4. 前置条件:你需要准备什么
必须
| 工具 | 说明 |
|---|---|
| Claude Code CLI | 核心 AI 引擎。如果使用其他工具(Codex、Gemini CLI 等),从 AGENTS.md 开始 |
| Python 3.10+ | 用于部分工具脚本 |
| Bun | JavaScript 运行时,用于职位搜索 CLI 工具 |
| LaTeX 发行版 | 编译 PDF 简历和求职信。推荐 TeX Live / MacTeX / TinyTeX / MiKTeX |
可选
| 工具 | 说明 | 安装命令 |
|---|---|---|
| pdftotext(poppler) | 简历 ATS 兼容性检查。缺失时退化为视觉关键词检查 | macOS: brew install poppler,Debian: apt install poppler-utils,Windows: choco install poppler |
关于 LaTeX 的注意事项
-
简历使用 lualatex 编译(内置 moderncv 模板)
-
求职信使用 xelatex 编译(cover.cls 需要 fontspec)
-
如果用 TinyTeX / BasicTeX 等最小化安装,需要额外安装一些包,详见
SETUP.md
5. 快速开始(四步上手)
步骤 1:Fork 并克隆
gh repo fork MadsLorentzen/ai-job-search --clone cd ai-job-search
为什么要 fork?因为你要把自己的简历、资料、求职记录都放到这个仓库里。Fork 之后它就变成你的私人物品了。
步骤 2:安装职位搜索工具
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
}
Bash / zsh / 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
linkedin-search 和 freehire-search 零运行时依赖,bun install 只拉取 TypeScript 开发类型。
步骤 3:设置个人资料
claude # 然后在 Claude Code 中运行: /setup
/setup 提供三种路径:
| 路径 | 说明 |
|---|---|
| A - 文档文件夹 | 如果你已经有 CV 的 PDF、LinkedIn 导出、学位证书、推荐信等,放到 documents/ 文件夹即可 |
| B - 粘贴简历 | 直接粘贴一份简历文本到聊天中 |
| C - 面试式录入 | Claude 像面试一样问你,一步步收集你的经历 |
它会自动检测你有什么,然后选择最合适的路径。文档模式是幂等的(可以重复运行),随着你添加更多资料随时可以重新跑。
步骤 4:开始搜索职位
/scrape
这会同时在多个求职门户搜索匹配你背景的职位,去重后按匹配度排序展示。看到合适的,直接对 Claude 说"apply to this one"就行。
或者直接用 URL 申请:
/apply https://jobindex.dk/job/1234567
6. 所有命令详解
核心命令(必用)
| 命令 | 用途 | 说明 |
|---|---|---|
/setup | 初始化个人资料 | 三种路径(文档/粘贴/面试),自动检测 |
/scrape | 搜索职位 | 同时搜索多个求职门户,去重排序 |
/apply <url> | 申请职位 | 完整流程:评估→定制简历→求职信→二审→PDF→ATS 检查 |
扩展命令(推荐)
| 命令 | 用途 | 说明 |
|---|---|---|
/rank | 批量评分排名 | 对 /scrape 返回的职位批量评分,生成排名短名单。每个职位由独立 agent 评估五个维度,deal-breaker 直接否决 |
/interview | 面试准备 | 基于已存档的申请材料(职位描述、你的简历、面试反馈),生成阶段化面试准备包,包含模拟面试 |
/outcome | 记录结果 | 记录每次申请的结果(面试/offer/拒信/沉默),归档材料,更新追踪表。也支持 /outcome followup 自动跟进沉默申请 |
/expand | 扩展技能档案 | 扫描你已关联的公开资料(GitHub、Kaggle、Google Scholar 等),发现文档中没有明确列出的技能 |
/upskill | 技能差距分析 | 分析你的技能与目标职位之间的差距,生成优先级热力图和学习计划 |
/html-report | 生成仪表盘 | 从追踪表生成自包含的 HTML 仪表盘(离线可看,无外部依赖) |
/notion-sync | 同步到 Notion | 将求职管道发布到 Notion 数据库(只读同步,仓库文件是权威源) |
/gmail-sync | 同步 Gmail 状态 | 读取 Gmail 中面试邀请、测评链接、offer 等邮件,批量建议你确认后更新状态 |
自定义命令
| 命令 | 用途 | 说明 |
|---|---|---|
/add-template | 注册自定义模板 | 注册自己的 LaTeX 简历/求职信模板,替代默认的 moderncv |
/add-portal | 添加求职门户 | 为你所在国家的求职网站生成搜索 CLI 工具 |
管理命令
| 命令 | 用途 | 说明 |
|---|---|---|
/reset | 重置数据 | 可分别重置 profile / documents / all,确认后执行 |
7. /apply 深度揭秘:一个申请是怎么生成的
这是整个框架最核心的部分。让我们看看当你输入 /apply https://xxx 后,背后发生了什么:
第一步:解析职位
-
如果是 URL,抓取职位页面内容
-
如果 URL 抓不到(有些求职门户屏蔽自动化访问),可以直接粘贴职位描述文本
-
⚠️ 职位描述被视为不可信输入:框架不会执行职位描述中的任何指令,也不会抓取其中的链接
第二步:匹配度评估
-
将职位要求与你的个人资料对比
-
评估维度:技能匹配度、经验匹配度、文化适配、地理位置、职业发展一致性
-
给出评分和个性化建议
第三步:起草简历和求职信
-
基于评估结果,用 LaTeX 定制你的简历和求职信
-
简历使用 moderncv(banking 风格)
-
求职信使用自定义 cover.cls(Lato/Raleway 字体)
-
所有内容必须基于你的真实经历,绝不编造
第四步:二审(两个 AI 互相检查)
-
起草者(Drafter)写完后,会启动第二个 Claude agent
-
这个 Review agent 拥有全新的上下文窗口,会:
-
研究目标公司
-
审批评委和求职信初稿
-
找出遗漏的关键词、薄弱的表述、过于通用的语言
-
-
起草者收到评审意见后进行修订
第五步:PDF 编译 + 视觉检查 ✨
这是最独特的一步:
-
分别用 lualatex(简历)和 xelatex(求职信)编译 PDF
-
Claude 读取 PDF 的每一页,检查排版
-
反复调整 LaTeX 直到:
-
简历恰好 2 页,没有孤立的标题行
-
求职信恰好 1 页,签名可见,字体一致
-
-
使用
\needspace、\enlargethispage等技巧精确控制分页
为什么要做这一步?因为很多 LaTeX 模板"看起来 OK 的 .tex 文件"编译成 PDF 后会有各种问题:标题行掉到下一页、求职信溢出到第二页、项目符号字体回退到正文字体……这个框架会自动修复这些问题。
第六步:ATS 兼容性检查 ✨
-
用 pdftotext 提取 PDF 的文本层
-
检查 ATS 解析器实际看到的内容:
-
联系信息是否以纯文本形式存在
-
是否有乱码字符
-
阅读顺序是否正常
-
职位关键词覆盖率
-
-
诚信规则:简历中不支持的技能被标记为差距,绝不会硬塞进去
第七步:输出
-
展示最终简历和求职信
-
附带验证检查清单
-
你审阅后决定是否使用
8. 文件结构速览
ai-job-search/ ├── CLAUDE.md # 你的个人资料 + 工作流规则 ├── .claude/ │ ├── commands/ # 所有命令定义(/apply、/setup 等) │ ├── skills/ # 核心技能文件 │ │ ├── job-application-assistant/ # 核心申请技能(7 个文件) │ │ ├── job-scraper/ # 职位搜索编排 │ │ └── upskill/ # 技能差距分析 │ └── settings.json # Claude Code 权限配置 ├── .agents/skills/ # 职位搜索 CLI 工具 │ ├── jobbank-search/ # Akademikernes Jobbank(丹麦) │ ├── jobdanmark-search/ # Jobdanmark.dk(丹麦) │ ├── jobindex-search/ # Jobindex.dk(丹麦) │ ├── jobnet-search/ # Jobnet.dk(丹麦政府门户) │ ├── linkedin-search/ # LinkedIn 公开职位(全球通用) │ └── freehire-search/ # freehire.dev 聚合器(科技岗) ├── cv/ │ └── main_example.tex # moderncv LaTeX 模板 ├── cover_letters/ │ ├── cover.cls # 自定义求职信 LaTeX 类 │ └── OpenFonts/ # Lato + Raleway 字体 ├── documents/ # 个人资料源文件 │ ├── cv/ # 主简历(PDF 或 .tex) │ ├── linkedin/ # LinkedIn 导出(PDF) │ ├── diplomas/ # 学位证书 │ ├── references/ # 推荐信 │ └── applications/ # 历史申请记录 ├── templates/ # 自定义模板(/add-template 注册) ├── job_search_tracker.csv # 申请追踪表 ├── salary_lookup.py # 薪资对标工具 └── SETUP.md # 详细设置指南
9. 自定义与扩展
9.1 手动编辑
如果你不想用 /setup,也可以直接编辑以下文件:
| 文件 | 内容 |
|---|---|
CLAUDE.md | 完整个人资料(姓名、教育、经历、技能、目标) |
.claude/skills/job-application-assistant/01-candidate-profile.md | 结构化简历数据 |
.claude/skills/job-application-assistant/02-behavioral-profile.md | 行为风格评估 |
.claude/skills/job-application-assistant/04-job-evaluation.md | 技能匹配领域、职业目标、动机筛选 |
.claude/skills/job-application-assistant/07-interview-prep.md | 你的 STAR 事例 |
9.2 自定义简历/求职信模板
/add-template
把你的 .tex 文件(以及 .cls/.sty 和字体文件)交给它,它会:
-
采访你了解模板规则(编译引擎、字体、样式、页数限制)
-
存入
templates/目录 -
运行一次测试编译
-
激活模板,后续
/apply使用新模板
管理命令:
-
/add-template --list:列出已注册模板 -
/add-template --use <name>:切换模板 -
/add-template --use default:恢复默认 moderncv
9.3 添加你所在国家的求职门户
/add-portal
输入你当地求职网站的 URL,它会:
-
调查门户结构(搜索 URL 模式、结果页面结构、robots.txt/访问规则)
-
生成与已提供工具相同结构的 CLI 技能
-
运行一次实时查询测试
-
注册到系统中
需要认证的门户会被拒绝;有严格使用条款的门户会生成个人使用警告。
9.4 全球通用门户
项目内置了两个不限于丹麦的搜索工具:
| 工具 | 说明 |
|---|---|
| linkedin-search | 基于 LinkedIn 公开求职端点(无需登录),通过 -l 参数指定地点,全球通用。仅限个人使用 |
| freehire-search | 基于 freehire.dev 公开 REST API(JSON,无需 API Key),科技岗为主,支持地区/远程筛选 |
9.5 薪资对标
# 查看薪资工具说明 cat tools/README_SALARY_TOOL.md
你可以导入自己的薪资数据(工会统计、Glassdoor 导出、个人调研等),格式详见 tools/README_SALARY_TOOL.md。没有薪资数据时,该步骤会被跳过。
9.6 保持更新
# 预览更新会触及哪些你自定义的文件 python3 tools/check_upstream_updates.py # 更新到 tagged release(不要直接拉 master) # 详见 SETUP.md 第 8 节
10. 实际效果与建议
作者的真实数据
| 指标 | 数值 |
|---|---|
| 申请数 | 69 次 |
| 一面数 | 20 次 |
| 转化率 | 29%(行业平均约 10-15%) |
| 最终 | 拿到 AI 工程师 offer ✅ |
提升效果的关键
1. 资料深度决定质量
这是最重要的因素。薄的资料产生通用的申请,详细的资料才能产生真正的定制化结果。
-
不要只写"Python,机器学习",要写"用 Python + scikit-learn 构建了客户流失预测的 ML 流水线"
-
不要只列职位头衔,要描述具体项目、工具、职责和量化成果
-
描述你实际做了什么,而不是只写岗位要求
2. 两种求职模式
| 模式 | 说明 |
|---|---|
| 明确目标型 | 你知道想做什么行业/岗位,系统帮你精准匹配 |
| 潜在机会发现型 | 分析你的完整经历(不仅是职位头衔,还有实际工作内容),发现你没想到的职业路径 |
想用好第二种模式,在 /setup 时多花时间描述:
-
什么工作让你有成就感
-
什么工作让你疲惫
-
你希望未来多做什么
3. 简历投递后别忘了
/outcome followup 会在默认 10 天后自动提示沉默的申请,帮你写一封简洁的跟进邮件(只生成草稿,不会自动发送,且最多跟两次)。
11. 安全与隐私
你的数据
-
所有数据在你本地:个人资料、简历、求职信、申请记录都存储在你自己 fork 的仓库里
-
与 Anthropic 无关:项目是独立开源项目,不隶属于 Anthropic
-
职位描述视为不可信输入:/apply 不会执行职位描述中的任何指令,也不会抓取描述中的链接
注意事项
-
LinkedIn 搜索:仅限个人使用,自动化访问违反 LinkedIn 服务条款,请控制频率
-
Gmail 同步:
/gmail-sync读取你的 Gmail 邮件来检测申请状态,所有变更需要你逐条确认 -
Notion 同步:只读单向同步,仓库文件是权威源,不会同步回写
-
AI 生成内容:简历和求职信虽然基于你的真实资料,但建议在提交前人工审阅一遍
防诈骗提醒
该项目没有任何关联的加密货币、代币或付费赞助计划。任何声称与此相关的都是骗局。唯一支持项目的方式是:
通过 Ko-fi 链接请作者喝咖啡
在 GitHub 上贡献代码
12. 常见问题
Q1:这个适合中国国内的求职市场吗?
需要适配。职位搜索工具目前主要面向丹麦市场(Jobindex、Jobnet 等),但:
-
/add-portal可以让你添加国内求职网站 -
linkedin-search 支持全球通用
-
核心流程(简历定制、求职信、面试准备)是语言和地区无关的
Q2:不会 LaTeX 能用吗?
能。 默认模板是已经配好的,你不需要写 LaTeX 代码。框架自动编译和调整排版。如果你有自己用的模板,用 /add-template 注册即可。
Q3:会帮我自动投简历吗?
不会。 这个框架是辅助你做申请,不是代替你。每一步都需要你审阅和决策。最终输出的简历和求职信也是你手动提交。
Q4:我可以用其他 AI 工具代替 Claude Code 吗?
可以。 职位搜索技能在 Codex、Antigravity、Gemini CLI 等工具上开箱即用。完整的申请工作流可能需要社区适配,详见 AGENTS.md。
Q5:简历和求职信能直接拿来用吗?
建议先审阅再提交。 虽然所有内容都基于你的真实资料,机制上也不允许编造经历,但 AI 生成的内容总有遗漏或措辞不准确的可能。花 5 分钟检查一遍是值得的。
Q6:需要什么级别的 LaTeX 安装?
-
简历用 lualatex,求职信用 xelatex
-
推荐完整安装 TeX Live 或 MacTeX
-
如果用 TinyTeX/BasicTeX,需要额外安装包,详见
SETUP.md
Q7:简历一定是 2 页吗?求职信一定是 1 页吗?
是的,这是框架的硬性要求。 系统会反复调整 LaTeX 编译参数,直到简历恰好 2 页、求职信恰好 1 页。如果内容太多,它会按相关性评分裁剪内容。
Q8:/apply 支持哪些求职网站?
任何你能拿到职位描述 URL 或文本的网站都可以。但要注意:
-
有些网站屏蔽自动化抓取,这时你可以直接粘贴职位描述文本
-
内置搜索工具目前主要支持丹麦市场 + LinkedIn + freehire.dev
13. 局限性与注意事项
地域限制
-
内置职位搜索工具主要面向丹麦市场(Jobindex、Jobnet、Jobbank、Jobdanmark)
-
虽然提供了 linkedin-search(全球)和 freehire-search(科技岗),以及
/add-portal生成器,但其他市场需要自己适配 -
中文求职市场(智联招聘、BOSS 直聘、猎聘等)可能需要社区贡献
技术门槛
-
需要安装 Claude Code CLI、Python 3.10+、Bun、LaTeX 四个依赖
-
对不熟悉命令行和 LaTeX 的用户有一定门槛
-
简历和求职信的质量高度依赖你输入的资料质量
不是万能药
-
框架不能替代你的能力、经验和面试表现
-
简历和求职信虽然经过 AI 优化,但最终打动面试官的是你本人
-
如果你对目标行业/岗位一无所知,AI 也无法帮你"无中生有"
-
对于某些行业(如传统制造业、政府机关),ATS 优化和 LaTeX 简历可能不是主流
维护成本
-
上游更新频繁,需要定期同步(建议用 tagged release 而非 master)
-
个人的求职状态、技能、偏好需要持续更新
-
职位搜索工具可能因目标网站改版而失效
隐私提醒
-
你的完整个人资料(简历、LinkedIn 导出、证书等)存放在你自己 fork 的仓库中
-
如果 fork 的是公开仓库,注意不要提交敏感个人信息到公开分支
-
建议将个人资料分支设为 private,或将
documents/加入.gitignore
14. 总结
适合谁?
-
✅ 正在求职、想提高申请质量的开发者
-
✅ 使用 Claude Code 或其他 AI 编程工具的求职者
-
✅ 想系统化管理求职流程的人
-
✅ 不介意命令行和 LaTeX 的技术人员
-
✅ 想了解 AI 如何辅助求职的人
不适合谁?
-
❌ 想找"一键自动投递"工具的人
-
❌ 完全不懂命令行的用户
-
❌ 不想 fork 和维护一个仓库的人
-
❌ 只在国内求职网站找工作的用户(需自行适配)
核心价值
| 维度 | 价值 |
|---|---|
| 定制化 | 每个申请都量身定制,不是海投 |
| 质量检查 | PDF 视觉检查 + ATS 文字层检查 + 二审机制 |
| 透明度 | 开源,所有代码可审查 |
| 本地化 | 数据在你自己的机器上 |
| 已验证 | 作者本人用它找到了工作 |
相关链接
-
作者 LinkedIn:Mads Lorentzen(在 README 中可找到)
声明:本文基于 ai-job-search v1.0.0(2026-07-22 发布)编写,数据来源于官方 README、GitHub 仓库页面和作者公开的求职数据。这是一个独立开源项目,与 Anthropic 无关。所有使用建议仅供参考,请根据个人情况判断。
作者注:简历和求职信的质量高度依赖你输入的原始资料。花时间写好你的个人资料,是使用这个框架最好的投资。
&spm=1001.2101.3001.5002&articleId=163135317&d=1&t=3&u=a8cf6972fd8c44d78b142c812937ab13)
595

被折叠的 条评论
为什么被折叠?



