Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

work-hunter · 本地优先的智能求职行动驾驶舱

work-hunter v2.3.1

某直聘智能求职 Agent — 从岗位采集、AI 评分到人工确认投递、回复监测与定制简历生成的本地自动化流水线

GitHub StarsVersionPython 3.10+GitHub IssuesLast Commit

🚀 本地运行 · 🔒 人工确认 · 🤖 多模型兼容 · 🧭 Chrome 自动化

work-hunter 面向正在集中求职、又不想把时间耗在重复筛选和机械沟通上的用户。它通过「AI 评分 + 人工确认」策略,帮助你筛选岗位、准备沟通内容并管理投递状态,同时把最终发送决定留在你手里。

本项目基于 BossHunter 演进,保留原项目贡献记录与兼容接口,并重新设计了产品界面和前端工程结构。

搜索岗位 → AI 评分筛选 → 生成个性化招呼语 → 人工确认 → 发送 → 监听 HR 回复 → 生成定制简历


⭐ 喜欢 work-hunter?关注项目更新

如果 work-hunter 帮你少做一次重复筛选、多抓住一个合适机会,欢迎点亮一个 🌟 Star。你的支持能让更多有同样需求的求职者发现它,也会推动兼容性和稳定性继续更新。

想及时了解新版本,可以点击仓库右上角 Watch → Custom → Releases;遇到问题或有功能建议,欢迎提交 Issue

Star 完全自愿,不影响任何功能使用。


项目演示

产品功能演示视频(推荐先看)

完整演示入口:点击观看 work-hunter 产品功能演示视频

视频演示了从配置、岗位采集、AI 评分、人工确认、发送招呼语到监测执行的完整链路。

产品介绍 PPT

work-hunter 产品介绍 PPT


免责声明

本项目仅供学习、研究与个人求职效率提升使用。

  • 本项目与任何招聘平台及其关联公司无任何隶属、合作或背书关系。
  • 使用自动化工具操作第三方平台可能违反其用户协议,由此产生的账号限制、封禁、法律纠纷等后果由使用者自行承担。
  • 作者不对任何直接或间接损失负责。
  • 请合理设置频率限制,避免对平台造成负担。
  • 建议仅在个人求职期间短期、低频使用。

为什么做 work-hunter?

找工作过程中,很多时间都消耗在重复搜索岗位、筛选匹配度、修改招呼语和跟进消息上。

work-hunter 希望把这些重复流程交给 AI 和自动化处理,让求职者把精力放在更重要的事情上:

  • 判断机会是否真的适合自己
  • 优化简历和项目经历
  • 准备面试
  • 跟进真正有价值的岗位反馈

work-hunter 不是为了鼓励无脑海投,而是希望帮助你更高效、更有判断力地管理求职流程。


适合谁使用?

work-hunter 适合这些用户:

  • 正在集中投递岗位的求职者
  • 想用 AI 提高简历投递效率的人
  • 想减少重复筛选岗位时间的人
  • 希望本地运行、不想把账号和简历交给第三方平台的人
  • 对 AI Agent、浏览器自动化、求职效率工具感兴趣的开发者

核心能力

能力说明
多平台采集BOSS 直聘、智联招聘和前程无忧 51job 串行采集,支持独立关键词、城市、页数、排序与来源去重
AI 两阶段评分快速预筛(关键词匹配) → 深度评分(AI 分析 JD)
定制招呼语AI 根据岗位 JD + 个人简历生成个性化开场白,支持风格偏好、长度和套话约束
人工确认投递前必须经过确认,支持逐个/批量审核
低频发送策略随机间隔、时间窗口、每日上限、发送前浏览
HR 回复监听自动检测 HR 回复,触发建议回复或定制简历生成
简历请求识别识别附件简历请求卡片,生成定制简历并等待手动发送
Web Dashboard可视化看板,支持岗位池分页、排序、AI 评分、原平台链接、投递队列与状态管理
自动跟进超过设定时间未回复时自动发送一次跟进消息

平台能力边界

平台采集AI 评分/招呼语发送/监听
BOSS 直聘支持支持保留人工确认后支持
智联招聘支持只读采集,使用独立城市目录支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填
前程无忧 51job支持只读采集,当前验证北京、上海城市码支持处理已采集岗位自动发送/监听锁定;提供原平台链接和手动“已发送”回填

三个平台严格串行采集,分别配置关键词、城市、每组合最大页数和排序。智联与 51job 不进入自动发送、简历发送或消息监听;用户可从岗位池打开经域名校验的原平台链接,人工投递后再手动标记“已发送”。检测到验证码、频率限制、登录墙或无法识别的页面结构时不会尝试绕过验证。


流程架构

采集(scrape) → 预筛(prefilter) → AI评分(score) → 人工确认(confirm)
→ 招呼语(greet) → 发送(send) → 自动监测(monitor)
→ 简历请求 / AI建议回复 / 自动跟进

关键边界:投递与敏感动作必须保留人工确认点,不做完全无人值守的高频自动投递。


前置条件

依赖版本用途
Python3.10+核心运行时
Node.js22+本地 Browser Runtime / CDP 代理
Chrome最新稳定版连接已登录浏览器
AI API KeyAnthropic 或 OpenAI 兼容接口

Important

work-hunter 不会代替你启动或登录招聘平台。运行前请先完成:

  1. 使用 Google Chrome 启动远程调试;
  2. 在这个可远程控制的 Chrome 窗口中提前登录要使用的招聘网站,并保持窗口打开;
  3. 在本地配置面板连接好 AI API,并通过 work-hunter ai-status 检测。

Chrome 远程调试开启方式

方式一(推荐):在 Google Chrome 地址栏输入 chrome://inspect/#remote-debugging,勾选 Allow remote debugging

方式二:使用启动参数:

# Windows
chrome.exe --remote-debugging-port=9222 --user-data-dir="%LOCALAPPDATA%\WorkHunterChrome"# macOS
open -na "Google Chrome" --args --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.work-hunter-chrome"

使用启动参数时会打开独立的 Chrome 用户目录。请在这个新窗口中登录招聘网站;登录在其他 Chrome 窗口中无法被 work-hunter 复用。


快速开始

一、安装

# 1. 克隆仓库
git clone https://github.com/kyletser/work-hunter.git
cd work-hunter
# 2. 安装 Python 依赖
pip install -e .# 可选:仅在需要 xhtml2pdf fallback 渲染时安装
pip install -e ".[pdf]"

安装后推荐使用 work-hunter 命令;为兼容原有脚本,bosshunter 命令仍然保留并指向同一套功能。

二、启动 Google Chrome 远程控制并登录

  1. 按上方方式开启 Chrome 远程调试。
  2. 在同一个 Chrome 窗口中打开招聘网站并完成登录。
  3. 保持 Chrome 运行,不要在任务期间关闭这个远程控制窗口。

三、配置简历、岗位与 AI API

work-hunter web

打开 http://127.0.0.1:8686,完成:

  1. 上传 Markdown(.md)或 Word(.docx)简历。
  2. 设置搜索关键词、目标城市、评分阈值、发送频率和时间窗口。
  3. 在「AI 设置」选择 Claude、DeepSeek、豆包或其他兼容服务,填写服务商提供的 API Key 和模型名称。
  4. 保存后运行:
work-hunter ai-status

只有显示 AI 连接通过后,再开始投递。API Key 只在本地面板输入,不要粘贴到 Issue、聊天记录或提交文件中。

四、检查 Chrome 连接并运行

work-hunter connect
work-hunter run

work-hunter connect 只检测连接,不会自动启动 Chrome。如果检测失败,请回到第二步重新开启远程调试,并确认招聘网站已在同一 Chrome 窗口登录。

系统自动执行:采集 → AI 评分 → 人工确认 → 生成招呼语 → 发送 → 自动监测。

请使用已开启远程调试、且已登录招聘网站的 Google Chrome。操作间存在拟人化时间间隔,可在工作台点击停止,命令行模式下按 Ctrl+C 停止。


命令一览

一键流程(推荐)

work-hunter run

自动执行:采集 → 评分 → 确认 → 招呼语 → 发送 → 自动监测。

分步执行

work-hunter scrape -k "Python开发"# 采集
work-hunter score # AI 评分
work-hunter confirm # 人工确认
work-hunter greet # 生成招呼语
work-hunter send # 发送已生成的招呼语

监听模式

work-hunter monitor # 持续监听 HR 回复(默认30分钟间隔)
work-hunter monitor --once # 只检查一次

Web Dashboard

work-hunter web # 打开 http://127.0.0.1:8686

新版 Web 控制台采用“今日求职行动驾驶舱”结构,保留原有路由和全部业务边界:

work-hunter 今日求职行动驾驶舱

  • 工作台:先显示今日额度、优先待办和任务阶段,再提供全流程、单独采集、单独监测入口。
  • 岗位池:桌面端使用固定表头高密度表格,移动端自动切换岗位卡片;岗位详情在侧边抽屉打开。
  • 消息与跟进:集中处理 HR 问题、简历请求、自动跟进和已回复记录;“确认并标记已回复”只记录人工处理,不会代替用户在平台发送。
  • 设置:按个人档案、平台与搜索、AI 与评分、自动化与安全、消息监测、高级设置分组,离开未保存页面前会提示。

界面支持 1440px 桌面、1024px 平板和 390px 手机宽度;活动任务每 5 秒刷新,空闲时每 15 秒刷新,页面隐藏时暂停后台刷新。BOSS 仍保留人工确认后的自动发送能力,智联和 51job 仍仅支持只读采集与手动回填。

状态查看

work-hunter ai-status # 安全检测 AI 服务连接(不显示 Key)
work-hunter status # 简要统计
work-hunter status --full # 完整仪表盘

配置说明

详见 config.example.yaml

核心配置项:

配置段关键字段说明
profileresume_path, salary_min/max, deal_breakers简历路径、期望薪资与排除条件
searchkeywords, cities, max_pages搜索策略
scoringthreshold, max_candidates评分阈值与每轮候选上限
throttledaily_limit, interval_min/max, send_windows低频发送策略
aiservice, provider, model, api_key, base_urlAI 服务与接口配置
monitorinterval, max_resume_sends_per_cycle监听设置
follow_upenabled, interval_hours, skip_weekends跟进策略

AI 兼容接口说明

配置页可直接选择 Claude、DeepSeek、豆包或其他 OpenAI 兼容接口:

  • Claude / Anthropic:使用 Anthropic Messages;可通过 ANTHROPIC_API_KEY 提供 Key。
  • DeepSeek:自动使用 OpenAI Chat Completions 和官方 Base URL;可通过 DEEPSEEK_API_KEY 提供 Key。
  • 豆包 / 火山方舟:自动使用 OpenAI Chat Completions 和方舟 Base URL;可通过 ARK_API_KEY 提供 Key。
  • 其他 OpenAI 兼容接口:填写服务商提供的 Base URL 和模型 ID;可通过 OPENAI_API_KEY 提供 Key。
  • 安装 AI 只检测标准环境变量是否存在,不读取或输出 Codex、Claude Code、ChatGPT 等工具自身的登录凭证。
  • 可运行 work-hunter ai-status 安全验证当前配置,命令不会显示完整 Key。
  • 公开仓库不包含任何真实 API Key、内部域名或个人配置。

项目结构

work-hunter/
├── SKILL.md # Skill 行为定义(Claude Code 加载)
├── README.md # 本文件
├── config.example.yaml # 配置模板(脱敏)
├── pyproject.toml # Python 包定义
├── .gitignore # 安全排除规则
├── resume.example.md # 简历模板示例
├── docs/demo/ # 产品截图与演示视频
├── src/
│ └── bosshunter/ # 核心源码
│ ├── main.py # CLI 入口
│ ├── config.py # 配置加载
│ ├── db.py # SQLite 数据层
│ ├── pipeline.py # 流程编排
│ ├── ai/ # AI 评分 + 招呼语 + 简历生成
│ ├── browser/ # Browser Runtime / CDP 连接
│ ├── scraper/ # 岗位采集
│ ├── executor/ # 发送 + 监听
│ ├── tracker/ # 状态追踪
│ ├── throttle.py # 低频发送策略
│ ├── dedup/ # 去重
│ ├── ui/ # 终端交互 UI
│ └── web/ # Web Dashboard
└── data/ # 运行时数据(不入库)
├── bosshunter.db
└── resumes/

风险控制策略

本项目默认采用保守策略:

  1. 时间窗口 — 仅在配置时间窗口内发送
  2. 随机间隔 — 每次操作间隔随机
  3. 每日上限 — 限制每天发送数量
  4. 发送前浏览 — 发送前先浏览岗位页
  5. 随机休息 — 小概率跳过当天
  6. 渐进退避 — 连续错误时自动增加间隔
  7. 人工确认 — 所有投递必须经过人工审核

即便如此,无法保证 100% 不被检测。请自行评估风险。


常见问题

Q: 会被封号吗?

A: 存在风险。本项目通过低频、随机间隔、时间窗口和人工确认降低风险,但平台随时可能更新检测逻辑。建议保守配置。

Q: 支持哪些 AI 服务?

A: 支持官方 Anthropic、Anthropic Messages 兼容接口和 OpenAI 兼容的 Chat Completions 接口。兼容服务需要自行填写 Base URL、API Key 与模型名。

Q: 简历是什么格式?

A: 支持 Markdown(.md)、Word(.docx)和带文字层的 PDF(.pdf)简历;Word 与 PDF 会在本地转换为 Markdown 后使用。加密、损坏、扫描版或无文字层 PDF 会给出明确提示,扫描版请先 OCR。旧版二进制 .doc 暂不支持。AI 会根据具体岗位 JD 动态生成定制简历,并输出 PDF。

Q: 为什么需要 Chrome 远程调试?

A: 项目通过 CDP (Chrome DevTools Protocol) 直连你日常使用的浏览器,天然携带登录态,无需保存招聘平台账号密码。


版本更新

日期版本号类型更新内容
2026-08-25v2.3.1多平台与安全整合合入智联/51job 只读采集、外部平台人工投递闭环、岗位池与筛选增强、Windows 兼容、招呼语与消息判定修复,并重整 BOSS 页面访问保护设置。
2026-08-13v2.3.0功能与可恢复性增加多范围岗位导出、离线城市目录、任务安全的岗位回收站和可独立重试的 AI 评分;同步改进配置安全、岗位筛选与投递队列。
2026-08-02v2.2.0功能与稳定性单岗位失败不再中断全流程;额度未完成岗位下次优先续发;加强首次沟通、历史会话、任务停止、后台页面与最新配置生效逻辑,并简化工作台。
2026-07-30v2.1.1稳定性修复修复 AI 评分与招呼语可能因 Token 限制中断的问题:回答被截断时增大输出上限重试,上下文过长时压缩请求,额度或限流异常会保留进度并在工作台显示原因。
2026-07-30v2.1.0功能与体验支持中文名 Markdown 和 Word(.docx)简历;新增 DeepSeek、豆包和自定义兼容 API;启动前会明确提示 Chrome、远程调试与 AI 配置问题。
2026-07-27v2.0.0功能改进优化定制简历投递和监测恢复流程,并清理公开文档中的隐私信息。
2026-06-29v2.0.0稳定性修复工作台任务可能卡住的问题;自动跟进默认关闭,把发送决定留给用户。

查看每个版本的完整说明:CHANGELOG.md

展开查看 v2.3.1 多平台与安全整合

多平台与人工投递闭环

  • 智联与 51job 只读采集:三个平台统一串行编排,但保留独立关键词、城市、页数、排序和来源身份;51job 已验证北京、上海城市码。
  • 外部平台不自动发送:智联与 51job 岗位只在本地评分、生成招呼语并提供原平台链接;用户人工投递后可二次确认标记“已发送”,不占用 BOSS 自动发送额度。
  • BOSS 能力边界不变:自动发送继续限定 BOSS 岗位,且必须经过人工确认、发送时间窗口、随机间隔和每日发送额度检查。

岗位池、筛选与沟通可靠性

  • 筛选和评分增强:增加学历、招聘类型、未知学历处理与评分上下文;支持招呼语风格偏好及确定性的长度、开头去重、套话和技术堆叠约束。
  • 岗位池增强:增加分页、页码跳转、白名单排序、城市与来源展示、一键 AI 评分、投递队列、延期原因和额度提示。
  • 消息判定更可靠:发送结果需从对应会话确认,不再把输入框清空当作成功;监听区分 HR、本人和平台系统消息。

安全、兼容与设置

  • BOSS 页面访问保护:按搜索页、详情页和平台页面总量控制 BOSS 页面访问;采集计划超过单日搜索页上限时,配置页会提前提醒。采集结果数量不再作为安全上限,智联与 51job 也不占用 BOSS 页面额度。
  • 风险误报收敛:不再因正文中孤立的风险词直接判定拦截;明确风险会复核,并采用可配置的短时随机冷却。项目不会绕过验证码或平台限制。
  • 采集与监测共用页面访问设置:相关配置集中到“反监测设置”,采集后投递冷却和风险暂停使用最少/最多分钟区间,界面合并展示以减少配置项。
  • Windows 兼容:支持系统保留端口自动回退,并加入可选的一键启动器、桌面快捷方式、隐藏后台窗口和 Python 路径覆盖。
  • 简历上传校验:先吸收 Markdown UTF-8 编码验证;完整简历工作室仍作为独立功能继续审查。

本轮整合与验证

主要来源为 #45#48#49#50#51#55#57#58#61#64#65#66,统一由 #62 选择性整合。最终回归为 401 项测试、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过,并完成本地真实环境验收。

展开查看 v2.3.0 功能与可恢复性更新

功能与可恢复性更新

  • 岗位导出与城市目录:支持按当前筛选或全量范围导出,自定义城市查询使用本地目录优先完成。
  • 岗位回收站:删除岗位先进入回收站,支持恢复和任务期间安全处理。
  • 独立 AI 评分:单条评分失败会保留为待处理,可稍后单独重试,不阻断其他岗位。
  • 安全与可用性:配置原子写入、无凭据下载、公司屏蔽、筛选与投递队列获得完整验证。

贡献者致谢

本版本由 @haohao-fly@meixiaoxie@zhenian-666 共同贡献,具体影响记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.2.0 功能与稳定性更新

功能与稳定性更新

  • 部分失败继续流程:单个岗位发送失败后单独记录,其他岗位和后续 HR 回复监测继续执行。
  • 额度待办自动续发:因每日额度未执行的已确认岗位保留招呼语,下次运行全流程时优先处理。
  • 最新配置立即生效:人工确认期间修改的每日上限、发送间隔等设置,在真正发送前重新读取。
  • 首次沟通与历史会话兼容:根据平台预设招呼语、首次沟通编辑器和已存在会话选择对应发送路径,增加结果验证与安全重试。
  • 停止更及时:采集、AI 请求、招呼语、发送和监测统一响应停止请求,已完成结果会保留。
  • 工作台简化:移除普通用户不需要的全量重新评分入口,三个主要操作按三栏布局展示。
  • 系统性风险仍会暂停:验证码、限流、账号拦截或连续系统错误会中止发送,避免继续触发平台风控。

贡献者致谢

本版本涉及的贡献者与具体功能已统一记录在下方的 社区贡献影响力 榜单中。

展开查看 v2.1.1 稳定性修复

稳定性修复

  • Token 截断自动恢复:评分或招呼语回答因输出上限被截断时,自动增大当前请求的输出 Token 上限后重试。
  • 上下文超限自动恢复:简历或岗位内容超过模型上下文时,保留关键信息并压缩当前请求后重试。
  • 失败不丢进度:单个岗位仍失败时保留待处理状态;额度不足、限流或鉴权异常会保存已完成结果并安全暂停。
  • 前端明确反馈:工作台任务日志会显示 Token、额度、限流、鉴权或连接问题,不再只表现为操作中断。
展开查看 v2.1.0 更新说明

新功能

  • 简历上传兼容性:支持中文文件名的 Markdown 简历,并新增 Word(.docx)简历上传与文本解析。
  • 多 AI 服务商:配置面板支持 DeepSeek、豆包、Anthropic、OpenAI 和自定义兼容接口,自动填写对应协议与 Base URL。
  • Web 工作台升级:新增本地可视化工作台,集中展示采集、评分、确认、发送、监测与简历生成状态。
  • 启动前环境诊断:前端逐项检查 Google Chrome、远程调试、招聘平台页面、AI Key、Base URL、模型、简历与搜索配置,并给出中文修复提示。
  • 简历请求卡片识别:可识别招聘平台聊天中的「附件简历请求」卡片,并归类为简历请求。
  • 定制简历生成:检测到 HR 要简历后,根据岗位 JD 生成定制 PDF 简历,提供下载与手动发送入口。
  • 监测执行视图:按「待回复 / 简历请求 / 自动跟进 / 已回复」分类查看监测结果。
  • AI 建议回复:检测到 HR 问题时可生成建议回复,默认需要人工确认后再发送。
  • 自动跟进记录:对超时未回复岗位执行一次自动跟进,并在监测执行中保留跟进内容。

安全与隐私

  • 人工确认边界更清晰:卡片识别只做归类提醒和简历生成,不自动点击「同意 / 拒绝 / 发简历」。
  • 配置脱敏:Web API 返回配置时不暴露原始 API Key。
  • 示例配置脱敏:公开仓库只保留占位配置,不包含个人简历、联系方式、数据库或运行时数据。
  • 兼容 API 说明泛化:支持 Anthropic Messages 兼容接口与模型名模糊匹配,不在公开文档中暴露内部服务名称或内部域名。

体验优化

  • 仪表盘去重:同一岗位的监测记录在前端按最新记录展示,减少重复刷屏。
  • 统计口径优化:「简历生成」按实际生成的简历文件统计。
  • AI 连接引导:用户可让安装 AI 协助打开本地配置面板、选择服务商并检测连接;API Key 只在本地面板填写,不读取安装 AI 自身的登录凭证。
  • 本地 Browser Runtime:内置 CDP 代理连接日常 Chrome,减少额外浏览器配置成本。

支持 work-hunter

work-hunter 是个人维护的开源项目。如果它对你有帮助,欢迎:

  • 点 Star 收藏项目
  • 分享给正在找工作的朋友
  • 提 Issue 反馈真实使用问题
  • 参与功能规划讨论
  • 提交 PR 一起完善功能

你的 Star 会帮助项目获得更多曝光,也会让我更有动力继续维护招聘平台适配、AI 匹配能力和 Web Dashboard。

⭐ Star 项目:
https://github.com/kyletser/work-hunter


贡献

欢迎 PR 和 Issue。请注意:

  • 不接受绕过平台安全机制、规避检测或提高默认发送频率的 PR。
  • 不接受收集、上传或外发用户隐私数据的 PR。
  • 建议先开 Issue 讨论再提交大改动。

🏆 社区贡献影响力

work-hunter 感谢每一位参与改进的开发者。下面的榜单记录外部贡献者带来的实际功能、当前采纳状态和相对影响力,让贡献不只停留在提交数量上。

排名贡献者贡献度状态主要贡献相关 PR
🥇@zhenian-66616%✅ 已适配合入📦 多范围岗位导出、城市目录、回收站与独立 AI 评分;新增统一平台采集架构和智联只读采集#40#41 · #42 · #43 · #45#62
🥈@GioiaZheng14%✅ 已合并🛡️ API Key 脱敏与安全读取;PDF 依赖降级;修正人工确认、招呼语和发送的岗位选择;清理未支持的服务商说明#6 · #7 · #8 · #9 · #10 · #12
🥉@atticus-zhou11%✅ 已合并🤖 实现 AI 评分与招呼语重试、前台浏览器交互、送达状态验证和防重复发送#27#28
4@haohao-fly10%✅ 已合并📊 岗位筛选、分页与统计;结构化评分与失败重试;投递队列和重复任务保护#38#39
5@meixiaoxie9%✅ 已合并🔐 配置原子写入与无凭据下载;公司屏蔽;自定义城市查询;Windows WSGI 回归测试#37#39
5@shuaigechz-cloud9%✅ 已适配合入💬 会话级送达确认、HR/本人/系统消息方向识别,以及确定性的招呼语风格约束#49 · #50 · #51#62
5@hdfhssg9%✅ 已适配合入🎓 学历与校招/社招筛选、评分上下文、个人偏好;岗位池分页排序、投递队列和额度提示#54 · #55 · #64 · #65#62
8@yukinoshi7%✅ 已适配合入🧠 Thinking 模式、多 AI 响应和 Windows JavaScript MIME 兼容;Windows 系统保留端口自动回退#25#28 · #48#62
9@Nourishman5%✅ 部分适配合入📄 带文字层 PDF 简历上传与错误提示;DeepSeek 模型 ID 规范化;已批准岗位恢复与确认交接竞态修复#29
10@Henry369-04%✅ 已适配合入🪟 Windows 一键启动器、桌面快捷方式、后台窗口隐藏与 Python 路径覆盖#57#62
11@yuj-0293%✅ 部分适配合入🔎 51job 页面研究与只读采集核心;复用主线统一来源字段、数据库和节流机制#58#62
12@elowenzhouyb-source2%✅ 已合并🧭 提交并组织 AI 评分、招呼语与发送可靠性改进方案,推动问题定位和整体验证#27#28
13@Colin-Cai03181%✅ 部分适配合入🧾 Markdown 简历上传 UTF-8 编码校验;完整简历工作室继续独立审查#61#62

计算口径:产品影响 40% + 可靠性与安全 25% + 测试与可维护性 20% + 采纳状态 15%。本榜单只计算实际进入主线的内容;选择性整合按最终采用范围计分,未采用或仍在审查的部分不计入。为保持总和 100%,历史贡献会随新增贡献按相同口径重新归一化。百分比不代表代码所有权、奖金分配或单纯的代码行数。项目发起人和 AI 工具提交不参与本榜单。数据更新于 2026-08-25;如署名或功能描述需要修正,欢迎提交 Issue。

About

A local job-search assistant with AI ranking and human approval before outreach.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages