{"_id":"51job-cli","_rev":"2-aebe06201e73108427bae5ffb8c23f0e","name":"51job-cli","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.1":{"name":"51job-cli","version":"0.1.1","keywords":["51job","前程无忧","recruiting","automation","cli","ai-agent","cdp","puppeteer"],"license":"GPL-3.0","_id":"51job-cli@0.1.1","maintainers":[{"name":"wolfy0608","email":"964166306@qq.com"}],"bin":{"51job":"dist/index.js"},"dist":{"shasum":"7bc51596564e3fc0e4bb3641c6e6301b3e3653b8","tarball":"https://registry.npmjs.org/51job-cli/-/51job-cli-0.1.1.tgz","fileCount":33,"integrity":"sha512-WUw629uiudvc/mKguP00nieY2O6is5OrcNpbUX9gEhAnGzhGOzmDCDYDFn6/M5aemez2EVAzpf/+yLdgIsl7+w==","signatures":[{"sig":"MEUCIB11echdbWpyIWV/XanXh8WWxBudVfkAb6cZS8TVwpOqAiEAmtzCkKlyu6FgtDqjwfI9LhP7lzLk9uwxs8MFHu734CQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":387724},"engines":{"node":">=20"},"gitHead":"ea3a439d3160c946139d8f25eb9b2d2f25b878de","scripts":{"dev":"npm run build && node dist/index.js","test":"vitest run","build":"tsc","smoke":"npm run build && node scripts/smoke-puppeteer.cjs && node scripts/smoke-guards.cjs","start":"node dist/index.js","watch":"tsc -w","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"wolfy0608","email":"964166306@qq.com"},"_npmVersion":"10.9.8","description":"前程无忧自动化 CLI：候选人列表、Hi聊发消息、获取简历、人才搜索、职位管理。基于 puppeteer-core/CDP 驱动本机 Chrome，适合 AI Agent 招聘自动化","directories":{},"_nodeVersion":"22.23.2","dependencies":{"dotenv":"^17.4.2","commander":"^12.1.0","puppeteer-core":"^24.29.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.5.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/51job-cli_0.1.1_1788000159136_0.07500996634358104","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"51job-cli","version":"0.1.2","description":"前程无忧自动化 CLI：候选人列表、Hi聊发消息、获取简历、人才搜索、职位管理。基于 puppeteer-core/CDP 驱动本机 Chrome，适合 AI Agent 招聘自动化","license":"GPL-3.0","bin":{"51job":"dist/index.js"},"engines":{"node":">=20"},"scripts":{"build":"tsc","dev":"npm run build && node dist/index.js","start":"node dist/index.js","watch":"tsc -w","test":"vitest run","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build","smoke":"npm run build && node scripts/smoke-puppeteer.cjs && node scripts/smoke-guards.cjs"},"dependencies":{"commander":"^12.1.0","dotenv":"^17.4.2","puppeteer-core":"^24.29.1"},"devDependencies":{"@types/node":"^22.0.0","typescript":"^5.5.0","vitest":"^4.1.11"},"keywords":["51job","前程无忧","recruiting","automation","cli","ai-agent","cdp","puppeteer"],"_id":"51job-cli@0.1.2","gitHead":"bd03744e24fdf16ec6aa0aa9653c60b4308fb235","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-NjTPtnUU7HTY7S04bqUdS6Cn69XTxclBArrVSNBLY+qJUmJ44g/IeffWkQBkPrKLVQfZEp4GfzuNXQB4RrfvJA==","shasum":"2a01370d0d1bdd3518b2a635844f5469899eaba7","tarball":"https://registry.npmjs.org/51job-cli/-/51job-cli-0.1.2.tgz","fileCount":33,"unpackedSize":389833,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDgnkEAJqtSfx1dAkWBfbsFZONejChmV3q1dlZPMgVXIgIhAIQ4QOP0X00abKcBQ1DrGFRKs5aYqr2rIYGCCDGv2kzl"}]},"_npmUser":{"name":"wolfy0608","email":"964166306@qq.com"},"directories":{},"maintainers":[{"name":"wolfy0608","email":"964166306@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/51job-cli_0.1.2_1788228303380_0.1608350808768091"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-29T10:42:38.948Z","modified":"2026-09-01T02:05:04.063Z","0.1.1":"2026-08-29T10:42:39.288Z","0.1.2":"2026-09-01T02:05:03.585Z"},"license":"GPL-3.0","keywords":["51job","前程无忧","recruiting","automation","cli","ai-agent","cdp","puppeteer"],"description":"前程无忧自动化 CLI：候选人列表、Hi聊发消息、获取简历、人才搜索、职位管理。基于 puppeteer-core/CDP 驱动本机 Chrome，适合 AI Agent 招聘自动化","maintainers":[{"name":"wolfy0608","email":"964166306@qq.com"}],"readme":"# 51job-cli\n\n基于 puppeteer-core / CDP（Chrome DevTools Protocol）驱动本机浏览器的前程无忧（51job）企业招聘端自动化 CLI。\n适合被 AI Agent 引擎、shell 脚本或其他无人值守工具直接拉起做管线编排。\n\n## 核心特性\n- **真实浏览器驱动**：直接外接本机的 Chrome 进程，登录态持久化本地，规避无头封号墙。\n- **Agent/编排友好**：全流程命令独立拆分并带有明确的退出码（0 成功 / 1 业务失败 / 2 可用机制墙）；支持 `--json` 单文件结构化流式吐出。\n- **三段式反检测防御**：浏览器启动参数伪装 + DOM 原型链修复 + HTTP CDP 网络层阻断，内置风控反弹和 15s 级强力跳转自恢复。\n\n> 注：本仓库为原子能力调用 CLI。\n> 你可能在寻找的「定时循环、基于画像初发筛选、简历日报整理」等调度侧工作流位于下游仓库的 `skills/recruit-daily-51job/`。\n\n---\n\n## 快速上手\n\n### 1. 前置环境\n- **Node.js**: >= 20.0\n- **浏览器**: 本机需已安装 [Google Chrome](https://www.google.com/chrome) 或 Microsoft Edge（均可自动探测到；自定义指定可用环境变量 `CHROME_PATH` 控制）。\n\n### 2. 工具安装\n> 全局直接安装为可执行命令（推荐）\n```bash\nnpm install -g 51job-cli\n```\n> 或 Clone 源码编译调试：\n```bash\ngit clone https://github.com/se7enfive/51job-cli.git && cd 51job-cli\nnpm install && npm run build\nnpm link\n```\n\n### 3. 配置（环境变量可选）\n用户级复制一份预设的环境变量模板即可（可根据机器性能、使用习惯进行调整）：\n```bash\ncp .env.example ~/.51job-cli/.env\n```\n\n---\n\n## CLI 命令集全览\n\n共有 18 项主要可用动作模块（可随时键入 `51job --help` 查看全参数帮助）：\n\n### 基础验证类\n| 命令 | 描述 |\n|---|---|\n| `login` | 打开并聚焦至 51job eHire 登录页面并立刻返回（登录态由后续 `wait-login` 或首个业务命令检测）。 |\n| `wait-login [--timeout <秒>]` | 轮询探测登录态；成功退出 0、超时退出 1（默认 300s）。 |\n| `shutdown` | 关闭常驻浏览器进程（Cookie / 会话资料仍保留在本地 Profile 目录）。 |\n| `doctor` | 环境自检（Chrome 路径、Node 版本、数据目录、浏览器模式）。只读。 |\n| `update` | 打印升级指引（实际执行 `npm install -g 51job-cli@latest`）。 |\n| `probe` | 开发调试：DOM 选择器校准快照（普通场景无用）。 |\n\n### 工具箱（查询寻源流）\n| 命令 | 描述 |\n|---|---|\n| `list [--unread]` | **工作台投递箱**全职位聚合候选人流（不分职位；每人 index/姓名/时间/画像/未读）。序号与 `chat --index` 一致。按职位筛选请用 `positions --candidates`。 |\n| `search <关键词>` | **人才搜索池**查询，支持十三维筛选（`--exp/--age/--gender/--city/--residence/--edu/--school/--status/--industry/--func/--salary/--work-industry/--work-func`），`--json` 输出对象 `{keyword,count,hits,...}`。`--position <职位名>`（与关键词互斥）按你发布的职位搜索：自动注入该职位期望工作地/学历筛选并锁定搜索范围（`--scope my\\|org` 选视图），显式 `--city` 等参数覆盖注入值。 |\n| `recommend [岗位]` | **人才望远镜**推荐池（按岗位的系统推荐，不耗点数）。`--greet`/`--inspect` 可直接打招呼/查详情。 |\n| `positions [--candidates <职位名>]` | **职位管理页**在招职位目录；`--candidates` 拉取该职位候选人，`--source <auto\\|delivery\\|search>` 控制来源（auto=按有无投递分派 / delivery=仅投递 / search=人才池搜索扩充），`--scope <my\\|org>` 切视图。 |\n| `jd <名称> [--cat]` | 抓取职位 JD 长文缓存到 `~/.51job-cli/jd/`，`--cat` 直出正文。 |\n\n### 候选人来源选择（AI/脚本必须先判断）\n\n```text\n已投递 / 已聊天 / 已在人才管理列表 → talent-detail\n主动人才搜索池 / search 返回的 hits → inspect\n人才望远镜推荐池                 → recommend --inspect\n```\n\n不要混用 `inspect` 和 `talent-detail`：两者访问的是不同候选人来源。`talent-detail --hi` 是免费「回复」（只打开聊天面板）；`inspect --hi` 是搜索池「立即Hi聊」（消耗点数）。两者都不会替你发送普通文字，发送文字需先打开会话再运行 `chat` + `send`。\n\n最小调用示例：\n\n```bash\n# 已投递候选人：查看简历\n51job talent-detail 张三 --strict --json\n\n# 搜索池候选人：先搜索，再查看详情\n51job search \"测绘工程师\" --json\n51job inspect 张三 --json\n\n# 已知稳定简历 ID：优先使用直链\n51job talent-detail --resume-id <简历ID> --json\n51job inspect --resume-id <简历ID> --json\n```\n\n### 执行管线（原子级会话动作）\n| 命令 | 描述 |\n|---|---|\n| `inspect <姓名> [--job <岗位>] [--index <序号>] [--hi]` | **仅用于主动人才搜索池**：查看搜索结果中的候选人简历（只读不耗点数）。不要用它查已投递/已聊天候选人；后者用 `talent-detail`。`--hi` 执行搜索池「立即Hi聊」（消耗点数，不是普通文字回复）。支持 `--resume-id <简历ID> [--job-id <职位ID>]` 直链；直链 `--hi` 必须带 `--job-id`。 |\n| `talent-detail <姓名> [--strict] [--hi]` | **仅用于已投递、已聊天或已在人才管理列表中的候选人**：从人才管理页查看结构化简历。不要用它查主动搜索池候选人；后者用 `inspect`。`--hi` 只点击免费「回复」打开沟通面板，不发送普通文字，也不是搜索池「立即Hi聊」。支持 `--resume-id` 直链；直链 `--hi` 需同时带 `--job-id`。 |\n| `preview <姓名>` | 在线简历截图存档到 `~/.51job-cli/ocr/`（每日次数有限；`51JOB_RESUME_OCR=1` 才上传云端 OCR，opt-in）。 |\n| `greet [姓名] [--job <岗位>] [--by-index <序号>] [--dry-run] [--no-confirm]` | **搜索池候选人的 Hi聊一站式命令**：搜索筛选 → 定位 → 详情摘要 → 人机确认 → 发出。写操作耗点数；`--dry-run` 只看不发。已投递/已聊天候选人不要用 `greet`，请用 `talent-detail` + `chat`/`send`。成功 0 / 点数不足或失败 1。 |\n| `chat [姓名] [--index <序号>] [--unread] [--strict]` | 打开已投递/聊天候选人的聊天会话（供后续 `send`/`action` 使用），不发送消息。不要把 `search` 结果序号直接当作 `chat --index`；`chat --index` 只认 `list` 输出的序号。 |\n| `send --text <文案>` | 向当前已打开的聊天会话发送一条普通文字；必须先 `chat`，一次只发送一遍，不自动重试。 |\n| `action <操作> [--no-confirm]` | 会话业务动作：`resume`(索要简历)/`unsuitable`(不合适)/`note`(备注)/`wechat`(换微信)/`phone`(换电话)/`interview`(约面试)。写操作默认人机确认。 |\n\n---\n\n## 隐私、数据与安全指引\n\n为保证跨平台多环境与个人信息规范体系防泄露：\n* **数据出境同意事项（OCR Opt-in）**：`preview` 对于人选全记录抓取的默认保存格式只提供本机纯位图 PNG 镜像快照（默认保存在 `~/.51job-cli/ocr/`）。它**不会执行跨网上传云打码**，除非用户清晰配置环境变量 `51JOB_RESUME_OCR=1` 声明 opt-in（采用百度智能云组件）。\n* **清理历史隐私数据**：所有的留档缓存快照（如截屏照片、JSON）、调试缓存都统一支持并应规范定期实施：\n  ```bash\n  51job clean\n  ```\n* **单环境浏览器（端口占用）**：系统在驱动 Chrome 会以远程 CDP （Websocket）建立端口连接通道。这要求系统只被受控使用（切忌在多进程高危权限的合租服务器不经虚拟化跑该软件，有通过端口跳层控制用户 51job 控制后台账户的操作权限风险）。\n","readmeFilename":"README.md"}