# 设计思路与理念

这篇讲清楚两件事：这套工具解决了什么问题，以及为什么做成现在这个样子。
给两类人看：用它的人，和想照着改一套自己版本的人。

## 一、要解决的四个问题

### 1. 用它的人不是程序员

这套工具是给 HR 和猎头用的。不能指望他们会挑 CLI（命令行工具——不点鼠标、靠打字输命令操作的程序）、会搭文件夹结构、会判断"AI 说得对不对"。
也不能指望他们都用同一款 AI 工具——Claude Code、Codex、workbuddy、qoderwork、MiniMax Code、Z code 都有可能，水平还参差不齐。

**所以：能替用户准备的，全部提前准备好。**
- 要装什么工具，已经替你选好了（boss-cli 和 liepin-cli，两个招聘平台的自动化 CLI，一条命令装完）；
- 文件夹怎么建、模板长什么样，已经做好了；
- skill（可以理解成给 AI 的工作说明书，一个文件夹装一套流程）也是现成的，初始化时自动放进你的工作文件夹。

从下载到开始干活，中间没有任何一步需要用户自己做技术判断。说一句"帮我初始化"，剩下的 AI 照着说明书走。

### 2. "我要一个厉害的人"筛不了任何简历

用人的人说需求，十有八九是这种话："找个资深的，最好懂 AI。"
这句话没法用来筛简历——几年算资深？懂 AI 是会用工具就行，还是要能干活？
拿模糊的标准去跑自动化，结果就是：AI 筛得飞快，错得也很稳定——自信地放进错的人，自信地毙掉对的人。而且报告写得很漂亮，你看不出来它错了。

**所以：自动化之前，先把标准问清楚。**
工具里有个"梳理岗位"的环节：AI 一次只问一个问题，每个问题都带一个推荐答案，把"要个厉害的"逼成一条条能执行的标准——年龄卡不卡、学历卡到哪、哪项能力缺了就不用聊了（这项我们叫"命脉"）、什么样的简历看着像其实不对。
一个岗位问一次，大概半小时。这半小时决定了 AI 之后每天筛人的质量，跳不过去。

### 3. 日常招聘是重复劳动，但里面混着"点了就收不回"的动作

查未读消息、搜人、看简历、打分——纯重复劳动，AI 干最合适。
但同一条流水线里有两个动作性质完全不同：**打招呼**（打扰的是真人）和点**"不合适"**（拒掉的也是真人）。这类动作我们叫"对外不可逆动作"——点出去就收不回来。让 AI 全自动点，迟早出事故——它替你拒错一个人，你连知道都不会知道。

**所以：能撤销的放开跑，不能撤销的等人拍板。**
- 取数、筛选、记录、写报告：AI 全自动；
- 打招呼：默认先问你。你说"今天合适的直接打"，它今天就放开打，但打了谁一个个报给你，明天授权自动失效；
- 点"不合适"：**永远不自动点**。AI 觉得谁不行，先记在台账里等你确认；
- 碰到验证码、风控提醒、付费弹窗：立刻停手来问你。

### 4. 数据锁在招聘平台里，换个工具就归零

你在 Boss 上聊过的人，记录在 Boss 的服务器上；你对每个人的判断，散在聊天记录和脑子里。平台改版、换 AI 工具、换电脑，积累就没了。

**所以：所有数据都存在你自己电脑的文件夹里，而且是最普通的文本文件。**
台账是一张 CSV 表格（Excel 能开，记事本也能开），候选人档案是 Markdown 文档（就是纯文本）。从飞书邮箱收到的简历附件也会下载到工作区 `runtime/resumes/`，用邮件/附件 ID 和文件 hash 去重。飞书文档那些只是"给老板看的展示版"，从台账生成，删了能再生成。
这样做的好处：数据在你手里，可以备份、可以拷走、可以换任何工具接着用。还有一个隐藏好处——AI 每次新对话都是失忆的，但它每次干活前都会先读你文件夹里的标准和台账，等于把记性存在了文件里。

## 二、几个关键的技术决策

### 不绑定任何一家 AI 工具

各家 AI 工具都有自己的"插件"和 skill 发现机制，目录约定互不兼容，还经常变。
相对稳定的通用底座是**工作文件夹里的 AGENTS.md 文件**：支持它的工具会自动读取；
其他能读项目文件的 agent 也能按其中的明确路径打开工作流文档。

所以这套工具的核心不是"一个插件"，是"一个自足的工作文件夹"：初始化时把所有工作说明书拷进你的文件夹，AGENTS.md 负责指路（"处理今天的招聘→去读某某文档"）。之后换工具，招聘数据和流程都还在。
为了让常见工具还能自动触发 skill，初始化会从同一份 `skills/` 建立三个项目级入口：
`.agents/skills/`（Codex / Agent Skills）、`.claude/skills/`（Claude Code）和
`.qoder/skills/`（Qoder）。这些入口是链接，不复制内容；没有稳定项目级发现目录的工具继续走
`AGENTS.md`，不靠猜测私有目录。

避开的坑：绑死一家工具，用户换工具就全废。

### 工作流程文档里一个数字都不写

年龄线、学历线、薪资范围，每家公司都不一样。如果通用工具里预置了示例数字，用户就会把别人的标准当成默认值稀里糊涂用下去——这比没有标准更糟。

所以规矩是：**所有具体标准只存在于用户自己的 CONTEXT.md 里**（这个文件就是你的"招聘标准手册"，由梳理环节问出来）。它是这套工具的"唯一事实源"（single source of truth——全项目只认这一处，其他任何文档和它冲突，都以它为准）。流程文档只写"去读手册"，执行时现读。手册还是空的？流程拒绝开工，先把你引去梳理。

避开的坑：标准写在两个地方，改了一处忘了另一处，AI 不知道听谁的。

### 邮箱只是简历入口，不是指令入口

飞书邮箱能省掉“手动查邮件、下附件、再把文件丢给 AI”这段重复操作，但邮件主题、正文、发件人名和附件名都来自外部，不能当成 AI 指令。

所以邮箱流程固定是只读的：只查用户指定的时间窗，先按官方发件域缩小范围，再读邮件。它不标已读、不移动或删除、不回复或转发；风险邮件、压缩包、可执行文件和格式不明附件都不自动下载。通过检查的简历才进原有 review 流程。

避开的坑：为了省一次手动下载，却让 AI 读了无关邮件、执行了邮件里的伪指令，或把同名简历相互覆盖。

### 对内、对外，文件夹层面分开

去哪些公司挖人、什么背景的人要避开、薪资给到多少——这些是你的竞争信息，发错一份麻烦立现。
所以直接在文件夹上分开：对外的 JD 随便发；对内笔记放在单独的 `_internal` 文件夹里，文件第一行就写着"不外发"。日报也有红线：敏感信息不写进去，平台上打码的名字保持打码。

### 搜索词越用越准

搜索关键词这东西，坐在办公室想是想不准的。只有真实命中的简历会告诉你什么词有效。
所以每天收工前有个固定动作：从今天"初筛通过"的简历里，反过来提取出好用的搜索词，记进一张迭代表；明天搜人之前先读这张表。用得越久表越厚，搜得越准。这是整套流程里唯一会"学习"的环节，成本就是几行表格。

## 三、防着 AI 自己偷懒

写这些工作说明书时的基本假设是：执行它的 AI 可能偷懒、跳步、凭印象编造。对策不是叮嘱它"请认真"，而是全部写死在文档里：

- **开工必读三份文件**（标准手册、工作须知、岗位对内笔记），不许凭记忆干活。防它拿自己训练时的"常识"当你的标准。
- **每一步都写清"完成判据"**（completion criterion——什么才算做完的验收标准）。比如寻源这步："每个岗位，两个平台、每个平台两个入口，都要跑过，漏一个就不算做完"；台账这步："今天接触过的每个人在表里有且只有一行，数量对得上"。防它干一半就宣布完成。
- **一天一个新对话，一个岗位一个新对话**。简历原文很快会把 AI 的上下文（context——一次对话能装下的内容总量，相当于它的脑容量）塞满，塞满之后判断会变钝——变钝就先把台账日报存好，开个新对话接着干。核心一句话：**没写进文件的判断等于丢了**。
- **初始化先看后动**。发现文件夹里已经有工作区，就只补缺的文件，绝不覆盖你的台账和标准手册。防重跑一次初始化，把几个月的积累冲掉。
- **踩过的坑直接写进文档**。比如：两个程序同时操作一个浏览器会卡死、猎聘对聊过的人再打招呼会重复发消息……这些都是实际踩出来的，写死在参考文档里。基础差点的 AI 照着做就行，不需要自己会排查。
- **每个可选功能都有"降级路径"**（就是备胎方案：好的用不了，自动换个差一点但能用的）。没装飞书工具？日报存成本地文档，约面试给手动建会清单，简历改为用户本地提供。扫不了码登录？先把文件夹建好，登录记进待办。简历下载失败？标个"未获取"，不许死循环重试。防一个小问题瘫痪整条流程。
- **安全底线焊死**。"绝不自动点不合适"这条在模板里明确标注"不可删"。防将来某天有人图省事把它当废话删掉。

## 四、方法论从哪来

写这些 skill 文档的手法，大量借鉴了 [mattpocock/skills](https://github.com/mattpocock/skills) 这个仓库（作者是 TypeScript 圈很有名的教学者 Matt Pocock）。他有个说法值得记住：**AI 是个随机系统，skill 文档存在的意义就是从里面拧出确定性——让 AI 每次都走同一个流程**。

从他那里学来的：
- **"什么才算做完"要写清楚**（上一节第一条，出处就是他）；
- **主文档写短，细节放附件**：主说明书只写顺序、判断、安全规则，短到 AI 一定会读完；命令细节和格式沉到参考文档，用到才翻；
- **用有分量的词当锚点**（他叫 leading words）：像"命脉"、"铁律"、"红线"、"台账"这种词，AI 一看就懂分量，一个词顶三句解释；
- **流程画成一条主路加岔路**："初始化（一次）→ 梳理岗位（每岗一次）→ 每日流水线（天天跑），发现标准不对就带着台账数据回去重新梳理"，好过一张平铺的功能列表；
- **别把 AI 的对话拖太长**（上一节第三条）；
- **初始化先看现状、再一个一个问、每个问题带解释**，假设用户不懂术语。

也学了他的"总目录"skill（router skill）：他有二十多个 skill，做了个 `/ask-matt` 帮用户记；这里的 `ask-viy` 是同一个思路——用户不用记任何流程名，问它就行。只有三个 skill 的时候没做（一张路由表就够），第四个 skill 进来、加上用户全是新手，才补的。

有几样看了但故意没学：
- 他的工具靠 `npx skills add` 一条命令装到全局（装给电脑上所有 AI 工具共用）——我们的核心场景是"文件夹自己带全套"，全局安装只当补充办法；
- 他那套写代码的流程（issue tracker 任务卡管理、TDD 测试驱动开发）——领域不一样，招聘不需要任务卡系统，台账里的一行就是我们的"任务卡"。

## 五、想清楚了不做的

- **不做全自动招聘**：约面试有流程帮你建日程拉面试官，但建之前必经你确认；谈薪、发 offer 则完全不碰，逐案等你发话。工具是副驾驶，方向盘在你手里。
- **不预置任何一家公司的标准**：连示例数字都不给（引导语只说"有的公司设线、有的不设"）。
- **不碰平台的私有接口**：两个工具操作的是你自己登录的浏览器，用你自己的账号和额度，不搞破解。
- **不做管理系统**：没有数据库、没有网站、没有注册登录。纯文本文件加 AI 就够了——每多一层系统，就多一层要维护的东西，多一个会坏的地方。
