README.vi.md
Rama main · réplica de lectura del repositorio original.
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/wordmark-dark.svg"><img src="docs/wordmark-light.svg" alt="career-ops" width="250" height="56"></picture></p>
<p align="center">Agent tìm việc bằng AI mã nguồn mở.</p>
<p align="center">
<a href="README.md">English</a> |
<a href="README.es.md">Español</a> |
<a href="README.de.md">Deutsch</a> |
<a href="README.fr.md">Français</a> |
<a href="README.pt-BR.md">Português (Brasil)</a> |
<a href="README.ko-KR.md">한국어</a> |
<a href="README.ja.md">日本語</a> |
<a href="README.cn.md">简体中文</a> |
<a href="README.zh-TW.md">繁體中文</a> |
<a href="README.ua.md">Українська</a> |
<a href="README.ru.md">Русский</a> |
<a href="README.pl.md">Polski</a> |
<a href="README.da.md">Dansk</a> |
<a href="README.ta.md">தமிழ்</a> |
<a href="README.ar.md">العربية</a> |
<a href="README.hi.md">हिन्दी</a> |
<a href="README.tr.md">Türkçe</a> |
<a href="README.vi.md">Tiếng Việt</a> |
<a href="README.id.md">Bahasa Indonesia</a>
</p>
<!-- The non-breaking spaces ( ) and word joiners (⁠) below decide where each line wraps on a phone. Keep them when editing. -->
<p align="center"><a href="https://github.com/santifer"><img src="docs/avatar-santifer.png" width="48" height="48" align="middle" alt="Santiago Fernández de Valderrama Aparicio"></a> Tạo bởi <a href="https://github.com/santifer"><strong>@santifer</strong></a>, cùng <a href="https://github.com/career-ops-hq/career-ops/blob/main/README.vi.md#builders"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/builders-stack-dark.svg"><img src="docs/builders-stack-light.svg" alt="" height="32" align="middle"></picture></a> <a href="https://github.com/career-ops-hq/career-ops/blob/main/README.vi.md#builders">700+ người đóng góp</a></p>
<p align="center">
<strong>Nhiều tháng gửi CV vào im lặng.</strong><br>
Nên tôi tự xây bộ lọc mà tôi cần.
</p>
<p align="center">
<strong>740 tin đã đánh giá. 68 đơn ứng tuyển. 12 buổi phỏng vấn. 1 offer.</strong><br>
Tôi là người dùng đầu tiên. Tôi nhận được việc. Rồi tôi mở mã nguồn nó.
</p>
<p align="center">
Dán một tin tuyển dụng. Ngay trên máy bạn, nó cho biết tin còn mở không và có hợp với bạn không.<br>
Nó điều chỉnh CV và soạn nháp câu trả lời. <strong>Bạn là người bấm Submit.</strong>
</p>
<p align="center">
<img src="docs/demo.gif" alt="Quá trình tìm việc của chính tác giả trong dashboard career-ops: các tin đã chấm điểm, số đếm màu đỏ của những tin được đánh dấu không nên ứng tuyển, rồi một báo cáo đánh giá đầy đủ" width="800">
</p>
<p align="center"><sub>Quá trình tìm việc của chính tôi, đang giữa chừng, với giao diện tiếng Tây Ban Nha.</sub></p>
<p align="center">
Các công ty dùng AI để lọc ứng viên.<br>
<strong>Tôi chỉ trao cho ứng viên AI để <em>chọn</em> công ty.</strong>
</p>
<p align="center">
Sáu tháng sau, <strong>tôi rời công việc đó.</strong><br>
Giờ chúng tôi xây career-ops, để bạn có được công việc của mình.
</p>
<p align="center"><a href="#đến-lượt-bạn">Thử với một tin ↓</a> · <a href="https://santifer.io/career-ops-system">Đọc toàn bộ câu chuyện →</a></p>
<p align="center"><sub>Không muốn dùng terminal? <a href="https://career-ops.org/waitlist?ref=readme-vi">Đăng ký danh sách chờ cho phiên bản web →</a></sub></p>
<br>
<p align="center"><a href="HIRED.md"><img src="docs/hired-badge.svg" alt="Được tuyển nhờ career-ops: những câu chuyện công khai"></a></p>
<p align="center">Những người đến sau tôi đã viết lại cách họ được tuyển.</p>
<p align="center">
<a href="HIRED.md"><img src="docs/hired-wall.svg" alt="Những câu chuyện được tuyển mà bạn có thể mở ra đọc" width="800"></a>
</p>
<p align="center"><sub>Mỗi thẻ là một issue công khai bạn có thể mở. Đã có việc? <a href="https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml">Để lại thẻ của bạn →</a></sub></p>
<p align="center">⭐ <strong>Nếu career-ops giúp được bạn, một ngôi sao sẽ giúp người tiếp theo tìm thấy nó.</strong></p>
<br>
<p align="center">
<a href="https://wired.com.gr/article/to-ai-ergaleio-pou-fernei-epanastasi-ston-tropo-pou-psachnoume-douleia/" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/wired-dark.svg"><img src="docs/press/wired.svg" alt="WIRED" height="32"></picture></a>
<a href="https://www.businessinsider.com/how-i-built-tool-filter-job-listings-landed-head-ai-2026-4" rel="noopener noreferrer nofollow"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/press/business-insider-dark.svg"><img src="docs/press/business-insider.svg" alt="Business Insider" height="32"></picture></a>
</p>
<p align="center">
<a href="https://vercel.com/open-source-program"><img alt="Vercel OSS Program" src="https://vercel.com/oss/program-badge-2026.svg" height="32"></a>
</p>
<p align="center">
<a href="https://trendshift.io/repositories/25195" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/25195" alt="GitHub Trending: kho mã số 1 trong ngày (Trendshift)" width="250" height="55"></a>
<a href="https://www.producthunt.com/products/santifer-io?utm_source=badge-featured&utm_medium=badge" rel="noopener noreferrer"><img src="docs/press/producthunt.svg" alt="Được giới thiệu trên Product Hunt" width="206" height="54"></a>
</p>
## Đến lượt bạn
Dán một tin bạn định ứng tuyển tối nay. Nếu kết quả là <em>đừng ứng tuyển</em>, bạn vừa lấy lại được buổi tối. Nếu kết quả là một kế hoạch, bạn biết phải làm gì tiếp theo.
```bash
npx @santifer/career-ops init
```
<p align="center"><sub>Mã nguồn mở. Chạy cục bộ. Ngay trong AI CLI bạn đang dùng. <a href="docs/RUNNING_ON_A_BUDGET.md">Gồm cả mô hình miễn phí và cục bộ.</a></sub></p>
## Bạn không cần tìm việc một mình
Sự im lặng sau khi bạn bấm gửi không phải lỗi của bạn. Đủ nhiều người đã thấy cùng một điều để viết lại thực hành này, trong sáu dòng:
> Ứng tuyển tốt hơn vào ít nơi hơn. Tín hiệu hơn số lượng. Bằng chứng hơn từ khóa. Con người quyết định. Ưu tiên cục bộ. Phẩm giá cho cả hai phía bàn tuyển dụng.
<p align="center"><a href="https://career-ops.org/manifesto?utm_source=readme"><img src="https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fraw.githubusercontent.com%2Fcareer-ops-hq%2Fcareer-ops%2Fmain%2FSIGNATURES.md&search=n%3A(%5Cd%2B)%5Cs*%24&replace=%241%20signatories&label=THE%20CAREEROPS%20MANIFESTO&color=DD7627&style=for-the-badge&labelColor=2b3137" alt="Tuyên ngôn CareerOps: số người ký theo thời gian thực"></a></p>
<p align="center">Vài người trong số họ, bằng lời của chính họ.</p>
<p align="center">
<a href="https://career-ops.org/manifesto?utm_source=readme"><img src="docs/manifesto-wall.svg" alt="Ba chữ ký của tuyên ngôn CareerOps, bằng lời của chính họ" width="800"></a>
</p>
<p align="center"><sub>Mỗi chữ ký là một commit bạn có thể kiểm chứng. <a href="https://career-ops.org/manifesto?utm_source=readme">Đọc tất cả, hoặc thêm chữ ký của bạn →</a></sub></p>
<br>
Việc tuyển dụng sẽ không tự sửa. Những người đang trải qua nó thì có thể, và họ đã ở trong phòng, trao đổi kinh nghiệm và sửa cấu hình cho nhau.
<a id="builders"></a>
<p align="center"><a href="CONTRIBUTING.md"><img src="https://warpchart.dev/api/builders?lang=vi" alt="Bức tường động gồm ảnh đại diện GitHub của những người đóng góp, lấp đầy theo thứ tự tham gia từ tháng 4 năm 2026, với ô tiếp theo để trống." width="100%"></a></p>
[Đây là nơi bản sửa được viết ra](CONTRIBUTING.md). Một căn phòng, không phải một câu lạc bộ. **Hãy cùng xây dựng.**
<p align="center"><a href="https://discord.gg/8pRpHETxa4"><img src="docs/discord-badge.svg" alt="Discord: số thành viên của máy chủ career-ops theo thời gian thực"></a></p>
## Nhà tài trợ
career-ops miễn phí cho ứng viên, mãi mãi. Các công ty sau tài trợ cho dự án:
<p align="center">
<a href="https://serpapi.com/career-ops-org" title="SerpApi"><img src="docs/sponsors/serpapi.svg" alt="SerpApi" height="48"></a>
</p>
<p align="center"><strong>SerpApi</strong> · 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.</p>
> Tài trợ chỉ mua được sự hiển thị có gắn nhãn rõ ràng, không bao giờ mua được ảnh hưởng: không khoản tiền nào thay đổi lộ trình hay đặt bất cứ thứ gì vào sản phẩm. Nhà tài trợ không bao giờ xuất hiện trong đánh giá, xếp hạng hay đề xuất.
## career-ops làm gì cho bạn
Dán một tin tuyển dụng. Nó cho bạn biết buổi tối đó có đáng không.
- **Còn mở không?** Nó kiểm tra tin còn đang tuyển trước khi bạn viết một chữ.
- **Không hợp với bạn?** Nó chấm điểm vai trò dựa trên CV thật của bạn và khuyên bỏ qua những tin kém phù hợp. Bạn có thể quyết định khác.
- **Đáng không?** Nó soạn nháp CV, cover letter và các câu trả lời. Bạn đọc. Bạn gửi.
- **Nói chuyện với ai?** Nó tìm người phù hợp và soạn nháp tin nhắn. Nó không bao giờ gửi.
- **Mọi thứ nằm ở đâu?** Mọi đơn ứng tuyển ở lại trên máy bạn. Không gì được tải lên cho chúng tôi.
- **Nên học gì?** Sau một chuỗi bị từ chối, nó chỉ ra khoảng trống.
Những lần chạy đầu còn thô. Nó chưa biết bạn. Hãy trò chuyện với nó: CV của bạn, điều bạn muốn, điều bạn từ chối. Hãy coi đó là tuần đầu tiên của một recruiter.
Lần khởi động đầu tiên, nó hỏi tất cả những điều đó ngay trong cuộc trò chuyện. Không cần cấu hình thủ công.
## career-ops sẽ không làm gì
- **Tự động nộp đơn ứng tuyển.** Nó soạn nháp câu trả lời cho mọi ô; bạn xem lại và bấm Submit. Script không bao giờ POST (`prepare-application.mjs`).
- **Gửi email.** Chỉ soạn nháp. Không có thành phần gửi thư nào trong codebase này.
- **Gửi dữ liệu về máy chủ của chúng tôi.** Không telemetry, không backend của chúng tôi. CV của bạn đi từ máy bạn tới nhà cung cấp AI bạn chọn, và không đi đâu khác. Sổ cái công khai duy nhất là repo này: `HIRED.md` và các issue của nó.
- **Thúc bạn ứng tuyển khi điểm dưới 4.0/5.** Nó sẽ khuyên bạn đừng. Bạn có thể quyết định khác, và nó sẽ nói rõ điều đó.
Nó diễn đạt lại CV của bạn; nó không bao giờ được bịa ra. Một bước kiểm tra trong mã sẽ chặn PDF có số liệu hoặc thông tin không xuất hiện trong CV hay article digest của bạn, nhưng nó chưa thể đánh giá mọi cách diễn đạt lại. Hãy đọc từng CV trước khi gửi. Chi tiết trong [Câu hỏi thường gặp](#câu-hỏi-thường-gặp).
## Tính năng
| Tính năng | Mô tả |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Đánh giá A-H** | Tóm tắt vai trò, match với CV (kèm mức độ quan trọng của từng yêu cầu đối với tin này, và trọng số đó đến từ chính câu chữ của JD, cấu trúc của nó hay một ước lượng, được gắn nhãn cho từng yêu cầu; một ước lượng không bao giờ được xếp vào mức cao nhất), chiến lược level, nghiên cứu lương, cá nhân hóa, chuẩn bị phỏng vấn (STAR+R) -- cộng thêm kiểm tra độ tin cậy của tin ở Block G (tin còn mở không, có phải tin đăng lại không: quan sát, không phải phán quyết), và tín hiệu Work-Auth đánh dấu JD ghi rõ không bảo lãnh là blocker cứng |
| **Con người trong vòng lặp** | AI đánh giá và đề xuất, bạn quyết định và hành động. Hệ thống không bao giờ nộp đơn ứng tuyển -- bạn luôn là người quyết định cuối cùng <!-- hitl: absolute guarantee. Do not add "automatically", "by itself", "without your permission" or any other hedge when translating this row. --> |
| **Tạo PDF cho ATS** | CV đọc được bởi ATS, điều chỉnh theo từng JD từ chính kinh nghiệm của bạn, thiết kế Space Grotesk + DM Sans |
| **Tạo Cover Letter** | Cover letter có nghiên cứu, bám sát từ khóa của JD, bốn câu hỏi định hướng tương tác (vì sao/vấn đề/cách tiếp cận/giọng điệu), bước duyệt bản nháp ngay trong chat, và PDF A4 qua cùng pipeline HTML + Playwright như CV. Tự soạn nháp ở mỗi lần đánh giá; hoàn thiện và tạo theo yêu cầu qua `/career-ops cover` |
| **Vượt ra ngoài CV** | Nghiên cứu công ty ([`deep`](modes/deep.md)) chỉ ra chiến lược AI, các động thái gần đây, văn hóa kỹ thuật và góc tiếp cận hồ sơ của bạn nên chọn. Tìm liên hệ ([`contacto`](modes/contacto.md)) xác định hiring manager, recruiter hoặc đồng nghiệp trong team đáng để tiếp cận và soạn nháp tin nhắn LinkedIn dưới 300 ký tự phù hợp với từng loại liên hệ. Soạn nháp email ứng tuyển chính thức ([`email`](modes/email.md)) biến một báo cáo đã đánh giá hoặc JD dán vào thành dòng tiêu đề, nội dung và danh sách tệp đính kèm mà không gửi, nộp hay bấm bất cứ thứ gì. Đơn ứng tuyển đưa bạn vào hàng đợi; nghiên cứu đưa bạn vào cuộc trò chuyện. |
| **Phân tích mẫu hình** | Mẫu hình bị từ chối và tỷ lệ tiến tới bước sau theo từng kênh ATS (`analyze-patterns.mjs`), thống kê phễu toàn thời gian (`stats.mjs`), phát hiện tin đăng lại, dấu hiệu có thể của tin ma (`detect-reposts.mjs`) |
<details>
<summary><b>Mọi thứ khác nó làm được</b></summary>
| Tính năng | Mô tả |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Auto-Pipeline** | Dán một URL, nhận đánh giá đầy đủ + PDF + dòng tracker |
| **Kho câu chuyện phỏng vấn** | Tích lũy các câu chuyện STAR+Reflection qua các lần đánh giá -- 5-10 câu chuyện gốc bạn có thể điều chỉnh cho các câu hỏi hành vi |
| **Kịch bản đàm phán** | Khung đàm phán lương, phản biện việc giảm lương theo địa lý, đòn bẩy từ offer cạnh tranh |
| **Nháp email ứng tuyển** | Email ứng tuyển chính thức tới recruiter/người giới thiệu/cold email từ một báo cáo hoặc JD dán vào, kèm dòng tiêu đề, danh sách tệp đính kèm, các điểm phù hợp có nguồn và khối liên hệ lấy từ hồ sơ. Chỉ soạn nháp -- career-ops không bao giờ gửi, nộp hay bấm bất cứ thứ gì. |
| **Scanner cổng việc làm** | 100+ công ty cấu hình sẵn (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + truy vấn tùy chỉnh trên Ashby, Greenhouse, Lever, Wellfound |
| **Khám phá công ty vừa gọi vốn** | Lệnh `company:funded` ưu tiên xem lại trước hiển thị các công ty vừa gọi vốn và chẩn đoán nguồn từ các feed công khai có cấu trúc mà không sửa dữ liệu của bạn |
| **Xử lý hàng loạt** | Đánh giá song song với các worker CLI headless (`claude -p` / `opencode run`) |
| **Dashboard TUI** | Giao diện terminal để duyệt, lọc và sắp xếp pipeline của bạn |
| **Toàn vẹn pipeline** | Tự động merge, loại trùng, chuẩn hóa trạng thái, kiểm tra sức khỏe |
| **Bộ công cụ phỏng vấn** | Kế hoạch chuẩn bị theo khung giờ, buổi luyện tập có phản hồi, tổng kết sau phỏng vấn ([`interview/`](modes/interview/README.md)), và bộ phát hiện red flag của công ty ([`interview-redflag`](modes/interview-redflag.md)) |
| **Giai đoạn offer** | Trợ lý đọc hợp đồng -- đi qua từng điều khoản kèm danh sách câu hỏi cho luật sư ([`offer-prep`](modes/offer-prep.md)) -- và bộ phân tích chênh lệch lương mong muốn/quảng cáo/thực tế (`salary-gap.mjs`) |
| **Follow-up và phản hồi** | Bộ tính nhịp follow-up và nhắc nhở gieo sẵn (`followup-cadence.mjs`, `followup-seed.mjs`); phân loại phản hồi của nhà tuyển dụng thành cập nhật tracker ([`reply-watch`](modes/reply-watch.md)) |
| **Hệ thống plugin** | Tích hợp tùy chọn (Gmail, Notion, Apify + registry cộng đồng), tắt theo mặc định -- xem [docs/PLUGINS.md](docs/PLUGINS.md) |
</details>
## Cách hoạt động
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/how-it-works-vi-dark.svg"><img src="docs/how-it-works-vi-light.svg" alt="Bạn dán URL hoặc mô tả tin tuyển dụng → Archetype Detection (Phân loại: LLMOps / Agentic / PM / SA / FDE / Transformation) → A-H Evaluation (reads cv.md; Match, khoảng trống, nghiên cứu lương, câu chuyện STAR, độ tin cậy) → Report (reports/*.md), CV tùy chỉnh (PDF by default), Tracker (data/applications.md)" width="760"></picture></p>
## Bắt đầu nhanh
**Cách nhanh nhất, một lệnh:**
```bash
npx @santifer/career-ops init
```
> 💡 `npx` đi kèm [Node.js](https://nodejs.org): nó chạy trình cài đặt một lần,
> mà không cài gì ở cấp toàn cục. Chưa có Node? Hãy cài trước.
> (Đang dùng Claude Code / Gemini / Codex CLI? Vậy là bạn đã có sẵn.)
Lệnh này clone bản phát hành mới nhất vào `./career-ops` và cài các phụ thuộc. Sau đó:
```bash
cd career-ops
claude # hoặc codex / qwen / opencode / agy / grok — mở AI CLI của bạn tại đây
```
**Ở lần khởi động đầu tiên, career-ops hướng dẫn bạn thiết lập (CV, hồ sơ và vai trò mục tiêu) chỉ bằng cách trò chuyện. Không cần sửa tay gì cả.**
<details>
<summary><b>Muốn tự cài thủ công? (git clone)</b></summary>
```bash
git clone https://github.com/career-ops-hq/career-ops.git
cd career-ops && npm install
npx playwright install chromium # chỉ cần khi tạo PDF
# Trên bản phân phối Linux không phải Debian/Ubuntu (Fedora, Arch, ...), các thư viện
# hệ thống của Chromium không được cài bởi dòng trên — hãy tự cài bằng trình quản lý
# gói của bản phân phối nếu việc tạo PDF không mở được trình duyệt
# (tài liệu của Playwright liệt kê các thư viện cần thiết theo từng nền tảng).
# 2. Mở AI CLI của bạn trong thư mục này. Ở lần khởi động đầu tiên, nó hướng dẫn
# bạn thiết lập (CV, hồ sơ và vai trò mục tiêu) bằng cách trò chuyện
claude # hoặc codex / opencode / qwen / agy / grok
# Rồi nhờ CLI của bạn điều chỉnh hệ thống cho phù hợp với bạn:
# "Đổi các archetype sang các vai trò backend engineering"
# "Dịch các mode sang tiếng Việt"
# "Thêm 5 công ty này vào portals.yml"
# "Cập nhật hồ sơ của tôi bằng CV tôi đang dán"
# 3. Bắt đầu dùng
# Dán URL tin tuyển dụng hoặc văn bản JD để kích hoạt auto-pipeline.
# Các mode còn lại, và cách yêu cầu chúng trong CLI của bạn: xem Cách dùng bên dưới.
```
</details>
### Quét qua proxy đi ra ngoài
Nếu bạn quét từ một sandbox chỉ cho đi qua proxy, hãy chạy `CAREER_OPS_TRUST_PROXY_EGRESS=1 node scan.mjs`. Chỉ đặt cờ này **khi chính proxy được cấu hình đã chặn kết nối tới các địa chỉ riêng tư, loopback và metadata**. Các bước đầy đủ (bằng tiếng Anh) nằm trong [docs/SETUP.md](docs/SETUP.md#scanning-through-an-outbound-proxy).
### Cài toàn cục
```bash
npm i -g @santifer/career-ops
```
Lệnh này cài binary `career-ops` ở cấp toàn cục để bạn chạy `career-ops init [folder]` mà không cần `npx`. `init` là lệnh duy nhất của nó: nó dựng một workspace, và mọi việc sau đó diễn ra bên trong AI coding CLI của bạn (xem Cách dùng bên dưới), không qua binary này.
**Nên dùng cách nào?**
- `npx @santifer/career-ops init`: tốt nhất cho lần dùng đầu; tạo một thư mục dự án riêng.
- `npm i -g @santifer/career-ops`: nếu bạn thích gõ `career-ops init` hơn dạng `npx`. Nó không thêm lệnh nào khác.
### Những cách khác để chạy
- **Từ bất kỳ thư mục nào, dưới dạng plugin Claude Code:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md).
- **Không cần AI CLI:** các script độc lập cho Gemini, Ollama và các mô hình tương thích OpenAI tự đánh giá một JD. Xem [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).
> **Hệ thống được thiết kế để chính AI coding CLI của bạn tùy chỉnh.** Mode, archetype, trọng số chấm điểm, kịch bản đàm phán -- chỉ cần nhờ nó thay đổi. Nó đọc chính những file nó dùng, nên biết chính xác cần sửa gì.
Xem [docs/SETUP.md](docs/SETUP.md) để có hướng dẫn thiết lập đầy đủ, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) để chạy career-ops với chi phí thấp bằng mô hình tùy chỉnh hoặc cục bộ (và [docs/FREE_TIER.md](docs/FREE_TIER.md) để chạy với chi phí bằng không trên gói miễn phí của Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) để lên lịch quét định kỳ và công thức phân loại tới shortlist không tốn token, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) để biết chi tiết luồng tự điền ATS, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) để đối chiếu bản xuất danh sách kết nối LinkedIn với các công ty trong phễu của bạn, và [docs/FAQ.md](docs/FAQ.md) cho câu trả lời về các câu hỏi thiết lập thường gặp, gồm cả [cách nguồn gốc câu chuyện ngăn việc bịa số liệu](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Nguyên tắc thiết kế nằm ở [ARCHITECTURE.md](ARCHITECTURE.md); luồng chạy ở [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
## Cách dùng
Dán URL hoặc mô tả công việc vào AI CLI của bạn. career-ops kiểm tra xem tin tuyển dụng có liên kết còn mở hay không (văn bản dán vào không có liên kết để kiểm tra), chấm điểm tin đó so với CV của bạn, viết báo cáo, tùy chỉnh CV của bạn (mặc định là PDF) và thêm một dòng vào tracker của bạn. Chừng đó là đủ cho phần lớn các ngày. Mọi thứ còn lại là các mode mà bạn gọi bằng tên. Nếu không đọc được một tin tuyển dụng, pipeline sẽ dừng lại và yêu cầu bạn dán văn bản.
### Cách gọi một mode
| CLI | Cách gọi `scan` |
| --- | --- |
| Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` |
| Pi | `/skill:career-ops scan` |
| Codex, Qwen, Cursor hoặc bất kỳ CLI nào khác được hỗ trợ | Ngôn ngữ thường: "Run the career-ops scan mode" |
`/career-ops` đứng một mình sẽ hiện menu lệnh trong các CLI dùng lệnh này. Ngôn ngữ thường dùng được trong mọi CLI được hỗ trợ. Khi dùng như plugin của Claude Code, lệnh là `/career-ops:career-ops`.
Tất cả đều dùng chung một router, `.agents/skills/career-ops/SKILL.md`, và cùng các tệp `modes/*.md`, nên mọi CLI đều chuyển yêu cầu theo cùng một cách (các mode dùng nhiều trình duyệt cũng cần công cụ Playwright). Slash command không được đảm bảo trong Codex: hãy yêu cầu bằng ngôn ngữ thường, hoặc chạy một prompt ở chế độ headless bằng `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Cách chạy trong từng CLI được hỗ trợ, lệnh headless với những CLI có lệnh này, và các ghi chú thiết lập riêng cho từng CLI nằm trong [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).
### Các lệnh dùng hằng ngày
| Lệnh | Chức năng |
| --- | --- |
| *dán URL hoặc JD* | Pipeline đầy đủ: kiểm tra tin còn mở hay không (chỉ với URL), đánh giá A-G cộng H khi điểm cao, báo cáo, CV đã tùy chỉnh (mặc định là PDF), một dòng trong tracker |
| `scan` | Quét các cổng của bạn để tìm tin mới và thêm vào hộp thư (`data/pipeline.md`) |
| `pipeline` | Xử lý các URL đang chờ trong hộp thư (mức standard và premium có thể bỏ qua những URL rõ ràng không phù hợp) |
| `apply` | Cùng bạn điền form ứng tuyển, từng trường một. Dừng lại trước khi Gửi |
| `tracker` | Mỗi hồ sơ ứng tuyển đang ở đâu |
| `followup` | Hồ sơ nào đến lúc cần follow-up, kèm bản nháp |
<details>
<summary><b>Tất cả các lệnh, theo giai đoạn tìm việc</b></summary>
`oferta`, `ofertas` và `contacto` giữ nguyên tên gốc tiếng Tây Ban Nha: offer, nhiều offer, liên hệ.
**Tìm vị trí**
| Lệnh | Chức năng |
| --- | --- |
| [`scan`](modes/scan.md) | Quét các cổng và tìm tin mới |
| [`discover`](modes/discover.md) | Chuyển danh sách tên công ty thành các bảng ATS có thể quét. Mặc định chỉ xem trước; chỉ thêm vào `portals.yml` khi dùng `--write` (không tốn token) |
| [`pipeline`](modes/pipeline.md) | Xử lý các URL đang chờ trong hộp thư (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Lọc nhanh lần đầu theo kiểu nên hay không nên ứng tuyển dựa trên `modes/_brief.md`, trước khi đánh giá đầy đủ (không ghi tệp nào) |
| [`batch`](modes/batch.md) | Đánh giá nhiều tin bằng các worker headless (song song với Claude, lần lượt từng tin với các CLI khác) |
| [`titles`](modes/titles.md) | Gợi ý các chức danh liên quan từ CV của bạn để mở rộng tìm kiếm |
**Đánh giá một vị trí**
| Lệnh | Chức năng |
| --- | --- |
| *dán URL hoặc JD* | [Auto-pipeline](modes/auto-pipeline.md): đánh giá + báo cáo + CV đã tùy chỉnh (mặc định là PDF) + mục trong tracker |
| [`oferta`](modes/oferta.md) | Chỉ đánh giá, các block A đến G cộng H khi điểm cao (không có PDF) |
| [`ofertas`](modes/ofertas.md) | So sánh và xếp hạng nhiều offer |
| [`deep`](modes/deep.md) | Prompt nghiên cứu chuyên sâu về công ty |
| [`eu-swe`](modes/regional/eu-swe.md) | Hiệu chỉnh một hồ sơ ứng tuyển kỹ sư phần mềm ở châu Âu trước khi làm CV, nộp đơn hoặc phỏng vấn |
**Ứng tuyển**
| Lệnh | Chức năng |
| --- | --- |
| [`pdf`](modes/pdf.md) | CV tối ưu cho ATS dưới dạng PDF |
| [`ats`](modes/ats.md) | Kiểm tra mức thân thiện với ATS của CV đã tạo: điểm số và các vấn đề có thể sửa |
| [`text`](modes/text.md) | CV đã tùy chỉnh dưới dạng markdown (phản chiếu `cv.md`, không có PDF) |
| [`latex`](modes/latex.md) | Xuất CV thành `.tex` LaTeX/Overleaf |
| [`latex-tex`](modes/latex-tex.md) | Tùy chỉnh `resume.tex` của chính bạn ngay tại chỗ (tùy chọn; `cv.md` vẫn là mặc định) |
| [`cover`](modes/cover.md) | Thư xin việc, từ một JD đã dán hoặc một báo cáo đã đánh giá (`cover {slug}`) |
| [`email`](modes/email.md) | Bản nháp email ứng tuyển trang trọng. Chỉ là bản nháp: không bao giờ gửi, nộp hay bấm nút |
| [`contacto`](modes/contacto.md) | Tìm hiring manager, recruiter hoặc một đồng nghiệp cùng ngành, rồi soạn nháp tin nhắn LinkedIn |
| [`apply`](modes/apply.md) | Trợ lý ứng tuyển trực tiếp (Playwright từ checkout này). Không tự nộp |
**Phỏng vấn**
| Lệnh | Chức năng |
| --- | --- |
| [`interview-prep`](modes/interview-prep.md) | Tài liệu chuẩn bị phỏng vấn riêng cho từng công ty |
| [`interview/plan`](modes/interview/plan.md) | Kế hoạch chuẩn bị chia theo khung giờ cho một buổi phỏng vấn sắp tới |
| [`interview/practice`](modes/interview/practice.md) | Phỏng vấn thử, mỗi lần một câu hỏi, kèm phản hồi |
| [`interview/debrief`](modes/interview/debrief.md) | Tổng kết sau phỏng vấn: bù đắp thiếu sót, dự đoán vòng tiếp theo |
| [`interview-redflag`](modes/interview-redflag.md) | Phân tích các dấu hiệu cảnh báo của nhà tuyển dụng trước khi bạn gia nhập |
**Sau khi ứng tuyển**
| Lệnh | Chức năng |
| --- | --- |
| [`tracker`](modes/tracker.md) | Tổng quan trạng thái ứng tuyển |
| [`followup`](modes/followup.md) | Nhịp follow-up: đánh dấu hồ sơ quá hạn, tạo bản nháp |
| [`reply-watch`](modes/reply-watch.md) | Phân loại phản hồi của nhà tuyển dụng và đề xuất cập nhật tracker |
| [`outcome`](modes/outcome.md) | Ghi lại kết quả của một hồ sơ ứng tuyển và lưu trữ các tài liệu liên quan |
| [`offer-prep`](modes/offer-prep.md) | Cùng bạn đọc một offer hoặc hợp đồng đã nhận: duyệt từng điều khoản và các câu hỏi dành cho luật sư (không phải tư vấn pháp lý) |
**Hồ sơ và CV của bạn**
| Lệnh | Chức năng |
| --- | --- |
| [`interview`](modes/interview.md) | Thiết lập hồ sơ: một buổi phỏng vấn tương tác về kinh nghiệm của bạn để xây dựng CV và hồ sơ (không phải luyện phỏng vấn) |
| [`intake`](modes/intake.md) | Xây dựng hoặc bổ sung hồ sơ của bạn từ các tệp trong `documents/` (CV gốc, bản xuất LinkedIn). Không có gì được ghi nếu bạn chưa xác nhận |
| [`master-profile`](modes/master-profile.md) | Nhập, rà soát và xác thực Master Career Profile của bạn, rồi chuẩn bị các dữ kiện được chọn thành các gạch đầu dòng trong CV |
| [`add`](modes/add.md) | Thêm một dự án, bài báo hoặc vai trò vào CV (lấy, xem trước, xác nhận) |
| [`expand`](modes/expand.md) | Tìm các năng lực còn thiếu trong CV, dựa trên các liên kết trong hồ sơ của bạn |
| [`retro`](modes/retro.md) | Xem lại phiên này và giữ những gì bạn đã dạy làm quy tắc (chỉ ghi những quy tắc bạn chấp nhận) |
**Cải thiện định hướng của bạn**
| Lệnh | Chức năng |
| --- | --- |
| [`patterns`](modes/patterns.md) | Phân tích các mẫu bị từ chối và cải thiện định hướng |
| [`calibrate`](modes/calibrate.md) | Kiểm tra xem điểm đánh giá của bạn có dự đoán được kết quả thực tế hay không. Chỉ mang tính tham khảo: không bao giờ thay đổi cách chấm điểm |
| [`upskill`](modes/upskill.md) | Phân tích khoảng trống kỹ năng trên các báo cáo đã đánh giá của bạn |
| [`training`](modes/training.md) | Đánh giá một khóa học hoặc chứng chỉ so với North Star của bạn |
| [`project`](modes/project.md) | Đánh giá một ý tưởng dự án cho portfolio |
**Hệ thống**
| Lệnh | Chức năng |
| --- | --- |
| [`agent-inbox`](modes/agent-inbox.md) | Xếp hàng các yêu cầu cho phiên sau và xử lý chúng lúc đó (`data/agent-inbox.md`). `inbox` cũng dùng được |
| [`update`](modes/update.md) | Cập nhật các tệp hệ thống của career-ops, kèm xem trước diff và kiểm tra tương thích |
</details>
## Các cổng đã cấu hình sẵn
Scanner đi kèm **100+ công ty** sẵn sàng quét và **35+ truy vấn tìm kiếm** trên các cổng việc làm lớn. Sao chép `templates/portals.example.yml` thành `portals.yml` và thêm của riêng bạn:
**Phòng thí nghiệm AI:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone
**AI giọng nói:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI
**Nền tảng AI:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI
**Contact Center:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys
**Doanh nghiệp:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Tự động hóa:** n8n, Zapier, Make.com
**Châu Âu:** Factorial, Attio, Tinybird, Clarity AI, Travelperk
**Cổng việc làm được tìm:** 55+ module provider bao phủ API của ATS, feed toàn cổng, feed XML/RSS, feed markdown và bộ phân tích cục bộ. Xem [Các cổng việc làm được hỗ trợ](docs/SUPPORTED_JOB_BOARDS.md) để có bảng đầy đủ.
Theo mặc định `node scan.mjs` (hay `npm run scan`) tin vào những gì mỗi feed ATS trả về. Một số công ty để lại tin cũ trong API công khai ngay cả sau khi vai trò đã đóng, nên các mục hết hạn đó có thể lọt vào `pipeline.md`. Truyền `--verify` để khởi chạy Playwright sau lượt API và loại bỏ tin hết hạn trước khi chúng vào pipeline:
```bash
node scan.mjs --verify # khám phá không tốn token + kiểm tra còn mở bằng Playwright
```
Việc xác minh chạy tuần tự và chỉ áp dụng cho tin mới (sau khi loại trùng), nên chi phí luôn có giới hạn.
## Dashboard TUI
Dashboard terminal tích hợp cho phép bạn duyệt pipeline một cách trực quan:
```bash
npm run serve:dashboard # chạy TUI
npm run build:dashboard # tùy chọn: build binary độc lập
```
Tính năng: 10 tab lọc, 8 kiểu sắp xếp, chế độ nhóm/phẳng, xem trước tải lười, đổi trạng thái ngay trong danh sách.
Ngoài ra còn có một **giao diện web thử nghiệm** (alpha và tùy chọn: không gì chạy trừ khi bạn khởi động): xem [`web/README.md`](web/README.md).
## Cấu trúc dự án
```
career-ops/
├── AGENTS.md # Hướng dẫn agent chuẩn (mọi CLI)
├── CLAUDE.md # Lớp bọc cho Claude Code (import AGENTS.md)
├── CODEX.md # Lớp bọc cho Codex (import AGENTS.md)
├── OPENCODE.md # Lớp bọc cho OpenCode (import AGENTS.md)
├── GEMINI.md # Lớp bảo vệ cũ không làm gì, tránh Antigravity nhân đôi ngữ cảnh
├── cv.md # CV của bạn (tự tạo)
├── article-digest.md # Các proof point của bạn (tùy chọn)
├── config/
│ └── profile.example.yml # Mẫu hồ sơ của bạn
├── modes/ # Các skill mode
│ ├── _shared.md # Ngữ cảnh dùng chung (tùy chỉnh file này)
│ ├── oferta.md # Đánh giá một tin
│ ├── pdf.md # Tạo PDF
│ ├── cover.md # Tạo cover letter
│ ├── email.md # Soạn nháp email ứng tuyển chính thức
│ ├── scan.md # Scanner cổng việc làm
│ ├── batch.md # Xử lý hàng loạt
│ └── ...
├── templates/
│ ├── cv-template.html # Mẫu CV tối ưu cho ATS
│ ├── portals.example.yml # Mẫu cấu hình scanner
│ └── states.yml # Các trạng thái chuẩn
├── batch/
│ ├── batch-prompt.md # Prompt worker tự chứa
│ └── batch-runner.sh # Script điều phối
├── dashboard/ # Trình xem pipeline TUI bằng Go
├── data/ # Dữ liệu theo dõi của bạn (gitignored)
├── reports/ # Báo cáo đánh giá (gitignored)
├── output/ # PDF đã tạo (gitignored)
├── fonts/ # Space Grotesk + DM Sans
├── docs/ # Thiết lập, tùy chỉnh, hướng dẫn tiết kiệm, kiến trúc
└── examples/ # CV, báo cáo, proof point mẫu
```
## Thư mục dữ liệu bên ngoài (tùy chọn)
Theo mặc định, dữ liệu lớp người dùng (như `cv.md`, `portals.yml` và các thư mục `data/` / `reports/` / `output/`) nằm trong thư mục gốc dự án.
Để tách dữ liệu cá nhân khỏi mã (giúp dễ đổi nhánh, kéo bản cập nhật hoặc thử nhiều hồ sơ), bạn có thể cấu hình một thư mục dữ liệu bên ngoài theo thứ tự ưu tiên sau:
1. **Biến môi trường:** Đặt biến môi trường `CAREER_OPS_ROOT` hoặc `CAREER_OPS_DATA_DIR`:
```bash
export CAREER_OPS_ROOT=~/my-career-data
```
2. **File đánh dấu:** Tạo file `.career-ops-data` ở thư mục gốc repo chứa đường dẫn tới thư mục dữ liệu của bạn.
3. **Mặc định:** Mặc định là thư mục gốc repo.
Sau khi xác định xong, mọi file người dùng được đọc và ghi tương đối với thư mục đó, trong khi các file prompt và script tiếp tục được xác định tương đối với repo.
- **Ghi đè tracker:** Bạn cũng có thể đặt `CAREER_OPS_TRACKER` để ghi đè trực tiếp đường dẫn file tracker đơn ứng tuyển.
- **Ghi:** Mọi thao tác ghi (như merge) mặc định nhắm tới `{DATA_ROOT}/data/applications.md`.
- **Cấu hình scanner:** `portals.yml` được đọc và kiểm tra tại `{DATA_ROOT}/portals.yml`, nên `node validate-portals.mjs` kiểm tra đúng file mà `scan.mjs` đọc.
- **Tài liệu được tạo:** CV và cover letter đã điều chỉnh được ghi dưới `{DATA_ROOT}/output/`, và manifest PDF liên kết chúng với một báo cáo nằm ở `{DATA_ROOT}/data/pdf-index.tsv`. Khi `CAREER_OPS_TRACKER` chưa đặt, workspace tracker giới hạn các lần ghi đó là thư mục dữ liệu, không phải thư mục checkout.
- **PDF khi ghi đè tracker:** `generate-pdf.mjs` xác định `CAREER_OPS_TRACKER` trước khi suy ra workspace, nên khi có ghi đè, workspace là thư mục chứa tracker đó (hoặc thư mục cha của nó, khi tracker nằm trong thư mục `data/`). Khi đó HTML của CV và mọi PDF phải nằm trong workspace này, và manifest chuyển sang `data/pdf-index.tsv` của nó. Cover letter vẫn nhắm tới `{DATA_ROOT}/output/`, nên bị từ chối khi thư mục đó nằm ngoài workspace của tracker.
- **Lớp mã giữ nguyên chỗ:** `node_modules/`, `providers/`, `modes/` và chính các script luôn được xác định theo repo, không bao giờ theo thư mục dữ liệu.
TUI dashboard viết bằng Go, các script Node.js và các mode của AI agent đều tự động tuân theo thứ tự ưu tiên này.
## Công nghệ





- **Agent**: AI coding CLI với skill và mode dùng chung (`AGENTS.md` + lớp bọc CLI)
- **PDF**: Playwright + mẫu HTML
- **Cover letter**: mẫu HTML + Playwright (PDF A4, cùng pipeline với CV)
- **Scanner**: Playwright + Greenhouse API + WebSearch
- **Dashboard**: Go + Bubble Tea + Lipgloss (giao diện Catppuccin Mocha)
- **Dữ liệu**: bảng Markdown + cấu hình YAML + file batch TSV
<p align="center">
<a href="https://github.com/career-ops-hq/career-ops/releases/latest"><img src="docs/npm-badge.svg" alt="Latest release"></a>
</p>
<p align="center">
<a href="https://claude.com/claude-code"><img src="https://img.shields.io/badge/Built_with-Claude_Code-000?style=for-the-badge&logo=anthropic&logoColor=white" alt="Built with Claude Code"></a>
</p>
<p align="center">
<sub>Cũng chạy trên mọi CLI theo chuẩn agent-skill. Xem <a href="docs/SUPPORTED_CLIS.md">Các CLI được hỗ trợ</a>.</sub><br>
<img src="https://img.shields.io/badge/Claude_Code-000?style=flat&logo=anthropic&logoColor=white" alt="Claude Code">
<img src="https://img.shields.io/badge/OpenCode-111827?style=flat&logo=terminal&logoColor=white" alt="OpenCode">
<img src="https://img.shields.io/badge/Antigravity_CLI-4285F4?style=flat&logo=google&logoColor=white" alt="Antigravity CLI">
<img src="https://img.shields.io/badge/Codex-412991?style=flat&logo=openai&logoColor=white" alt="Codex">
<img src="https://img.shields.io/badge/Qwen-615CED?style=flat" alt="Qwen">
<img src="https://img.shields.io/badge/Kimi-FF4B4B?style=flat" alt="Kimi">
<img src="https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
<img src="https://img.shields.io/badge/Grok_Build_CLI-000?style=flat&logo=x&logoColor=white" alt="Grok Build CLI">
<img src="https://img.shields.io/badge/Pi-4B3F72?style=flat" alt="Pi">
<br>
<img src="https://img.shields.io/badge/Node.js-339933?style=flat&logo=node.js&logoColor=white" alt="Node.js">
<img src="https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white" alt="Go">
<img src="https://img.shields.io/badge/Playwright-2EAD33?style=flat&logo=playwright&logoColor=white" alt="Playwright">
<img src="https://img.shields.io/badge/Bubble_Tea-FF75B5?style=flat&logo=go&logoColor=white" alt="Bubble Tea">
<img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT">
<a href="TRADEMARK.md"><img src="https://img.shields.io/badge/Trademark-Policy-blue.svg" alt="Trademark Policy"></a>
</p>
## Cũng là mã nguồn mở
- **[cv-santiago](https://github.com/santifer/cv-santiago)** -- Website portfolio (santifer.io) với chatbot AI, dashboard LLMOps và các case study. Nếu bạn cần một portfolio để giới thiệu song song với việc tìm việc, hãy fork và biến nó thành của bạn.
## Câu hỏi thường gặp
**career-ops là gì?**
career-ops ([career-ops.org](https://career-ops.org), còn gọi là **careerops**) là công cụ tìm việc bằng AI mã nguồn mở chạy cục bộ trong AI coding CLI của bạn (Claude Code, Codex, OpenCode và các CLI khác) và để mọi quyết định cho bạn. Nó đánh giá tin tuyển dụng dựa trên CV của bạn, tạo PDF điều chỉnh cho ATS, tìm đúng người để liên hệ và theo dõi mọi thứ ở một nơi: bạn luôn là người quyết định cuối cùng. Đây là bản triển khai tham chiếu đầu tiên của [Tuyên ngôn CareerOps](https://career-ops.org/manifesto).
**CV đã điều chỉnh có thể bịa ra thông tin không?**
Không được phép, và các prompt đã nói rõ: diễn đạt lại, không bao giờ bịa. `generate-pdf` chặn CV có số liệu hoặc thông tin không có trong nguồn của bạn, trừ khi bạn truyền `--skip-fact-check`. Chế độ `pdf` cũng chạy `cv-title-check.mjs`, công cụ so sánh từng chức danh trong CV đã tùy chỉnh với chức danh mà cv.md ghi cho cùng công việc đó (ghép theo công ty và thời gian), rồi hỏi bạn muốn giữ hay đổi lại chức danh nào khác biệt. Nó chỉ cảnh báo chứ không chặn, vì diễn đạt lại một chức danh đôi khi là quyết định của bạn. Chưa có gì đánh giá cách diễn đạt lại: [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (kiểm tra tính trung thực theo hướng chặn khi lỗi) đang theo dõi việc này. Cho đến lúc đó, hãy đọc từng CV trước khi gửi. [Tuyên bố miễn trừ pháp lý](LEGAL_DISCLAIMER.md) nói điều tương tự bằng lời dài hơn.
**Tôi có thể chạy career-ops miễn phí, hoặc trên mô hình rẻ hơn / cục bộ không?**
Được. career-ops không phụ thuộc CLI và chạy được trên mô hình miễn phí và cục bộ (mô hình miễn phí của OpenRouter, Ollama hoặc bất kỳ endpoint tương thích OpenAI nào), nên bạn không bị ràng buộc với gói trả phí. Xem [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) để biết cách thiết lập đầy đủ.
**Tôi trả phí Claude Pro/Max nhưng career-ops lại đang tiêu tín dụng API. Vì sao?**
Vì `ANTHROPIC_API_KEY` trong môi trường của bạn được ưu tiên hơn gói đăng ký đã đăng nhập: CLI dùng key và tính phí theo token. Chạy `echo $ANTHROPIC_API_KEY`, và nếu nó in ra bất cứ thứ gì, hãy xóa khỏi shell profile, khởi động lại terminal và chạy `/login`. Chế độ batch là ngoại lệ, vì worker `claude -p` không dùng đăng nhập tương tác: chạy `claude setup-token` một lần và export kết quả thành `CLAUDE_CODE_OAUTH_TOKEN`. Hướng dẫn đầy đủ trong [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 chạy với những AI CLI nào?**
career-ops chạy trên mọi AI coding CLI lớn (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen và nhiều CLI khác) thông qua chuẩn mở Agent Skill Standard, nên không bao giờ bị khóa vào một nhà cung cấp. Hãy dùng CLI bạn đã có.
**Cài career-ops trên Windows thế nào?**
career-ops chạy được trên Windows. Thiết lập riêng cho nền tảng và các điểm dễ vấp (tìm Git Bash, ký tự xuống dòng, Task Scheduler) nằm trong [docs/WINDOWS.md](docs/WINDOWS.md). Nếu skill không nạp được do lỗi symlink khi cài, cách sửa nằm trong [docs/FAQ.md](docs/FAQ.md). Các bước đầy đủ có trong [docs/SETUP.md](docs/SETUP.md).
**career-ops có tự động ứng tuyển thay tôi không?**
Không. career-ops là một bộ lọc, không phải công cụ tự ứng tuyển hàng loạt. AI đánh giá, xếp hạng và soạn nháp; bạn xem lại và quyết định. Nó soạn và điền; nó không bao giờ nộp. Bạn bấm Submit. Thiết kế có con người trong vòng lặp đó chính là cốt lõi.
**career-ops có miễn phí và mã nguồn mở không?**
Có. career-ops miễn phí và mã nguồn mở, và với ứng viên thì sẽ luôn như vậy. Đây là bản triển khai tham chiếu đầu tiên của [Tuyên ngôn CareerOps](https://career-ops.org/manifesto). Hãy đọc, và nếu nó nói đúng điều bạn tin, hãy ký.
## Về tác giả
Tôi là [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), một cựu founder: tôi đã xây dựng và bán một doanh nghiệp vẫn đang vận hành với tên tôi. Tôi xây career-ops để quản lý việc tìm việc của chính mình, và nó hiệu quả: nó giúp tôi có được vị trí Head of Applied AI. Sáu tháng sau tôi rời vị trí đó để toàn thời gian xây dựng career-ops.
Tò mò một repo cỡ này được duy trì thế nào với một đội AI agent và một con người quyết định từng lần merge? Đọc [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet).
Portfolio và các dự án mã nguồn mở khác của tôi → [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).
## Miễn trừ trách nhiệm
**career-ops là một công cụ cục bộ, mã nguồn mở, KHÔNG phải dịch vụ được lưu trữ.** Khi dùng phần mềm này, bạn thừa nhận:
1. **Bạn kiểm soát dữ liệu của mình.** CV, thông tin liên hệ và dữ liệu cá nhân của bạn ở lại trên máy bạn và được gửi trực tiếp tới nhà cung cấp AI bạn chọn (Anthropic, OpenAI, v.v.). Chúng tôi không thu thập, lưu trữ hay truy cập bất kỳ dữ liệu nào của bạn.
2. **Bạn kiểm soát AI.** Các prompt mặc định yêu cầu AI không tự động nộp đơn, nhưng mô hình AI có thể hành xử khó đoán. Nếu bạn sửa prompt hoặc dùng mô hình khác, bạn tự chịu rủi ro. **Luôn xem lại nội dung do AI tạo ra để đảm bảo chính xác trước khi nộp.**
3. **Bạn tuân thủ điều khoản dịch vụ của bên thứ ba.** Bạn phải dùng công cụ này theo Điều khoản dịch vụ của các cổng việc làm bạn tương tác (Greenhouse, Lever, Workday, LinkedIn, v.v.). Không dùng công cụ này để spam nhà tuyển dụng hay làm quá tải hệ thống ATS.
4. **Không có đảm bảo.** Đánh giá là khuyến nghị, không phải sự thật. Mô hình AI có thể bịa ra kỹ năng hoặc kinh nghiệm. Các tác giả không chịu trách nhiệm về kết quả việc làm, đơn bị từ chối, hạn chế tài khoản hay bất kỳ hậu quả nào khác.
Xem [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) để biết chi tiết. Phần mềm này được cung cấp theo [Giấy phép MIT](LICENSE) "nguyên trạng", không kèm bất kỳ bảo hành nào.
## Người đóng góp
<a href="https://github.com/career-ops-hq/career-ops/graphs/contributors">
<img src="https://contrib.rocks/image?repo=career-ops-hq/career-ops&v=2" />
</a>
Mọi người đã đóng góp mã, tài liệu, bản dịch hoặc test đều được liệt kê trong
[CONTRIBUTORS.md](CONTRIBUTORS.md), gồm cả các đóng góp không phải mã, thứ mà
biểu đồ ở trên không thể hiển thị.
Đã được tuyển nhờ career-ops? [Chia sẻ câu chuyện của bạn!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml)
## Giấy phép và nhãn hiệu
Mã được cấp phép theo [MIT](LICENSE). Tên và thương hiệu "career-ops"
được điều chỉnh bởi [Chính sách nhãn hiệu](TRADEMARK.md), thoáng với
cộng đồng, bảo lưu cho việc đặt tên sản phẩm thương mại và
bảo chứng.
## Lịch sử sao
<p align="center">
<a href="https://warpchart.dev/hq">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://warpchart.dev/api/chart?theme=dark&v=3">
<img alt="Số sao theo thời gian thực của career-ops-hq/career-ops" src="https://warpchart.dev/api/chart?theme=light&v=3" loading="lazy">
</picture>
</a>
</p>
<p align="center"><sub>Được tạo và duy trì bởi <a href="https://santifer.io">Santiago Fernández de Valderrama Aparicio</a> (<a href="https://github.com/santifer">@santifer</a>)</sub></p>
## Kết nối
[](https://santifer.io)
[](https://linkedin.com/in/santifer)
[](https://x.com/santifer)
[](https://discord.gg/8pRpHETxa4)
[](mailto:hi@santifer.io)