career-ops 是一个把 AI 编码 CLI 变成求职指挥中心的开源项目,2026 年 4 月创建,如今在 GitHub 上积累了 66,832 个 Star、13,000 次 Fork 和 398 位贡献者,单日新增 Star 数保持在 800 以上。项目作者 Santiago Fernández de Valderrama Aparicio(santifer)用它评估了 740 多个工作机会、生成 100 多份定制简历,最终拿到 Head of Applied AI 职位,随后将整套系统以 MIT 协议开源。

项目定位:本地运行的求职流水线
career-ops 的核心主张写在 README 开头:公司用 AI 筛选候选人,候选人也可以用 AI 选择公司。它运行在本地,简历、联系方式和评估数据全部留在用户机器上,只在与用户自己选择的 AI 供应商通信时外发。
一个容易误判的点:career-ops 不是自动海投工具。作者将其定位为过滤器(filter),系统强烈建议不投递评分低于 4.0/5 的职位,AI 负责评估、排序和起草,投递动作始终由人完成。项目 FAQ 里明确写了 "It never submits, sends, or clicks anything",这种人机分工设计贯穿整个代码库。
CLI 无关设计:Agent Skill Standard
项目没有绑定任何单一厂商的编码 CLI。技能入口定义在 .agents/skills/career-ops/SKILL.md,遵循开放 Agent Skill Standard,再通过软链接或引用适配各家 CLI 的约定文件:
career-ops/
├── AGENTS.md # 规范指令(所有 CLI 共用)
├── CLAUDE.md # Claude Code 包装层(导入 AGENTS.md)
├── CODEX.md # Codex 包装层
├── OPENCODE.md # OpenCode 包装层
├── GEMINI.md # 遗留兼容守卫(防 Antigravity 重复加载)
└── .agents/skills/career-ops/SKILL.md # 统一技能入口Google 把消费级 Gemini CLI 迁移到 Antigravity CLI 后,项目把 GEMINI.md 改成空操作兼容守卫,避免 Antigravity 同时读取 AGENTS.md 和 GEMINI.md 时把项目指令加载两遍。这种细节说明多 CLI 适配本身就在持续消耗维护成本。目前官方支持的 CLI 覆盖 Claude Code、Codex、Antigravity、OpenCode、Qwen、Kimi、GitHub Copilot、Grok Build CLI 八家,理论上任何支持技能标准的 CLI 都能直接运行。
系统还设计成让 AI CLI 自己定制自己:评分权重、模式文件、原型分类都可以直接用自然语言让 CLI 修改,因为 CLI 读取和修改的是同一批文件。
A-H 评分体系:七块评估加一个合法性守门
求职评估的核心是结构化评分。每个职位经过一系列 Markdown 模式文件(modes/*.md)驱动的大模型推理,产出报告:
- A-F 块:角色概要、CV 匹配度、级别策略、薪酬调研、个性化建议、面试准备(STAR+R 故事法),按五个加权维度折算成 1.0-5.0 分
- G 块:职位合法性独立评估,识别诈骗帖和幽灵职位(ghost jobs),这一块不影响 1-5 分
- Work-Auth 信号:职位描述明确写不提供签证担保时,作为硬性阻断项标记
幽灵职位识别在当前求职市场有直接现实意义。扫描器还带 detect-reposts.mjs 模块,统计重复发布行为;analyze-patterns.mjs 分析拒信模式和各 ATS 渠道的晋级率。
评估报告本身也有生命周期管理。outcome 模式记录每次投递的结果并把相关产物归档,followup-cadence.mjs 计算跟进节奏并生成带种子的提醒,reply-watch 把雇主的回复分类后直接更新追踪表。面试准备沉淀为 Story Bank:跨评估累积 5-10 个 STAR+Reflection 母题故事,用于应答各类行为面试问题,配套公司红旗检测器和合同条款阅读伴侣。谈薪环节有单独的脚本框架,覆盖薪酬谈判、地域折扣反驳和竞争 offer 博弈。
从投递到 offer 的每个阶段,数据都落在同一套 Markdown 表格里。这种设计让候选人可以在任何阶段回溯历史决策:哪份简历投了哪类职位、通过哪个 ATS 渠道、晋级到哪一步、在哪个环节被拒,stats.mjs 能输出整个漏斗的终身统计。
数据层:Markdown 表格加 YAML,不用数据库
整套系统的持久层刻意保持原始:
| 层 | 载体 |
|---|---|
| 求职管道 | data/ 目录下的 Markdown 表格 |
| 个人画像 | config/profile.yml |
| 门户配置 | portals.yml(100+ 公司预配置) |
| 批处理队列 | TSV 文件 |
| 评估报告 | reports/ 下的 Markdown |
没有 SQLite,没有服务端。管道完整性靠自动合并、去重、状态规范化和健康检查维护。这个选择与项目的本地优先立场一致:所有数据天然可 git 管理、可人工检查、可随时迁移。
扫描器:55+ Provider 模块与活性验证
门户扫描器内置 100+ 家公司配置(Anthropic、OpenAI、ElevenLabs、Retool、n8n 等)和 45+ 条搜索查询,通过 55+ 个 provider 模块覆盖 Greenhouse、Ashby、Lever、Wellfound 等 ATS 的 API、全站 feed、XML/RSS 和本地解析器。
一个工程上值得展开的设计:ATS 公开 API 常有职位关闭后仍返回过期条目的情况,这些僵尸数据会漏进管道。node scan.mjs --verify 在 API 轮询之后启动 Playwright 逐条验证新职位的存活状态,验证只针对去重后的新条目顺序执行,把成本控制在有界范围内。默认模式则保持零 token 消耗的纯 API 发现。
批处理与终端面板
批量评估用 headless CLI worker 并行执行,每个 worker 是独立的 claude -p 或 opencode run 进程,靠 batch/batch-prompt.md 提供自包含提示词、batch-runner.sh 做编排,官方说法是可并行评估 10+ 个职位。
终端面板用 Go 写成,基于 Bubble Tea 和 Lipgloss(Catppuccin Mocha 主题),提供 6 个过滤标签页、4 种排序模式和懒加载预览。PDF 生成走 HTML 模板加 Playwright 渲染管线,简历用 Space Grotesk 和 DM Sans 双字体排布,求职信走同一管线输出 A4 PDF。
成本控制与计费陷阱
README 的 FAQ 专门解释了一个高频坑:Claude Pro/Max 订阅用户如果环境变量里存在 ANTHROPIC_API_KEY,CLI 会优先走 API key 按 token 计费,订阅额度被闲置。解决方法是清掉该环境变量并重新 /login。批处理模式是例外,claude -p worker 不使用交互式登录,需要 claude setup-token 生成 OAuth token。预算文档还给出 OpenRouter 免费模型、Ollama 本地模型和任意 OpenAI 兼容端点的配置路径,Antigravity CLI 免费层的零成本方案也有单独文档。
使用边界
项目自带四条免责声明,边界划得相当清楚:数据留在本地但会发给你选择的 AI 供应商;AI 可能产生幻觉技能或经历,提交前必须人工审核;使用需遵守各招聘门户的 ToS,不得用于骚扰雇主或冲击 ATS 系统;评估结果是建议而非事实。商标政策对社区使用宽松,商业产品命名和背书保留权利。
维护模式
作者公开的维护方式是每周约 4 小时的人工投入加一支 AI agent 舰队处理日常维护,具体机制写在其博客文章 Agentic maintenance: how career-ops is run by a fleet of AI agents 里。对一个 398 人贡献、18 种语言 README、已被 Business Insider 和 WIRED(希腊版)报道的项目,这个投入产出比本身就是 Agent Skill Standard 工作方式的一个样本。
快速上手
npx @santifer/career-ops init
cd career-ops
claude # 或 codex / qwen / opencode / agy / grok首次启动通过对话完成初始化:导入简历、填写画像、确定目标角色,无需手工编辑配置文件。之后粘贴职位 URL 或 JD 文本即触发完整流水线,支持斜杠命令的 CLI 里用 /career-ops 加子命令调用评估、扫描、PDF、追踪等模式。
来源: