# Record Job

> 从招聘岗位详情页或投递记录页提取公司、岗位、城市、状态、JD 和链接，查重后在用户确认下写入或更新飞书多维表格。用户要求记录岗位、记录投递、更新投递进度或整理投递页面时使用。

- Skill: `yue-xinyi/record-job` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add yue-xinyi/record-job`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yue-xinyi/record-job/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/record-job

---


<!--
  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 的读写权限。
6. 确认目标表已创建「公司、岗位、城市、目前状态、链接」等字段。

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

---

## 适用表格
本 Skill 用于把招聘页面中的岗位信息写入飞书多维表格。

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

---

## 触发方式
当用户说以下任意一种时，执行本 Skill：
- "帮我记录当前页面的投递信息"
- "记录这个岗位"
- "投完了，记一下"

---

## 第一步：登录检测
通过浏览器控制工具读取当前页面，判断是否已登录：
- 页面出现"登录"、"注册"、"Sign in"、"请先登录"等字样
- 或跳转到登录页
- 或页面关键内容无法读取

检测到未登录时，停下来提示：
```text
⚠️ 检测到当前页面需要登录，请先在浏览器中完成登录。
登录完成后回到目标页面，再告诉我「继续」。
```

收到「继续」后重新读取页面。

---

## 第二步：判断页面类型

### 分支 A：单个岗位详情页
特征：页面包含一个职位名称、职位描述、任职要求等。

处理方式：直接提取该岗位信息，进入第三步。

### 分支 B：投递记录页 / 列表页
特征：页面包含多条岗位记录，每条有状态、时间等。

处理方式：
1. 提取列表中的岗位名称、投递状态、城市等基础信息。
2. 如缺少 JD，尝试跳转到职位列表页或岗位详情页补全。
3. 展示候选岗位，请用户确认记录全部或指定序号。

### 分支 C：无法识别的页面
提示：
```text
⚠️ 当前页面无法识别为招聘页，请确认是否打开了正确的页面。
```

---

## 第三步：提取字段

| 字段名 | 提取规则 |
|--------|---------|
| 公司 | 从页面标题、公司介绍区域或招聘站点信息提取，使用通用简称 |
| 机构类型 | 根据公司名称推断，如互联网、AI、咨询、金融、国央企、外企、实业民营 |
| 岗位 | 提取职位标题完整内容，保留 BU / 方向信息 |
| 城市 | 提取地点信息，去除"市"、"省"等后缀 |
| 目前状态 | 页面有状态则映射；页面无状态时默认"已投递" |
| 投递截止时间 | 统一为 yyyy/MM/dd；页面无截止时间则留空 |
| 时间线1-投递 | 优先使用页面投递时间；页面无投递时间则使用当天日期 |
| JD | 提炼核心职责和任职要求，2-4 句话，不超过 200 字 |
| 链接 | 当前页面 URL |
| 备注 | 志愿顺序、推荐来源或其他用户确认后的补充信息 |

状态映射：
- 已投递 / 投递成功 / 待处理 → 已投递
- 笔试 / 测评 → 笔试
- 一面 / 初试 → 一面
- 二面 / 复试 → 二面
- 三面 / 终面 → 三面
- Offer / 录用 → Offer
- 拒绝 / 不合适 / Reject → Reject

---

## 第四步：查重检测

写入前先查询表格中是否已存在相同记录。

匹配规则：
- 公司匹配：提取公司名与表格公司字段互相包含，或明显为同一公司。
- 岗位匹配：岗位名有 50% 以上关键词重叠，且方向一致。
- 公司和岗位同时匹配才判定为重复。

匹配不确定时，展示候选记录让用户确认：
```text
🔍 发现可能重复的记录，请确认是否为同一岗位：

表格中已有：[公司] - [岗位]
当前提取：[公司] - [岗位]

回复「是」按更新逻辑处理，回复「否」按新增逻辑处理。
```

处理逻辑：
- 未找到重复记录：新增一行。
- 找到重复记录：不新增，只更新状态、投递时间、链接等字段。

---

## 第五步：写入飞书

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

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

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

新增记录示例：
```bash
npx @larksuite/cli base +record-upsert \
  --base-token <YOUR_BASE_TOKEN> \
  --table-id <YOUR_TABLE_ID> \
  --as user \
  --json '{"公司":"xxx","岗位":"xxx","机构类型":["互联网"],"城市":["上海"],"目前状态":"已投递","链接":"https://...","JD":"..."}'
```

字段映射：
| 字段名 | 写入内容 |
|--------|---------|
| 公司 | 公司全称 |
| 机构类型 | 推断值 |
| 岗位 | 岗位名称 |
| JD | 岗位核心职责摘要 |
| 城市 | 提取值 |
| 目前状态 | 提取或默认"已投递" |
| 投递截止时间 | yyyy/MM/dd，无则留空 |
| 链接 | 当前页面 URL |
| 时间线1-投递 | 实际投递时间或当天日期 |
| 时间线2-笔试 | 投递阶段留空 |
| 时间线3-一面 | 投递阶段留空 |
| 时间4-二面 | 投递阶段留空 |
| 备注 | 用户确认后的补充信息 |

---

## 第六步：完成回复

单条：
```text
✅ 已记录：[公司] - [岗位]
📋 查看表格：https://<YOUR_LARK_HOST>/base/<YOUR_BASE_TOKEN>?table=<YOUR_TABLE_ID>
```

批量：
```text
✅ 已记录 N 条：
  1. [公司] - [岗位]
  2. [公司] - [岗位]

📋 查看表格：https://<YOUR_LARK_HOST>/base/<YOUR_BASE_TOKEN>?table=<YOUR_TABLE_ID>
```

写入失败时输出具体报错，并提示检查飞书 CLI 登录状态。

