An AI web agent that applies to jobs for you while you sleep.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 17 小时前 | ||
| 9 小时前 | ||
| 17 小时前 | ||
| 9 小时前 | ||
| 9 小时前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 9 小时前 | ||
| 15 小时前 | ||
| 1 个月前 | ||
| 17 小时前 | ||
| 9 小时前 | ||
| 15 小时前 | ||
| 19 小时前 |
AIHawk
给它一份简历,获取匹配的职位,选中后一键投递。运行在终端中,附带一个可实时观看的浏览器。需要 Python 3.11 或更高版本。
pipx install git+https://github.com/feder-cr/Jobs_Applier_AI_Agent_AIHawk
或者执行 uv tool install git+https://github.com/feder-cr/Jobs_Applier_AI_Agent_AIHawk;uv 安装后不会自动将 aihawk 加入 PATH,需要你运行 uv tool update-shell 并重新打开终端才能生效。或者,使用虚拟环境(在 Windows 上路径为 aihawk-env\Scripts\pip 和 aihawk-env\Scripts\aihawk;在非常长的文件夹路径下执行 pip install 可能会因为 openai 包报出 OSError [Errno 2] 错误,使用 pipx 或缩短文件夹路径可以规避该问题):
python -m venv aihawk-env
aihawk-env/bin/pip install git+https://github.com/feder-cr/Jobs_Applier_AI_Agent_AIHawk
aihawk-env/bin/aihawk resume.pdf
简历可以放在磁盘上的任何位置:PDF、.docx 或纯文本文件均可。扫描版 PDF 没有可读取的文本,请导出为带文本层的版本,或另存为 .docx。以下截图来自一次测试搜索,使用的是虚构简历:
首次使用时,AIHawk 会要求输入一个 OrcaRouter 密钥,并将其保存在 ~/.aihawk/key 中;之后只需运行 aihawk 即可重新打开你的列表。要更换密钥,可编辑或删除该文件,或设置 ORCAROUTER_API_KEY 环境变量(优先级高于文件)。如果 OrcaRouter 拒绝了文件中的密钥,AIHawk 会将其丢弃并重新询问。
针对每个新的职位数据库,首次搜索会下载其职位索引(约 740 MB),存入 ~/.aihawk/data/index;搜索过程在本地读取该索引。AIHawk 所评估的职位描述则通过互联网从发布渠道读取。
你的数据。 你的简历、你的回答、职位描述文本和网页内容(包括截图)都会发送到模型网关 OrcaRouter 及其背后的服务商;申请则会提交到招聘方网站。其余数据保留在 ~/.aihawk 目录中:简历、回答、密钥(key)、凭证(data/proofs/)、applied.csv、职位索引,以及包含你登录信息的浏览器配置文件。你需要一个付费的 OrcaRouter 密钥。我们在 11 个真实网站上的实测中,使用 deepseek-v4.1-flash 模型,每次填写表单的模型调用费用在 0.4 到 3.3 美分之间(平均 1.5 美分),且没有任何一次运行执行到提交步骤。
责任。 申请以你的名义发出,由此产生的一切后果由你自己承担。各招聘网站有自己的使用条款,其中一些不允许自动化申请:在选取其职位之前,请先阅读相关条款。AIHawk 在发送申请前会询问一次(需确认"是");作为最后手段,模型可以在页面中执行脚本,这可能未经询问就提交表单(参见 SECURITY.md)。对"发送"类点击的拦截逻辑会读取控件的文案和类型,因此文案措辞特殊的控件,或一个仅写着"继续"的最终按钮,可能会绕过该拦截。
快捷键
| 按键 | 功能 |
|---|---|
| space | 选择一个职位 |
| enter | 查看评分、差距和理由 |
| a | 发送已选职位(或当前职位),确认一次即可 |
| s | 查看已发送的职位及每个页面的反馈 |
| o | 在浏览器中打开该职位页面 |
| m | 对更多职位进行评分 |
| r | 提供新的简历 |
| l | 打开浏览器进行登录;完成后在终端按 Enter |
| q | 退出(Ctrl+C 也可退出) |
工作流程
- 读取你的简历,据此生成搜索计划,并从中提取你的联系方式。
- 查找标题与搜索计划匹配的职位,数据来源是一个以 release 形式发布、由
jobs-database.yml每日重建的职位数据库,包含约 1020 万条职位信息。默认排除发布超过 60 天的职位。 - 筛选出标题匹配度最高的 100 条职位:Jev(决策模型)会对每条职位回答六个问题,最终保留评分最高的 25 条。
- 评分:根据简历对每条筛选后的职位进行 1 到 5 分的评分,并指出差距所在。
- 投递:为职位生成简历,并通过 invisible-playwright-mcp 在可见的浏览器中填写表单。表单中询问的内容如果简历中没有,它会来问你,并记住答案。首次投递或登录时会下载浏览器引擎,Windows 上约 268 MB。
发送机制
模型会填写表单并识别提交按钮的名称;它被明确告知不得发送,任何可能导致发送的点击都会被拒绝。你的 a 和 Enter 就是唯一的一次确认:AIHawk 会点击模型所识别的那个控件。每次发送都会将页面反馈保存在 applied.csv 和 data/proofs/ 中;s 可以列出这些记录。
网站支持
各网站差异很大:Greenhouse、Ashby、Breezy、Recruitee 和 Teamtailor 各确认过一次真实发送,其余网站要么只填表不发送,要么卡在验证码或追问环节,要么需要账号。docs/sites.md 列出了每个网站的状态及阻碍原因。其他职位则列出供手动投递。Gmail 和 Outlook 插件可以从你的邮箱中提取验证码或链接。它们会指示模型仅读取,但这只是一条指令,而非保证:该机制只会拒绝看起来像发送的点击、Enter 键以及访问表单和邮箱之外的网站。删除或归档邮件的点击不会被拒绝。这些插件尚未在真实邮箱上测试过。
一个插件是 src/aihawk/plugins/ 中的一个 Markdown 文件,用于向模型解释某个网站的表单结构。添加新网站只需一个文件,无需编写代码:参见 docs/plugins.md。你自己的插件放在 ~/.aihawk/plugins/ 下。
计划与模型
所有模型均通过 OrcaRouter 调用:model(默认 deepseek/deepseek-v4.1-flash)负责撰写简历和填写表单;quick_model(默认 google/gemini-3.5-flash)负责生成计划;decision_model(默认 typesafe/jev-1.14,即 Jev)负责筛选岗位;judge_model(默认 deepseek/deepseek-v4.1-flash)负责评分。base_url 可指定其他网关地址,该地址必须支持 OpenAI 的 Chat API 以及决策模型自身的端点 /systemone。
- 更新:
pipx upgrade aihawk,或uv tool upgrade aihawk。 - 卸载:
pipx uninstall aihawk(或uv tool uninstall aihawk),然后删除~/.aihawk,其中存储了你的简历、密钥和登录凭据。 - 搜索: 计划即
~/.aihawk/aihawk.yaml中的filters.plan;编辑后需重启aihawk。
更多信息:wiki、配置说明、CONTRIBUTING.md、SECURITY.md、CHANGELOG.md。岗位数据库整合了多个公开数据源,其许可证及发布链接见 NOTICE 和 docs/data-sources.md。部分数据源未声明许可证,其中一个要求不得将其岗位信息重新发布为招聘列表,但已发布的数据库中仍包含该来源。每条岗位信息均归属于其雇主。报告的结构改编自 career-ops(MIT 许可证)。
MIT。原 Dots 项目位于 feder-cr/invisible_dots。
项目介绍
求职助手AI智能代理AIHawk致力于简化求职过程,通过自动化职位申请流程。借助人工智能,它能够帮助用户以定制化的方式申请多个职位。【此简介由AI生成】