编程 Career-Ops 深度实战:当 Claude Code 化身求职指挥中心——从 AI 编程工具到全流程求职自动化的生产级完全指南(2026)

2026-06-16 11:20:12 +0800 CST views 9

Career-Ops 深度实战:当 Claude Code 化身求职指挥中心——从 AI 编程工具到全流程求职自动化的生产级完全指南(2026)

背景介绍:当 AI 学会「找工作」

2026年的求职市场,发生了翻天覆地的变化。

你可能已经习惯了用 Claude Code、GitHub Copilot、Cursor 这样的 AI 编程工具来写代码、写文档、做 Code Review。但你有没有想过——同样的 AI 编程工具,能不能帮你找工作?

Career-Ops 就是这个问题的最佳答案。

这是一个基于 Claude Code 构建的 AI 求职系统,在 GitHub 上已经狂揽 50,000+ Stars,每天仍以 700+ 的速度增长。作者 santifer 曾在科技行业摸爬滚打多年,用传统方式海投简历、反复改 Cover Letter、每天手动刷招聘网站——直到他决定把自己最擅长的「用工具自动化一切」的工程师思维用到了求职上。

他的核心理念非常朴素但有力:「公司用 AI 来筛选候选人,那候选人为什么不能用 AI 来挑选公司?」

Career-Ops 正是这一理念的完整实现。它不是一个简单的求职网站爬虫,也不是一个花哨的简历生成器——它是一套以 Claude Code 为核心的全流程求职操作系统,覆盖从职位发现、简历定制、面试准备到 Offer 谈判的每一个环节。

在这篇文章中,我将带你深入理解 Career-Ops 的架构设计、核心功能、命令行工作流,以及如何将其部署到你的求职场景中。全文约 12,000 字,建议收藏后慢慢阅读。


核心概念:什么是 Career-Ops?

Career-Ops 的本质是一个构建在 Claude Code 之上的 Skill 系统。它利用 Claude Code 的 Agent 能力(文件系统操作、网络请求、PDF 生成、多轮对话推理),配合一套精心设计的求职工作流模板,将 AI 编程工具变成了一个不知疲倦的求职助手。

技术栈一览

组件技术选型作用
核心 AgentClaude Code (Anthropic)AI 推理与任务执行
Skill 系统Claude Code 原生 Skill 格式 (.claude/ skills/)求职工作流模板
求职门户扫描Python 脚本 + 浏览器自动化抓取各大公司招聘页
数据存储SQLite / JSON 文件管理职位列表与申请状态
可视化面板Go + Warp 终端职位状态仪表盘
简历生成LaTeX / HTML → PDFATS 友好的简历输出
多 CLI 支持Claude Code, Gemini CLI, Codex, OpenCode跨平台兼容

架构全景

┌─────────────────────────────────────────────────────┐
│                    Career-Ops                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌──────────────┐    ┌──────────────────────────┐  │
│  │  Skill Modes  │    │   求职门户扫描器 (Python) │  │
│  │  (14 种模式)   │    │   - Anthropic           │  │
│  │               │    │   - OpenAI               │  │
│  │  /career-ops  │    │   - Mistral             │  │
│  │  scan         │    │   - 45+ 家公司 ...        │  │
│  │  evaluate      │    │                          │  │
│  │  cv            │    │   技术: Playwright +     │  │
│  │  tracker       │    │   requests + LLM        │  │
│  │  prep          │    │                          │  │
│  │  negotiate     │    └──────────────────────────┘  │
│  └──────────────┘               │                   │
│           │                     │ 职位数据           │
│           ▼                     ▼                   │
│  ┌──────────────────────────────────────────────┐   │
│  │              SQLite / JSON 数据存储            │   │
│  │   jobs.db | tracker.json | config/          │   │
│  └──────────────────────────────────────────────┘   │
│                         │                            │
│                         ▼                            │
│  ┌──────────────┐    ┌──────────────────────────┐  │
│  │  Go Dashboard │    │   PDF 简历生成系统        │  │
│  │  (Warp 终端)  │    │   LaTeX → ATS 优化 PDF   │  │
│  └──────────────┘    └──────────────────────────┘  │
│                                                     │
└─────────────────────────────────────────────────────┘

这个架构的精妙之处在于:它不是在 Claude Code 外面包了一层,而是直接利用 Claude Code 的 Skill 扩展机制。这意味着你不需要学习任何新的 CLI 工具——你只需要在你已经熟悉的 Claude Code 中输入 /career-ops 这样的命令,剩下的全由 AI 来完成。


安装与配置:30 分钟搭建求职自动化环境

前置条件

# 1. 安装 Claude Code (如果没有的话)
npm install -g @anthropic-ai/claude-code

# 2. 克隆项目
git clone https://github.com/santifer/career-ops.git
cd career-ops

# 3. 安装 Python 依赖 (用于求职门户扫描)
pip install -r requirements.txt

# 4. 安装 Go (可选,用于 Warp 仪表盘)
# macOS
brew install go

# 5. 初始化配置
cp config/config.example.yaml config/config.yaml

配置文件详解

# config/config.yaml
anthropic:
  api_key: ${ANTHROPIC_API_KEY}  # 从环境变量读取
  model: claude-sonnet-4-20250514
  max_tokens: 8192

job_search:
  # 扫描的公司列表
  companies:
    - name: Anthropic
      url: https://boards.greenhouse.io/anthropic
      keywords: ["engineer", "researcher"]
    - name: OpenAI
      url: https://jobs.ashbyhq.com/openai
      keywords: ["software", "machine learning"]
    - name: Mistral
      url: https://careers.mistral.ai
      keywords: ["research", "engineering"]
  
  # 扫描频率
  scan_schedule: "0 8 * * *"  # 每天早上8点自动扫描
  max_listings_per_company: 50

cv:
  # LaTeX 模板路径
  template: ./templates/modern_cv.tex
  output_dir: ./output/cvs
  ats_optimized: true

tracker:
  # 申请状态跟踪数据库
  database: ./data/tracker.db
  retention_days: 90

初始化 Claude Code Skill

# 将 career-ops skill 链接到 Claude Code
ln -sf "$(pwd)/.claude" ~/.claude/

# 或者使用项目提供的安装脚本
./install.sh

# 验证安装
claude-code skills list | grep career-ops
# 输出: career-ops - AI-powered job search system

14 种 Skill Modes 深度解析

Career-Ops 的核心是 14 种精心设计的 Skill Modes,每一种都对应求职流程中的一个关键环节。下面逐一解析。

1. /career-ops scan — 全自动职位发现

这是 Career-Ops 最基础也最强大的功能。它会:

自动扫描 45+ 家公司招聘门户,包括 Anthropic、OpenAI、Mistral、Google、Meta、Stripe、Notion、Linear、Figma 等一线科技公司。

核心代码逻辑:

# scrn/portals/scanner.py
import asyncio
import httpx
from playwright.async_api import async_playwright
from typing import List, Dict
import json

class JobPortalScanner:
    """多线程职位扫描器"""
    
    def __init__(self, config: dict):
        self.config = config
        self.client = httpx.AsyncClient(
            timeout=30.0,
            follow_redirects=True,
            headers={
                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                             "AppleWebKit/537.36"
            }
        )
    
    async def scan_portal(self, portal: dict) -> List[dict]:
        """扫描单个招聘门户,返回职位列表"""
        company = portal["name"]
        url = portal["url"]
        
        # 使用 Playwright 渲染 JS 动态页面
        async with async_playwright() as p:
            browser = await p.chromium.launch(headless=True)
            page = await browser.new_page()
            
            try:
                await page.goto(url, wait_until="networkidle")
                
                # 等待职位列表加载
                await page.wait_for_selector(
                    portal.get("job_selector", "article, .job-listing"),
                    timeout=15000
                )
                
                # 提取职位信息
                jobs = await self._extract_jobs(page, portal)
                
                # 过滤已关闭职位
                active_jobs = [
                    j for j in jobs 
                    if not self._is_expired(j)
                ]
                
                return active_jobs
                
            except Exception as e:
                print(f"[ERROR] {company}: {e}")
                return []
            finally:
                await browser.close()
    
    async def scan_all(self) -> List[dict]:
        """并发扫描所有招聘门户"""
        portals = self._load_portals()
        
        # 限制并发数,避免被封 IP
        semaphore = asyncio.Semaphore(5)
        
        async def bounded_scan(portal):
            async with semaphore:
                return await self.scan_portal(portal)
        
        results = await asyncio.gather(
            *[bounded_scan(p) for p in portals],
            return_exceptions=True
        )
        
        all_jobs = []
        for result in results:
            if isinstance(result, list):
                all_jobs.extend(result)
        
        # 按发布日期排序,去重
        return self._deduplicate(sorted(
            all_jobs, 
            key=lambda x: x.get("posted_at", ""), 
            reverse=True
        ))
    
    def _is_expired(self, job: dict) -> bool:
        """检测职位是否已关闭"""
        expired_patterns = [
            r"no longer (available|open|accepting)",
            r"(position|job) (is |has )?closed",
            r"job posting (has )?expired",
        ]
        text = f"{job.get('title', '')} {job.get('status', '')}".lower()
        return any(p.match(text) for p in expired_patterns)

使用示例:

$ claude
──────────────────────────────────────────────
Type '/help' for assistance.

/career-ops scan --companies anthropic,openai,stripe --freshness 7d

# Claude Code 响应:
# 正在扫描 3 家公司...
# ✓ Anthropic: 发现 12 个新职位 (最后更新: 3小时前)
# ✓ OpenAI: 发现 8 个新职位 (最后更新: 1天前)
# ✓ Stripe: 发现 15 个新职位 (最后更新: 5小时前)
# 
# 总计: 35 个新职位
# 已保存至: ./data/jobs_2026-06-16.json

2. /career-ops evaluate — AI 驱动的七维度职位评估

这个功能是 Career-Ops 最核心的创新。它不是简单地列出职位信息,而是用 AI 来深度分析职位与候选人的匹配度

评估维度:

维度评估内容AI 推理方式
A) 职位摘要分析职位类型、职能、资历要求提取关键信息,分类
B) 简历匹配职位要求与简历的逐条对比自然语言推理
C) 级别策略职位级别与候选人经验匹配度历史数据对比
D) 薪酬预期市场薪酬区间估算公开数据 + AI 推理
E) 团队文化公司文化与候选人价值观匹配公开信息分析
F) 成长潜力加入后的学习与发展空间业务线 + 技术栈分析
G) 风险评估公司的稳定性与前景融资情况 + 市场表现

核心评估逻辑:

# scrn/modes/evaluate.py
import anthropic
from typing import Dict, List
import json

client = anthropic.Anthropic()

EVALUATION_PROMPT = """
你是一位专业的科技行业 HR 顾问。现在需要评估一个职位与候选人的匹配度。

## 候选人简历摘要:
{resume_summary}

## 职位信息:
- 职位名称: {job_title}
- 公司: {company}
- 职位描述: {job_description}
- 要求: {requirements}
- 薪酬范围: {salary_range}
- 地点: {location}

## 评估维度 (请逐项打分 1-10 并说明理由):

1. 【简历匹配度】职位要求与候选人经历的契合程度
2. 【级别匹配度】候选人当前级别与目标职位的匹配程度
3. 【薪酬匹配度】候选人预期薪酬与职位范围的匹配程度
4. 【技术栈匹配度】候选人技术栈与职位要求的重叠度
5. 【文化匹配度】候选人价值观与公司文化的契合度
6. 【成长潜力】该职位对候选人长期发展的价值
7. 【综合推荐度】综合以上所有因素的推荐程度

## 输出格式 (JSON):
{{
  "scores": {{
    "resume_match": {{"score": X, "reason": "..."}},
    "level_match": {{"score": X, "reason": "..."}},
    "salary_match": {{"score": X, "reason": "..."}},
    "tech_match": {{"score": X, "reason": "..."}},
    "culture_match": {{"score": X, "reason": "..."}},
    "growth_potential": {{"score": X, "reason": "..."}},
    "overall_recommendation": {{"score": X, "reason": "..."}}
  }},
  "strengths": ["优势1", "优势2"],
  "concerns": ["顾虑1", "顾虑2"],
  "suggested_improvements": ["建议1", "建议2"],
  "decision": "apply|skip|maybe"
}}
"""

async def evaluate_job(job: dict, resume: dict, cv_path: str) -> dict:
    """对单个职位进行深度评估"""
    
    message = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2048,
        messages=[{
            "role": "user",
            "content": EVALUATION_PROMPT.format(
                resume_summary=resume.get("summary", ""),
                job_title=job.get("title", ""),
                company=job.get("company", ""),
                job_description=job.get("description", ""),
                requirements=job.get("requirements", ""),
                salary_range=job.get("salary", "未公开"),
                location=job.get("location", "未公开"),
            )
        }]
    )
    
    result = json.loads(message.content[0].text)
    
    # 如果综合评分 >= 7,自动标记为优先申请
    if result["scores"]["overall_recommendation"]["score"] >= 7:
        result["priority"] = "high"
        result["action"] = "apply"
    elif result["scores"]["overall_recommendation"]["score"] >= 5:
        result["priority"] = "medium"
        result["action"] = "maybe"
    else:
        result["priority"] = "low"
        result["action"] = "skip"
    
    return result

批量评估使用:

$ claude
/career-ops evaluate --batch --limit 20 --min-score 6 --sort-by overall_recommendation

# 输出:
# ╔══════════════════════════════════════════════════════════════╗
# ║              职位评估结果 (Top 10)                          ║
# ╠══════════════════════════════════════════════════════════════╣
# ║ # │ 公司       │ 职位          │ 匹配度 │ 推荐度 │ 行动     ║
# ╠══════════════════════════════════════════════════════════════╣
# ║ 1 │ Anthropic  │ Research Eng │  8.2   │  8.5   │ ✅ apply  ║
# ║ 2 │ Stripe     │ Senior SWE   │  7.8   │  8.1   │ ✅ apply  ║
# ║ 3 │ OpenAI     │ ML Engineer  │  7.5   │  7.6   │ ✅ apply  ║
# ║ 4 │ Linear     │ Backend Eng  │  6.9   │  7.2   │ 🤔 maybe  ║
# ║ 5 │ Notion     │ Full Stack   │  6.3   │  6.8   │ 🤔 maybe  ║
# ╚══════════════════════════════════════════════════════════════╝

3. /career-ops cv — ATS 优化的个性化简历生成

这是 Career-Ops 的另一个杀手级功能。它不只是生成一份简历,而是为每个职位生成定制化的简历,确保通过 ATS(Applicant Tracking System)系统的自动筛选。

ATS 友好的简历生成原理:

# scrn/modes/cv_generator.py
import subprocess
from pathlib import Path
import json
from typing import Dict

class CVGenerator:
    """
    LaTeX 驱动的 ATS 友好简历生成器
    
    核心策略:
    1. 使用标准化的 LaTeX 模板,确保格式一致性
    2. 关键词从职位描述中提取,确保覆盖 ATS 扫描
    3. 生成纯文本版本用于ATS解析 + PDF版本用于人工审阅
    """
    
    def __init__(self, template_dir: Path):
        self.template_dir = template_dir
        self.ats_keywords = self._load_ats_keywords()
    
    def generate(self, job: dict, resume: dict, cover_letter: bool = False) -> dict:
        """为特定职位生成定制化简历"""
        
        # Step 1: 从职位描述中提取 ATS 关键词
        keywords = self._extract_ats_keywords(job["description"])
        
        # Step 2: 重新排序简历内容,优先展示匹配项
        tailored_content = self._tailor_resume(
            resume, 
            keywords,
            job["title"]
        )
        
        # Step 3: 生成 LaTeX 源码
        latex_content = self._render_latex(tailored_content, job)
        
        # Step 4: 编译为 PDF
        output_dir = Path("./output/cvs") / job["company_slug"]
        output_dir.mkdir(parents=True, exist_ok=True)
        
        tex_file = output_dir / f"{job['company_slug']}_cv.tex"
        pdf_file = output_dir / f"{job['company_slug']}_cv.pdf"
        
        tex_file.write_text(latex_content)
        
        # 使用 xelatex 编译(支持中文)
        result = subprocess.run(
            ["xelatex", "-interaction=nonstopmode", str(tex_file)],
            cwd=output_dir,
            capture_output=True,
            timeout=60
        )
        
        if result.returncode != 0:
            # 回退到 pdflatex
            subprocess.run(
                ["pdflatex", "-interaction=nonstopmode", str(tex_file)],
                cwd=output_dir,
                capture_output=True,
                timeout=60
            )
        
        # Step 5: 生成纯文本版本(用于 ATS 系统直接解析)
        plain_text = self._to_plain_text(tailored_content)
        txt_file = output_dir / f"{job['company_slug']}_cv.txt"
        txt_file.write_text(plain_text)
        
        return {
            "pdf": str(pdf_file),
            "tex": str(tex_file),
            "txt": str(txt_file),
            "keywords_matched": keywords,
            "ats_score": self._estimate_ats_score(plain_text, keywords)
        }
    
    def _extract_ats_keywords(self, job_description: str) -> list:
        """从职位描述中提取 ATS 关键词"""
        
        prompt = """
从以下职位描述中提取 ATS 关键词。请分类提取:
1. 技术技能(编程语言、框架、工具)
2. 软技能(沟通、领导力等)
3. 行业术语
4. 资质认证

只返回关键词列表,用逗号分隔。

职位描述:
{job_description}
""".format(job_description=job_description)
        
        # 调用 Claude API 进行关键词提取
        response = self._call_claude(prompt)
        keywords = [k.strip() for k in response.split(",")]
        return keywords
    
    def _tailor_resume(self, resume: dict, keywords: list, job_title: str) -> dict:
        """根据关键词定制简历内容"""
        
        prompt = """
你是一位专业的简历优化师。请根据以下 ATS 关键词和目标职位,优化简历内容。

## 目标职位: {job_title}
## ATS 关键词: {keywords}

## 原始简历:
{resume}

## 优化要求:
1. 优先展示与关键词匹配的工作经历
2. 在工作描述中使用相同的动词和术语
3. 量化成果,使用数据而非模糊描述
4. 保持简洁,ATS 系统通常只读取前两页
5. 不要编造经历,只优化表达方式

请返回优化后的简历(JSON 格式):
{{
  "name": "...",
  "summary": "...",
  "experience": [...],
  "skills": [...],
  "education": [...]
}}
""".format(
            job_title=job_title,
            keywords=", ".join(keywords),
            resume=json.dumps(resume, ensure_ascii=False, indent=2)
        )
        
        response = self._call_claude(prompt)
        return json.loads(response)

使用示例:

$ claude
/career-ops cv generate --job-id anthropic-research-eng-2026 \
    --resume ./my_resume.json \
    --cover-letter \
    --output-format both

# 输出:
# ✓ 正在分析职位描述...
# ✓ 提取 ATS 关键词 (23 个): 
#   transformer, PyTorch, RLHF, distributed training,
#   Python, research communication, ML systems...
# ✓ 生成定制化简历...
# ✓ 编译 PDF...
# ✓ 生成 ATS 纯文本版本...
# 
# 📄 输出文件:
#   ./output/cvs/anthropic/anthropic-research-eng-2026_cv.pdf
#   ./output/cvs/anthropic/anthropic-research-eng-2026_cv.txt
# 
# 📊 ATS 关键词覆盖率: 87%

4. /career-ops tracker — 申请状态可视化

Career-Ops 提供了一个基于 Go 的可视化追踪面板,可以直观地看到你的整个求职进度。

$ /career-ops tracker --dashboard

# 启动 Warp 终端仪表盘
# 在终端中显示:

┌─────────────────────────────────────────────────────────────────────┐
│                    📊 Career Tracker Dashboard                        │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  本周申请: 8    已查看: 23    待回复: 15    面试中: 3    Offer: 1    │
│                                                                      │
│  ┌─────────────────────────────────────────────────────────────┐     │
│  │  申请进度时间线                                            │     │
│  │                                                            │     │
│  │  Anthropic Research Eng  ████████████░░░░░░░  面试 Round 2 │     │
│  │  OpenAI ML Engineer       ████████████████░░░  Offer 评估中 │     │
│  │  Stripe Senior SWE       ████████░░░░░░░░░░░  HR 筛选    │     │
│  │  Linear Backend Eng      ██████░░░░░░░░░░░░░░  笔试       │     │
│  │  Notion Full Stack       ███░░░░░░░░░░░░░░░░░  已投递     │     │
│  │                                                            │     │
│  └─────────────────────────────────────────────────────────────┘     │
│                                                                      │
│  📈 响应率统计:                                                       │
│  ├─ Anthropic:  ████████████████░░░ 75%  (3/4 进入面试)            │
│  ├─ OpenAI:     ████████████████░░░ 80%  (4/5 进入面试)            │
│  ├─ Stripe:     ████████████░░░░░░ 50%  (2/4 进入面试)            │
│  └─ Linear:     ████████░░░░░░░░░░░ 33%  (1/3 进入面试)           │
│                                                                      │
│  最近动态:                                                            │
│  ├─ 10:32  Anthropic 邀请参加 Round 2 面试                         │
│  ├─ 09:15  OpenAI HR 发来 Offer 沟通邮件                          │
│  ├─ 昨天    Stripe 发来在线测评链接                                 │
│  └─ 2天前   Linear 发来技术面试邀请                               │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

深度架构分析:为什么 Career-Ops 值得学习?

Career-Ops 不仅仅是一个求职工具,它在工程设计上有很多值得学习的点。

设计模式一:Skill 扩展而非框架重写

很多开发者做类似工具时会选择从零构建一个独立的 CLI 应用。但 Career-Ops 选择了一个更聪明的路径——直接利用 Claude Code 的 Skill 扩展机制

# 目录结构
career-ops/
├── .claude/               # Claude Code Skill 格式
│   └── skills/
│       └── career-ops/    # 每个 skill 一个目录
│           ├── prompt.md  # Skill 指令模板
│           ├── commands/  # 可执行命令
│           │   ├── scan.ts
│           │   ├── evaluate.ts
│           │   ├── cv.ts
│           │   └── tracker.ts
│           └── context/   # 上下文模板
│               └── job-analysis.md
├── scrn/                  # Python 核心逻辑
│   ├── portals/           # 招聘门户扫描器
│   ├── modes/             # Skill mode 实现
│   ├── cv/                # 简历生成
│   └── tracker/           # 状态追踪
├── config/                # 配置文件
├── data/                  # 数据存储
└── templates/            # LaTeX 模板

这种设计的优势:

  1. 零学习成本:用户不需要学习新的 CLI 工具
  2. 享受生态红利:Claude Code 的更新和改进自动惠及 Career-Ops
  3. 多工具兼容:可以同时支持 Claude Code、Gemini CLI、Codex 等多种工具
  4. 代码复用:核心 Python 逻辑可以在不同 Skill 之间共享

设计模式二:LLM 作为工作流引擎

Career-Ops 的另一个精妙设计是将 LLM 作为工作流编排引擎,而不是简单地用它来生成文本。

# scrn/modes/router.py
class WorkflowRouter:
    """
    基于 LLM 的动态工作流路由
    
    核心思想:不是用硬编码的 if-else 来决定下一步做什么,
    而是让 LLM 根据当前状态和目标,动态决定最优路径。
    """
    
    WORKFLOW_GRAPH = {
        "scan": ["evaluate", "cv"],
        "evaluate": ["cv", "tracker"],
        "cv": ["tracker", "prep"],
        "tracker": ["prep", "negotiate"],
        "prep": ["negotiate"],
        "negotiate": []
    }
    
    async def route(self, state: dict) -> str:
        """根据当前状态决定下一步"""
        
        prompt = """
## 当前求职状态:
- 已申请: {applied_count} 个职位
- 面试中: {interview_count} 个职位
- 待回复: {pending_count} 个职位
- Offer: {offer_count} 个

## 最高优先级职位:
{top_jobs}

## 当前工作流: {current_mode}

## 可用下一步操作:
{available_next}

## 决策要求:
1. 优先处理即将到来的面试准备
2. 评估现有申请是否需要跟进
3. 识别可能的新机会
4. 建议一个具体的后续操作

请输出 JSON 格式:
{{"action": "下一步操作", "reasoning": "决策理由", "priority": 1-10}}
""".format(**state)
        
        response = await self._call_claude(prompt)
        return json.loads(response)

设计模式三:多源数据融合

Career-Ops 的职位信息来源非常广泛,包括:

# scrn/portals/__init__.py
PORTAL_DEFINITIONS = {
    # Greenhouse 招聘系统 (很多公司使用)
    "greenhouse": {
        "pattern": "boards.greenhouse.io/*",
        "extractor": "greenhouse_extractor.py",
        "parser": "parse_greenhouse_job()"
    },
    # Ashby 招聘系统
    "ashby": {
        "pattern": "jobs.ashbyhq.com/*",
        "extractor": "ashby_extractor.py",
        "parser": "parse_ashby_job()"
    },
    # Lever 招聘系统
    "lever": {
        "pattern": "jobs.lever.co/*",
        "extractor": "lever_extractor.py",
        "parser": "parse_lever_job()"
    },
    # Workday 招聘系统
    "workday": {
        "pattern": "*.workday.com/*",
        "extractor": "workday_extractor.py",
        "parser": "parse_workday_job()"
    },
    # 自定义公司招聘页
    "custom": {
        "pattern": "*",
        "extractor": "custom_extractor.py",
        "parser": "parse_custom_job()"
    }
}

生产级实战:完整求职工作流演示

下面演示一个完整的求职工作流,从发现职位到收到 Offer:

阶段一:职位发现与筛选

# 启动 Claude Code
$ claude

# 第一步:扫描目标公司的最新职位
/career-ops scan \
    --companies anthropic,openai,mistral,google,meta,stripe \
    --freshness 14d \
    --keywords "machine learning,software engineer,research" \
    --output json

# AI 响应:
正在并发扫描 6 家公司招聘门户...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ Anthropic (Greenhouse)
  • Research Engineer - ML Systems [NEW]
  • Research Scientist - Alignment
  • Software Engineer - Platform
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ OpenAI (Ashby)
  • ML Engineer - Reasoning Team [NEW]
  • Research Scientist - Safety
  • Software Engineer - Inference
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ Stripe (Ashby)
  • Senior Software Engineer - Payments
  • Staff Engineer - Machine Learning
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📊 扫描完成: 发现 47 个职位 (其中 12 个为 14 天内新增)
📁 结果已保存: ./data/scans/scan_2026-06-16.json

阶段二:AI 驱动的职位评估

# 第二步:让 AI 对所有新职位进行评估
/career-ops evaluate \
    --batch \
    --scan-file ./data/scans/scan_2026-06-16.json \
    --resume ./my_resume.json \
    --min-score 6.0 \
    --top-k 10

# AI 深度分析过程:
正在加载简历: ./my_resume.json
简历摘要: 4年 ML 工程师,专注 PyTorch 分布式训练,
        有 RLHF 经验,熟悉 LLM推理优化

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🗺️ Anthropic | Research Engineer - ML Systems
   简历匹配度:   ████████████░░░░░  7.5/10
   级别匹配度:   ██████████████░░░  8.0/10  
   技术栈匹配度: ████████████████░  9.2/10  ← 极高!
   文化匹配度:   ████████████░░░░░  7.8/10
   综合推荐度:   ████████████████░  8.7/10
   
   ✅ 结论: 强烈推荐申请
   💡 匹配点: PyTorch, RLHF, 分布式训练, ML infra
   📝 建议: 重点准备 RLHF 项目描述

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🗺️ OpenAI | ML Engineer - Reasoning Team
   简历匹配度:   ██████████░░░░░░░  6.8/10
   级别匹配度:   ████████████░░░░░  7.5/10
   技术栈匹配度: ████████████░░░░░  7.2/10
   综合推荐度:   ████████████░░░░░  7.1/10
   
   ✅ 结论: 可以尝试
   ⚠️ 顾虑: Reasoning Team 要求更强的算法背景
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📊 评估汇总:
   • 强烈推荐 (≥8.0): 2 个
   • 推荐 (6.5-8.0): 5 个
   • 观望 (<6.5): 3 个
   
   📁 详细报告: ./data/evaluations/report_2026-06-16.md

阶段三:定制化简历生成

# 第三步:为每个目标职位生成定制化简历
/career-ops cv generate \
    --job anthropic-research-eng-ml-systems \
    --resume ./my_resume.json \
    --tailor \
    --ats-optimize \
    --cover-letter \
    --preview

# AI 生成的简历定制建议:
正在从职位描述提取 ATS 关键词...
关键词列表 (Top 20):
• PyTorch, JAX, Triton (框架)
• Distributed training, RLHF (核心技能)
• ML systems, inference optimization (领域)
• Research communication, publications (软技能)

正在优化简历内容...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 简历优化建议:

1. 【工作描述重排序】
   优先展示: RLHF 项目经验 (匹配度最高)
   强化描述: PyTorch 分布式训练细节

2. 【关键词覆盖】
   ✅ PyTorch: 在技能列表中置顶
   ✅ RLHF: 在工作描述中新增具体细节
   ✅ Distributed training: 量化成果 (8GPU → 4x 加速)

3. 【Cover Letter 开头建议】
   "I am excited about Anthropic's mission to develop 
   trustworthy AI systems, particularly your recent work 
   on constitutional AI and RLHF..."
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✓ 简历已生成:
   ./output/cvs/anthropic/research-eng-ml-systems_cv.pdf
   ./output/cvs/anthropic/research-eng-ml-systems_cv.txt
   
📊 ATS 关键词覆盖率: 91%

阶段四:面试准备与状态追踪

# 第四步:进入面试流程后,用 tracker 记录进度
/career-ops tracker update \
    --job anthropic-research-eng-ml-systems \
    --stage "round-2" \
    --notes "技术面结束,面试官反馈积极,问了分布式训练细节"

/career-ops tracker upcoming

# 输出:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 近期面试安排:

明天 14:00 UTC
┌────────────────────────────────────────┐
│  Anthropic | Round 2 Technical Deep Dive│
│  ├─ 系统设计题 (预估 45min)            │
│  └─ 准备: 回顾 RLHF 项目细节          │
│  📎 简历: research-eng-ml-systems_cv  │
└────────────────────────────────────────┘

本周五 18:00 UTC
┌────────────────────────────────────────┐
│  OpenAI | HR Screening                 │
│  ├─ 薪资预期 & 入职时间                │
│  └─ 准备: 查看 levels.fyi 数据         │
└────────────────────────────────────────┘
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

性能优化与最佳实践

扫描效率优化

Career-Ops 的招聘门户扫描是一个 I/O 密集型任务,可以通过以下方式优化:

# scrn/portals/optimized_scanner.py
import asyncio
from concurrent.futures import ThreadPoolExecutor
import httpx

class OptimizedScanner:
    """
    优化策略:
    1. 使用 asyncio 并发扫描
    2. 限制并发数避免被封
    3. 结果缓存避免重复扫描
    4. 失败自动重试
    """
    
    def __init__(self, max_concurrency: int = 5):
        self.semaphore = asyncio.Semaphore(max_concurrency)
        self.cache = AsyncLRUCache(maxsize=1000)
        self.retry_policy = RetryPolicy(max_retries=3, backoff_factor=2)
    
    async def scan_with_cache(self, portal: dict) -> list:
        """带缓存的扫描,相同 URL 短时间内不重复扫描"""
        cache_key = f"{portal['name']}:{portal['url']}"
        
        # 检查缓存 (有效期 1 小时)
        cached = self.cache.get(cache_key, ttl=3600)
        if cached:
            return cached
        
        # 带重试的扫描
        result = await self.retry_policy.execute(
            self.scan_portal(portal)
        )
        
        self.cache.set(cache_key, result)
        return result

API 调用成本优化

Career-Ops 使用 Claude API 进行深度分析,每次评估都会调用大模型。可以通过以下方式降低成本:

# 使用 Claude Haiku 进行快速初筛,仅高分职位用 Sonnet 深度分析
async def evaluate_batch_efficient(jobs: list, resume: dict) -> list:
    """两阶段评估:快速初筛 + 深度分析"""
    
    # 阶段一:Claude Haiku 快速打分 (便宜 10x)
/career-ops quick-score --jobs jobs --resume resume --model haiku
    
    # 获取初筛分数
    scored = get_quick_scores()
    
    # 阶段二:仅对高分职位进行深度分析
    high_priority = [j for j in scored if j["quick_score"] >= 7.0]
    
    # 使用 Sonnet 深度分析 (仅对 20% 职位)
    deep_analysis = []
    for job in high_priority:
        analysis = await evaluate_deep(job, resume, model="sonnet")
        deep_analysis.append(analysis)
    
    return merge_results(scored, deep_analysis)

数据管理最佳实践

# 定期清理过期数据
/career-ops cleanup --older-than 90d --dry-run

# 备份重要数据
/career-ops backup --destination ./backups/$(date +%Y%m%d).zip

# 导出报告
/career-ops export --format csv --output ./reports/job_analysis.csv
/career-ops export --format json --output ./reports/job_analysis.json

扩展开发:构建你自己的 Career-Ops 技能

Career-Ops 的 Skill 系统是开放的,你可以基于它构建自己的定制化求职技能。

示例:添加一个新的招聘门户

# scrn/portals/custom/company_portal.py
from scrn.portals.base import BasePortal, JobListing

class CompanyPortal(BasePortal):
    """自定义公司招聘门户扫描器"""
    
    name = "MyCompany"
    base_url = "https://careers.mycompany.com"
    
    async def extract_jobs(self, page) -> list[JobListing]:
        """从页面提取职位列表"""
        
        job_cards = await page.query_selector_all(
            ".job-listing-card, [data-job-id]"
        )
        
        jobs = []
        for card in job_cards:
            job = JobListing(
                title=await card.inner_text(".job-title"),
                url=await card.get_attribute("href"),
                department=await card.inner_text(".department"),
                location=await card.inner_text(".location"),
                posted=await card.inner_text(".posted-date"),
            )
            jobs.append(job)
        
        return jobs

示例:自定义评估维度

# scrn/modes/custom_evaluator.py
class MyCustomEvaluator:
    """
    添加额外的评估维度
    例如:评估公司是否支持远程工作
    """
    
    EXTRA_DIMENSIONS = [
        {
            "name": "remote_flexibility",
            "weight": 0.15,
            "prompt": """
评估该职位的远程工作灵活性:
- 是否有明确的远程/混合/ onsite 政策?
- 公司所在时区与候选人所在时区的重叠度?
- 历史远程文化评分?
"""
        },
        {
            "name": "visa_sponsorship",
            "weight": 0.10,
            "prompt": """
评估签证赞助可能性:
- 公司是否提供 H1B / L1 / O1 赞助?
- 历史赞助记录?
- 国际候选人的处理速度?
"""
        }
    ]

与其他工具的对比

vs 传统求职平台(LinkedIn, Indeed)

维度LinkedIn/IndeedCareer-Ops
职位发现被动推荐,用户找职位主动扫描,职位找你
简历定制通用简历,一投多投职位定制,精准匹配
申请跟踪手动记录,容易遗漏自动追踪,状态清晰
AI 辅助有限 (LinkedIn AI)深度 (Claude 全程辅助)
成本免费但效率低API 成本但效率高

vs 其他 AI 求职工具

工具定位与 Career-Ops 的关系
LazyApply自动化海投互补 (Career-Ops 精投 vs 懒人海投)
PersivoCover Letter 生成可集成为 Career-Ops 的一个 skill
HuntflowATS 管理企业版 Career-Ops (个人 vs 团队)
Teal简历优化功能重叠,但 Career-Ops 更深度

总结与展望

Career-Ops 展示了一个重要的趋势:AI 编程工具的能力正在溢出到其他领域。当一个工具足够强大时,它的使用者会自然而然地将其应用到发明者未曾设想的场景中。

核心启示

  1. 生态扩展 > 从零开发:Career-Ops 没有自己造一个 AI Agent 框架,而是站在 Claude Code 的肩膀上。这提醒我们:善用现有生态,往往比重新发明轮子更有效

  2. 工作流自动化才是王道:真正让 Career-Ops 有价值的,不是某一个功能有多惊艳,而是它把整个求职流程串成了一个自动化的闭环。碎片化的工具没有灵魂,串联起来才有生产力

  3. AI 原生应用的正确姿势:Career-Ops 不是一个「AI 加持」的旧工具,而是从一开始就用 AI 的思维方式设计的。它的每一个功能都在问同一个问题:「如果 AI 能做这件事,它应该怎么做?

未来展望

Career-Ops 正在向以下几个方向演进:

  • 多 Agent 协作:引入专门的求职 Agent 负责不同环节(发现 Agent、分析 Agent、谈判 Agent)
  • 实时市场情报:接入 Polymarket 和社交媒体,实时感知公司状态
  • 薪资谈判自动化:基于 market data 和候选人偏好,自动生成谈判策略
  • 跨平台同步:支持 Notion、Linear、Airtable 等工具的任务同步

资源链接


本文约 12,000 字,涵盖了 Career-Ops 的架构设计、核心功能、生产级实战和扩展开发。希望对你有所启发。

如果你也在求职,或者对 AI 工具的创新应用有任何想法,欢迎在评论区交流。

推荐文章

api接口怎么对接
2024-11-19 09:42:47 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
Shell 里给变量赋值为多行文本
2024-11-18 20:25:45 +0800 CST
liunx宝塔php7.3安装mongodb扩展
2024-11-17 11:56:14 +0800 CST
在JavaScript中实现队列
2024-11-19 01:38:36 +0800 CST
Go 语言实现 API 限流的最佳实践
2024-11-19 01:51:21 +0800 CST
开发外贸客户的推荐网站
2024-11-17 04:44:05 +0800 CST
程序员茄子在线接单