---
slug: "boss-resume-screener"
source_type: "skill_md"
source_url: "https://cdn.jsdelivr.net/gh/mycoco0121/boss-resume-screener@main/SKILL.md"
repo: "https://github.com/mycoco0121/boss-resume-screener"
source_file: "SKILL.md"
branch: "main"
---
---
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](https://github.com/joohw)(MIT, by Viy1204)增强:
> **① 排水循环+已处理名册 → 不再漏人;② 提名制初筛 → 不在低信息层误杀;③ 定时任务 → 及时处理;④ 自动求简历 → 入围者附件自动获取。**
> 筛选规则全部在 `config.json`,如何按你的岗位定制见 README 第三节。

配置:同目录 `config.json`(参考 `config.example.json`)。
状态:同目录 `state/processed_registry.json`(已处理名册,自动维护,**勿手动删除**——它是防重复与防遗漏的依据)。

---

## 一、初始化(boss init)

四阶段:工具检查 → 登录授权 → 飞书资源 → 筛选配置。

### Phase 1:工具检查
```bash
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:登录授权
```bash
boss list 2>&1 | head -3        # 报"未检测到 .menu-list" → 运行 boss login 浏览器登录
lark-cli auth status 2>&1       # 非 valid → 按下方命令授权
```
```bash
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 的三条铁律**:
> 1. 你的唯一 KPI = **不漏人 + 及时**。你不是最后一道筛子——后面还有完整简历精评、电话、笔试。宁可多提名,不可漏掉。
> 2. **不要打分、不要评级、不要用"红旗"扣分、不要做破格判断**。你看到的是聊天摘要,信息密度撑不起精细判断;在贫血数据上跑精细规则会系统性误杀(实测教训:同一套规则,完整简历过线率 36%,摘要层 0%)。
> 3. **提名条件是 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` 结构:
```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:获取摘要
```bash
boss chat "<姓名>" 2>&1     # 找不到加 --strict;仍失败标"未获取"继续
```

### Step 3:三档判定(按第二节)

### Step 4:提名者自动求简历
> BOSS 约束:双方各发过至少一条消息才能"求简历"(候选人投递时已发过,我方需回一条)。

```bash
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:飞书产出(同原版机械链路)
云文档 → 报告 → 多维表格 → 机器人推送。**报告结构**:
1. 提名清单「请拉完整简历」(每人:校/届/提名依据/可选标签)
2. 边缘名单(一人一句理由,供人工捞回)
3. 硬伤统计(分类计数)
4. 附件状态(已求/已收/待下载)
5. 排水统计(本次 X 轮 Y 人,预估剩余)+ 本期提名率(偏离目标提示校准)

> 多维表格写入注意:职位须匹配 config.positions 选项;年龄/年限传数字;表格超 50 行拆分追加;机器人消息必须用 `scripts/send-feishu-msg.js` 发送(命令行直发多行会被截断)。

---

## 四、定时任务(工作日早晚自动运行)

```bash
# 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
```
```powershell
# 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/ |
