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

## 輪到你了 把你今晚本來打算投的一個職缺貼進來。如果回傳的是不要投,你剛剛把這個晚上贏回來了。如果回傳的是一份計畫,你就知道下一步該做什麼。 ```bash npx @santifer/career-ops init ```

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

## 你不必一個人找工作 按下送出之後的沉默,與你無關。看到同一件事的人夠多,於是把這套實踐寫了下來,只有六行: > 投得更少,投得更好。訊號勝過數量。證據勝過關鍵字。由人來決定。本機優先。桌子兩邊都有尊嚴。

CareerOps 宣言:即時簽署人數

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

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

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


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

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

[修復就是在這裡寫出來的](CONTRIBUTING.md)。是房間,不是俱樂部。**一起來建。**

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](#常見問題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`](modes/deep.md))揭示 AI 策略、近期動向、工程文化,以及你的履歷應該採取的角度。聯絡人探索([`contacto`](modes/contacto.md))找出值得聯絡的招募主管、招募人員或團隊成員,並草擬一則不超過 300 字元、針對聯絡人類型調整過的 LinkedIn 訊息。正式申請郵件草稿([`email`](modes/email.md))把已評估的報告或貼上的職缺描述變成主旨、內文和附件清單,不寄送、不送出、不點擊任何內容。申請讓你排進隊伍,調查讓你獲得對話。 | | **模式分析** | 拒信模式與各 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/`](modes/interview/README.md)),以及企業警訊偵測器([`interview-redflag`](modes/interview-redflag.md)) | | **Offer 階段** | 合約閱讀助手:逐條款解讀加上給律師的問題清單([`offer-prep`](modes/offer-prep.md)),以及期望/公告/實際薪資差距分析器(`salary-gap.mjs`) | | **跟進與回覆** | 跟進節奏計算器與預設提醒(`followup-cadence.mjs`、`followup-seed.mjs`);把雇主回覆歸類為追蹤紀錄更新([`reply-watch`](modes/reply-watch.md)) | | **外掛系統** | 可選整合(Gmail、Notion、Apify + 社群註冊表),預設關閉;見 [docs/PLUGINS.md](docs/PLUGINS.md) |
## 運作原理

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), the tailored CV in the format set by cv.output_format — a PDF by default — and a tracker entry (data/applications.md).

## 快速開始 **最快的方式,一道指令:** ```bash npx @santifer/career-ops init ``` > 💡 `npx` 隨 [Node.js](https://nodejs.org) 一起提供:它只執行一次安裝程式, > 不會全域安裝任何東西。還沒有 Node?先安裝它。 > (已經在用 Claude Code / Codex CLI?那你已經有了。) 這會把最新版本複製到 `./career-ops` 並安裝相依套件。然後: ```bash cd career-ops claude # or codex / qwen / opencode / agy / grok — open your AI CLI here ``` **首次啟動時,career-ops 會透過對話引導你完成設定(你的履歷、個人資料和目標職缺)。不需要手動編輯任何東西。**
想手動設定?(git clone) ```bash 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 # 貼上職缺連結或職缺描述文字,即可觸發 auto-pipeline。 # 其他所有模式,以及如何在你的 CLI 中呼叫它們:見下方「使用方式」。 ```
### 全域安裝 ```bash 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` 的寫法。它不會增加其他指令。 ### 其他執行方式 - **在任何資料夾中,作為 Claude Code 外掛:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md)。 - **不使用 AI CLI:** 獨立的 Gemini、Ollama 和 OpenAI 相容腳本可以單獨評估一份職缺描述。請見 [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval)。 > **這個系統就是設計成由你的 AI 程式碼 CLI 自己來客製的。** 模式、原型、評分權重、談判話術:直接請它改就行。它讀取的正是它自己使用的檔案,所以它清楚該改哪裡。 完整安裝指南見 [docs/SETUP.md](docs/SETUP.md);用自訂或本機模型低成本執行 career-ops 的方法見 [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md)(在 Antigravity CLI 免費方案零成本執行見 [docs/FREE_TIER.md](docs/FREE_TIER.md));排程定期掃描和零 token 的「初篩到短名單」作法見 [docs/AUTOMATION.md](docs/AUTOMATION.md);ATS 自動填表流程的細節見 [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md);把 LinkedIn 聯絡人匯出與漏斗中的企業交叉比對見 [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md);常見設定問題的解答見 [docs/FAQ.md](docs/FAQ.md),包括[故事溯源如何防止捏造數字](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank)。設計原則在 [ARCHITECTURE.md](ARCHITECTURE.md);執行期流程在 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。 ## 使用方式 把職缺連結或職缺描述貼到你的 AI CLI 中。career-ops 會檢查附有連結的職缺是否仍在徵才(貼上的文字沒有可檢查的連結),對照你的履歷評分,撰寫報告,客製化你的履歷(預設為 PDF),並在你的追蹤表中新增一列。大多數日子這樣就夠了。其餘一切都是依名稱呼叫的模式。如果無法讀取某則職缺,流程會停下並請你貼上文字。 ### 如何呼叫模式 | CLI | 如何呼叫 `scan` | | --- | --- | | Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` | | Pi | `/skill:career-ops scan` | | Codex、Qwen、Cursor 或任何其他受支援的 CLI | 自然語言:「Run the career-ops scan mode」 | 單獨輸入 `/career-ops` 會顯示命令選單(在使用它的 CLI 中)。自然語言在所有受支援的 CLI 中都能用。作為 Claude Code 外掛使用時,指令是 `/career-ops:career-ops`。 它們共用同一個路由器 `.agents/skills/career-ops/SKILL.md` 和同一批 `modes/*.md` 檔案,所以每個 CLI 都以相同方式路由請求(大量使用瀏覽器的模式還需要 Playwright 工具)。Codex 不保證支援斜線命令:請用自然語言提出要求,或用 `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` 以無頭方式執行一則提示詞([docs/CODEX.md](docs/CODEX.md))。如何在每個受支援的 CLI 中執行、具備無頭命令的 CLI 所對應的命令,以及 各 CLI 的設定說明,都在 [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md) 中。 ### 日常命令 | 命令 | 作用 | | --- | --- | | *貼上連結或職缺描述* | 完整流程:職缺是否仍在徵才的檢查(僅限連結)、A-G 評估(高分時另加 H)、報告、客製化履歷(預設 PDF)、追蹤表新增一列 | | `scan` | 掃描你的求職平台以發現新職缺,並加入收件匣(`data/pipeline.md`) | | `pipeline` | 處理收件匣中等待的連結(standard 與 premium 層級可能略過明顯不合的) | | `apply` | 與你一起逐欄填寫申請表。送出前會停下 | | `tracker` | 每份申請目前的進度 | | `followup` | 哪些申請該跟進了,並附草稿 |
所有命令,依求職階段分類 `oferta`、`ofertas` 和 `contacto` 保留原本的西班牙語名稱,意思分別是:offer、多個 offer、聯絡人。 **尋找職缺** | 命令 | 作用 | | --- | --- | | [`scan`](modes/scan.md) | 掃描求職平台並發現新職缺 | | [`discover`](modes/discover.md) | 把公司名稱清單解析為可掃描的 ATS 招募頁。預設只預覽,僅在加上 `--write` 時才附加到 `portals.yml`(零 token) | | [`pipeline`](modes/pipeline.md) | 處理收件匣(`data/pipeline.md`)裡待處理的連結 | | [`triage`](modes/triage.md) | 在完整評估之前,依據 `modes/_brief.md` 快速做一輪是否值得投的初篩(不寫入任何檔案) | | [`batch`](modes/batch.md) | 用無頭 worker 評估大量職缺(Claude 下並行,其他 CLI 下逐一處理) | | [`titles`](modes/titles.md) | 根據你的履歷推薦相近的職稱,以擴大搜尋範圍 | **評估職缺** | 命令 | 作用 | | --- | --- | | *貼上連結或職缺描述* | [Auto-pipeline](modes/auto-pipeline.md):評估 + 報告 + 客製化履歷(預設 PDF) + 追蹤表項目 | | [`oferta`](modes/oferta.md) | 僅評估,區塊 A 到 G,高分時另加 H(不產生 PDF) | | [`ofertas`](modes/ofertas.md) | 比較並排序多個職缺 | | [`deep`](modes/deep.md) | 針對企業的深度調查提示詞 | | [`eu-swe`](modes/regional/eu-swe.md) | 在準備履歷、申請或面試之前,校準一份歐洲軟體工程職缺的申請 | **申請** | 命令 | 作用 | | --- | --- | | [`pdf`](modes/pdf.md) | ATS 最佳化履歷,輸出為 PDF | | [`ats`](modes/ats.md) | 檢查產生的履歷對 ATS 是否友善:評分及可修正的問題 | | [`text`](modes/text.md) | 客製化的 markdown 履歷(與 `cv.md` 一致,不產生 PDF) | | [`latex`](modes/latex.md) | 把履歷匯出為 LaTeX/Overleaf 的 `.tex` | | [`latex-tex`](modes/latex-tex.md) | 就地客製化你自己的 `resume.tex`(需主動啟用;預設仍是 `cv.md`) | | [`cover`](modes/cover.md) | 求職信,根據貼上的職缺描述或已評估的報告(`cover {slug}`) | | [`email`](modes/email.md) | 正式的求職郵件草稿。僅限草稿:絕不寄出、提交或點擊 | | [`contacto`](modes/contacto.md) | 找到用人主管、招募人員或同業,並草擬一則 LinkedIn 訊息 | | [`apply`](modes/apply.md) | 即時申請助手(使用此儲存庫中的 Playwright)。不會送出 | **面試** | 命令 | 作用 | | --- | --- | | [`interview-prep`](modes/interview-prep.md) | 針對特定公司的面試準備文件 | | [`interview/plan`](modes/interview/plan.md) | 為即將到來的面試擬定依時段劃分的準備計畫 | | [`interview/practice`](modes/interview/practice.md) | 模擬面試,一次一個問題,並給予回饋 | | [`interview/debrief`](modes/interview/debrief.md) | 面試後檢討:補足不足之處,預測下一輪 | | [`interview-redflag`](modes/interview-redflag.md) | 到職前分析雇主的警訊 | **申請之後** | 命令 | 作用 | | --- | --- | | [`tracker`](modes/tracker.md) | 申請狀態總覽 | | [`followup`](modes/followup.md) | 跟進節奏:標記逾期的申請,產生草稿 | | [`reply-watch`](modes/reply-watch.md) | 將雇主的回覆分類,並建議更新追蹤表 | | [`outcome`](modes/outcome.md) | 記錄申請結果並封存相關產出 | | [`offer-prep`](modes/offer-prep.md) | 與你一起閱讀收到的 offer 或合約:逐條梳理條款,並列出要問律師的問題(不構成法律建議) | **你的個人資料與履歷** | 命令 | 作用 | | --- | --- | | [`interview`](modes/interview.md) | 資料設定:圍繞你的經歷進行互動式訪談,據此建立履歷與個人資料(不是面試練習) | | [`intake`](modes/intake.md) | 根據 `documents/` 中的檔案(主履歷、LinkedIn 匯出)建立或充實你的個人資料。未經你確認不會寫入任何內容 | | [`master-profile`](modes/master-profile.md) | 匯入、審閱並驗證你的 Master Career Profile,並把選定的事實準備成履歷重點 | | [`add`](modes/add.md) | 向履歷新增專案、論文或職位(擷取、預覽、確認) | | [`expand`](modes/expand.md) | 根據你的個人資料連結,發現履歷中缺少的能力 | | [`retro`](modes/retro.md) | 回顧本次工作階段,把你教給它的內容保存為規則(只寫入你接受的) | **優化你的投遞方向** | 命令 | 作用 | | --- | --- | | [`patterns`](modes/patterns.md) | 分析被拒模式並優化投遞方向 | | [`calibrate`](modes/calibrate.md) | 檢查你的評估分數能否預測真實結果。僅供參考:絕不更動評分 | | [`upskill`](modes/upskill.md) | 根據你已評估的所有報告做技能落差分析 | | [`training`](modes/training.md) | 對照你的 North Star 評估課程或證照 | | [`project`](modes/project.md) | 評估作品集專案的想法 | **系統** | 命令 | 作用 | | --- | --- | | [`agent-inbox`](modes/agent-inbox.md) | 把請求排入下一次工作階段的佇列,並在那時處理(`data/agent-inbox.md`)。`inbox` 同樣可用 | | [`update`](modes/update.md) | 更新 career-ops 系統檔案,附帶 diff 預覽與相容性檢查 |
## 預設掃描平台 掃描器內建 **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 來源和本機解析器。完整表格見[支援的求職網站](docs/SUPPORTED_JOB_BOARDS.md)。 預設情況下 `node scan.mjs`(即 `npm run scan`)信任每個 ATS 資料來源回傳的內容。有些企業在職缺關閉後仍會把過期職缺留在公開 API 裡,這些過期項目可能會混進 `pipeline.md`。加上 `--verify` 可以在 API 階段之後啟動 Playwright,在過期職缺進入流程之前把它們剔除: ```bash node scan.mjs --verify # zero-token discovery + Playwright liveness check ``` 驗證是循序執行的,而且只針對新職缺(去重之後),所以成本是有上限的。 ## 儀表板 TUI 內建的終端機儀表板讓你以視覺化方式瀏覽你的流程: ```bash npm run serve:dashboard # launch the TUI npm run build:dashboard # optional: build the standalone binary ``` 功能:10 個篩選分頁、8 種排序模式、分組/平鋪檢視、延遲載入預覽、行內狀態修改。 還有一個**實驗性的 Web UI**(alpha 版,選用:除非你主動啟動,否則不會執行任何東西):見 [`web/README.md`](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` 環境變數: ```bash 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](https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white) ![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white) ![Playwright](https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white) ![Go](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white) ![Bubble Tea](https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white) - **代理**:具備共用 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](https://github.com/santifer/cv-santiago)**:作品集網站(santifer.io),附 AI 聊天機器人、LLMOps 儀表板和案例研究。如果你需要一個配合求職展示的作品集,fork 它,改成你自己的。 ## 常見問題(FAQ) **career-ops 是什麼?** career-ops([career-ops.org](https://career-ops.org),也稱 **careerops**) 是一個開源的 AI 求職工具,在你的 AI 程式碼 CLI(Claude Code、Codex、OpenCode 等)裡於本機執行,把每一個決定都留給你。它依你的履歷評估職缺、產生適配 ATS 的 PDF、找出該聯絡的對象,並在一個地方追蹤所有進度:最終決定權永遠在你手上。它是 [CareerOps 宣言](https://career-ops.org/manifesto)的第一個參考實作。 **客製化履歷會捏造內容嗎?** 不應該,提示詞裡也這麼寫:只改寫,絕不捏造。`generate-pdf` 會擋下數字或事實在你的資料來源中找不到的履歷,除非你傳入 `--skip-fact-check`。`pdf` 模式還會執行 `cv-title-check.mjs`:它依公司和日期,把客製化履歷中的每個職稱與 cv.md 中同一份工作的職稱比對,有不同就請你決定保留還是改回。它只提醒、不阻擋,因為調整職稱的寫法有時是你自己的選擇。目前還沒有任何檢查評判改寫:[#1411](https://github.com/career-ops-hq/career-ops/issues/1411)(不通過即阻止的真實性檢查)在追蹤這一點。在此之前,每份履歷送出前都請自己讀一遍。[法律聲明](LEGAL_DISCLAIMER.md) 用更長的篇幅說了同樣的話。 **我可以免費執行 career-ops,或改用較便宜/本機的模型嗎?** 可以。career-ops 不綁定特定 CLI,也能跑在免費與本機模型上(OpenRouter 的免費模型、Ollama,或任何相容 OpenAI 的端點),所以你不必被付費訂閱綁住。完整設定見 [docs/RUNNING_ON_A_BUDGET.md](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](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it)。 **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](docs/WINDOWS.md)。如果安裝過程中技能因 symlink 錯誤而載入失敗,解法在 [docs/FAQ.md](docs/FAQ.md)。完整步驟見 [docs/SETUP.md](docs/SETUP.md)。 **career-ops 會自動幫我投遞職缺嗎?** 不會。career-ops 是篩選器,不是亂槍打鳥的自動投遞工具。AI 負責評估、排序與草擬;審閱與決定由你來做。它會草擬、填寫,但從不送出。由你按下送出。這種保留人工把關的設計,正是整套系統的重點。 **career-ops 是免費且開源的嗎?** 是。career-ops 免費且開源,而且對求職者而言永遠都會是。它是 [CareerOps 宣言](https://career-ops.org/manifesto)的第一個參考實作。讀一讀,如果它說中了你的想法,就簽署它。 ## 關於作者 我是 [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about)(santifer),曾經是創業者:我創辦並賣掉了一家至今仍以我的名字營運的公司。我打造 career-ops 是為了管理自己的求職,它奏效了:它幫我拿到了一個 Head of Applied AI 的職位。六個月後,我離開了那個職位,全職投入 career-ops 的開發。 想知道這麼大的儲存庫,是怎麼由一支 AI 代理團隊維護、每次合併都由人來決定的?讀一讀 [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet)。 我的作品集和其他開源專案 → [santifer.io](https://santifer.io) Wikidata:[Santiago Fernández de Valderrama Aparicio](https://www.wikidata.org/wiki/Q138710224) · [career-ops](https://www.wikidata.org/wiki/Q139007988)。 ## 免責聲明 **career-ops 是一個在本機執行的開源工具,不是託管服務。** 使用本軟體即表示你確認: 1. **你掌控自己的資料。** 你的履歷、聯絡方式和個人資料留在你的機器上,直接傳送給你選擇的 AI 供應商(Anthropic、OpenAI 等)。我們不收集、不儲存、也無法存取你的任何資料。 2. **你掌控 AI。** 預設提示詞指示 AI 不要自動送出申請,但 AI 模型可能出現無法預測的行為。如果你修改了提示詞或使用其他模型,風險自負。**送出前務必檢查 AI 產生內容的正確性。** 3. **你遵守第三方條款。** 你必須按照所互動求職平台(Greenhouse、Lever、Workday、LinkedIn 等)的服務條款使用本工具。不要用本工具向雇主發送垃圾訊息或衝擊 ATS 系統。 4. **不作任何保證。** 評估是建議,不是事實。AI 模型可能虛構技能或經歷。作者不對就業結果、被拒的申請、帳號限制或任何其他後果負責。 完整內容見 [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md)。本軟體依據 [MIT 授權](LICENSE)「按原樣」提供,不附帶任何形式的保證。 ## 貢獻者 每一位貢獻過程式碼、文件、翻譯或測試的人都列在 [CONTRIBUTORS.md](CONTRIBUTORS.md) 裡,包括上面的圖表無法呈現的 非程式碼貢獻。 用 career-ops 找到工作了?[分享你的故事!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml) ## 授權條款與商標 程式碼以 [MIT](LICENSE) 授權發布。「career-ops」的名稱和 品牌受[商標政策](TRADEMARK.md)約束:對社群使用寬鬆, 對商業產品命名和背書保留權利。 ## Star 歷史

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

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

## 聯絡我 [![Website](https://img.shields.io/badge/santifer.io-000?style=for-the-badge&logo=safari&logoColor=white)](https://santifer.io) [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/in/santifer) [![X](https://img.shields.io/badge/X-000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/santifer) [![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/8pRpHETxa4) [![Email](https://img.shields.io/badge/Email-EA4335?style=for-the-badge&logo=gmail&logoColor=white)](mailto:hi@santifer.io)