Skip to content

Latest commit

 

History

History
684 lines (506 loc) · 45.9 KB

README.zh-TW.md

File metadata and controls

684 lines (506 loc) · 45.9 KB

career-ops

開源的 AI 求職代理人。

English | Español | Deutsch | Français | Português (Brasil) | 한국어 | 日本語 | 简体中文 | 繁體中文 | Українська | Русский | Polski | Dansk | தமிழ் | العربية | हिन्दी | Türkçe | Tiếng Việt | Bahasa Indonesia

網站目前只有簡體中文版:career-ops.org/zh

Santiago Fernández de Valderrama Aparicio  由 @santifer 建立,    700+ 位貢獻者參與

幾個月投出去的履歷,全都石⁠沉⁠大⁠海。
所以我做了自己需要的那個過⁠濾⁠器。

740 個職缺已評估。68 個已投遞。12 場⁠面⁠試。⁠1 份 offer。
我是它的第一個使用者。我⁠拿⁠到⁠了⁠那⁠份⁠工⁠作。然⁠後⁠把⁠它⁠開⁠源⁠了。

貼上一個職缺,它在你的機器上告⁠訴⁠你:還⁠有⁠沒⁠有⁠在⁠徵⁠人,適⁠不⁠適⁠合⁠你。
它為你客製履歷、草擬回⁠答。由⁠你⁠按⁠下⁠送⁠出。

作者本人在 career-ops 儀表板裡的求職:評過分的職缺清單、標為「不要投」的職缺的紅色計數,接著是一份完整的評估報告

我自己的求職,進行到一半,介面是西⁠班⁠牙⁠文。

企業用 AI 篩選候選人。
我把 AI 交給候選人,讓⁠他⁠們⁠來⁠挑⁠選⁠企⁠業。

六個月後,我離開了那份工作。
現在我們打造 career-ops,讓⁠你⁠也⁠能⁠上⁠岸。

拿一個職缺試試 ↓ · 閱讀完整故事 →


Hired with career-ops: public stories on the record

在我之後來的人,寫下了他們是怎麼拿到 offer 的。

可以打開閱讀的錄取故事

每張卡片都是一個可以打開的公開 issue。你也上岸了?留下你的卡片 →

⭐ 如果 career-ops 幫到了你,一⁠顆⁠星就⁠能幫⁠下⁠一⁠個⁠人找⁠到⁠它。


WIRED      Business Insider

Vercel OSS Program

GitHub Trending: #1 repository of the day (Trendshift)      Featured on Product Hunt

輪到你了

把你今晚本來打算投的一個職缺貼進來。如果回傳的是不要投,你剛剛把這個晚上贏回來了。如果回傳的是一份計畫,你就知道下一步該做什麼。

npx @santifer/career-ops init

開源。本機執行。就在你已經在用的 AI CLI 裡。包含免費模型和本機模型。

你不必一個人找工作

按下送出之後的沉默,與你無關。看到同一件事的人夠多,於是把這套實踐寫了下來,只有六行:

投得更少,投得更好。訊號勝過數量。證據勝過關鍵字。由人來決定。本機優先。桌子兩邊都有尊嚴。

CareerOps 宣言:即時簽署人數

其中幾位,用他們自己的話。

CareerOps 宣言的三個簽名,用他們自己的話

每一個簽名都是一次可稽核的提交。讀完全部,或加上你的 →


招募不會自己修好。正在經歷它的人可以,而且他們已經在這個房間裡,交換筆記,互相修各自的設定。

貢獻者 GitHub 頭像組成的動態牆,自 2026年4月 起依加入順序逐一填滿,下一格留空。

修復就是在這裡寫出來的。是房間,不是俱樂部。一起來建。

Discord:career-ops 伺服器的即時成員數

贊助商

career-ops 對求職者永久免費。這些公司贊助了本專案:

SerpApi

SerpApi · Build a portfolio project with live search data. SerpApi gives developers structured JSON/Markdown from Google Search, Maps, Shopping, and other engines through a simple API call.

贊助買到的是清楚標示的曝光,絕不是影響力:再多的錢也改變不了路線圖,也放不進產品裡任何東西。贊助商絕不會出現在評估、排名或推薦中。

career-ops 為你做什麼

貼上一個職缺。它告訴你這個晚上值不值得。

  • 還在徵人嗎? 在你寫下一個字之前,它先確認這則職缺仍然有效。
  • 不是你? 用你真實的履歷給職缺打分,匹配度弱就叫你跳過。你可以不聽。
  • 值得投? 它起草履歷、求職信和申請答案。你來讀。你來送。
  • 該找誰聊? 它找到那個人,起草那則訊息。它從不替你送出。
  • 這些東西都去哪了? 每一份申請都留在你的機器上。沒有任何東西上傳給我們。
  • 我該學什麼? 連續被拒之後,它說出差距在哪。

最初幾次執行會很粗糙。它還不了解你。跟它聊:你的履歷、你想要什麼、你拒絕什麼。把它當成一個招募顧問的第一週。

第一次啟動時,它會在聊天裡把這些都問一遍。沒有任何需要手動設定的東西。

career-ops 不做的事

  • 自動送出申請。 它為每個欄位起草答案;你審閱,然後點擊送出。腳本從不發出 POST(prepare-application.mjs)。
  • 寄送郵件。 只寫草稿。整個程式碼庫裡沒有任何郵件寄送模組。
  • 回傳資料。 沒有遙測,沒有我們的後端。你的履歷只從你的機器送往你選擇的 AI 供應商,不去任何別的地方。唯一的公開紀錄就是這個儲存庫:HIRED.md 和它的 issue。
  • 催你申請低於 4.0/5 的職缺。 它會告訴你別申請。你可以不聽,它會明說。

它會改寫你的履歷,但絕不能捏造。程式碼裡有一道檢查:PDF 裡的數字或事實如果在你的履歷和 article-digest.md 裡都找不到,就會被擋下;但它還無法判斷每一處改寫。每份履歷送出前都請自己讀一遍。詳情見 FAQ。

功能特色

功能 說明
A-H 評估 職缺摘要、履歷比對(標註每條要求在這個職缺裡有多重要,以及權重來自職缺描述的措辭、結構還是估算,逐條標註;估算永遠不能進入最高一級)、職級策略、薪酬調查、個人化、面試準備(STAR+R),再加上區塊 G 的職缺可信度檢查(是否仍在徵人、是否為重複刊登:只陳述觀察,不下定論),以及一個工作許可訊號(把明確不提供簽證擔保的職缺描述標記為硬性阻礙)
Human-in-the-Loop AI 評估並推薦,你決定並行動。系統從不送出申請:最終決定權永遠在你手上
ATS PDF 產生 ATS 可讀的履歷,根據你自己的經歷、針對每份職缺描述客製,採用 Space Grotesk + DM Sans 設計
求職信產生器 基於調查的求職信:關鍵字呼應、四個互動式角度提問(為什麼/問題/方法/語氣)、在對話中審核草稿,以及透過與履歷相同的 HTML + Playwright 流程產生 A4 PDF。每次評估自動起草;用 /career-ops cover 依需求完成並產生
履歷之外 企業調查(deep)揭示 AI 策略、近期動向、工程文化,以及你的履歷應該採取的角度。聯絡人探索(contacto)找出值得聯絡的招募主管、招募人員或團隊成員,並草擬一則不超過 300 字元、針對聯絡人類型調整過的 LinkedIn 訊息。正式申請郵件草稿(email)把已評估的報告或貼上的職缺描述變成主旨、內文和附件清單,不寄送、不送出、不點擊任何內容。申請讓你排進隊伍,調查讓你獲得對話。
模式分析 拒信模式與各 ATS 管道的推進率(analyze-patterns.mjs)、整個求職週期的漏斗統計(stats.mjs)、重複刊登偵測,重複刊登可能是幽靈職缺的跡象(detect-reposts.mjs)
它還能做的所有事
功能 說明
自動流程 貼上一個 URL,獲得完整評估 + PDF + 追蹤紀錄
面試故事庫 跨評估累積 STAR+反思故事:5 到 10 個主故事,可以針對你遇到的行為面試問題靈活調整
談判話術 薪資談判框架、應對地域折價、以競爭 offer 作為籌碼
申請郵件草稿 從報告或貼上的職缺描述產生給招募人員、內推或主動應徵的正式郵件,包含主旨、附件清單、有憑有據的契合點,以及來自你個人資料的聯絡資訊區塊。僅限草稿:career-ops 從不寄送、送出或點擊任何內容。
求職平台掃描器 預先設定 100+ 家企業(Anthropic、OpenAI、ElevenLabs、Retool、n8n…)+ 跨 Ashby、Greenhouse、Lever、Wellfound 的自訂網頁搜尋查詢
已募資企業探索 以審閱為先的 company:funded 指令從結構化的公開資料來源列出近期獲得募資的企業與來源診斷,不更動你的資料
批次處理 用無頭 CLI worker(claude -p / opencode run)並行評估
Dashboard TUI 在終端機裡瀏覽、篩選和排序你的流程
流程完整性 自動合併、去重、狀態正規化、健康檢查
面試套件 按時間區塊安排的準備計畫、附回饋的練習、面試後檢討(interview/),以及企業警訊偵測器(interview-redflag)
Offer 階段 合約閱讀助手:逐條款解讀加上給律師的問題清單(offer-prep),以及期望/公告/實際薪資差距分析器(salary-gap.mjs)
跟進與回覆 跟進節奏計算器與預設提醒(followup-cadence.mjs、followup-seed.mjs);把雇主回覆歸類為追蹤紀錄更新(reply-watch)
外掛系統 可選整合(Gmail、Notion、Apify + 社群註冊表),預設關閉;見 docs/PLUGINS.md

快速開始

最快的方式,一道指令:

npx @santifer/career-ops init

💡 npx 隨 Node.js 一起提供:它只執行一次安裝程式, 不會全域安裝任何東西。還沒有 Node?先安裝它。 (已經在用 Claude Code / Codex CLI?那你已經有了。)

這會把最新版本複製到 ./career-ops 並安裝相依套件。然後:

cd career-ops
claude   # or codex / qwen / opencode / agy / grok — open your AI CLI here

首次啟動時,career-ops 會透過對話引導你完成設定(你的履歷、個人資料和目標職缺)。不需要手動編輯任何東西。

想手動設定?(git clone)
git clone https://github.com/career-ops-hq/career-ops.git
cd career-ops && npm install
npx playwright install chromium   # only needed for PDF generation
# On a non-Debian/Ubuntu Linux distro (Fedora, Arch, ...), Chromium's system
# libraries aren't installed by the line above — install them yourself with
# your distro's package manager if PDF generation fails to launch the browser
# (Playwright's own docs list the required libraries per platform).

# 2. Open your AI CLI in this directory. On first launch it walks you
#    through setup (your CV, profile and target roles) by chatting
claude   # or codex / opencode / qwen / agy / grok

# Then ask your CLI to adapt the system to you:
# "Change the archetypes to backend engineering roles"
# "Translate the modes to English"
# "Add these 5 companies to portals.yml"
# "Update my profile with this CV I'm pasting"

# 3. Start using
# Paste a job URL or JD text to trigger auto-pipeline
# If your CLI supports slash commands, use /career-ops (or its CLI-specific alias)
# In Codex, ask for the same mode in plain language, e.g.:
# "Run the career-ops scan mode"
# "Run the career-ops pipeline mode for data/pipeline.md"
# "Run the career-ops pdf mode for the latest evaluated role"
# "Run the career-ops tracker mode and summarize the current statuses"

全域安裝

npm i -g @santifer/career-ops

這會全域安裝 career-ops 執行檔,讓你不用 npx 就能執行 career-ops init [folder]。init 是它唯一的指令:它只負責建立工作區,之後的一切都在你的 AI 程式碼 CLI 裡進行(見下方「使用方式」),而不是透過這個執行檔。

該用哪一個?

  • npx @santifer/career-ops init:最適合首次使用;會建立一個專用的專案資料夾。
  • npm i -g @santifer/career-ops:如果你比較想輸入 career-ops init,而不是 npx 的寫法。它不會增加其他指令。

這個系統就是設計成由你的 AI 程式碼 CLI 自己來客製的。 模式、原型、評分權重、談判話術:直接請它改就行。它讀取的正是它自己使用的檔案,所以它清楚該改哪裡。

完整安裝指南見 docs/SETUP.md;用自訂或本機模型低成本執行 career-ops 的方法見 docs/RUNNING_ON_A_BUDGET.md(在 Antigravity CLI 免費方案零成本執行見 docs/FREE_TIER.md);排程定期掃描和零 token 的「初篩到短名單」作法見 docs/AUTOMATION.md;ATS 自動填表流程的細節見 docs/APPLY_AUTOFILL.md;把 LinkedIn 聯絡人匯出與漏斗中的企業交叉比對見 docs/LINKEDIN_JOIN.md;常見設定問題的解答見 docs/FAQ.md,包括故事溯源如何防止捏造數字。設計原則在 ARCHITECTURE.md;執行期流程在 docs/ARCHITECTURE.md。

使用方式

career-ops 使用共用的指令路由。在會註冊斜線指令的 CLI 裡,它看起來是這樣:

/career-ops           → 顯示所有可用指令
/career-ops {JD}      → 自動流程:評估 + 報告 + PDF + 追蹤紀錄(貼上文字或 URL)
/career-ops pipeline  → 處理收件匣裡待處理的 URL(data/pipeline.md)
/career-ops oferta    → 僅評估,區塊 A 到 H(不自動產生 PDF)
/career-ops ofertas   → 比較並排序多個職缺
/career-ops contacto  → LinkedIn 妙招:找到聯絡人 + 草擬訊息
/career-ops deep      → 針對企業的深度調查提示詞
/career-ops interview-prep → 產生針對特定企業的面試準備文件
/career-ops interview    → 互動式的個人資料/履歷入門訪談
/career-ops master-profile → 匯入、審閱並驗證你的主職涯檔案(Master Career Profile)
/career-ops eu-swe    → 在履歷/申請/面試前校準一份歐洲 SWE 申請
/career-ops interview/plan → 為即將到來的面試制定按時間區塊安排的準備計畫
/career-ops interview/practice → 模擬面試,一次一個問題並給出回饋
/career-ops interview/debrief → 面試後檢討:補上短板,預測下一輪
/career-ops interview-redflag → 入職前分析雇主的警訊
/career-ops pdf       → 僅產生 PDF,ATS 最佳化履歷
/career-ops text      → 客製的 markdown 履歷(鏡像 cv.md,不產生 PDF)
/career-ops latex     → 把履歷匯出為 LaTeX/Overleaf .tex
/career-ops latex-tex → 就地客製你自己的 resume.tex(選用;cv.md 仍是預設)
/career-ops cover     → 求職信:單獨貼上職缺描述,或 /career-ops cover {slug}
/career-ops email     → 正式申請郵件草稿(僅草稿;從不寄送、送出或點擊)
/career-ops add       → 向履歷新增專案/論文/職位(擷取 + 預覽 + 確認)
/career-ops expand    → 從個人資料連結自動探索並補充缺少的能力
/career-ops training  → 對照你的 North Star 評估課程/證照
/career-ops project   → 評估一個作品集專案點子
/career-ops tracker   → 申請狀態總覽
/career-ops agent-inbox → 為下一個工作階段排入/清空請求(data/agent-inbox.md)
/career-ops apply     → 即時申請助手(讀取表單 + 產生答案)
/career-ops scan      → 掃描求職平台並發現新職缺
/career-ops discover  → 把企業清單解析為可掃描的 ATS 看板 + 附加到 portals.yml(零 token)
/career-ops batch     → 用並行 worker 批次處理
/career-ops patterns  → 分析拒信模式並改善目標設定
/career-ops offer-prep → 和候選人一起閱讀收到的 offer/合約:逐條款解讀 + 給律師的問題(不是法律建議)
/career-ops titles    → 根據你的履歷推薦相近的職稱以擴大搜尋範圍
/career-ops upskill   → 基於已評估報告的綜合技能落差分析
/career-ops followup  → 跟進節奏追蹤:標記逾期,產生草稿
/career-ops reply-watch → 歸類雇主回覆並建議追蹤紀錄更新
/career-ops outcome   → 記錄申請結果並歸檔產出物
/career-ops calibrate → 諮詢性報告:你的評估分數能預測真實結果嗎?讀取 /outcome 資料;從不改變評分
/career-ops update    → 更新 career-ops 系統檔案,附 diff 預覽 + 相容性檢查

或者直接貼上一個職缺 URL 或描述:career-ops 會自動辨識並執行完整流程。

Codex 裡不保證有斜線指令。請改用同樣的模式名稱寫在提示詞裡,或透過 codex exec 呼叫。

運作原理

How it works: you paste a job URL or description. Archetype Detection classifies it as LLMOps, Agentic, PM, SA, FDE or Transformation. The A-H Evaluation reads cv.md and covers match, gaps, comp research, STAR stories and legitimacy. It produces a report (reports/*.md), a PDF (output/*.pdf) and a tracker entry (data/applications.md).

Antigravity CLI 整合

career-ops 原生支援 Antigravity CLI,方式和支援 Claude Code、OpenCode 一樣。所有斜線指令都透過共用的 skill 進入點提供,使用相同的 modes/*.md 評估邏輯。

Google 已把消費者版 Gemini CLI 的存取遷移到 Antigravity CLI。GEMINI.md 現在是一個不做任何事的相容性守衛,這樣 Antigravity 在同時讀取 AGENTS.md 和 GEMINI.md 時不會重複載入完整的專案指令。

原生 Antigravity CLI

# 1. Run in the career-ops directory
cd career-ops
agy

# 2. Use the unified /career-ops command with subcommands:
/career-ops "Senior AI Engineer at Anthropic..."
/career-ops pipeline
/career-ops scan
/career-ops pdf
/career-ops tracker

這個 skill 按開放標準定義在 .agents/skills/career-ops/SKILL.md 中,並為每個支援的 CLI(例如 .claude/、.qwen/、.antigravitycli/、.grok/)建立了符號連結或引用。 Cursor 會自動探索 .agents/skills/ 中的共用 skill。

Codex 整合

career-ops 透過同一個共用路由支援 Codex,但呼叫方式和自動註冊斜線指令的 CLI 不同。完整指南見 docs/CODEX.md。

互動式 Codex

cd career-ops
codex

Codex 裡不保證有斜線指令。如果 /career-ops 不可用,就用自然語言請 Codex 直接執行對應模式:

Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123
Run the career-ops scan mode and summarize new matches.
Run the career-ops pipeline mode for data/pipeline.md.
Run the career-ops pdf mode for the latest evaluated role.
Run the career-ops tracker mode and summarize the current statuses.

單次執行的 Codex(codex exec)

codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"
codex exec "Run career-ops scan mode in this repo and summarize new matches."
codex exec "Run career-ops pipeline mode for data/pipeline.md."
codex exec "Run career-ops pdf mode for the latest evaluated role."
codex exec "Run career-ops tracker mode and summarize the current statuses."

Grok Build CLI 整合

career-ops 原生支援 Grok Build CLI,方式和支援 Claude Code、OpenCode 一樣。AGENTS.md 會作為專案規則自動載入,所有斜線指令都透過共用的 skill 進入點提供。

原生 Grok Build CLI

# 1. Run in the career-ops directory
cd career-ops
grok

# 2. Use the unified /career-ops command with subcommands:
/career-ops "Senior AI Engineer at Anthropic..."
/career-ops pipeline
/career-ops scan
/career-ops pdf
/career-ops tracker

無頭批次 worker 請使用 grok -p "prompt"(加上 --yolo 可自動核准工具執行)。

Pi 整合

career-ops 原生支援 Pi,不需要維護任何包裝檔案:Pi 會把儲存庫根目錄的 AGENTS.md 讀作專案脈絡,並自行找到位於 .agents/skills/career-ops/SKILL.md 的共用 skill。之後路由就能以 /skill:career-ops 的形式使用。

原生 Pi

# 1. Run in the career-ops directory
cd career-ops
pi

# 2. Use the shared skill with subcommands:
/skill:career-ops "Senior AI Engineer at Anthropic..."
/skill:career-ops pipeline
/skill:career-ops scan
/skill:career-ops pdf
/skill:career-ops tracker

單次執行的 Pi(pi -p)

pi -p "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"
pi -p "Run career-ops scan mode and summarize new matches."
pi -p "Run career-ops tracker mode and summarize the current statuses."

如果某個 Pi 版本要求先對專案資源做信任確認,就在儲存庫裡執行一次 /trust,然後重新啟動 pi,讓專案 skill 載入(/trust 對之後啟動的 Pi 程序生效);或者用 -a 啟動,它只信任單次執行,不需要重新啟動。

獨立的 Gemini API 腳本(無需安裝 CLI)

# 1. Get a free API key at https://aistudio.google.com/apikey
cp .env.example .env
# Edit .env, set GEMINI_API_KEY=your_key_here

# 2. Install dependencies
npm install

# 3. Evaluate a job description
node gemini-eval.mjs "We are looking for a Senior AI Engineer..."
node gemini-eval.mjs --file ./jds/my-job.txt
node agent-inbox.mjs add "..."   # queue a request for the next session
npm run gemini:eval -- "JD text here"

免費方案: 兩種方式都無需付費。原生 CLI 使用 Google OAuth;API 腳本使用 gemini-3.6-flash(速率限制取決於模型和方案;目前配額見 Google AI 文件)。

預設掃描平台

掃描器內建 100+ 家企業可直接掃描,以及涵蓋主流求職網站的 35+ 條搜尋查詢。把 templates/portals.example.yml 複製為 portals.yml,再加入你自己的:

AI 實驗室: Anthropic、OpenAI、Mistral、Cohere、LangChain、Pinecone 語音 AI: ElevenLabs、PolyAI、Parloa、Hume AI、Deepgram、Vapi、Bland AI AI 平台: Retool、Airtable、Vercel、Temporal、Glean、Arize AI 客服中心: Ada、LivePerson、Sierra、Decagon、Talkdesk、Genesys 企業級: Salesforce、Twilio、Gong、Dialpad LLMOps: Langfuse、Weights & Biases、Lindy、Cognigy、Speechmatics 自動化: n8n、Zapier、Make.com 歐洲: Factorial、Attio、Tinybird、Clarity AI、Travelperk

搜尋的求職網站: 55+ 個供應商模組涵蓋 ATS API、整站資料來源、XML/RSS 來源、markdown 來源和本機解析器。完整表格見支援的求職網站。

預設情況下 node scan.mjs(即 npm run scan)信任每個 ATS 資料來源回傳的內容。有些企業在職缺關閉後仍會把過期職缺留在公開 API 裡,這些過期項目可能會混進 pipeline.md。加上 --verify 可以在 API 階段之後啟動 Playwright,在過期職缺進入流程之前把它們剔除:

node scan.mjs --verify          # zero-token discovery + Playwright liveness check

驗證是循序執行的,而且只針對新職缺(去重之後),所以成本是有上限的。

儀表板 TUI

內建的終端機儀表板讓你以視覺化方式瀏覽你的流程:

npm run serve:dashboard   # launch the TUI
npm run build:dashboard   # optional: build the standalone binary

功能:10 個篩選分頁、8 種排序模式、分組/平鋪檢視、延遲載入預覽、行內狀態修改。

還有一個實驗性的 Web UI(alpha 版,選用:除非你主動啟動,否則不會執行任何東西):見 web/README.md。

專案結構

career-ops/
├── AGENTS.md                    # Canonical agent instructions (all CLIs)
├── CLAUDE.md                    # Claude Code wrapper (imports AGENTS.md)
├── CODEX.md                     # Codex wrapper (imports AGENTS.md)
├── OPENCODE.md                  # OpenCode wrapper (imports AGENTS.md)
├── GEMINI.md                    # Legacy no-op guard to avoid Antigravity duplicate context
├── cv.md                        # Your CV (create this)
├── article-digest.md            # Your proof points (optional)
├── config/
│   └── profile.example.yml      # Template for your profile
├── modes/                       # Skill modes
│   ├── _shared.md               # Shared context (customize this)
│   ├── oferta.md                # Single evaluation
│   ├── pdf.md                   # PDF generation
│   ├── cover.md                 # Cover letter generation
│   ├── email.md                 # Formal application email drafts
│   ├── scan.md                  # Portal scanner
│   ├── batch.md                 # Batch processing
│   └── ...
├── templates/
│   ├── cv-template.html         # ATS-optimized CV template
│   ├── portals.example.yml      # Scanner config template
│   └── states.yml               # Canonical statuses
├── batch/
│   ├── batch-prompt.md          # Self-contained worker prompt
│   └── batch-runner.sh          # Orchestrator script
├── dashboard/                   # Go TUI pipeline viewer
├── data/                        # Your tracking data (gitignored)
├── reports/                     # Evaluation reports (gitignored)
├── output/                      # Generated PDFs (gitignored)
├── fonts/                       # Space Grotesk + DM Sans
├── docs/                        # Setup, customization, budget guide, architecture
└── examples/                    # Sample CV, report, proof points

外部資料目錄(選用)

預設情況下,使用者層資料(如 cv.md、portals.yml,以及 data/、reports/、output/ 資料夾)位於專案根目錄內。

為了把個人資料和程式碼分開(更方便切換分支、拉取更新或測試多個個人資料),你可以按以下優先順序設定一個外部資料目錄:

  1. 環境變數: 設定 CAREER_OPS_ROOT 或 CAREER_OPS_DATA_DIR 環境變數:
    export CAREER_OPS_ROOT=~/my-career-data
  2. 標記檔案: 在儲存庫根目錄建立一個 .career-ops-data 檔案,內容是你的資料目錄路徑。
  3. 預設: 使用儲存庫根目錄。

解析完成後,所有使用者檔案都相對於該資料夾解析和寫入,而提示詞檔案和腳本仍然相對於儲存庫解析。

  • 覆寫追蹤檔: 你也可以設定 CAREER_OPS_TRACKER 直接覆寫申請追蹤檔的路徑。
  • 寫入: 所有寫入操作(如合併)都以 {DATA_ROOT}/data/applications.md 為標準目標。
  • 掃描器設定: portals.yml 在 {DATA_ROOT}/portals.yml 讀取和驗證,所以 node validate-portals.mjs 檢查的正是 scan.mjs 讀取的那個檔案。
  • 產生的文件: 客製履歷和求職信寫入 {DATA_ROOT}/output/,把它們連結到報告的 PDF 清單位於 {DATA_ROOT}/data/pdf-index.tsv。在未設定 CAREER_OPS_TRACKER 時,限定這些寫入範圍的追蹤工作區是資料根目錄,而不是程式碼的 checkout。
  • 追蹤檔覆寫下的 PDF: generate-pdf.mjs 會先解析 CAREER_OPS_TRACKER,再推導工作區,所以設定了覆寫時,工作區就是存放該追蹤檔的資料夾(如果追蹤檔位於 data/ 資料夾中,則是它的上一層資料夾)。這時履歷的 HTML 和每個 PDF 都必須位於該工作區內,清單也會移到它的 data/pdf-index.tsv。求職信仍以 {DATA_ROOT}/output/ 為目標,所以當該資料夾不在追蹤檔的工作區內時,求職信會被拒絕寫入。
  • 程式碼層維持不動: node_modules/、providers/、modes/ 以及腳本本身一律相對於儲存庫解析,從不相對於資料根目錄。

Go 版儀表板 TUI、Node.js 腳本和 AI 代理模式都會自動遵循這個解析層級。

技術堆疊

Claude Code Node.js Playwright Go Bubble Tea

  • 代理:具備共用 skill 和模式的 AI 程式碼 CLI(AGENTS.md + 各 CLI 的包裝)
  • PDF:Playwright + HTML 範本
  • 求職信:HTML 範本 + Playwright(A4 PDF,與履歷相同的流程)
  • 掃描器:Playwright + Greenhouse API + WebSearch
  • 儀表板:Go + Bubble Tea + Lipgloss(Catppuccin Mocha 主題)
  • 資料:Markdown 表格 + YAML 設定 + TSV 批次檔案

Latest release

Built with Claude Code

也可以在任何遵循 agent skill 標準的 CLI 中執行。見支援的 CLI。
Claude Code OpenCode Antigravity CLI Codex Qwen Kimi GitHub Copilot Grok Build CLI Pi
Node.js Go Playwright Bubble Tea MIT Trademark Policy

同樣開源

  • cv-santiago:作品集網站(santifer.io),附 AI 聊天機器人、LLMOps 儀表板和案例研究。如果你需要一個配合求職展示的作品集,fork 它,改成你自己的。

常見問題(FAQ)

career-ops 是什麼? career-ops(career-ops.org,也稱 careerops) 是一個開源的 AI 求職工具,在你的 AI 程式碼 CLI(Claude Code、Codex、OpenCode 等)裡於本機執行,把每一個決定都留給你。它依你的履歷評估職缺、產生適配 ATS 的 PDF、找出該聯絡的對象,並在一個地方追蹤所有進度:最終決定權永遠在你手上。它是 CareerOps 宣言的第一個參考實作。

客製化履歷會捏造內容嗎? 不應該,提示詞裡也這麼寫:只改寫,絕不捏造。generate-pdf 會擋下數字或事實在你的資料來源中找不到的履歷,除非你傳入 --skip-fact-check。pdf 模式還會執行 cv-title-check.mjs:它依公司和日期,把客製化履歷中的每個職稱與 cv.md 中同一份工作的職稱比對,有不同就請你決定保留還是改回。它只提醒、不阻擋,因為調整職稱的寫法有時是你自己的選擇。目前還沒有任何檢查評判改寫:#1411(不通過即阻止的真實性檢查)在追蹤這一點。在此之前,每份履歷送出前都請自己讀一遍。法律聲明 用更長的篇幅說了同樣的話。

我可以免費執行 career-ops,或改用較便宜/本機的模型嗎? 可以。career-ops 不綁定特定 CLI,也能跑在免費與本機模型上(OpenRouter 的免費模型、Ollama,或任何相容 OpenAI 的端點),所以你不必被付費訂閱綁住。完整設定見 docs/RUNNING_ON_A_BUDGET.md。

我已經付費訂閱 Claude Pro/Max,為什麼 career-ops 還在燒 API 額度? 因為環境變數中的 ANTHROPIC_API_KEY 優先於你已登入的訂閱:CLI 會改用這把金鑰,並按 token 計費。執行 echo $ANTHROPIC_API_KEY,若有印出任何內容,就把它從 shell 設定檔移除、重開終端機並執行 /login。批次模式是例外,因為 claude -p 的 worker 不會使用互動式登入:執行一次 claude setup-token,把結果匯出為 CLAUDE_CODE_OAUTH_TOKEN。完整步驟見 docs/RUNNING_ON_A_BUDGET.md。

career-ops 支援哪些 AI CLI? career-ops 透過開放的 Agent Skill Standard 跑在各主流 AI 程式碼 CLI 上(Claude Code、Codex、Gemini / Antigravity、OpenCode、Grok、Qwen 等),因此不會被單一廠商綁死。你手上已經有的 CLI 就能直接用。

要怎麼在 Windows 上安裝 career-ops? career-ops 可以在 Windows 上執行。平台相關的設定和已知的坑(Git Bash 偵測、行尾符號、工作排程器)在 docs/WINDOWS.md。如果安裝過程中技能因 symlink 錯誤而載入失敗,解法在 docs/FAQ.md。完整步驟見 docs/SETUP.md。

career-ops 會自動幫我投遞職缺嗎? 不會。career-ops 是篩選器,不是亂槍打鳥的自動投遞工具。AI 負責評估、排序與草擬;審閱與決定由你來做。它會草擬、填寫,但從不送出。由你按下送出。這種保留人工把關的設計,正是整套系統的重點。

career-ops 是免費且開源的嗎? 是。career-ops 免費且開源,而且對求職者而言永遠都會是。它是 CareerOps 宣言的第一個參考實作。讀一讀,如果它說中了你的想法,就簽署它。

關於作者

我是 Santiago Fernández de Valderrama Aparicio(santifer),曾經是創業者:我創辦並賣掉了一家至今仍以我的名字營運的公司。我打造 career-ops 是為了管理自己的求職,它奏效了:它幫我拿到了一個 Head of Applied AI 的職位。六個月後,我離開了那個職位,全職投入 career-ops 的開發。

想知道這麼大的儲存庫,是怎麼由一支 AI 代理團隊維護、每次合併都由人來決定的?讀一讀 Agentic maintenance: how career-ops is run by a fleet of AI agents。

我的作品集和其他開源專案 → santifer.io

Wikidata:Santiago Fernández de Valderrama Aparicio · career-ops。

免責聲明

career-ops 是一個在本機執行的開源工具,不是託管服務。 使用本軟體即表示你確認:

  1. 你掌控自己的資料。 你的履歷、聯絡方式和個人資料留在你的機器上,直接傳送給你選擇的 AI 供應商(Anthropic、OpenAI 等)。我們不收集、不儲存、也無法存取你的任何資料。
  2. 你掌控 AI。 預設提示詞指示 AI 不要自動送出申請,但 AI 模型可能出現無法預測的行為。如果你修改了提示詞或使用其他模型,風險自負。送出前務必檢查 AI 產生內容的正確性。
  3. 你遵守第三方條款。 你必須按照所互動求職平台(Greenhouse、Lever、Workday、LinkedIn 等)的服務條款使用本工具。不要用本工具向雇主發送垃圾訊息或衝擊 ATS 系統。
  4. 不作任何保證。 評估是建議,不是事實。AI 模型可能虛構技能或經歷。作者不對就業結果、被拒的申請、帳號限制或任何其他後果負責。

完整內容見 LEGAL_DISCLAIMER.md。本軟體依據 MIT 授權「按原樣」提供,不附帶任何形式的保證。

貢獻者

每一位貢獻過程式碼、文件、翻譯或測試的人都列在 CONTRIBUTORS.md 裡,包括上面的圖表無法呈現的 非程式碼貢獻。

用 career-ops 找到工作了?分享你的故事!

授權條款與商標

程式碼以 MIT 授權發布。「career-ops」的名稱和 品牌受商標政策約束:對社群使用寬鬆, 對商業產品命名和背書保留權利。

Star 歷史

Live star telemetry of career-ops-hq/career-ops

由 Santiago Fernández de Valderrama Aparicio(@santifer)建立並維護

聯絡我

Website LinkedIn X Discord Email