job-scan
GitHubAI岗位扫描技能。基于用户画像推荐匹配岗位,引导用户选择后自动启动Chrome登录BOSS直聘抓取数据,并清洗导出结果。需先完成画像初始化。
触发场景
安装
npx skills add qxiansheng001/ai-job-hunter --skill job-scan -g -y
SKILL.md
Frontmatter
{
"name": "job-scan",
"description": "AI 岗位扫描。推荐岗位 → 用户选择 → BOSS 直聘抓取 → 数据清洗。 需要先有状态文件($AI_JOB_HUNTER_DATA\/.skill-state.json)且 profile 已就绪。可在 allowed-tools 中调用 job-init。",
"allowed-tools": "Bash(*), Read, Write, Edit, Glob, Skill",
"argument-hint": ""
}
/job-scan — 岗位扫描
Step 0:上下文检查
# === 自动发现 skill 根目录(适配项目级/全局级安装) ===
SKILL_DIR="${AI_JOB_HUNTER_DIR:-}"
[ -n "$SKILL_DIR" ] && SKILL_DIR="${SKILL_DIR//\\//}"
if [ -z "$SKILL_DIR" ]; then
[ -d ".claude/skills/ai-job-hunter" ] && SKILL_DIR=".claude/skills/ai-job-hunter"
[ -z "$SKILL_DIR" ] && [ -d "$HOME/.claude/skills/ai-job-hunter" ] && SKILL_DIR="$HOME/.claude/skills/ai-job-hunter"
fi
DATA_DIR="${AI_JOB_HUNTER_DATA:-$(dirname "$SKILL_DIR")/ai-job-hunter-data}"
test -f "$DATA_DIR/.skill-state.json" && echo EXISTS || echo MISSING
- MISSING → 告知用户"请先完成画像初始化",调用
Skill工具执行job-init
读取 $DATA_DIR/.skill-state.json,提取 profile(tech_stack、education、target_city 等)。
读取 SKILL_DIR 下的 shared-references/role-tiers.md 参考档位信息。
Step 1:推荐岗位
根据画像推荐 6 个最匹配的 AI 岗位。使用以下格式:
┌──── 推荐岗位列表 ──────────────────────────────────────────┐
│ │
│ 1. 大模型算法工程师 匹配度: 92% │
│ → 你的PyTorch经验+硕士学历高度匹配,大模型方向需求爆发 │
│ ... │
└────────────────────────────────────────────────────────────┘
推荐原则:
- 岗位名称必须是真实市场上存在的
- 匹配度基于:技术栈重合度、学历门槛、经验要求
- 推荐理由要具体,诚实指出局限
- 排除"实习/实习生"类岗位,只推荐正式/校招岗位
Step 2:用户选择
等待用户回复编号或岗位名称。确认后:
- 向用户确认搜索参数:岗位名称、城市(来自画像)、抓取数量(建议 50 条)
- 将
keyword和city写入$DATA_DIR/.skill-state.json的job_search字段
Step 3:BOSS 直聘抓取
前置检查
检测 Chrome 调试端口:
python -c "
import urllib.request, json
try:
r = urllib.request.urlopen('http://127.0.0.1:9222/json/version', timeout=3)
print('READY')
except: print('NOT_READY')
"
未就绪则自动启动 Chrome:
python -c "
import subprocess, os, time, urllib.request, json, sys
import platform
_chrome_paths = {
'Windows': r'C:\Program Files\Google\Chrome\Application\chrome.exe',
'Darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
}
chrome = _chrome_paths.get(platform.system(), 'google-chrome')
profile = os.path.expanduser(r'~\.ai-job-hunter-chrome')
os.makedirs(profile, exist_ok=True)
subprocess.Popen([chrome,
'--remote-debugging-port=9222',
f'--user-data-dir={profile}',
'--no-first-run', '--no-default-browser-check',
'--new-window', 'https://www.zhipin.com'],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
for i in range(20):
time.sleep(1)
try:
urllib.request.urlopen('http://127.0.0.1:9222/json/version', timeout=2)
print('READY')
sys.exit(0)
except: pass
print('TIMEOUT')
"
启动后立即停下来告知用户:
请在打开的 Chrome 窗口中登录 BOSS直聘(zhipin.com)。 登录后告诉我"已登录",我再开始抓取。Claude 必须等待用户明确回复。
执行抓取
python "$SKILL_DIR/scripts/scraper/boss_scraper.py" \
--keyword "{岗位名称}" \
--city "{城市编码(全国 100010000,北京 101010100)}" \
--max-items 50
城市编码参考 SKILL_DIR 下的 shared-references/city_codes.md(如果存在)或使用常用编码。
抓取结果
完成后告知用户抓取数量,更新 $DATA_DIR/.skill-state.json 的 job_search 字段。
Step 4:数据清洗
python "$SKILL_DIR/scripts/export/clean_and_export.py" \
--output "$DATA_DIR/subjects/{keyword}/jobs_clean.xlsx"
更新 $DATA_DIR/.skill-state.json:job_search.status=done、clean_file=$DATA_DIR/subjects/{keyword}/jobs_clean.xlsx。
Step 5:下一步
告知用户下一步可以说"分析这些岗位"(→ job-analyze)。
版本历史
-
853e56f
当前 2026-07-12 12:15
新增排除实习/实习生岗位的过滤逻辑,确保仅推荐正式或校招岗位;修复了跨目录运行时的路径依赖问题,提升兼容性。
- 05ba1cf 2026-07-11 16:58


