MadsLorentzen/ai-job-search

GitHub Trending (daily) 工具

摘要

一个基于Claude Code构建的开源AI驱动的求职申请框架,可自动化职位搜索、简历定制、求职信撰写和面试准备,并针对丹麦市场提供模块化求职门户集成。

基于Claude Code构建的AI驱动求职申请框架。Fork此项目,填写个人资料,让Claude评估职位、定制简历、撰写求职信并助您准备面试。
查看原文
查看缓存全文

缓存时间: 2026/07/07 22:39

MadsLorentzen/ai-job-search 源代码: https://github.com/MadsLorentzen/ai-job-search # AI 求职助手 一个基于 Claude Code (https://claude.com/claude-code) 构建的 AI 驱动的求职应用框架。Fork 它,填写你的个人资料,让 Claude 评估职位发布、定制你的简历、撰写求职信,并为你准备面试。 > 注意:这是一个独立的开源项目,与 Anthropic 无关联,也未得到 Anthropic 的认可、赞助或维护。Anthropic 和 Claude Code 仅用于描述该工作流所使用的工具链。 ## 这是干什么的 这是一个结构化的 workflow,能将 Claude Code 变成一个全栈求职助手。核心工作流(自我画像、适配度评估、以及草稿-审阅者的申请管道)是语言和国家无关的。职位门户搜索技能是针对丹麦市场构建的(Jobindex、Jobnet、Akademikernes Jobbank 等),但该模式设计为可以替换为你当地的求职网站。 /setup /scrape /apply | | | v v v 填写 搜索职位 评估适配度 你的个人资料 职位门户 评分并推荐 | | | v v v 个人资料 展示匹配结果 草拟简历+求职信 文件已就绪 附有适配度评分 (LaTeX, 定制化) | | v v 选择匹配项 审阅者代理人评审 -> /apply -> 修改 -> 最终输出 该框架编码了职业指导最佳实践,包括结构化评估标准、前瞻性的求职信框架,以及可选的薪资基准分析。 ## 先决条件 - Claude Code (https://claude.com/claude-code) (CLI) - Python 3.10+ - Bun (https://bun.sh) (用于丹麦求职 CLI 工具) - LaTeX 发行版,包含 lualatexxelatex: TeX Live (https://tug.org/texlive/) 或 MiKTeX (https://miktex.org/)。简历使用 lualatex 编译(pdflatex 在较新的 MiKTeX 安装中常因 fontawesome5 字体扩展错误而失败);求职信使用 xelatex 编译,因为 cover.cls 需要 fontspec。 - 可选: pdftotext (来自 poppler, https://poppler.freedesktop.org/) (macOS: brew install poppler, Debian/Ubuntu: apt install poppler-utils, Windows: choco install poppler) — 由 /apply 在编译后的简历上执行 ATS 可解析性检查时使用。如果缺失,检查会降级为视觉关键词查看。 ## 快速开始 ### 1. Fork 并克隆 bash gh repo fork MadsLorentzen/ai-job-search --clone cd ai-job-search ### 2. 安装求职搜索工具 bash cd .agents/skills/jobbank-search/cli && bun install && cd ../../../.. cd .agents/skills/jobdanmark-search/cli && bun install && cd ../../../.. cd .agents/skills/jobindex-search/cli && bun install && cd ../../../.. cd .agents/skills/jobnet-search/cli && bun install && cd ../../../.. cd .agents/skills/linkedin-search/cli && bun install && cd ../../../.. 对于 linkedin-search,安装是可选的:它没有运行时依赖,直接使用 bun 运行;bun install 仅拉取 TypeScript 开发类型。 ### 3. 设置你的个人资料 bash claude # 然后在 Claude Code 内: /setup /setup 提供三种路径:如果你的 documents/ 文件夹已有内容(简历 PDF、LinkedIn 导出文件、学位证书、推荐信、过往求职申请),则读取该文件夹;导入粘贴在聊天中的单个简历;或者通过采访逐步填写。它会自动检测你已有的内容并询问。文档文件夹模式是幂等的,当你添加更多材料时可以安全地重新运行;参见 documents/README.md 了解布局。 ### 4. 搜索职位 bash /scrape 这会从多个职位门户搜索与你个人资料匹配的职位,去重后按适配度排序呈现。选择一个匹配项直接在其上运行 /apply — 或者,当抓取到的职位数量超出你手动浏览的范围时,先运行 /rank 批量评分所有职位,根据适配度框架得到一个排名靠前的短名单。 ### 5. 申请一个职位 bash /apply https://jobindex.dk/job/1234567 如果无法获取该 URL(某些职位门户会阻止自动化访问),你可以直接粘贴职位描述: bash /apply 这将运行完整工作流:评估适配度、草拟简历 + 求职信、由第二个代理人评审、修改、并呈现最终输出。 ## 其他命令 /setup/scrape/apply 构成了核心工作流。还有六个命令可以在你的个人资料就绪后扩展功能: - /outcome 记录申请的结果——面试阶段、offer、拒绝、无回应。它将提交的简历、求职信和职位发布文本归档到 documents/applications/_/ 目录,以 /setup 路径 A 可解析的格式保存 outcome.md,并更新追踪器。当一些申请有了结果后,它会引导你回到 /setup,根据实际获得面试的申请来校准适配度框架。 - /rank 作为 /scrape/apply 的桥梁:它对新抓取的所有职位发布,依据适配度框架进行批量评分(并行代理抓取每个职位发布并在五个评估维度上打分),并返回一个排名靠前的短名单,包含每个职位的优缺点。不匹配项会被否决,截止日期会附加紧急标志,已过期的发布会被标记为过期。选择一个序号后,它会转交给完整的 /apply 工作流。 - /expand 通过扫描你在个人资料中已链接的公开来源(GitHub 仓库、个人作品集网站、Kaggle、Google Scholar)并查找已注明课程和证书的教学大纲来丰富你的个人资料。发现的能力会被添加到你个人资料中,并附带来源标签。在 /setup 之后立即使用,有助于发掘文档中未明确体现的技能。 - /upskill 分析你的个人资料与追踪中的职位(或通过 /upskill 分析单个职位)之间的差距。生成一个技能差距优先级热力图,以及一份包含网络搜索学习资源和时间估算的学习计划。适用于在申请之间进行职业规划。 - /add-template 注册你自己的 LaTeX 简历或求职信模板,以替代默认模板。它会捕获模板的说明(编译引擎、字体、样式规则、页数限制),运行强制性的测试编译,并将模板接入 /apply。参见下面的 LaTeX 模板。 - /add-portal 为你所在市场的求职网站生成一个职位门户搜索技能。它会调查该门户(搜索 URL 模式、结果结构、访问规则),按照已包含的搜索技能相同的结构搭建 CLI 技能,并在注册前运行一次实时的查询测试。参见下面的 职位搜索工具/reset 也可用,参见下面的 重新开始。 ## 文件结构 ai-job-search/ ├── CLAUDE.md # 主要候选人档案 + 工作流规则 ├── .claude/ │ ├── commands/ │ │ ├── apply.md # /apply 工作流(草拟-审阅) │ │ ├── setup.md # /setup 引导(文档文件夹、导入简历或采访) │ │ ├── expand.md # /expand 从文档和网络存在中丰富能力 │ │ ├── add-template.md # /add-template 注册自定义 LaTeX 模板 │ │ ├── add-portal.md # /add-portal 为你所在市场生成职位门户搜索技能 │ │ ├── rank.md # /rank 将抓取的职位分类为排名短名单 │ │ ├── outcome.md # /outcome 记录申请结果,归档材料 │ │ └── reset.md # /reset 清除个人资料数据或文档文件夹 │ ├── skills/ │ │ ├── job-application-assistant/ # 核心申请技能 │ │ │ ├── SKILL.md # 技能定义 │ │ │ ├── 01-candidate-profile.md # 你的教育、经验、技能 │ │ │ ├── 02-behavioral-profile.md# PI/DISC/性格评估 │ │ │ ├── 03-writing-style.md # 语气、结构、注意事项 │ │ │ ├── 04-job-evaluation.md # 职位匹配度的评分框架 │ │ │ ├── 05-cv-templates.md # LaTeX 简历结构 + 定制规则 │ │ │ ├── 06-cover-letter-templates.md # LaTeX 求职信模板 │ │ │ └── 07-interview-prep.md # STAR 示例 + 面试框架 │ │ ├── job-scraper/ # 职位搜索编排 │ │ └── upskill/ # /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 公开职位列表(国家无关) ├── cv/ │ └── main_example.tex # moderncv LaTeX 模板 ├── cover_letters/ │ ├── cover.cls # 自定义求职信 LaTeX 类 │ └── OpenFonts/ # Lato + Raleway 字体 ├── templates/ # 通过 /add-template 注册的自定义模板 │ └── README.md # 文件夹布局说明 ├── documents/ # 用于 /setup 路径 A 和 /expand 的职业源材料 │ ├── README.md # 文件夹布局说明 │ ├── cv/ # 主简历(PDF 或 .tex) │ ├── linkedin/ # LinkedIn 个人资料导出(PDF) │ ├── diplomas/ # 学位证书和成绩单 │ ├── references/ # 推荐信 │ └── applications/ # 过往申请记录 (_/) ├── salary_lookup.py # 薪资基准分析工具(自带数据) ├── tools/ │ ├── convert_salary_excel.py # 将薪资 Excel 转换为 JSON │ └── README_SALARY_TOOL.md # 薪资工具设置说明 ├── job_scraper/ # 抓取器状态(已见职位、结果) ├── upskill/ # /upskill 报告输出(每次运行的 markdown 报告) ├── job_search_tracker.csv # 申请追踪电子表格 └── SETUP.md # 详细设置指南 ## /apply 的工作原理 /apply 命令运行一个草拟-审阅者工作流,并强制进行 PDF 编译: 1. 解析 职位发布(URL 或文本) 2. 评估适配度 对照你的个人资料(技能、经验、文化、地点、职业匹配) 3. 草拟 一份定制化的简历和求职信(LaTeX 格式) 4. 生成一个审阅者代理人,研究该公司并批判性评审草稿 5. 修改 基于审阅者的反馈 6. 编译并检查 两个 PDF:简历使用 lualatex,求职信使用 xelatex。Claude 读取渲染后的页面,并迭代 LaTeX 直到简历恰好为 2 页且没有条目标题孤立到下一页,求职信恰好为 1 页且签名可见、字体一致。 7. 对简历进行 ATS 检查:提取 PDF 的文本层(pdftotext,可选依赖)并以 ATS 解析器的方式验证——联系方式以文字形式存在,没有乱码字形,阅读顺序合理——然后对照提取结果对职位发布的关键词覆盖率进行评分。个人资料中确实支持的关键词会被添加;真正的差距保持可见,绝不强行填充。 8. 呈现 最终输出,并附带一个验证清单 简历和求职信中的所有声明都会对照你的实际个人资料进行验证。系统从不捏造技能或经验。 ### 这个工作流有何不同 - PDF 验证循环。 大多数 LaTeX 简历模板产生的输出在 .tex 中“看起来很好”,但在 PDF 中会出问题:职位标题孤立到下一页,求职信溢出到第 2 页,项目符号字体悄悄地回退到正文字体。/apply 命令会编译并视觉检查每个 PDF,并应用有针对性的修复(\needspace\enlargethispage、用于列表项的字形匹配包装器),直到布局整洁。这在每次申请时自动运行。 - 对 PDF 文本层进行 ATS 验证。 ATS 读取的是 PDF 嵌入的文本,而非渲染的页面——而 LaTeX 可能会无声地生成 PDF,其文本提取结果是乱码(图标字形出现在应该是电子邮件的地方,多列布局的行交错重叠)。/apply 使用 pdftotext 提取编译后简历的文本层,验证联系方式、阅读顺序以及职位发布的关键词覆盖率,与解析器实际看到的内容进行对比。诚实规则强制实施:个人资料不支持的关键词会被视为差距,绝不强行填充。 - 相关性加权的简历裁剪。 当简历超出 2 页时,工作流不会机械地从“最旧”部分裁剪。它会为每个候选条目打分,依据 (a) 与目标职位的相关性、(b) 在文档中的唯一性、(c) 求职信是否依赖该条目,并优先删除总分最低的条目。一个较久远的职位要点如果命中了目标职位的关键词,会比一个较近的但未命中关键词的职位要点更优先保留。 - 草拟者与审阅者分离。 草拟者撰写;另一个 Claude 代理人在新的上下文中生成,研究该公司并批判性评审草稿。然后草拟者进行修改。这能捕捉到单次通过往往遗留的遗漏关键词、薄弱框架和泛泛语言。 - 节省 token 的审阅者调度。 审阅者代理人在行内接收草稿,而非重新阅读它们,并且验证清单在工作流结束时运行一次,而非由两个代理人重复执行。注意:步骤 5 中新增的编译和检查步骤会花费部分节省的 token 用于 PDF 渲染和布局迭代——该工作流以一些端到端 token 成本换取实际减少到达用户的损坏 PDF。 ## 自定义 ### 哪些文件可以手动编辑 如果你更喜欢直接编辑文件而不是使用 /setup: | 文件 | 修改内容 | |——|—————| | CLAUDE.md | 你的完整个人资料(姓名、教育背景、经验、技能、目标) | | 01-candidate-profile.md | 你简历数据的结构化版本 | | 02-behavioral-profile.md | 你的行为评估或自我评估 | | 04-job-evaluation.md | 技能匹配领域、职业目标、动机筛选条件 | | 05-cv-templates.md | 针对不同职位类型的个人简介模板 | | 07-interview-prep.md | 你的实际经验中的STAR示例 | | search-queries.md | 针对你技能和地点的职位搜索查询 | ### 更新你的搜索查询 随着你的优先级变化,你可以仅重新配置职位搜索,而无需重新运行完整的个人资料设置: /setup --section search 这会重新运行搜索配置采访:目标哪些职位、搜索哪些技能、哪些地点、以及哪些门户。它还会基于你的个人资料,建议你可能未考虑到的职位类型。 ### LaTeX 模板 简历使用 moderncv (https://ctan.org/pkg/moderncv)(banking 样式)。求职信使用带有 Lato/Raleway 字体的自定义 cover.cls。要使用你自己的模板,请运行: /add-template 指向你的 .tex 文件(以及任何 .cls/.sty 文件或打包的字体)。该命令会采访你关于模板的说明——编译引擎、字体及其位置、要保留的样式规则、硬性页数限制——将所有内容存储在 templates/ 下,运行一次强制性的测试编译,并激活该模板,以便 /apply 基于它草拟。模板使用 [占位符] 标记代替个人数据存储,因此可以安全地提交和共享。 - /add-template --list 显示已注册的模板 - /add-template --use 在它们之间切换 - /add-template --use default 恢复为默认的 moderncv / cover.cls 模板 如果你更喜欢手动操作,手动方式仍然有效:更新 05-cv-templates.md06-cover-letter-templates.md 中的指导说明。 ### 职位搜索工具 .agents/skills/ 中的四个丹麦 CLI 工具(Jobbank、Jobdanmark、Jobindex、Jobnet)演示了为特定市场构建职位门户集成的方式。如果你在另一个国家,请运行: /add-portal 提供你当地求职网站的 URL。该命令会调查该门户(搜索 URL 模式、结果页面结构、robots.txt/访问规则),按照与已包含工具相同的结构、命令和输出约定搭建一个 CLI 搜索技能,并在注册任何内容之前运行一次实时查询测试。需要认证的门户会被拒绝,且具有限制性条款的门户会在生成的技能中获得一个显眼的仅供个人使用的警告。生成的技能是市场特定的,位于你的 fork 中;生成器本身是通用部分。 作为一个国家无关的起点,该仓库还包括 linkedin-search——一个基于 LinkedIn 公开的、无需认证的 jobs-guest 端点构建的职位搜索技能。它是领域无关的,具有零运行时依赖(仅需 bun 即可运行),并将搜索地点作为一个显式标志,因此开箱即可用于任何市场(例如 `-l “Berli

相似文章