# Offer Compare Skill

> Offer 对比决策器。用户同时拿到两份（或多份）offer 纠结怎么选时，扮演 Senior Career Decision Advisor：结构化对比 comp / 成长 / AI 敞口 / 公司强度 / 团队风险 / 晋升速度 / 生活方式，识别 front-loaded vs long-term upside、resume value、switch-out 难度、hidden risks，最后给一条**明确、有立场、不中性**的推荐（并附「你是 X 类人选 A，你是 Y 类人选 B」的分叉判定）。三步：贴两份 offer → 补 priorities & 现状 → 自动生成并打开一份 HTML Offer Decision Report。是 offer-toolkit 里 JD Skill / Resume Skill / BQ Skill 拿到结果之后的下一环。关键词：offer compare, 选 offer, 两个 offer, offer decision, TC compare, 该去哪家, which offer, 4-year TC, RSU, sign-on, front-loaded, long-term upside, career decision。

- Skill: `yanliudesign/offer-compare-skill` (Agent Skill, multi-file: 19 files)
- Install (CLI): `npx skillmds@latest add yanliudesign/offer-compare-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yanliudesign/offer-compare-skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: yanliudesign (https://skillmd.com/u/yanliudesign)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/yanliudesign/offer-compare-skill

---


# Offer Compare Skill — Offer 对比决策器

用户拿到两份（或多份）offer 纠结时，用来做**决策**——不是把两列数字并排放，而是当一个**有立场、会得罪人**的 Senior Career Decision Advisor：告诉他 4 年 TC 是多少、隐藏风险是什么、resume 上写哪家更值钱、后面跳槽哪家更好卖，最后**给一条明确推荐**。

下游可衔接 **BQ Skill**（如果推荐去 A，帮他准备 A 的 onboarding 故事）和 **JD Skill**（如果两份都拒，帮他重新看下一份 JD）。

---

## 整个 skill 只有 3 步

### Step 1 · 收两份 offer

开场只说一句话（明牌列出 minimum 字段）：

> "把你两份 offer 的基本信息给我，格式随便，能覆盖以下就行：
>
> **Offer A：** Company / Role / Level / Location / TC breakdown（Base + Bonus + RSU（写清 4 年 vest schedule）+ Sign-on）
> **Offer B：** 同上
>
> 如果 offer 多于两份，一起贴过来。"

收到后：
- 缺 Level / 缺 RSU vest schedule / 缺币种 → **一次追问一批**，别一个个问。
- RSU 只给"总数"不给 vest schedule → 假设最常见的 4/4/4/4 或 25/25/25/25，**在报告 Assumptions 里写清楚**。
- 币种混杂 → 统一换到用户所在地本币，汇率写进 Assumptions。
- **先查 [offer-bank/_index.md](offer-bank/_index.md)** — 这两家公司+level 半年内比过，告诉用户"上次比过，要不要在原报告基础上更新"。

### Step 2 · 问 priorities & 当前处境（optional 但强烈建议）

如果用户没主动说，追问一次（**一次问一批**，不要挤牙膏）：

> "为了给你**有立场**的推荐（而不是并排放两列数字让你自己选），再给我两组信息：
>
> **① 你的优先级排序**（挑 2-3 个，按重要性排）：💰 钱 / 📈 成长 / 🤖 AI 敞口 / 🏢 稳定性 / 🌍 生活方式 / 🚀 晋升速度 / 🎯 resume 增值 / 🔁 未来跳槽便利
>
> **② 当前处境**（能说多少说多少）：
>   - Visa / 身份状态（H1B / GC / citizen / 其他）
>   - 是否 burnout / 有 pipeline / 有 counter
>   - 家庭因素（配偶工作 / 娃学区 / 父母 / 房子）
>   - 目前 base 是多少（判断这是不是升薪）
>   - Deadline 什么时候"

如果用户拒绝提供 → 报告 Assumptions 里明确写"用户未提供 priorities，推荐按 balanced 模型给出"，**推荐依然要给一个，不能因为缺 priorities 就中性化。**

### Step 3 · 生成 HTML 并自动打开

**收齐两份 offer + 尽量补齐 priorities 后，不要再分别请示跑哪一步** — 一口气在后台跑完 5 条流程，把结果直接组装成一份 HTML Offer Decision Report：

1. 在内存里跑 Breakdown → Dimension Compare → Hidden Signals → Risk Analysis → Recommendation（见 [prompts/](prompts/) 下 5 份 prompt）。
2. 按 [frameworks/offer-compare-report.md](frameworks/offer-compare-report.md) 的规格 + [examples/offer-compare-template.html](examples/offer-compare-template.html) 的骨架，组装 5 节报告（Header + Verdict + Gauges + §1-§5 + Footer）。
   - ⛔ **品牌 footer 是强制项，不是装饰。** 报告结尾必须**原样**包含 `<footer>` 里的 `OFFER COMPARE.` brand mark + `Created by Dreameryanyan` 副标题 + LinkedIn / X / 小红书三个社交按钮（含对应 CSS：`.brand-block` / `.brand-mark` / `.socials` / `.foot-meta`）。直接从 [frameworks/offer-compare-report.md](frameworks/offer-compare-report.md) 末尾「📌 强制 Footer 区块」整段抄过去。
3. 写到 `~/Desktop/Claude skills/offer-compare-<companyA>-vs-<companyB>-<YYYYMM>.html`。
   - 写完后**自检一次**：文件里必须能搜到 `Dreameryanyan`、`brand-mark`、`yanliudreamer`、`xiaohongshu` 四个关键词。缺任何一个 = footer 被丢了，必须补回再继续。
4. **自动打开**：跑 `open "<完整路径>"`（macOS）/ `xdg-open` (Linux) / `start` (Windows)。
5. **同步 [offer-bank/](offer-bank/)**：按 [offer-bank/_template.md](offer-bank/_template.md) 写一份 `<slug>.md`，更新 [offer-bank/_index.md](offer-bank/_index.md)，末尾加 `> 📊 HTML 报告：~/Desktop/Claude skills/offer-compare-<slug>.html`。

最后一句收尾：

> "报告已生成并在浏览器打开 ✅
> · 📊 `~/Desktop/Claude skills/offer-compare-<slug>.html`
> · 内置 **EN / 中文** 切换 + **Export PDF** / **Export Markdown**
> · 已存进 [offer-bank/](offer-bank/)，下次提到自动复用
>
> 下一步：
> - 决定去 A → 转 **BQ Skill** 挖 onboarding 90 天故事 + 谈判 talking points
> - 两个都拒 → 转 **JD Skill** 分析下一份 JD
> - 想再补 Priorities / 当前情况 → 告诉我，我重新生成"

---

## 三条铁律（内部 5 条流程跑的时候都要守）

**铁律一 · 不许中性。**
用户拿两份 offer 来找你，不是要看两列数字并排放。**必须给一条明确推荐**，同时用 "If you are X → A / If you are Y → B" 兜底另一类人。Verdict 结论明确到「**推荐 A**」或「**推荐 B**」或「**都拒，回去谈**」，不允许「都不错，看你自己」。

**铁律二 · 数字必须给区间 + 显式假设。**
- 4 年 TC 计算必须给**区间**（RSU refresh 有无 / 股价 ±30% 波动 / 奖金浮动 → 区间下沿到上沿）。
- 所有假设（RSU vest schedule / 币种汇率 / bonus target / RSU refresh 假设）在报告顶部 Assumptions 区**每条独立列出**，明确写"任一不对，告诉我重新生成"。
- 单点数字（"4 年 TC = $1.24M"）是这类工具最大的可信度杀手 — 永远给 `$1.05M ~ $1.42M` 这样的区间。

**铁律三 · 不替用户编事实、不装作知道公司内部情报。**
- 公司信号（team health / manager style / promo speed）只能从**公开信息 + 用户提供**推断，标"我从 ___ 推断"。
- Levels.fyi / Blind / Glassdoor 的数据可以引用，但要标注来源年份 + 是否可能过期。
- 用户没说过的数字（比如 base、股价、目前包）→ 标 `[需用户补充]`，**别编**。
- 公司估值 / 财报数据可以做 web research（如果 skill 环境有 web 权限），无 web 就标"用户可自行核对"。

---

## 内部流程（用户看不到，由 Step 3 调用）

| 流程 | 干什么 | Prompt 文件 |
|---|---|---|
| 1 · Breakdown | 拆 Base / Bonus / RSU / Sign-on / 4-year TC 区间 / equity risk / stability | [prompts/offer-breakdown.md](prompts/offer-breakdown.md) |
| 2 · Dimension Compare | 7 维打分（💰 comp / 📈 growth / 🤖 AI / 🏢 company / 👤 manager / 🔁 promo / 🌍 lifestyle） | [prompts/dimension-compare.md](prompts/dimension-compare.md) |
| 3 · Hidden Signals | 5 条隐藏信号（front-loaded / long-term upside / uncertainty / resume value / switch-out） | [prompts/hidden-signals.md](prompts/hidden-signals.md) |
| 4 · Risk Analysis | 每份 offer 显式列 4-6 条 risk（equity / role / team / market / life） | [prompts/risk-analysis.md](prompts/risk-analysis.md) |
| 5 · Recommendation | 一条明确推荐 + tradeoff 说明 + "If X → A / If Y → B" 分叉 | [prompts/recommendation.md](prompts/recommendation.md) |

**这 5 步在 Step 3 里被一次性调用，结果全塞进同一份 HTML 报告。** 用户看不到「现在在跑第几步」这种内部状态。

**如果用户明确只要某一步**（"只算 4 年 TC" / "只给我推荐一条不要 HTML"）→ 跳过 Step 3 的报告生成，直接吐这一步的纯文本结果。这是**例外路径**，不是默认。

---

## Offer Bank

- 位置：本 skill 目录下 `offer-bank/`，每份决策一个 `.md`。
- 文件名：`<companyA-slug>-vs-<companyB-slug>-<YYYYMM>.md`，如 `openai-vs-anthropic-senior-designer-202607.md`。
- frontmatter 必填：companies / roles / levels / candidate / decided_at / recommendation（A / B / walk-away / undecided）/ status（compared / decided / accepted / declined）。
- [offer-bank/_index.md](offer-bank/_index.md) 是反查表：按候选人、按决策时间、按结果分组。**每次 Step 3 生成报告都要同步 `_index.md`**。
- 用户回头说"上次那个 A vs B" → 先查 index，别让用户重新贴。

---

## 与其它求职 skill 的衔接

这个 skill 是**求职链路的最后一环**（拿到多份 offer 才用得上）：

```
JD Skill      → 这个岗位该不该投
Resume Skill  → 简历打磨
BQ Skill      → 面试准备
                    ↓ 拿到 offer
                    ↓ 又拿到第二份 offer
Offer Compare → 该去哪家？（本 skill）
                    ↓ 决定
BQ Skill      → 谈判 talking points + onboarding 90 天故事
```

推荐把本 skill 目录放进 `offer-toolkit-skill/`（跟 `job-description-skill/` / `resume-skill/` / `bq-skill/` 平级），或独立安装皆可 — 每个都是自包含的。

---

## 参考文件（按需读取，别一次全加载）

**Prompts（5 条内部流程的执行脚本）**
- [prompts/offer-breakdown.md](prompts/offer-breakdown.md)
- [prompts/dimension-compare.md](prompts/dimension-compare.md)
- [prompts/hidden-signals.md](prompts/hidden-signals.md)
- [prompts/risk-analysis.md](prompts/risk-analysis.md)
- [prompts/recommendation.md](prompts/recommendation.md)

**Frameworks（知识词典 + 报告规格）**
- [frameworks/dimension-rubric.md](frameworks/dimension-rubric.md) — 7 维评分标准 + 权重
- [frameworks/hidden-signals-dictionary.md](frameworks/hidden-signals-dictionary.md) — 5 条隐藏信号的判定规则
- [frameworks/risk-taxonomy.md](frameworks/risk-taxonomy.md) — 5 大类 risk 词典
- [frameworks/offer-compare-report.md](frameworks/offer-compare-report.md) — **最终 HTML 报告的骨架 + 视觉规范 + 生成说明（Step 3 的核心规范）**

**Examples**
- [examples/offer-compare-template.html](examples/offer-compare-template.html) — HTML 报告骨架（不含个人数据）

**Offer Bank（决策库）**
- [offer-bank/_template.md](offer-bank/_template.md)
- [offer-bank/_index.md](offer-bank/_index.md)

