DSH 招聘 bundle:7 个 skill 串起岗位梳理、Boss+猎聘双通道寻源打招呼、简历评估与约面试,Web 右侧内置可远程操作招聘站的浏览器面板。
- 语言
- JavaScript
- License
- MIT
- 分支
- master
安装
$ dsh plugin --profile web add github:Viy1204/recruiting-copilot在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 Viy1204/recruiting-copilot:先查看仓库 https://github.com/Viy1204/recruiting-copilot.git 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
这是给 HR / 猎头用的 AI 招聘副驾:把岗位梳理、Boss直聘+猎聘双通道每日寻源初筛打招呼、简历评估、约面试、候选人台账与日报串成一套 AI 工作流,并在 DSH Web 界面右侧内置一只可以直接上手操作的招聘浏览器面板。
核心能力
- 提供 7 个招聘 skill,覆盖「初始化工作区→梳理岗位→每日寻源打招呼→简历评估→约面试→市场盘点→日常问答」整条招聘链路
- 通过 AI 副驾把模糊的「我要一个 XX」聊成可执行的初筛标准,产出对外 JD、对内笔记与目标公司清单
- 每日一句话触发 Boss直聘 + 猎聘双通道寻源:查未读、搜人、初筛、确认后打招呼、补台账、出日报
- 简历评估既支持本地 PDF/图片,也支持从飞书邮箱按需收取猎聘/BOSS 简历邮件去重后入档
- 约面试时自动查面试官忙闲、建带视频会议链接的日历日程、拉面试官进会、同步面试档案
- 在 DSH Web UI 右侧 dock 列里渲染一只可远程操作的浏览器,复用 boss-cli / liepin-cli 的登录态
技术实现
- 语言: JavaScript(ES Module,零第三方依赖)
- 关键依赖: Node 内置
fetch/WebSocket/child_process(lib/index.js:29-32);宿主@deepseek-ai/dsh-skill-filesystem与dsh-host-webserver;外部 CLIboss-cli(Viy1204 fork) - 架构模式: 双重身份——既是 profile bundle(通过
dsh/cordis.patch.yml启用宿主 skill-filesystem 行并把skills/注册为全局自定义 skill 根),也是 cordis 插件 + 客户端模块对(lib/index.js挂载/plugins/recruiting-view/*路由,client.js注册进shell.overlay插槽) - 入口文件:
lib/index.js(host 插件,导出apply(ctx, rawConfig))/client.js(浏览器端面板)/dsh/cordis.patch.yml(profile patch 层)
适用场景
每天要处理大量 Boss / 猎聘沟通与候选人建档的 HR 或猎头,希望 AI 帮忙按既定标准搜索、初筛、生成打招呼话术并同步台账,同时在 DSH 界面里直接看到招聘站画面而无需切换窗口。也可用于一次性深度摸底某岗的市场人才结构,或在飞书邮箱里批量评估刚收到的简历。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 依赖宿主 dsh-skill-filesystem 与 dsh-host-webserver;web profile 才会出现右侧浏览器面板,headless 等无 webServer 的 profile 只注册 skill |
| Node.js | >=22 | package.json 的 engines.node;安装脚本最低要求 >=20,但 lib/index.js 使用了 Node 22+ 的内置 fetch/WebSocket |
| Chrome / Edge | 本机已装 | 用于面板驱动真实浏览器;找不到时可用 CHROME_PATH 或 PUPPETEER_EXECUTABLE_PATH 指定 |
| boss-cli (fork) | >=0.7.0 | 由 skills/recruit-init/scripts/install-dependencies.sh 自动装 git+https://github.com/Viy1204/boss-cli.git#main,旧版用随机端口面板连不上 |
| liepin-cli | >=0.2.0 | 同样由安装脚本装 @viyzhu/liepin-cli,旧版随机端口时面板空态会明确提示 |
| lark-cli | 可选 | 不装则日报输出本地 Markdown、约面试给手动建会清单、简历需本地提供;寻源与本地简历评估不受影响 |
| 平台 | 跨平台 | macOS / Windows / Linux;启动参数从 process.platform 判断,三平台都覆盖 |
安装方式
dsh plugin --profile web add github:Viy1204/recruiting-copilot
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
sources | 数组 | 招聘浏览器面板要镜像哪些源(boss / liepin),每条配 name / port / match / homeUrl / userDataDir / defaultHidden;patch 里只写差异,其余从内置默认补 | [boss:53470, liepin:53471] |
frameIntervalMs / watchdogIntervalMs | 数字 | 帧间隔(毫秒),过小增加带宽、过大增加延迟;受 200~30000 范围钳制 | 700 |
jpegQuality | 数字 | MJPEG 推帧的 JPEG 质量,受 10~100 范围钳制 | 80 |
maxFrameWidth | 数字 | 单帧最大宽度,受 320~4096 范围钳制 | 1800 |
RECRUIT_BROWSER_HIDDEN 环境变量 | 字符串 | 三方共读的统一覆盖开关:设 true 强制无头、false 强制有头,不设时按各源自己的 defaultHidden(BOSS 有头、猎聘无头) | 未设置 |
BOSS_BROWSER_REMOTE_DEBUGGING_PORT / LIEPIN_BROWSER_REMOTE_DEBUGGING_PORT 环境变量 | 数字 | 覆盖 boss-cli / liepin-cli 的固定 CDP 调试端口;改了环境变量,patch 里 sources[].port 也要跟着改 | 53470 / 53471 |
CHROME_PATH / PUPPETEER_EXECUTABLE_PATH 环境变量 | 路径 | 找不到本机 Chrome/Edge 时,手动指定可执行文件路径 | 自动探测 |
BOSS_CLI_SOURCE / LIEPIN_CLI_SOURCE 环境变量 | URL/包名 | 安装 boss-cli / liepin-cli 的来源(脚本读取) | git+https://github.com/Viy1204/boss-cli.git#main / @viyzhu/liepin-cli |
常见问题
Q: 安装后还需要做什么?
A: 需要本机装 Node ≥20、Chrome/Edge,并跑一次 skills/recruit-init/scripts/install-dependencies.sh 来装 boss-cli(Viy1204 fork)和 liepin-cli,再各扫码登录一次保存登录态。可选装 lark-cli 让日报出飞书云文档、约面试自动建日历。
Q: 招聘浏览器面板里 BOSS 提示「账号受限」怎么办?
A: 通常是触发了 BOSS 的风控——页面文案会写「检测到您的账号存在使用第三方招聘管理系统、插件、外挂、软件等辅助工具」。插件已经按源区分默认(BOSS 有头、猎聘无头),不要把 RECRUIT_BROWSER_HIDDEN 设成 true,那会把 BOSS 也拖进无头。被限期间只有 web 端受限,BOSS直聘 APP 和 PC 客户端照常可用。
Q: 不装 lark-cli 会不会影响核心功能?
A: 不会。lark-cli 只影响日报出飞书云文档、约面试建日历、从飞书邮箱收简历这三个可选场景;寻源、本地简历评估、台账、面板都不受影响,会以本地 Markdown 输出或手动操作清单替代。
Q: 怎么卸载或回滚?
A: 用 dsh plugin --profile web remove recruiting-copilot 卸载,用 update 子命令拉最新提交。如果之前在面板里手动操作过旧版本,重启 DSH 会话即可让新版加固生效——面板默认折叠、默认只读,有头/无头切换按钮已摘掉。
Q: 面板空态提示「请更新 liepin-cli」是什么意思?
A: 旧版 liepin-cli 用 puppeteer.launch() 分配随机 CDP 端口,面板按固定端口 53471 探测不到。需升级到 @viyzhu/liepin-cli ≥0.2.0,boss-cli 也要求 fork 版 ≥0.7.0,否则面板连不上那只浏览器。
Q: 自动操作会不会被招聘平台风控?
A: 打招呼、点「不合适」、通知候选人这类对外不可逆动作默认先经用户确认,AI 不自动拒人。插件内置风控熔断:页面落到 403/verify/security-check 时停掉所有自动动作并在面板顶部出红色提示,需人工确认后才能解除。
上手难度
进阶 — 需要先理解 DSH profile bundle 的双层身份(patch 启用 skill + host 插件接管浏览器),并且要在工作区里跑一次初始化流程;面板模式相关的环境变量(RECRUIT_BROWSER_HIDDEN / 端口覆盖)有平台经验门槛,但日常使用只需说一句「处理今天的招聘」。
已知问题与限制
- BOSS 浏览器默认有头、猎聘浏览器默认无头:曾观测到同一账号因无头 UA 被 BOSS 限制 web 端登录 24 小时,所以两个源不再统一无头(README.md:9-46)
- 不要设
RECRUIT_BROWSER_HIDDEN=true:会把 BOSS 也拖进无头,是已观测到的事故路径(README.md:22-23) - 同一会话内切有头/无头模式的按钮已摘掉:UA 在
HeadlessChrome与Chrome之间突变 = 24h 封号;host 的setMode实现保留但无 UI 入口(dsh/README.md:140-142) - liepin-cli 旧版本用随机端口、面板接管不了:要求
@viyzhu/liepin-cli ≥0.2.0、@viyzhu/boss-cli-fork ≥0.7.0(README.md:144-146) - 端口上已有实例时改
RECRUIT_BROWSER_HIDDEN不生效:要重启得先boss shutdown/liepin quit关掉那只(README.md:142-143) - 浏览器面板默认折叠、默认只读(输入派发关):要动手得按工具栏 🔒 显式打开;折叠状态存
localStorage持久化(dsh/README.md:144-146) - 贴合(把页面视口固定到面板尺寸)失败重发上限 3 次:防止被秒级 resize 触发风控,超限后停手并把原因写到
state.error(lib/index.js:185-191) - 风控/验证页熔断:URL 命中
RISK_URL_RE(403 / verify / security-check 形态)后停掉自愈重启、贴合重发与一切控制动作(除watch/clear-risk/set-target),需人点提示条解除(lib/index.js:165-174) - 风控检测故意排除
about:blank:那是新标签初始态,纳入会把面板自己锁死(lib/index.js:159-163) - 外部 CLI 不可用时面板可拉起浏览器,但 boss-cli 的反检测保护只挂在 CLI 进程的 CDP session 上、进程一退出就失效:所以跨命令常驻期间面板看到的浏览器完全裸奔(README.md:27-29)
- boss-cli / liepin-cli / lark-cli 都是前置依赖:未装时初始化脚本会报缺,但不会阻塞建工作区;面板接管仅在 web profile 生效(README.md:58-74)
给 HR / 猎头用的一套 AI 招聘工作流:逼问式梳理岗位真实要求 → Boss直聘 + 猎聘双通道每日寻源初筛 → 打招呼 → 约面试 → 候选人台账 → 日报。 另有市场人才盘点、简历评估,以及从飞书邮箱按需收取猎聘 / BOSS 的简历附件。
配合任意 AI 编程助手使用:Claude Code、Codex、workbuddy、qoderwork、MiniMax Code、Z code 等——
只要你的工具能读工作区里的 AGENTS.md,就能跑这套流程。
⚠️ 账号安全须知(2026-08-19 更新,务必读)
两条规则:不要给 BOSS 开无头;日常招聘动作走 CLI 命令,别在「招聘浏览器」面板里手动点操作。
关于无头:BOSS 现在默认有头(真窗口,启动时会抢一次键盘焦点),猎聘仍默认无头。 两家按证据分别定,不强求一致:
- BOSS 之前默认无头,2026-08-19 改回来了——一个账号被 限制 web 端登录 24 小时,页面文案 写明「检测到您的账号存在使用第三方招聘管理系统、插件、外挂、软件等辅助工具」;另一个团队 用上游版(默认有头)长期无事,他们的 AI 擅自改走无头之后当天封号。无头 Chrome 的 UA 自报
HeadlessChrome,而 Client Hints 仍说Google Chrome,这个自相矛盾是零误报的信号。- 猎聘的风控形态一次都没观测过,没有证据支持翻它的默认,而不抢焦点是实打实的好处。
别设
RECRUIT_BROWSER_HIDDEN=true——它是统一覆盖开关,会把 BOSS 一起拖进无头。 抢焦点是体验问题,被限 web 端登录是业务问题。顺便:被限期间只有 web 端受限,BOSS直聘 APP 和 PC 客户端照常能用,不必停工。
原因:boss-cli 的反检测保护(拦风控 SDK、把上报端点用 204 假装成功、注入页面守卫等四层) 全部挂在 CLI 进程自己的 CDP session 上,进程一退出就全部失效。已实测确认。所以浏览器 跨命令常驻期间是完全裸奔的,面板操作和面板发起的导航都在这个裸奔时段里,不受任何保护。
同一个测试账号在 2026-08-18 被限制两次:一次是排查时并挂第二个 host 加反复切贴合(页面秒级 反复 resize),限制几小时;一次是点面板的有头/无头切换(同一会话内 UA 在
HeadlessChrome与Chrome之间突变),限制 24 小时。本版本已做的加固:
- 摘掉有头/无头切换按钮——默认已经是有头,正常不需要切模式;同一会话内切模式会造成 UA 突变,那正是第二次被限的原因。
- 面板默认折叠、默认只读,且折叠状态持久化。展开会让 host 持续订阅画面并开启崩溃自愈; 要手动操作需按工具栏 🔒 显式打开。
- 风控页熔断:一旦页面落到 403 / verify / security-check,host 立刻停掉自愈重启、停掉 贴合重发、拒绝一切导航与启动,面板顶部显示红色提示条,需人工确认后才解除。 (被限期间继续访问会把恢复时间一路延长。)
如果你之前装过旧版本并在面板里手动操作过,建议
git pull更新后重启 DSH 会话。 细节与后续计划见 #33。
它帮你做什么
- 岗位梳理:一次一问的访谈,把「我要一个厉害的 XX」问成一份可执行的初筛标准——硬门槛、命脉技能、排除信号、目标公司、搜索词。同时产出对外 JD 与对内寻源笔记。
- 每日招聘:说一句「处理今天的招聘」,AI 就去查两个平台的未读、按你的标准主动搜人、初筛、经你确认后打招呼,然后补台账、出日报。
- 市场盘点:某个岗到底好不好招?一次深度调研说清市场供给、薪资水位、目标公司的人挖不挖得动,并附可推进名单。
- 简历收取与评估:直接丢本地简历,或让 AI 去飞书邮箱翻近期的猎聘 / BOSS 简历邮件,去重下载附件后走同一套 review、台账与面试档案流程。
- 约面试:查面试官忙闲、建带视频会议链接的日历日程、拉面试官进会、生成候选人邀约话术,面试档案自动同步。
- 越用越准:每轮从命中的真实简历反向提取搜索词,回填关键词迭代表,下一轮搜索更准。
- 安全红线:对外不可逆的动作(打招呼、点「不合适」、通知候选人)默认先经你确认,绝不自动拒人。
前置条件(所有工具通用)
- Node.js ≥ 20,本机装有 Chrome。
- 运行下方「安装与使用」里的依赖安装脚本。脚本装的 Boss CLI 是
Viy1204/boss-cli维护版——它跟着 Boss 前端改版走, 带着当前的兼容与安全基线。macOS 上如果 npm 全局命令不在PATH,脚本会幂等地改一次当前 shell 的配置文件(zsh 写~/.zprofile,bash 写~/.bash_profile)。 - 两个平台各扫码登录一次(登录态存在浏览器的 user-data-dir 里,一次能管很久):
boss login liepin loginlogin一定是可见窗口(扫码必须看得见)。BOSS 平时跑的也是有头窗口;猎聘平时无头,liepin login会先关掉无头实例再以有头拉起,登录态不会丢。 - 可选:飞书用户装 lark-cli 并配置凭证 → 日报出飞书云文档、约面试直接建日历日程和视频会议, 还能从飞书邮箱收取猎聘 / BOSS 简历附件;不装则日报输出本地 Markdown、约面试给你一份手动建会清单、 简历需本地提供。寻源、本地简历 review 和台账功能都不受影响。
安装与使用
方式一:通用(Codex / workbuddy / qoderwork / MiniMax Code / Z code / 任何 agent 工具)
git clone <本仓库地址>
cd recruiting-copilot
sh skills/recruit-init/scripts/install-dependencies.sh
用你的 AI 工具打开这个目录,说:「帮我初始化招聘工作区」。 AI 会检查依赖、在你指定的位置建好工作区、注册各工具认得的项目级 skill, 然后逐个岗位跟你梳理招聘要求。
补充:用
~/.agents/skills约定的工具,也可以npx skills add Viy1204/recruiting-copilot把这套 skill 装成全局。不装也没关系——工作区里已经带了一份。
之后每天:用 AI 工具打开你自己的工作区目录,说 「处理今天的招聘」。 任何时候不确定该干什么,说一句 「这套工具怎么用」,AI 会按总目录带你走。
方式二:Claude Code 插件(额外获得 slash 命令与自动触发)
claude plugin marketplace add <本仓库地址>
claude plugin install recruiting-copilot
然后:
/recruit-init—— 初始化工作区(首次一次)/recruit-grill <岗位>—— 梳理某个岗位的要求/recruit-daily—— 处理今天的招聘(日常也可以直接说「处理今天的招聘」)/recruit-mapping <岗位>—— 深度盘点某岗的市场人才/resume-review—— 评估本地简历,或收取飞书邮箱的猎聘 / BOSS 简历附件后评估/interview-schedule—— 约面试:日历 + 视频会议 + 拉面试官,档案台账同步/ask-viy—— 不知道该用哪个?问它
方式三:DeepSeek Harness 插件(任意工作区都能用这套招聘 skill)
DeepSeek Harness(dsh)用户,
在任意目录执行:
dsh plugin --profile web add git+https://github.com/Viy1204/recruiting-copilot.git
(web 是 Web 界面 profile;headless 等其他 profile 同理,把 web 换成名字即可。)
安装后重启 DSH 会话,本仓库 skills/ 下的 7 个 skill 就会出现在任意工作区的
skill 目录里(不必把仓库克隆成工作区):
ask-viy、recruit-init、recruit-grill、recruit-daily、resume-review、
interview-schedule、market-talent-mapping。
附带功能——Web UI 右侧「招聘浏览器」面板:DSH Web 界面右侧是一只能直接上手操作的浏览器,
鼠标、滚轮、键盘、中文输入法、粘贴全都直通。BOSS 和猎聘都是可用的源,面板顶部一键切换;
浏览器没起时在面板里点一下就能拉起——用的是两个 CLI 各自的 user-data-dir 和固定调试端口,
登录态通用,之后跑 boss / liepin 命令会直连同一只,不会另开一只。
两个源的默认模式不同:BOSS 有头(真窗口,抢一次键盘焦点),猎聘无头。
不要为了不被打扰把 BOSS 改成无头——无头的 HeadlessChrome UA 已实测招来 web 端登录限制,
见开头的安全须知。面板的价值在于不用切窗口就能看到页面:它默认开着「贴合」,把页面视口固定成
按源写死的尺寸(BOSS 958×1149、猎聘 1440×1149),所以面板里的文字是原生大小,
而不是整页缩小后的糊图。
RECRUIT_BROWSER_HIDDEN 是统一覆盖开关(本插件 / boss-cli / liepin-cli 三方共读):
不设时两边各用自己的默认,显式设了才拉平两家——所以 =true 会把 BOSS 一起拖进无头,别这么用。
端口上已经有实例在跑时改这个变量不生效(那只会被直接复用),得先 boss shutdown /
liepin quit 关掉它。
面板接管需要 @viyzhu/boss-cli-fork ≥ 0.7.0、@viyzhu/liepin-cli ≥ 0.2.0:更早的版本要么用随机调试端口,
要么命令跑完就关浏览器,面板连不上。装旧版时面板的空态文案会直接告诉你是版本问题。
更新 / 卸载:
dsh plugin --profile web update recruiting-copilot # 拉到最新提交
dsh plugin --profile web remove recruiting-copilot # 卸载
原理与本地验证见
dsh/README.md:仓库根package.json声明dsh.bundle,装好后作为 profile 的 patch 层,启用宿主 skill-filesystem 并把本仓库skills/注册为全局自定义 skill 根;同一个包还带 host 插件(CDP 抓帧) 与客户端模块(右侧面板)。
工作区长什么样
初始化后你会得到一个自足的招聘工作区(换任何 AI 工具打开都能接着干活):
你的工作区/
├── CONTEXT.md ← 唯一事实源:初筛硬规则、在招岗位与优先级、术语表、决策记录
├── AGENTS.md ← 告诉 AI 工具在这里怎么干活(路由 + 红线)
├── skills/ ← 工作流文档的唯一内容源(随工作区走)
├── .agents/skills/ ← Codex / Agent Skills 项目级自动发现入口
├── .claude/skills/ ← Claude Code 项目级自动发现入口
├── .qoder/skills/ ← Qoder 项目级自动发现入口
├── 01-jd/ ← 对外 JD + _internal/ 对内寻源笔记(不外发)
├── 02-sourcing/ ← dedup-ledger.csv 候选人台账(唯一事实源)+ shortlist
├── 03-interview/ ← 面试档案(一人一文件)
├── 04-offer/ 05-onboarding/
├── _shared/templates/ ← 新岗位/新面试的模板
└── runtime/
├── reports/ ← 本地日报与 review 汇总
└── resumes/ ← 邮件简历附件 + 导入去重索引
三个隐藏目录里只放指向 skills/ 的链接,不会复制出三套内容。其他工具即使没有自己的
skill 注册目录,也能从根目录 AGENTS.md 路由到同一套流程。ZCode 可以直接读 AGENTS.md;
想让技能出现在 ZCode 面板里,可在 Settings → Skills 中从 Codex 或 Claude Code 来源导入到当前 Project。
设计原则(为什么长这样)
- 本地文件是唯一事实源:台账、JD、面试档案都是你目录里的纯文本。AI 换了、工具换了,数据都还在。
- 标准与执行分离:筛选标准全在
CONTEXT.md(你的),工作流文档不写死任何数字(通用的)——改标准只改一处。 - 对内对外分离:寻源策略、排除信号、薪资带宽放
_internal/不外发;对外 JD 干净到可以直接发布。 - 不可逆动作必经确认:AI 可以帮你筛一千份简历,但拒绝一个人、联系一个人,默认由你拍板。
- 邮箱只是输入渠道:只读收取,不标已读、不移动 / 删除、不回复 / 转发;风险邮件和不可信附件不自动下载。
想了解这些取舍背后的原因,读 设计思路与理念。
绝活日资料包
收录徽章
[](https://deepseek-plugin.org/plugins/Viy1204/recruiting-copilot)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。