# Find Jobs

> 根据用户的求职偏好浏览招聘网站、筛选和比较岗位，并在用户确认后将岗位写入飞书多维表格。用户提出查找职位、筛选岗位、查看某家公司招聘机会或整理职位清单时使用。

- Skill: `yue-xinyi/find-jobs` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add yue-xinyi/find-jobs`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yue-xinyi/find-jobs/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: YUE-XINYI (https://skillmd.com/u/yue-xinyi)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/yue-xinyi/find-jobs

---


<!--
  Offer Copilot Skill 示例（脱敏版）
  - 飞书 Base token / table id / 直达 URL 均使用占位符
  - 不包含个人投递记录、账号信息、真实表格链接或字段 ID
-->

# Skill: 筛选招聘岗位

## 使用前配置检查
每次执行前，先检查本文件是否仍包含以下占位符：
- `<YOUR_BASE_TOKEN>`
- `<YOUR_TABLE_ID>`
- `<YOUR_LARK_HOST>`

如果任一占位符未替换，立即停止执行，并提示用户：
```text
⚠️ 这个 Skill 还没有完成飞书配置，暂时不能写入岗位记录。

请先完成以下步骤：
1. 在飞书多维表格中准备岗位追踪表。
2. 将本 Skill 中的 <YOUR_BASE_TOKEN> 替换为你的 Base app/base token。
3. 将 <YOUR_TABLE_ID> 替换为目标数据表 table id。
4. 将 <YOUR_LARK_HOST> 替换为你的飞书域名，例如 feishu.cn。
5. 完成飞书 CLI/API 授权，并确认当前账号有目标 Base 的读写权限。

完成后再重新执行本 Skill。
```

如用户只想筛选岗位、不写入飞书，可以继续执行到「展示筛选结果」为止；在需要写入时再次提示完成上述配置。

---

## 触发方式
当用户说以下任意一种时，执行本 Skill：
- "帮我看看 [公司名] 有什么合适的岗位"
- "打开 [链接]，帮我筛选岗位"
- "帮我找一下这几家公司的岗位：[公司列表]"

---

## 第零步：读取求职偏好
执行前先读取 `references/job-preference.example.md`。如果用户已经提供自己的偏好文件，优先读取用户文件；否则使用示例偏好并提醒用户按需修改。加载：
- 岗位优先级排序
- 推荐岗位清单
- 城市优先级
- 实习类型要求

---

## 第一步：接收用户输入
用户会提供以下任意组合：
- 一个或多个公司名
- 一个或多个招聘页面链接
- 临时偏好补充，如"这次只看上海的"、"只看 AI 方向"

将临时偏好叠加到 `job-preference.md` 的固定偏好上，仅本次生效，不修改配置文件。

---

## 第二步：登录检测
用浏览器控制工具打开招聘页面后，检测是否已登录。

判断逻辑：
- 页面出现"登录"、"注册"、"请先登录"、"Sign in"等字样
- 或页面跳转到了登录页
- 或页面内容为空/加载异常

检测到未登录时，停下来提示：
```
⚠️ [公司名] 招聘官网需要登录，请在浏览器中手动完成登录。
登录完成后回到招聘岗位页面，再告诉我「继续」。
```

收到「继续」后重新读取页面，确认登录成功再执行第三步。

---

## 第三步：浏览并筛选岗位

### 导航策略
1. 优先寻找"校园招聘"、"实习生"、"intern"入口。
2. 在岗位分类中寻找"产品"、"运营"、"商业分析"等类别。
3. 按城市筛选，城市优先级来自 `job-preference.md`。
4. 如果平台不支持某个城市筛选，跳过该城市，不报错。

### 关键词搜索规则
- 每次只用单个关键词，避免 AND 逻辑导致 0 结果。
- 推荐搜索顺序：产品经理 → AI 产品 → 策略产品 → 策略运营 → 产品运营 → 商业分析。
- 同一岗位被多次搜索命中时，去重保留一条。

### 筛选标准
优先保留：
- 岗位名称包含：产品经理、AI 产品、策略产品、功能产品、商业分析、产品运营。
- 工作城市符合偏好城市列表。
- 实习类型满足以下任意一条：
  - 暑期实习 / summer intern
  - 可转正实习
  - 长期实习注明可转正
  - 特殊项目制实习
  - 无法判断类型时标注 ⚠️，不自动排除

排除：
- 纯技术开发类岗位，如前端、后端、算法、数据开发。
- 游戏方向岗位。
- 明确标注"不转正"或"仅兼职"的岗位。

### 对照推荐清单
提取完毕后，与 `job-preference.md` 中的推荐岗位对照：
- 清单有、页面找到：标注 ✅
- 清单有、页面未找到：标注 ❓
- 页面找到但清单没有：标注 🆕

---

## 第四步：展示筛选结果

每个岗位按以下格式展示：
```text
✅/🆕/⚠️ N. 岗位名称
   📍 城市：xxx  ⏰ 截止：xxx（无则显示"未注明"）
   🔗 链接：xxx
   📝 JD 摘要：100 字以内，提炼核心职责和任职要求关键词
   🎯 推荐理由：结合岗位优先级、城市和实习类型说明
```

未找到的推荐岗位统一在末尾列出：
```text
❓ 以下推荐岗位在当前平台未找到，可能尚未开放：
   - [公司] · [岗位]
```

展示完提示：
```text
请回复：
「全部记录」：将所有 ✅ 和 🆕 岗位写入飞书
「记录1,3」：只记录指定编号
「跳过」：不写入，只看结果
```

---

## 第五步：写入飞书

用户确认后写入飞书多维表格。

写入前再次检查：
- `<YOUR_BASE_TOKEN>`、`<YOUR_TABLE_ID>`、`<YOUR_LARK_HOST>` 均已替换。
- 飞书 CLI/API 已完成授权。
- 当前用户对目标 Base 有写入权限。
- 目标表已创建字段映射中列出的字段。

任一条件不满足时，不执行写入，先引导用户补齐配置。

表格信息：
- app_token: `<YOUR_BASE_TOKEN>`
- table_id: `<YOUR_TABLE_ID>`

写入要求：
- 使用字段名写入，不使用字段 ID。
- 使用用户身份操作，例如 `--as user`。
- 多选字段用数组。
- 日期字段按当前 CLI/API 要求转换为对应格式。

字段映射：
| 字段名 | 写入内容 |
|--------|---------|
| 公司 | 公司全称 |
| 机构类型 | 根据公司推断 |
| 岗位 | 岗位名称 |
| 城市 | 岗位城市 |
| 目前状态 | 固定填"未投递" |
| 投递截止时间 | yyyy/MM/dd，无则留空 |
| 链接 | 岗位链接 |
| 时间线1-投递 | 留空 |
| 时间线2-笔试 | 留空 |
| 时间线3-一面 | 留空 |
| 时间4-二面 | 留空 |
| 备注 | 留空 |

示例命令：
```bash
npx @larksuite/cli base +record-upsert \
  --base-token <YOUR_BASE_TOKEN> \
  --table-id <YOUR_TABLE_ID> \
  --as user \
  --json '{"公司":"xxx","岗位":"xxx","城市":["上海"],"目前状态":"未投递","链接":"https://..."}'
```

---

## 第六步：完成回复

```text
✅ 已记录 N 个岗位到飞书待投递清单：
  1. [公司] - [岗位] - [城市]

📊 查看飞书记录表：
https://<YOUR_LARK_HOST>/base/<YOUR_BASE_TOKEN>?table=<YOUR_TABLE_ID>
```

