原始内容
name: boss-resume-screener description: > Boss直聘招聘初筛自动化 Skill(通用版)。通过 @joohw/boss-cli 拉取候选人,按可配置的 提名制规则初筛(不漏人优先),排水循环解决会话列表40条积压,自动向入围者求简历, 写入飞书云文档+多维表格,推送机器人简报,支持工作日定时运行。 首次使用说"boss init";日常说"帮我做今天的招聘简报";积压多说"清一遍积压"。 metadata: requires: bins: ["boss", "lark-cli", "node"]
Boss直聘初筛自动化 Skill(通用版)
基于 boss-daily-brief(MIT, by Viy1204)增强: ① 排水循环+已处理名册 → 不再漏人;② 提名制初筛 → 不在低信息层误杀;③ 定时任务 → 及时处理;④ 自动求简历 → 入围者附件自动获取。 筛选规则全部在
config.json,如何按你的岗位定制见 README 第三节。
配置:同目录 config.json(参考 config.example.json)。
状态:同目录 state/processed_registry.json(已处理名册,自动维护,勿手动删除——它是防重复与防遗漏的依据)。
一、初始化(boss init)
四阶段:工具检查 → 登录授权 → 飞书资源 → 筛选配置。
Phase 1:工具检查
boss --version 2>&1
lark-cli --version 2>&1
node --version 2>&1
- ❌
boss→npm install -g @joohw/boss-cli - ❌
lark-cli→npm install -g @larksuite/cli
Phase 2:登录授权
boss list 2>&1 | head -3 # 报"未检测到 .menu-list" → 运行 boss login 浏览器登录
lark-cli auth status 2>&1 # 非 valid → 按下方命令授权
lark-cli auth login --scope "drive:drive:readonly drive:file:create docx:document:create docx:document:write_only docx:document:readonly bitable:app:create bitable:app:update bitable:table:create bitable:table:update bitable:field:create bitable:record:create bitable:record:read im:message im:message.send_as_user contact:user.base:readonly" --as user 2>&1
Phase 3:飞书资源(文件夹 / 多维表格 / 机器人)
与原版相同:创建/复用 brief 文件夹与候选人多维表格(字段:应聘职位/性别/年龄/学历/毕业院校/专业/工作年限/期望城市/期望薪资/活跃状态/近期工作经历/初筛档位/初筛理由/跟进状态/录入日期),询问机器人 App ID,自动获取 user_open_id,全部写入 config.json。
多维表格"初筛档位"选项建议:提名(待拉简历)/边缘/硬伤排除/已淘汰。
Phase 4:筛选配置(核心,逐项询问写入 config)
见 config.example.json 的 screening 段——硬伤红线、院校分层、信号词、提名率目标。每一项都应按你的岗位调整(方法见 README)。
二、初筛标准(提名制)⭐核心设计
给执行本 skill 的 AI 的三条铁律:
- 你的唯一 KPI = 不漏人 + 及时。你不是最后一道筛子——后面还有完整简历精评、电话、笔试。宁可多提名,不可漏掉。
- 不要打分、不要评级、不要用"红旗"扣分、不要做破格判断。你看到的是聊天摘要,信息密度撑不起精细判断;在贫血数据上跑精细规则会系统性误杀(实测教训:同一套规则,完整简历过线率 36%,摘要层 0%)。
- 提名条件是 OR 关系且无条件生效:命中任一即提名,禁止自行叠加附加筛选("学校好但没实习"不构成降级理由)。同一规则对所有人口径一致。每轮报告末尾轧账:提名+边缘+硬伤+名册跳过=总数,同一人只出现在一个名单。
三档判定(只用摘要里可靠的结构化字段)
| 档 | 条件(均来自 config.screening) | 动作 |
|---|---|---|
| 硬伤 | 学历∈excluded_degrees / 年龄≥age_hard_limit / 完全错投(与岗位无关的职能投递) / 明确拒绝工作城市 | boss action not-fit,记名册,日报计数 |
| 提名 | 任一:① 院校命中 tier1/tier2 ② 目标专业硕士在读(target_majors)③ signal_keywords 命中 | 进「请拉完整简历」清单 → 自动求简历(第四节)→ 完整简历交给下游精评 |
| 边缘 | 非硬伤但够不着提名 | 不拉简历;日报一人一句理由——人工扫一眼可捞回 |
提名率自监控
目标区间在 config(nomination_rate_target,默认 15-25%)。明显偏离时在日报顶部提示"建议校准规则"。
为什么初筛不打分(设计原理,供调整规则时理解)
聊天摘要通常不含竞赛获奖、论文位次、项目技术细节——而这些往往是评分权重大头。"证据缺失"在低信息层会被错判为"证据为零"。正确做法:初筛只回答"值不值得拿完整简历",打分留给拿到完整简历的环节(人工或下游 AI)。
三、日常运行流程
Step 0:读配置与名册
state/processed_registry.json 结构:
{ "processed": { "姓名|职位": { "date": "2026-06-11", "bucket": "提名|边缘|硬伤", "resume_requested": true } } }
Step 1:排水循环(解决"列表只显示 40 条"积压)⭐
根因:BOSS 网页侧栏懒加载只渲染最近 ~40 个会话。解法:每轮把硬伤者点"不合适"使其从列表消失,积压的旧会话被顶上来,循环至无新增。
循环(最多 6 轮,轮间 sleep 30-60s):
1. boss list
2. 与名册 diff → 本轮新名单;连续 2 轮为空 → 结束
3. 逐个处理(每批 3-5 人,防浏览器超时):
硬伤 → boss action not-fit(腾出渲染位) / 提名、边缘 → 记名册
4. 回到 1
Step 2:获取摘要
boss chat "<姓名>" 2>&1 # 找不到加 --strict;仍失败标"未获取"继续
Step 3:三档判定(按第二节)
Step 4:提名者自动求简历
BOSS 约束:双方各发过至少一条消息才能"求简历"(候选人投递时已发过,我方需回一条)。
boss send "<姓名>" "<config.messages.pre_request>" 2>&1
boss request-resume "<姓名>" 2>&1
每次运行开始,对名册中"已求简历"者扫一遍 boss agree-resume "<姓名>"(对方没发会报"未找到",忽略)。
附件到手后在 BOSS「附件简历」页下载,放入 config.sync.local_inbox,交给你的精评环节(人工或另一个 AI 工作流)。
Step 5-8:飞书产出(同原版机械链路)
云文档 → 报告 → 多维表格 → 机器人推送。报告结构:
- 提名清单「请拉完整简历」(每人:校/届/提名依据/可选标签)
- 边缘名单(一人一句理由,供人工捞回)
- 硬伤统计(分类计数)
- 附件状态(已求/已收/待下载)
- 排水统计(本次 X 轮 Y 人,预估剩余)+ 本期提名率(偏离目标提示校准)
多维表格写入注意:职位须匹配 config.positions 选项;年龄/年限传数字;表格超 50 行拆分追加;机器人消息必须用
scripts/send-feishu-msg.js发送(命令行直发多行会被截断)。
四、定时任务(工作日早晚自动运行)
# macOS/Linux: crontab -e
0 9 * * 1-5 cd <工作目录> && claude -p "帮我做今天的招聘简报" --dangerously-skip-permissions >> logs/brief_am.log 2>&1
30 18 * * 1-5 cd <工作目录> && claude -p "帮我做今天的招聘简报" --dangerously-skip-permissions >> logs/brief_pm.log 2>&1
# Windows
schtasks /Create /TN "BossBriefAM" /SC WEEKLY /D MON,TUE,WED,THU,FRI /ST 09:00 /TR "cmd /c cd /d C:\<工作目录> && claude -p ""帮我做今天的招聘简报"" --dangerously-skip-permissions >> logs\brief_am.log 2>&1"
- 前置:浏览器保持 boss login 登录态;失效时任务失败并由机器人告警
--dangerously-skip-permissions= 无人值守授权,确保该机器专用;可改--allowedTools白名单收紧
常见问题
| 问题 | 解决 |
|---|---|
| 列表只有 40 人但实际投递更多 | 正常,排水循环逐轮顶上来;跑完仍有积压再跑一次或等定时任务 |
| request-resume 报"需互发消息" | 流程已内置先 send;若仍报错说明 send 未成功 |
| agree-resume 报"未找到卡片" | 对方还没发附件,下次运行再试 |
| 同一人重复处理 | 检查名册文件是否被删 |
| 升级 skill 后行为没变 | 开新会话(旧会话已缓存旧版说明);只覆盖 SKILL.md,勿覆盖 config.json 与 state/ |