職缺評估工具
使用者經常收到獵頭訊息,希望每次都能進行相同的評估:這個職位是否合適、實際(淨)條件是否比現有工作好、應該問什麼問題、以及如何回覆。不同合約類型和國家的毛額數字會誤導人,因此這個技能的核心是根據使用者提供的事實進行淨實得薪資比較,絕不依賴記憶或假設的事實。
第 0 步:載入脈絡
個人資料存放在技能外部,因此更新、複製或發布技能都不會暴露或覆蓋這些資料。請按以下順序一次解析資料資料夾 <data_dir>:
- 如果設定了
$JOB_SEARCH_DIR,則使用該路徑。 - 否則,使用 agent 使用者級別配置資料夾內的
job-search/資料夾:Claude Code 使用~/.claude/job-search/,Codex CLI 使用~/.codex/job-search/,Gemini CLI 使用~/.gemini/job-search/。對於其他 agent,請使用對應的使用者級別資料夾。
絕對不要使用技能內部或專案倉庫中的資料夾。如果 <data_dir> 不存在,請建立它,並將此技能中的 templates/profile.md 和 templates/offers_log.md 複製進去,然後告知使用者你使用的路徑。
- 履歷 (CV):從
<data_dir>/profile.md中讀取cv_path。如果它是?、缺失或找不到檔案,請要求使用者提供履歷(路徑或貼上文字),並將路徑儲存在 profile 中;沒有履歷就不要評估合適度。履歷是技能和資歷的真實來源;不要憑空捏造經驗。 - LinkedIn(可選,盡力而為):LinkedIn 通常會封鎖自動化讀取(需要登入),因此如果 profile 中有
linkedinURL,請嘗試一次,如果被封鎖,則靜默跳過。僅當職缺內容依賴於此(例如,獵頭聲稱他們看到的使用者檔案,或履歷缺少職位所需的內容)時,才要求使用者貼上他們的個人資料或 PDF 匯出檔案。履歷仍是主要來源;LinkedIn 僅作為獵頭可能看到內容的交叉比對。 - Profile:讀取
<data_dir>/profile.md(參見第 1 步)。 - 過往職缺:瀏覽
<data_dir>/offers_log.md。如果同一家公司或獵頭再次出現,或者薪資與之前的職缺相比有參考價值,請提及它。
第 1 步:確認或面談(提問,不要假設)
薪資數字和條件會變動,錯誤的假設會悄然破壞比較結果。
- Profile 有數值且
last_verified存在: 顯示已儲存詳細資料的簡潔摘要,並要求使用者確認它們或說明哪些部分有變更。僅對標記為?的欄位或使用者更正的欄位提出問題。如果last_verified已超過 6 個月,請說明並更仔細地逐項檢查欄位。 - Profile 為空或缺失(首次執行): 執行以下完整面談,然後將答案寫入
<data_dir>/profile.md,並將last_verified設為今天。 - 在任何變更之後,更新
profile.md(保持現有佈局),以便下次執行時能快速確認。
將問題作為一組群發送(如果你的 agent 有結構化提問工具,請使用它),並附上任何缺失的職缺詳細資料。
1. 財務基線與合約結構
- 目前的年薪總額與年度目標獎金/變動薪酬(及其支付的可靠性)。
- 合約類型:西班牙的永久合約/臨時僱傭、EOR、自僱/自由職業、美國 W2 與 1099 等。
- 付款分期(12 或 14 個月)。這會影響每月現金流,而非年度淨額,但在比較每月數字時很重要。
2. 地點與稅務背景
- 目前納稅的國家和城市/地區,以及職缺將要納稅的地點(稅率因西班牙自治區、瑞士州、美國州而異)。
- 任何特殊制度或扣除額(Beckham/外派人員制度、殘疾、家屬、抵押貸款、地區扣除額)。
3. 福利與自付費用
- 目前的非現金福利:私人醫療保險、退休金匹配、餐券、交通補貼、股票、培訓預算,每項皆需有每年的大致歐元價值。
- 自己支付的工作相關費用:無補償的通勤、設備、共享工作空間。
4. 工作模式與成本影響
- 目前的工作模式(100% 遠端、混合每週幾天、辦公室),以及他們偏好的模式以及能容忍多少辦公室時間。
- 如果是混合或辦公室工作:每月通勤費用和每週通勤時間。
5. 決策門檻
- 促使他們換工作的最低淨收入增長,例如「+15% 有效淨額」(建議換工作約 +15-20%,B2B 或較不穩定的職缺則更高),並讓他們覆寫此值。詢問硬性拒絕條件(on-site、僅限承包商、特定行業)。
對於每個職缺(從不儲存在 profile 中):對於 B2B/時薪制,提供實際可計費時數和合約間預期的空窗期;對於非歐元薪資,提供外匯匯率(第 2 步會取得)。
第 2 步:淨實得薪資比較
比較當前工作和職缺的淨額,而非毛額。淨額是指扣除社會保險、所得稅以及自由職業者的自僱成本(自僱稅、會計師、保險)後的金額。然後加上非現金福利的年度價值,並減去自付的工作成本,得出有效淨額。
- 外匯 (FX): 對於非歐元職缺,執行
python3 scripts/fetch_fx.py USD(透過 frankfurter.dev 取得 ECB 匯率)並使用該匯率,註明日期。如果查詢失敗,請向使用者索取匯率。 - 執行腳本:
python3 scripts/net_compare.py(參見--help)。當前工作在--country的稅制下課稅,職缺在--offer-country的稅制下課稅(預設:相同)。它接受目前的合約類型、毛額(包括預期變動薪酬)、福利、額外成本、地區調整和職缺詳細資料,並列印出淨額、有效淨額(以歐元計)、差異,以及如果使用--threshold,則顯示增長是否超過門檻。--irpf-shift(別名--region-adjust)是當前國家的地區調整,--offer-region-adjust則是職缺國家的調整;請說明你傳遞的值。- 西班牙 (ES): 調整是 IRPF 百分點偏移(低稅率地區如 Madrid 約 -0.01 至 -0.015,高稅率地區約 +0.01,不確定則為 0)。
- 美國 (US): 僅聯邦稅、單身申報人、標準扣除額、無 401(k)/HSA、無 QBI 扣除。調整是使用者的平均州所得稅率(TX/FL/WA 為 0,否則請詢問州名)。對於 1099 工作,將自付的健康保險納入
--expenses;對於 W-2 職缺,將僱主的健康保險和 401(k) 匹配納入--offer-benefits。 - 貨幣: 職缺金額以職缺國家的貨幣為單位。
--fx將薪資貨幣轉換為該貨幣(在西班牙課稅的 USD 薪資:--fx 0.89),而--to-eur將職缺國家的貨幣轉換為歐元(在美國課稅的 USD 薪資:--fx 1 --to-eur 0.89)。福利和額外成本始終為歐元。
- 稅務模組: 國家規則位於
scripts/tax/<cc>.py,其數字位於data/tax_<cc>.json;已存在西班牙 (ES) 和美國 (US)。對於其他國家(瑞士、英國等),從目前的稅級和社會安全規則手動估算淨額(網路搜尋當年數字),顯示主要步驟,並將其標記為粗略估算。如果該國家的職缺持續出現,建議建立一個模組(references/adding-a-country.md)。 - 過時檢查:
net_compare.py在稅務資料過時或未經驗證時會印出WARNING。當你看到此訊息時,請告訴使用者,並在依賴這些數字之前提供以下重新整理程序。 - 永遠說明所使用的假設: 外匯匯率、可計費時數、費用、地區、稅務年度。說明結果僅為估算,實際決策應由會計師或稅務顧問確認。
- 對於 B2B,淨額仍然忽略員工免費獲得的福利: 帶薪休假、帶薪病假、失業保障、退休金累積、僱主繳款。提供「等值僱員毛額」,並標示合約風險(單一客戶、通知條款、假性自僱風險、獨家經營權)。
第 3 步:合適度與條件
合適度(履歷 vs 職位): 以 10 分制評分並附上一行原因。列出匹配項目(附履歷證據)、差距(真實差距與僅未列出的項目),以及與他們當前角色相比,實際日常工作內容和資歷可能為何。獵頭的職稱常常隱藏比他們宣傳的更窄的工作範圍,因此請說明該職位實際上是什麼。
條件(優先順序:淨薪資 > 遠端 > 職涯發展): 使用 references/benefits-checklist.md 作為福利清單,並將每個項目標記為 已陳述 / 法定預設值 / 未知:
- 薪資與福利(健康、退休金匹配、帶薪休假、病假、育兒假),特別是對於西班牙以外的角色,其法定預設值可能不同。
- 工作模式與他們陳述的偏好相比,加上時區重疊和差旅。
- 職涯發展:成長路徑、自主權、公司和客戶聲譽、該工作是否朝着 profile 中的
target_roles_and_topics發展或背離、工作的穩定性。
獵頭端訊號: 使用 references/recruiter-signals.md 閱讀訊息本身(隱藏的最終客戶、範本化招募、「薪資高達」、合約形式 vs 角色、範圍 vs 職稱),並列出發現的紅旗和正面訊號。可選項:網路搜尋公司和最終客戶的聲譽。
第 4 步:裁決、問題、回覆
- 裁決: 追求、先問清楚、或婉拒,附上決定性的 2-3 個理由,並明確核對其門檻和硬性拒絕條件。
- 給獵頭的問題: 僅提出 2-3 個其答案可能改變決定的問題(通常是實際薪資結構和帶薪休假條款、實際工作範圍和團隊、合約期限和終止條款)。不要問泛泛的問題。
- 回覆草稿: 一旦裁決明確或使用者表明意圖,使用獵頭的語言、簡短、以使用者的語氣草擬。婉拒:感謝他們,可選擇附上一行理由。索取詳細資訊:有條件的興趣加上問題;不要透露他們目前的薪資(如有需要,可提供目標範圍替代)。如果仍未決定,可簡短提供兩種草稿。一段話一行(不要強制換行),並謹慎使用破折號。
第 5 步:記錄職缺
在裁決後,將一行附加到 <data_dir>/offers_log.md(日期、公司和最終客戶、職位、合約、提供的薪資、有效淨額差異、合適度、裁決、結果/備註)。在使用者尚未表示要記錄之前,請先詢問再寫入。之後,當他們告訴你發生了什麼事(回覆了、婉拒了、面試了),更新該行的結果。
年度稅務資料重新整理
每個 data/tax_<cc>.json 都包含該國的所得稅稅率表、社會安全或薪資稅費率和上限,以及扣除額(西班牙還包含自僱稅表),並附有 tax_year、verified_on 和 verified_by。數字每年一月會過時,因此在腳本發出警告、日曆年超過 tax_year 或使用者要求時進行重新整理。程序:
- 搜尋檔案中
sources列出的官方來源。西班牙:AEAT 的 IRPF 稅率表和個人免稅額,Social Security 的 RETA 自僱稅率表、最高繳費基數以及包含 MEI 的員工費率。美國:IRS 通膨調整 Rev. Proc. 的稅級和標準扣除額,SSA 的社會安全工資基數;重新閱讀 Additional Medicare Tax 和自僱稅規則,第一個版本是從常識中取得的。 - 向使用者顯示每個變更值的變更前/後差異及其來源連結。不要靜默覆寫:錯誤的稅務數字會悄悄地破壞未來所有的比較,因此使用者必須先確認。
- 在使用者核准後,編輯 JSON,將
tax_year、verified_on設為今天,並將verified_by設為實際閱讀的來源(只有當你確實根據官方頁面驗證過時,才刪除「NOT checked」字樣)。 - 重新執行一個範例比較以檢查是否一切正常。
排程提醒是可選的:如果使用者希望在 1 月收到真正的提醒,請提供設定提醒的功能,可以使用 agent 或作業系統提供的任何排程機制(cron、排程的 agent 任務、日曆事件),該機制將開啟一個執行此重新整理的會話。
輸出格式
保持易於掃讀,而非長篇大論。請按以下順序使用這些區段:
- TL;DR(2 行):裁決、合適度評分、有效淨額差異 vs 門檻。
- 淨額比較:一個表格,列有 毛額 / 社會保險/自僱稅 / 所得稅 / 淨額 / 福利 / 自付費用 / 有效淨額,以及欄位 當前 / 職缺 / 差異;表格下方是假設清單。
- 合適度:評分、匹配項目、差距、可能的實際工作範圍。
- 條件:關於遠端、福利、職涯發展、風險的簡短表格。
- 招募訊號(每個一行簡短說明)和 給獵頭的問題:2-3 個編號項目。
- 回覆草稿。
- 假設或未驗證事項:項目符號清單。
不要產出可以用表格或項目符號呈現的散文段落。