学习外语并不难,学习外语就像交朋友一样,朋友是越交越熟的,天天见面,朋友之间就亲密无间了。—— 高士其

career-ops:把求职从信息洪流里拉回到可判断、可追踪、可行动的轨道

求职常常像一场没有尽头的信息洪流。

职位页面不断刷新,岗位名称相似却要求各异,投递记录散落在不同网站、表格、邮件与浏览器标签页里。简历需要针对岗位调整,面试前需要补齐准备,面对薪资与合同又要切换到另一套思考方式。真正消耗人的,往往不只是写一份简历,而是在大量机会之间持续辨别:哪些值得投入,哪些只是看上去热闹,哪些应该果断放下。

career-ops 是一个开源的 AI 求职系统。它将 AI 编程命令行工具转化为求职指挥中心:扫描招聘门户,评估职位信息,生成针对岗位定制的简历 PDF,追踪申请进展,并将一系列分散的求职动作串成一条可持续推进的流程。

项目地址:/santifer/career-ops

它并不把自己定位成自动海投工具。恰恰相反,career-ops 强调自己是一套筛选系统。它希望帮助求职者从数百个机会中找出真正值得投入时间的少数岗位,而不是把简历无差别地抛向每一个入口。

从投递数量,转向机会判断

career-ops 的核心不是简单匹配关键词。

当用户输入职位链接或职位描述后,系统会结合个人简历进行推理式评估,关注个人经历与岗位要求之间的适配关系,而不是只做表面的词汇重合检查。它能够围绕职位建立结构化评估,将多个维度组织为 A 到 F 的评分模块,并额外提供 G 模块,用于检查招聘信息的真实性与可信度。

A 到 F 的结果会汇入一套加权评分体系,形成 1.0 到 5.0 的评价。G 模块则保持独立,它会关注诈骗岗位、幽灵岗位等招聘信息风险,但不会影响主评分。

这套设计很像一位始终站在求职者一边的分析助手。

它不只是问岗位里出现了哪些技术名词,也不只是把经历按关键词排列组合。它会帮助梳理岗位概览、简历匹配度、能力缺口、级别策略、薪资研究、个性化方向、面试准备与岗位可信度,让一条职位信息不再只是网页上的一段描述,而成为可以被逐层拆解的决策对象。

README 中记录了这套系统的实际使用结果:评估了 740 多个职位,生成了 100 多份个性化简历,并最终获得了一份理想岗位。

一条职位链接,可以成为完整流程的起点

career-ops 的使用入口很直接。

用户可以粘贴职位链接,也可以直接输入职位描述。系统会识别输入内容,并启动完整的自动流程。

1
2
3
4
5
6
7
8
9
10
11
输入职位链接或职位描述


识别岗位类型


读取简历并进行 A 到 G 评估

├── 生成评估报告
├── 生成定制 PDF
└── 写入申请追踪记录

在支持斜杠命令的 AI 编程命令行工具中,career-ops 提供统一的命令入口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/career-ops
/career-ops {职位描述}
/career-ops scan
/career-ops pdf
/career-ops cover
/career-ops email
/career-ops batch
/career-ops tracker
/career-ops apply
/career-ops outcome
/career-ops pipeline
/career-ops contacto
/career-ops deep
/career-ops training
/career-ops project

不同命令对应不同环节。

scan 用于扫描职位来源。pdf 用于生成 ATS 优化的简历。cover 用于生成求职信。email 用于起草正式求职邮件。batch 可以批量评估多个岗位。tracker 用于查看申请状态。pipeline 用于处理等待中的职位链接。contacto 用于寻找招聘经理、招聘人员或同行联系人,并起草对应的 LinkedIn 消息。deep 用于形成结构化的公司研究提示。trainingproject 则可以分别用于评估课程、证书和作品集项目。

对于 Codex 这类未必自动注册斜杠命令的环境,career-ops 也支持使用自然语言直接请求对应模式。

1
2
3
4
5
Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123
Run the career-ops scan mode and summarize new matches.
Run the career-ops pipeline mode for data/pipeline.md.
Run the career-ops pdf mode for the latest evaluated role.
Run the career-ops tracker mode and summarize the current statuses.

工具在这里不是一套必须背诵的固定指令,更像一组可以被自然语言唤起的工作模式。

它不是替你决定,而是让你更有依据地决定

career-ops 的一个重要边界非常明确:AI 负责评估、排序、起草和建议,最终决定与实际行动仍由用户掌握。

系统不会自动提交申请,也不会自动发送邮件或点击投递按钮。它可以帮助填写申请表、生成邮件草稿、组织申请材料,但不会跨过用户的最终确认。

这种设计让它更像一个工作台,而不是一个失控的自动化机器。

求职从来不只是流程问题。它涉及个人经历、职业方向、岗位判断、工作偏好、风险承受能力与现实条件。AI 可以帮助压缩重复劳动,可以帮助整理材料,可以帮助发现信息之间的联系,但它无法代替一个人对自己职业路径作出真正选择。

career-ops 将这一点写进系统逻辑之中:AI 给出分析,用户保留判断。

先让系统认识你,再让它帮你看职位

career-ops 并不假设一开始就能完美理解用户。

README 提醒,最初几次评估未必会达到理想效果,因为系统尚不了解使用者的职业故事、证明材料、目标岗位、偏好、优势与边界。它需要用户逐步提供简历、职业背景、成就证据、目标方向与个人偏好,才能形成更贴近个人情况的判断。

这种关系不是把简历扔给工具之后就一劳永逸,而是让系统逐渐获得上下文。

用户可以提供自己的 cv.md,也可以加入可选的 article-digest.md 来保存证明材料。配置文件中可以描述个人资料,招聘门户配置则可以按照目标公司进行调整。随着这些内容被补充,career-ops 会拥有更清晰的坐标系:什么经历重要,什么能力值得强调,什么岗位方向更符合目标,什么机会即使看起来光鲜也未必适合。

第一次使用时,系统也可以通过对话完成设置,引导用户整理简历、个人资料与目标岗位,而不必一开始就手工编辑所有文件。

让简历不再是一份固定文件

一份简历通常不应该在所有岗位面前保持完全不变。

career-ops 支持生成针对职位描述定制的 ATS 优化 PDF。它会根据具体岗位调整简历内容,并使用 HTML 模板与 Playwright 生成 PDF。项目中还包含 Space Grotesk 与 DM Sans 字体,用于简历 PDF 的呈现。

这不是把同一份内容机械换个标题,而是让简历能够围绕岗位描述进行调整。

当一个职位更重视某类经验时,相关经历应该被更清晰地呈现。当岗位语言强调特定能力时,简历也需要能够以更贴近职位语境的方式表达。当求职者的经历横跨多个方向时,一份面向不同目标岗位的材料,往往需要不同的叙述顺序与强调重点。

career-ops 将这种调整纳入标准流程,使简历生成不再是申请前临时进行的一次手工改写,而成为评估结果之后自然衔接的一步。

求职信与申请邮件,也能回到有准备的表达

除了简历 PDF,career-ops 还支持求职信生成与正式申请邮件起草。

求职信功能会基于研究内容生成材料,并包含关键词呼应、多个互动式切入角度、聊天中的草稿确认环节以及 A4 PDF 输出。申请邮件功能则可以根据评估报告或粘贴的职位描述,生成适用于招聘人员、内推或冷申请场景的正式邮件草稿。

这些邮件草稿会包含主题行、附件清单、基于信息来源的匹配点,以及围绕个人资料形成的表达方向。

在大量求职场景中,真正难的并不是写出一封格式正确的邮件,而是让它看起来确实针对这份机会而写。career-ops 尝试把岗位评估、个人经历与表达材料连接起来,让简历、求职信与申请邮件不再彼此割裂。

扫描门户,让机会发现更系统

career-ops 提供职位扫描能力,能够自动处理 Greenhouse、Ashby、Lever 与公司招聘页面等来源。

项目预配置了 100 多家公司与 45 多条搜索查询,覆盖多个方向,包括 AI 实验室、语音 AI、AI 平台、联络中心、企业服务、LLMOps、自动化与欧洲公司。

其中包含的公司类别有:

  • AI 实验室
  • 语音 AI
  • AI 平台
  • 联络中心
  • 企业服务
  • LLMOps
  • 自动化工具
  • 欧洲公司

扫描器还覆盖了 55 个以上的招聘板模块,支持 ATS API、招聘板聚合来源、XML 与 RSS 信息源、Markdown 信息源以及本地解析器。

默认情况下,扫描器会信任 ATS 信息源返回的职位数据。对于部分公司仍在公开接口中保留过期岗位的情况,career-ops 提供验证模式,通过 Playwright 进行职位有效性检查。

1
node scan.mjs --verify

这一验证过程只会针对去重之后的新职位顺序执行,从而让检查成本保持在可控制的范围内。

扫描的价值不只是“发现更多岗位”。它更重要的作用,是把职位信息带入同一条评估与追踪流程中。发现、判断、生成材料、记录状态,不再是互不相干的四件事。

批量处理,让大量职位不再只能逐个面对

当职位数量增多时,逐条手工评估很容易让人陷入疲惫。career-ops 提供批处理模式,可以通过无界面的工作进程并行处理多个职位。

批处理流程以 batch-input.tsv 作为输入,内容可以包括职位标识、链接、来源与备注。

1
2
3
id    url    source    notes
1 https://jobs.example.com/role-a LinkedIn
2 https://greenhouse.io/company/role-b Greenhouse priority

在正式运行前,可以先执行预览:

1
./batch/batch-runner.sh --dry-run

确认后再启动批量处理:

1
./batch/batch-runner.sh

每个工作进程都会独立运行完整评估流程,生成报告、PDF 与追踪数据。处理结束后,系统会将结果合并进申请记录,将已处理职位从待处理列表中协调移出,并执行完整性检查。

批处理支持并行数量、失败重试、断点续跑、起始位置、处理上限与限流等待等参数。

1
./batch/batch-runner.sh --resume-paused

batch-state.tsv 会记录职位处理状态,包括等待处理、处理中、已完成、失败、跳过、限流与暂停限流等状态。即使批处理被中断,也可以在之后恢复。

这种设计让大量职位信息不必堆积成难以面对的待办列表。它们可以进入一个可观察、可恢复、可检查的处理队列。

一份追踪表,应该是单一事实来源

career-ops 将申请记录视为系统的重要组成部分。

职位评估、简历 PDF、申请状态与批处理结果不会各自散落,而是汇入统一追踪体系。系统提供自动合并、去重、状态标准化与健康检查能力,让申请记录能够保持一致性。

在批处理过程中,追踪合并机制会处理多项事务:

  • 根据公司与岗位的模糊匹配,以及报告编号进行去重
  • 在 TSV 与申请记录之间转换列顺序
  • 当重新评估获得更高分数时原地更新已有记录
  • 将已合并的 TSV 文件移动到对应目录

同时,已完成或跳过的职位可以从待处理队列中被协调移除,避免同一个岗位长期停留在等待状态。

求职中的混乱,很大一部分来自信息的不一致:同一岗位是否已经评估,是否已经准备简历,是否已经投递,当前处于什么状态,下一步应该做什么。career-ops 希望让这些答案回到一个统一的位置。

终端里的求职仪表盘

career-ops 内置了一个终端界面的申请管线浏览器。

它以 Go 构建,并使用 Bubble Tea 与 Lipgloss。仪表盘与 Node 核心保持隔离,因此属于可选组件,不是其他功能运行的前提。

启动终端仪表盘:

1
npm run serve:dashboard

构建独立二进制文件:

1
npm run build:dashboard

仪表盘支持六个筛选标签、四种排序模式、分组与平铺视图、延迟加载的报告预览,以及内联状态修改。

它读取申请追踪文件,在终端中把职位管线变成一个可浏览的界面。对于希望留在命令行环境中完成管理的人来说,这份仪表盘像是一扇可以随时打开的窗口:不必跳到复杂的网页后台,也能看见当前求职流程正在如何推进。

项目还提供了一个实验性的 Web UI,它处于 alpha 阶段,并且只有在用户主动启动后才会运行。

从岗位评估,到面试与录用阶段

career-ops 的流程并没有在生成简历之后结束。

它还包含面试故事库、谈薪脚本、面试准备、练习反馈、面试后复盘、公司红旗检测、合同阅读辅助、律师问题清单、薪资差距分析、跟进节奏计算、提醒种子、雇主回复分类与结果归档等内容。

面试故事库会在多次评估中积累 STAR 加反思的故事,目标是沉淀出五到十个可用于回答行为面试问题的核心案例。

谈薪部分提供薪资谈判框架、地域折扣应对与竞争性 offer 的利用方式。

面试套件则涵盖按时间块组织的准备计划、带反馈的练习以及面试后的复盘。录用阶段还可以辅助阅读合同条款,并将期望薪资、职位公布薪资与实际薪资之间的差距纳入分析。

跟进与回复功能则让申请之后的等待期不至于完全失去节奏。系统可以计算跟进节奏,生成提醒,并将雇主回复归类后更新到追踪记录中。

从职位发现到最终结果,career-ops 试图让每一步都留下可继续使用的信息,而不是让每个阶段结束后又重新从零开始。

公司研究,不只为了了解公司

career-ops 提供公司研究与联系人发现能力。

其中,deep 模式可以形成覆盖六个维度的研究提示,涉及 AI 战略、近期动态、文化、挑战、竞争者与候选人切入角度。contacto 模式则能够帮助寻找招聘经理、招聘人员或同行联系人,并为不同联系人类型起草不超过 300 个字符的 LinkedIn 消息。

README 对这一能力的表达非常直接:申请让你进入队列,研究才有机会带来对话。

这并不意味着每一次研究都会得到回应,而是强调求职不应只停留在点击提交按钮的瞬间。了解公司在做什么、正在经历什么、关注什么问题,以及个人经历可以从哪里切入,能够让一次申请拥有更清晰的方向。

支持多种 AI 编程命令行工具

career-ops 并不把自己绑定在单一 AI 命令行工具之上。

它支持 Claude Code、Codex、OpenCode、Antigravity CLI、Qwen、Kimi、GitHub Copilot、Grok Build CLI 等环境,并基于开放的 Agent Skill Standard 组织共享技能入口。

项目使用 AGENTS.md 作为通用的代理指令来源,并通过不同 CLI 的包装文件接入。技能定义位于 .agents/skills/career-ops/SKILL.md,再被不同工具目录引用或链接。

对于 Antigravity CLI,可以在项目目录中启动后使用统一命令:

1
2
cd career-ops
agy
1
2
3
4
5
/career-ops "Senior AI Engineer at Anthropic..."
/career-ops pipeline
/career-ops scan
/career-ops pdf
/career-ops tracker

对于 Grok Build CLI,也可以使用相似的工作方式:

1
2
cd career-ops
grok

对于独立的 Gemini API 脚本,项目提供了从环境变量到职位评估的运行方式:

1
2
3
cp .env.example .env
npm install
node gemini-eval.mjs "We are looking for a Senior AI Engineer..."

career-ops 的重点不在于用户必须选择某一种特定工具,而在于让不同 AI 编程命令行环境都能进入同一套求职工作流。

从一条命令开始

最快的初始化方式是:

1
npx @santifer/career-ops init

该命令会将最新发布版本克隆到 ./career-ops,并安装依赖。

随后进入项目目录,启动可用的 AI 命令行工具:

1
2
cd career-ops
claude

也可以使用 Codex、Qwen、OpenCode、Antigravity CLI 或 Grok Build CLI。

如果希望手动安装,可以使用 Git 克隆方式:

1
2
3
git clone https://github.com/santifer/career-ops.git
cd career-ops && npm install
npx playwright install chromium

接着检查环境:

1
npm run doctor

再创建个人资料、职位门户配置与简历文件:

1
2
cp config/profile.example.yml config/profile.yml
cp templates/portals.example.yml portals.yml

在项目根目录创建 cv.md 后,用户便可以通过对话让 AI 命令行工具帮助调整系统,例如修改目标岗位类型、更新个人资料、加入目标公司或改变系统模式。

如果希望安装全局命令,也可以执行:

1
npm i -g @santifer/career-ops

其中,npx @santifer/career-ops init 更适合第一次使用,用于创建独立项目目录。全局安装则适合已经拥有项目目录,并希望直接运行 career-ops 命令的场景。

数据留在本地,控制权留在用户手中

career-ops 是一个本地开源工具,而不是托管服务。

用户的简历、联系人信息与个人数据保存在本机,并直接发送给用户自行选择的 AI 服务提供方。项目声明不会收集、存储或出售这些数据。

系统默认提示 AI 不要自动提交申请,但 README 同时也明确指出,AI 模型可能出现不可预测行为。如果用户修改提示内容或使用不同模型,需要自行保持监督。使用招聘门户时,也需要遵守相应第三方平台的服务条款。

这份边界感与项目的整体理念是一致的。

career-ops 可以帮助整理、研究、评估、起草与追踪,但它不应取代用户对个人信息、求职策略与实际行为的控制。它提供的是一套本地运行的工作系统,而不是替人做职业决定的黑箱。

一套围绕职业行动而设计的开源系统

career-ops 采用 MIT 许可证发布,代码免费且开源。项目名称与品牌则由单独的商标政策管理。

从项目结构来看,它将用户简历、个人资料、技能模式、职位门户、批处理脚本、追踪数据、评估报告、PDF 输出、终端仪表盘、模板与文档收纳在同一个项目中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
career-ops/
├── cv.md
├── article-digest.md
├── config/
├── modes/
├── templates/
├── batch/
├── dashboard/
├── data/
├── reports/
├── output/
├── fonts/
├── docs/
└── examples/

这份结构像一张求职操作地图。

cv.md 保存个人简历。config/ 保存个人资料配置。modes/ 承载不同工作模式。templates/ 提供简历与职位门户模板。batch/ 用于并行处理。dashboard/ 提供终端视图。data/ 记录追踪信息。reports/ 保存岗位评估。output/ 放置生成的 PDF。docs/ 则记录设置、定制、预算与架构相关内容。

career-ops 想解决的并不是“如何更快投递更多岗位”。

它试图解决的是另一个更接近现实的问题:当职位信息越来越多、申请流程越来越复杂、材料准备越来越重复时,如何让求职者拥有一套能不断积累上下文、持续产生判断、保存行动记录并帮助推进下一步的个人系统。

它让 AI 参与筛选,却不让 AI 取代选择。

它让流程自动化,却不让自动化越过用户的最终决定。

它让职位、简历、研究、邮件、面试、谈薪与追踪彼此连接,让求职不再只是一次次孤立的提交,而成为一条可以观察、调整与沉淀的职业行动路径。