Miesiące wysyłania CV w ciszę.
Więc zbudowałem filtr, którego potrzebowałem.
740 ocenionych ogłoszeń. 68 aplikacji. 12 rozmów. 1 oferta.
Byłem jego pierwszym użytkownikiem. Dostałem tę pracę. Potem otworzyłem kod.
Wklej ofertę. Na twoim komputerze mówi ci, czy jest wciąż aktualna i czy do ciebie pasuje.
Dopasowuje twoje CV i pisze szkice twoich odpowiedzi. Ty klikasz Wyślij.
Moje własne poszukiwania, w trakcie, z interfejsem po hiszpańsku.
Firmy używają AI do filtrowania kandydatów. Ja dałem kandydatom AI, żeby mogli wybierać firmy.
Pół roku później odszedłem z tej pracy.
Teraz budujemy career-ops, żebyś mógł zdobyć swoją.
Ludzie, którzy przyszli po mnie, spisali, jak zostali zatrudnieni.
Każda karta to publiczne issue, które możesz otworzyć. Dostałeś swoją pracę? Zostaw swoją kartę →
⭐ Jeśli career-ops ci pomógł, gwiazdka pomoże następnej osobie go znaleźć.
## Twoja kolej
Wklej jedną ofertę, na którą miałeś dziś wieczorem aplikować. Jeśli wróci jako nie aplikuj, właśnie odzyskałeś wieczór. Jeśli wróci z planem, wiesz, co robić dalej.
```bash
npx @santifer/career-ops init
```
## Nie musisz szukać w pojedynkę
Cisza po kliknięciu „wyślij” nie mówi nic o tobie. Dość ludzi zobaczyło to samo, żeby spisać praktykę w sześciu linijkach:
> Aplikuj lepiej, na mniej ofert. Sygnał zamiast masy. Dowody zamiast słów kluczowych. Decyduje człowiek. Najpierw lokalnie. Godność po obu stronach stołu.
Rekrutacja sama się nie naprawi. Ludzie, którzy przez nią przechodzą, mogą, i już są w pokoju: porównują notatki i naprawiają sobie nawzajem konfiguracje.
[Tu pisze się poprawkę](CONTRIBUTING.md). Pokój, nie klub. **Budujmy razem.**
## Sponsorzy
career-ops jest darmowy dla kandydatów, na zawsze. Te firmy sponsorują projekt:
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.
> Sponsoring kupuje wyraźnie oznaczoną widoczność, nigdy wpływ: żadna kwota nie zmienia planu rozwoju ani nie umieszcza niczego w produkcie. Sponsorzy nigdy nie pojawiają się w ocenach, rankingach ani rekomendacjach.
## Co career-ops robi dla ciebie
Wklej ofertę. Powie ci, czy ten wieczór jest tego wart.
- **Wciąż aktualna?** Sprawdza, czy ogłoszenie jest nadal aktywne, zanim napiszesz choć słowo.
- **Nie dla ciebie?** Ocenia rolę względem twojego prawdziwego CV i każe odpuścić słabe dopasowanie. Możesz to nadpisać.
- **Warto?** Przygotowuje szkic CV, listu motywacyjnego i odpowiedzi. Ty je czytasz. Ty je wysyłasz.
- **Z kim rozmawiać?** Znajduje osobę i przygotowuje szkic wiadomości. Nigdy jej nie wysyła.
- **Gdzie to wszystko trafia?** Każda aplikacja zostaje na twoim komputerze. Do nas nic nie jest wysyłane.
- **Czego powinienem się nauczyć?** Po serii odmów nazywa lukę.
Pierwsze uruchomienia są szorstkie. Jeszcze cię nie zna. Porozmawiaj z nim: twoje CV, czego chcesz, czego odmawiasz. Potraktuj to jak pierwszy tydzień rekrutera.
Przy pierwszym uruchomieniu pyta o to wszystko na czacie. Nic do ręcznej konfiguracji.
## Czego career-ops nie robi
- **Automatycznie wysyłać aplikacji.** Przygotowuje szkic odpowiedzi do każdego pola; ty sprawdzasz i klikasz Wyślij. Skrypt nigdy nie wykonuje POST (`prepare-application.mjs`).
- **Nie wysyła maili.** Tylko szkice. W całym kodzie nie ma żadnego transportu poczty.
- **Nie dzwoni do domu.** Bez telemetrii, bez naszego backendu. Twoje CV idzie z twojej maszyny do wybranego przez ciebie dostawcy AI i nigdzie indziej. Jedyny publiczny rejestr to to repozytorium: `HIRED.md` i jego issues.
- **Nie namawia do aplikowania poniżej 4.0/5.** Powie, żeby tego nie robić. Możesz to zignorować, a on to powie.
Przeredagowuje twoje CV; nigdy nie wolno mu go zmyślać. Kontrola w kodzie zatrzymuje PDF z liczbami lub faktami, których nie ma ani w twoim CV, ani w `article-digest.md`, ale nie potrafi jeszcze ocenić każdego przeformułowania. Czytaj każde CV przed wysłaniem. Szczegóły w [FAQ](#faq).
## Funkcje
| Funkcja | Opis |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Ocena A-H** | Podsumowanie roli, dopasowanie CV (z wagą każdego wymagania dla tego ogłoszenia i informacją, czy waga pochodzi z treści opisu, jego struktury czy z szacunku, oznaczone per wymaganie; szacunek nigdy nie może być w najwyższym paśmie), strategia poziomu, research wynagrodzeń, personalizacja, przygotowanie do rozmowy (STAR+R), plus kontrola wiarygodności ogłoszenia w bloku G (czy jest wciąż aktualne, czy to ponowna publikacja: obserwacje, nie werdykty) oraz sygnał pozwolenia na pracę, który oznacza opis z wyraźnym brakiem sponsoringu wizy jako twardy bloker |
| **Human-in-the-Loop** | AI ocenia i rekomenduje, ty decydujesz i działasz. System nigdy nie wysyła aplikacji: ostatnie słowo zawsze należy do ciebie |
| **Generowanie PDF pod ATS** | CV czytelne dla ATS, dopasowane do każdego opisu oferty na podstawie twojego własnego doświadczenia, w designie Space Grotesk + DM Sans |
| **Generator listów motywacyjnych** | Listy oparte na researchu z odbiciem słów kluczowych, czterema interaktywnymi pytaniami o kąt (dlaczego/problemy/podejście/ton), zatwierdzaniem szkicu w czacie i PDF A4 przez ten sam pipeline HTML + Playwright co CV. Tworzy szkic przy każdej ocenie; dokończ i wygeneruj na żądanie przez `/career-ops cover` |
| **Poza CV** | Research firmy ([`deep`](modes/deep.md)) odsłania strategię AI, ostatnie ruchy, kulturę inżynierską i kąt, jaki powinien przyjąć twój profil. Wyszukiwanie kontaktów ([`contacto`](modes/contacto.md)) wskazuje hiring managera, rekrutera lub członka zespołu, do którego warto napisać, i tworzy szkic wiadomości na LinkedIn do 300 znaków dopasowanej do typu kontaktu. Szkice formalnych maili aplikacyjnych ([`email`](modes/email.md)) zamieniają oceniony raport lub wklejony opis w temat, treść i checklistę załączników bez wysyłania, składania ani klikania czegokolwiek. Aplikacja ustawia cię w kolejce; research daje ci rozmowę. |
| **Analiza wzorców** | Wzorce odrzuceń i wskaźniki przejścia per kanał ATS (`analyze-patterns.mjs`), statystyki lejka z całego poszukiwania (`stats.mjs`), wykrywanie ponownych publikacji, które mogą wskazywać na ofertę-widmo (`detect-reposts.mjs`) |
Wszystko inne, co robi
| Funkcja | Opis |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Auto-Pipeline** | Wklej URL, dostań pełną ocenę + PDF + wpis w trackerze |
| **Bank historii na rozmowy** | Gromadzi historie STAR+Refleksja między ocenami: 5-10 głównych historii, które możesz dopasować do pytań behawioralnych, jakie dostaniesz |
| **Skrypty negocjacyjne** | Frameworki negocjacji wynagrodzenia, odpowiedź na obniżkę geograficzną, wykorzystanie konkurencyjnych ofert |
| **Szkice maili aplikacyjnych** | Formalne maile do rekrutera, z polecenia lub na zimno z raportu albo wklejonego opisu, z tematem, checklistą załączników, udokumentowanymi punktami dopasowania i blokiem kontaktowym z profilu. Tylko szkice: career-ops nigdy nie wysyła, nie składa i nie klika niczego. |
| **Skaner portali** | 100+ wstępnie skonfigurowanych firm (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + własne zapytania wyszukiwania w sieci po Ashby, Greenhouse, Lever, Wellfound |
| **Odkrywanie firm po finansowaniu** | Komenda `company:funded` (najpierw przegląd) pokazuje firmy z niedawnym finansowaniem i diagnostykę źródeł z ustrukturyzowanych publicznych feedów, bez edytowania twoich danych |
| **Przetwarzanie wsadowe** | Równoległa ocena przez headless workery CLI (`claude -p` / `opencode run`) |
| **Dashboard TUI** | Interfejs terminalowy do przeglądania, filtrowania i sortowania pipeline'u |
| **Integralność pipeline'u** | Automatyczne scalanie, deduplikacja, normalizacja statusów, kontrole stanu |
| **Zestaw do rozmów** | Plany przygotowań w blokach czasowych, sesje ćwiczeniowe z feedbackiem, podsumowania po rozmowie ([`interview/`](modes/interview/README.md)) i detektor sygnałów ostrzegawczych firmy ([`interview-redflag`](modes/interview-redflag.md)) |
| **Etap oferty** | Towarzysz czytania umowy: przejście po klauzulach plus lista pytań do prawnika ([`offer-prep`](modes/offer-prep.md)), i analizator luki między wynagrodzeniem oczekiwanym, ogłoszonym i rzeczywistym (`salary-gap.mjs`) |
| **Follow-upy i odpowiedzi** | Kalkulator rytmu follow-upów i przygotowane przypomnienia (`followup-cadence.mjs`, `followup-seed.mjs`); klasyfikacja odpowiedzi pracodawcy na aktualizacje trackera ([`reply-watch`](modes/reply-watch.md)) |
| **System wtyczek** | Opcjonalne integracje (Gmail, Notion, Apify + rejestr społeczności), domyślnie wyłączone; zobacz [docs/PLUGINS.md](docs/PLUGINS.md) |
## Jak to działa
## Szybki start
**Najszybsza droga, jedna komenda:**
```bash
npx @santifer/career-ops init
```
> 💡 `npx` jest dostarczany z [Node.js](https://nodejs.org): uruchamia instalator raz,
> nie instalując niczego globalnie. Nie masz jeszcze Node? Zainstaluj go najpierw.
> (Używasz już CLI Claude Code / Codex? To już go masz.)
To klonuje najnowsze wydanie do `./career-ops` i instaluje zależności. Potem:
```bash
cd career-ops
claude # or codex / qwen / opencode / agy / grok — open your AI CLI here
```
**Przy pierwszym uruchomieniu career-ops przeprowadza cię przez konfigurację (twoje CV, profil i docelowe role) po prostu w rozmowie. Nic do edytowania ręcznie.**
Wolisz skonfigurować ręcznie? (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
# Wklej adres URL oferty lub tekst jej opisu, aby uruchomić auto-pipeline.
# Wszystkie pozostałe tryby i sposób proszenia o nie w Twoim CLI: zobacz Użycie poniżej.
```
### Instalacja globalna
```bash
npm i -g @santifer/career-ops
```
To instaluje binarkę `career-ops` globalnie, więc możesz uruchamiać `career-ops init [folder]` bez `npx`. `init` to jej jedyna komenda: tworzy przestrzeń roboczą, a wszystko dalej dzieje się w twoim AI CLI (zobacz Użycie poniżej), nie przez tę binarkę.
**Której użyć?**
- `npx @santifer/career-ops init`: najlepsza na pierwszy raz; tworzy dedykowany folder projektu.
- `npm i -g @santifer/career-ops`: jeśli wolisz wpisywać `career-ops init` zamiast formy z `npx`. Nie dodaje żadnych innych komend.
### Inne sposoby uruchomienia
- **Z dowolnego folderu, jako wtyczka Claude Code:** [docs/CLAUDE_PLUGIN.md](docs/CLAUDE_PLUGIN.md).
- **Bez CLI z AI:** samodzielne skrypty Gemini, Ollama i zgodne z OpenAI oceniają ofertę same. Zobacz [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).
> **System jest zaprojektowany tak, by dostosowywało go samo twoje AI CLI.** Tryby, archetypy, wagi oceny, skrypty negocjacyjne: po prostu poproś, żeby je zmieniło. Czyta te same pliki, których używa, więc wie dokładnie, co edytować.
Zobacz [docs/SETUP.md](docs/SETUP.md) po pełny przewodnik konfiguracji, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) po instrukcje taniego uruchamiania career-ops na własnych lub lokalnych modelach (i [docs/FREE_TIER.md](docs/FREE_TIER.md), by uruchomić go za darmo na darmowym planie Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) po harmonogram cyklicznych skanów i przepis na selekcję do shortlisty bez tokenów, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) po szczegóły autouzupełniania formularzy ATS, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) po porównanie eksportu kontaktów z LinkedIn z firmami w twoim lejku, oraz [docs/FAQ.md](docs/FAQ.md) po odpowiedzi na częste pytania o konfigurację, w tym [jak pochodzenie historii zapobiega zmyślonym liczbom](docs/FAQ.md#why-does-career-ops-refuse-to-use-a-number-from-my-story-bank). Zasady projektowe są w [ARCHITECTURE.md](ARCHITECTURE.md); przepływy runtime w [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
## Użycie
Wklej adres URL lub opis oferty do swojego CLI z AI. career-ops sprawdza, czy oferta z linkiem jest nadal aktualna (wklejony tekst nie ma linku do sprawdzenia), ocenia ją względem Twojego CV, pisze raport, dopasowuje Twoje CV (domyślnie jako PDF) i dodaje wiersz do trackera. To pokrywa większość dni. Wszystko inne to tryb, o który prosisz po nazwie. Jeśli nie da się odczytać oferty, pipeline zatrzymuje się i prosi o wklejenie tekstu.
### Jak poprosić o tryb
| CLI | Jak prosisz o `scan` |
| --- | --- |
| Claude Code, OpenCode, Antigravity CLI (`agy`), Grok Build CLI | `/career-ops scan` |
| Pi | `/skill:career-ops scan` |
| Codex, Qwen, Cursor lub dowolne inne obsługiwane CLI | Zwykły język: "Run the career-ops scan mode" |
`/career-ops` bez niczego po nim pokazuje menu komend w CLI, które go używają. Zwykły język działa w każdym obsługiwanym CLI. Jako wtyczka Claude Code komenda to `/career-ops:career-ops`.
Wszystkie korzystają z jednego routera, `.agents/skills/career-ops/SKILL.md`, i tych samych plików `modes/*.md`, więc każdy CLI kieruje żądanie tak samo (tryby intensywnie korzystające z przeglądarki potrzebują też narzędzi Playwright). Komendy slash nie są gwarantowane w Codex: poproś zwykłym językiem albo uruchom jeden prompt w trybie headless przez `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Jak uruchomić career-ops w każdym obsługiwanym CLI, komendy headless tam, gdzie CLI je ma, oraz uwagi konfiguracyjne dla poszczególnych CLI są w [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).
### Codzienne komendy
| Komenda | Co robi |
| --- | --- |
| *wklej URL lub opis oferty* | Pełny pipeline: sprawdzenie, czy oferta jest aktualna (tylko URL-e), ocena A-G plus H przy wysokim wyniku, raport, dopasowane CV (domyślnie PDF), wiersz w trackerze |
| `scan` | Skanuje Twoje portale w poszukiwaniu nowych ofert i dodaje je do skrzynki (`data/pipeline.md`) |
| `pipeline` | Przetwarza URL-e czekające w skrzynce (poziomy standard i premium mogą pomijać oczywiste niedopasowania) |
| `apply` | Wypełnia z Tobą formularz aplikacyjny, pole po polu. Zatrzymuje się przed wysłaniem |
| `tracker` | Na jakim etapie jest każda aplikacja |
| `followup` | Które aplikacje wymagają follow-upu, wraz ze szkicami |
Wszystkie komendy, według etapu poszukiwań
`oferta`, `ofertas` i `contacto` zachowują swoje oryginalne hiszpańskie nazwy: oferta, oferty, kontakt.
**Znajdź stanowiska**
| Komenda | Co robi |
| --- | --- |
| [`scan`](modes/scan.md) | Skanuje portale i odkrywa nowe oferty |
| [`discover`](modes/discover.md) | Zamienia listę nazw firm na skanowalne tablice ATS. Domyślnie tylko pokazuje podgląd; do `portals.yml` dopisuje dopiero z `--write` (bez tokenów) |
| [`pipeline`](modes/pipeline.md) | Przetwarza oczekujące URL-e ze skrzynki (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Szybka wstępna ocena „warto / nie warto” na podstawie `modes/_brief.md`, przed pełną oceną (nie zapisuje plików) |
| [`batch`](modes/batch.md) | Ocenia wiele ofert workerami headless (równolegle z Claude, pojedynczo z innymi CLI) |
| [`titles`](modes/titles.md) | Podpowiada pokrewne tytuły stanowisk na podstawie Twojego CV, by poszerzyć poszukiwania |
**Oceń stanowisko**
| Komenda | Co robi |
| --- | --- |
| *wklej URL lub opis oferty* | [Auto-pipeline](modes/auto-pipeline.md): ocena + raport + dopasowane CV (domyślnie PDF) + wpis w trackerze |
| [`oferta`](modes/oferta.md) | Sama ocena, bloki A–G plus H przy wysokim wyniku (bez PDF) |
| [`ofertas`](modes/ofertas.md) | Porównuje i szereguje kilka ofert |
| [`deep`](modes/deep.md) | Prompt do pogłębionego researchu o firmie |
| [`eu-swe`](modes/regional/eu-swe.md) | Kalibruje europejską aplikację na stanowisko programistyczne przed CV, aplikowaniem lub rozmową |
**Aplikuj**
| Komenda | Co robi |
| --- | --- |
| [`pdf`](modes/pdf.md) | CV zoptymalizowane pod ATS jako PDF |
| [`ats`](modes/ats.md) | Sprawdzenie zgodności z ATS wygenerowanego CV: wynik i problemy do poprawienia |
| [`text`](modes/text.md) | Dopasowane CV jako markdown (odzwierciedla `cv.md`, bez PDF) |
| [`latex`](modes/latex.md) | Eksportuje CV jako plik `.tex` LaTeX/Overleaf |
| [`latex-tex`](modes/latex-tex.md) | Dopasowuje Twój własny `resume.tex` na miejscu (opcjonalnie; `cv.md` pozostaje domyślne) |
| [`cover`](modes/cover.md) | List motywacyjny, z wklejonego opisu oferty lub ocenionego raportu (`cover {slug}`) |
| [`email`](modes/email.md) | Szkic formalnego e-maila aplikacyjnego. Tylko szkic: nigdy nie wysyła, nie przesyła i niczego nie klika |
| [`contacto`](modes/contacto.md) | Znajduje osobę rekrutującą, rekrutera lub kogoś z zespołu i pisze szkic wiadomości na LinkedIn |
| [`apply`](modes/apply.md) | Asystent aplikowania na żywo (Playwright z tego checkoutu). Nie wysyła aplikacji |
**Rozmowa**
| Komenda | Co robi |
| --- | --- |
| [`interview-prep`](modes/interview-prep.md) | Dokument przygotowania do rozmowy pod konkretną firmę |
| [`interview/plan`](modes/interview/plan.md) | Plan przygotowań podzielony na bloki czasu przed nadchodzącą rozmową |
| [`interview/practice`](modes/interview/practice.md) | Rozmowa treningowa, jedno pytanie naraz, z feedbackiem |
| [`interview/debrief`](modes/interview/debrief.md) | Omówienie po rozmowie: uzupełnij luki, przewidź kolejną rundę |
| [`interview-redflag`](modes/interview-redflag.md) | Analizuje sygnały ostrzegawcze pracodawcy, zanim do niego dołączysz |
**Po aplikacji**
| Komenda | Co robi |
| --- | --- |
| [`tracker`](modes/tracker.md) | Przegląd statusów aplikacji |
| [`followup`](modes/followup.md) | Rytm follow-upów: oznacza zaległe aplikacje, generuje szkice |
| [`reply-watch`](modes/reply-watch.md) | Klasyfikuje odpowiedzi pracodawców i podpowiada aktualizacje trackera |
| [`outcome`](modes/outcome.md) | Zapisuje wynik aplikacji i archiwizuje jej artefakty |
| [`offer-prep`](modes/offer-prep.md) | Czyta z Tobą otrzymaną ofertę lub umowę: przejście po klauzulach i pytania do prawnika (to nie porada prawna) |
**Twój profil i CV**
| Komenda | Co robi |
| --- | --- |
| [`interview`](modes/interview.md) | Konfiguracja profilu: interaktywny wywiad o Twoim doświadczeniu, który buduje Twoje CV i profil (to nie trening rozmów) |
| [`intake`](modes/intake.md) | Buduje lub wzbogaca Twój profil na podstawie plików w `documents/` (główne CV, eksport z LinkedIn). Nic nie jest zapisywane bez Twojego potwierdzenia |
| [`master-profile`](modes/master-profile.md) | Importuje, przegląda i waliduje Twój Master Career Profile oraz przygotowuje wybrane fakty jako punkty do CV |
| [`add`](modes/add.md) | Dodaje projekt, publikację lub rolę do CV (pobierz, podgląd, potwierdź) |
| [`expand`](modes/expand.md) | Odkrywa kompetencje brakujące w CV na podstawie linków z Twojego profilu |
| [`retro`](modes/retro.md) | Przegląda tę sesję i zachowuje to, czego ją nauczyłeś, jako reguły (zapisuje tylko te, które zaakceptujesz) |
**Popraw swoje targetowanie**
| Komenda | Co robi |
| --- | --- |
| [`patterns`](modes/patterns.md) | Analizuje wzorce odrzuceń i poprawia targetowanie |
| [`calibrate`](modes/calibrate.md) | Sprawdza, czy Twoje oceny przewidują realne wyniki. Doradczo: nigdy nie zmienia punktacji |
| [`upskill`](modes/upskill.md) | Analiza luk w umiejętnościach na podstawie Twoich ocenionych raportów |
| [`training`](modes/training.md) | Ocenia kurs lub certyfikat względem Twojego North Star |
| [`project`](modes/project.md) | Ocenia pomysł na projekt do portfolio |
**System**
| Komenda | Co robi |
| --- | --- |
| [`agent-inbox`](modes/agent-inbox.md) | Kolejkuje prośby na następną sesję i realizuje je wtedy (`data/agent-inbox.md`). `inbox` też działa |
| [`update`](modes/update.md) | Aktualizuje pliki systemowe career-ops, z podglądem diffa i sprawdzeniem zgodności |
## Skonfigurowane portale
Skaner ma **100+ firm** gotowych do skanowania i **35+ zapytań wyszukiwania** po głównych portalach z ofertami. Skopiuj `templates/portals.example.yml` do `portals.yml` i dodaj własne:
**Laboratoria AI:** Anthropic, OpenAI, Mistral, Cohere, LangChain, Pinecone
**Voice AI:** ElevenLabs, PolyAI, Parloa, Hume AI, Deepgram, Vapi, Bland AI
**Platformy AI:** Retool, Airtable, Vercel, Temporal, Glean, Arize AI
**Contact center:** Ada, LivePerson, Sierra, Decagon, Talkdesk, Genesys
**Enterprise:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Automatyzacja:** n8n, Zapier, Make.com
**Europa:** Factorial, Attio, Tinybird, Clarity AI, Travelperk
**Przeszukiwane portale:** 55+ modułów dostawców obejmuje API ATS, feedy całych portali, feedy XML/RSS, feedy markdown i lokalne parsery. Pełna tabela: [Obsługiwane portale](docs/SUPPORTED_JOB_BOARDS.md).
Domyślnie `node scan.mjs` (czyli `npm run scan`) ufa temu, co zwraca każdy feed ATS. Niektóre firmy zostawiają nieaktualne ogłoszenia w publicznym API nawet po zamknięciu rekrutacji, więc te wygasłe wpisy mogą przeciec do `pipeline.md`. Przekaż `--verify`, by po przejściu API uruchomić Playwrighta i odrzucić wygasłe ogłoszenia, zanim trafią do pipeline'u:
```bash
node scan.mjs --verify # zero-token discovery + Playwright liveness check
```
Weryfikacja jest sekwencyjna i dotyczy tylko nowych ofert (po deduplikacji), więc koszt pozostaje ograniczony.
### 🇵🇱 Polskie portale z ofertami pracy
career-ops obsługuje główne polskie portale IT. Dwa z nich — JustJoin.it i NoFluffJobs — mają publiczne API i mogą być zintegrowane jako źródła Level 0 (zero tokenów, brak WebSearch, świeże dane w czasie skanowania). Pozostałe portale wymagają weryfikacji ręcznej lub przez Playwright.
| Portal | URL | API | Uwagi |
| ------------------- | -------------------------------------------- | ---------- | --------------------------------------------------------------------- |
| **JustJoin.it** | [justjoin.it](https://justjoin.it) | Publiczne | Największy portal IT w Polsce. JSON API z pełnymi danymi ofert |
| **NoFluffJobs** | [nofluffjobs.com](https://nofluffjobs.com) | Publiczne | Obowiązkowe widełki wynagrodzenia. Skierowany do seniorów |
| **pracuj.pl** | [pracuj.pl](https://pracuj.pl) | Brak | Największy ogólny portal. Blokuje boty (403) — weryfikacja ręczna |
| **BulldogJob** | [bulldogjob.pl](https://bulldogjob.pl) | Brak | IT-focused, oferty z widełkami |
| **inhire.io** | [inhire.io](https://inhire.io) | Brak | Headhunting IT, często oferty nieujawnione publicznie |
| **theprotocol.io** | [theprotocol.io](https://theprotocol.io) | Brak | Dawny Rocket Jobs. Transparentne wynagrodzenia |
| **solid.jobs** | [solid.jobs](https://solid.jobs) | Brak | Oferty z weryfikacją przez społeczność |
#### Polskie realia rynku pracy w ocenach
career-ops uwzględnia specyfikę polskiego rynku pracy przy ocenianiu ofert:
- **Forma zatrudnienia**: UoP (Umowa o pracę) vs B2B (Faktura VAT) vs UZ (Umowa zlecenie) — różnice w kwocie netto, bezpieczeństwie, urlopie i ZUS mają wpływ na ocenę stabilności
- **Wynagrodzenie**: brutto (przed podatkiem i ZUS) kontra netto (na rękę). Różnica bywa znaczna — system uwzględnia ją przy porównywaniu ofert
- **Benefity**: prywatna opieka medyczna (Medicover, LuxMed, Enel-Med), karta sportowa (MultiSport, OK System), Edenred / karta lunchowa, PPK
- **Urlop**: 20 dni przy stażu poniżej 10 lat, 26 dni przy stażu 10 lat i więcej (Kodeks pracy)
- **Praca zdalna**: pełny remote, hybryd (np. 2 dni/tydzień), model biurowy — system ocenia to w kontekście preferencji kandydata
- **Okres próbny**: do 3 miesięcy (6 miesięcy dla stanowisk kierowniczych zgodnie z KP)
## Dashboard TUI
Wbudowany dashboard terminalowy pozwala przeglądać pipeline wizualnie:
```bash
npm run serve:dashboard # launch the TUI
npm run build:dashboard # optional: build the standalone binary
```
Funkcje: 10 zakładek filtrów, 8 trybów sortowania, widok zgrupowany/płaski, podglądy ładowane leniwie, zmiany statusu w linii.
Jest też **eksperymentalny interfejs webowy** (alpha i opt-in: nic nie działa, dopóki go nie uruchomisz): zobacz [`web/README.md`](web/README.md).
## Struktura projektu
```
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
```
## Zewnętrzny katalog danych (opcjonalnie)
Domyślnie dane warstwy użytkownika (takie jak `cv.md`, `portals.yml` oraz foldery `data/`, `reports/`, `output/`) żyją w folderze głównym projektu.
Aby oddzielić dane osobiste od kodu (łatwiej przełączać gałęzie, pobierać aktualizacje lub testować kilka profili), możesz skonfigurować zewnętrzny katalog danych według następującego pierwszeństwa:
1. **Zmienne środowiskowe:** ustaw zmienną `CAREER_OPS_ROOT` lub `CAREER_OPS_DATA_DIR`:
```bash
export CAREER_OPS_ROOT=~/my-career-data
```
2. **Plik znacznika:** utwórz plik `.career-ops-data` w katalogu głównym repozytorium ze ścieżką do katalogu danych.
3. **Domyślnie:** katalog główny repozytorium.
Po rozwiązaniu wszystkie pliki użytkownika są rozwiązywane i zapisywane względem tego folderu, a pliki promptów i skrypty nadal względem repozytorium.
- **Nadpisanie trackera:** możesz też ustawić `CAREER_OPS_TRACKER`, by bezpośrednio wskazać ścieżkę pliku trackera aplikacji.
- **Zapisy:** wszystkie operacje zapisu (np. scalanie) kanonicznie trafiają do `{DATA_ROOT}/data/applications.md`.
- **Konfiguracja skanera:** `portals.yml` jest czytany i walidowany w `{DATA_ROOT}/portals.yml`, więc `node validate-portals.mjs` sprawdza ten sam plik, który czyta `scan.mjs`.
- **Generowane dokumenty:** dopasowane CV i listy motywacyjne są zapisywane w `{DATA_ROOT}/output/`, a manifest PDF, który łączy je z raportem, znajduje się w `{DATA_ROOT}/data/pdf-index.tsv`. Dopóki `CAREER_OPS_TRACKER` nie jest ustawiony, przestrzenią roboczą trackera, która ogranicza te zapisy, jest katalog danych, a nie checkout.
- **PDF-y przy nadpisanym trackerze:** `generate-pdf.mjs` rozwiązuje `CAREER_OPS_TRACKER`, zanim wyznaczy przestrzeń roboczą, więc przy ustawionym nadpisaniu przestrzenią roboczą jest folder, w którym leży ten tracker (albo folder nad nim, gdy tracker leży w folderze `data/`). HTML CV i każdy PDF muszą wtedy znajdować się w tej przestrzeni roboczej, a manifest przenosi się do jej `data/pdf-index.tsv`. Listy motywacyjne nadal trafiają do `{DATA_ROOT}/output/`, więc są odrzucane, gdy ten folder wypada poza przestrzeń roboczą trackera.
- **Warstwa kodu zostaje na miejscu:** `node_modules/`, `providers/`, `modes/` i same skrypty zawsze są rozwiązywane względem repozytorium, nigdy względem katalogu danych.
Dashboard TUI w Go, skrypty Node.js i tryby agenta AI automatycznie respektują tę hierarchię.
## Stack technologiczny





- **Agent**: AI CLI do kodowania ze wspólnymi skillami i trybami (`AGENTS.md` + wrapper dla CLI)
- **PDF**: Playwright + szablon HTML
- **Listy motywacyjne**: szablon HTML + Playwright (PDF A4, ten sam pipeline co CV)
- **Skaner**: Playwright + Greenhouse API + WebSearch
- **Dashboard**: Go + Bubble Tea + Lipgloss (motyw Catppuccin Mocha)
- **Dane**: tabele Markdown + konfiguracja YAML + pliki wsadowe TSV
Działa też w każdym CLI zgodnym ze standardem agent skills. Zobacz obsługiwane CLI.
## Również open source
- **[cv-santiago](https://github.com/santifer/cv-santiago)**: strona portfolio (santifer.io) z chatbotem AI, dashboardem LLMOps i case studies. Jeśli potrzebujesz portfolio do pokazania przy poszukiwaniu pracy, zforkuj je i zrób swoim.
## FAQ
**Czym jest career-ops?**
career-ops ([career-ops.org](https://career-ops.org), znany też jako **careerops**) to open source'owe wyszukiwanie pracy z AI, które działa lokalnie w twoim AI CLI (Claude Code, Codex, OpenCode i inne) i zostawia każdą decyzję tobie. Ocenia oferty względem twojego CV, generuje PDF-y dopasowane pod ATS, znajduje właściwą osobę do kontaktu i śledzi wszystko w jednym miejscu: ostatnie słowo zawsze należy do ciebie. To pierwsza referencyjna implementacja [Manifestu CareerOps](https://career-ops.org/manifesto).
**Czy dopasowane CV może coś zmyślić?**
Nie wolno mu, i prompty to mówią: przeredagować, nigdy nie zmyślać. `generate-pdf` blokuje CV z liczbami lub faktami, których nie ma w twoich źródłach, chyba że przekażesz `--skip-fact-check`. Tryb `pdf` uruchamia też `cv-title-check.mjs`, który porównuje każdą nazwę stanowiska w dopasowanym CV z nazwą, jaką cv.md podaje dla tej samej pracy (dopasowanie po firmie i datach), i pyta, czy zachować, czy cofnąć każdą, która się różni. Tylko ostrzega, nie blokuje, bo przeredagowanie nazwy stanowiska bywa twoją decyzją. Nic jeszcze nie ocenia przeformułowań: śledzi to [#1411](https://github.com/career-ops-hq/career-ops/issues/1411) (kontrola wierności blokująca przy niezgodności). Do tego czasu czytaj każde CV przed wysłaniem. [Zastrzeżenie prawne](LEGAL_DISCLAIMER.md) mówi to samo dłużej.
**Czy mogę uruchamiać career-ops za darmo albo na tańszym / lokalnym modelu?**
Tak. career-ops jest niezależny od CLI i działa na darmowych i lokalnych modelach (darmowe modele OpenRouter, Ollama lub dowolny endpoint zgodny z OpenAI), więc nie jesteś przywiązany do płatnej subskrypcji. Pełna konfiguracja: [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md).
**Płacę za Claude Pro/Max, ale career-ops zużywa kredyty API. Dlaczego?**
Bo `ANTHROPIC_API_KEY` w twoim środowisku ma pierwszeństwo przed zalogowaną subskrypcją: CLI używa klucza i rozlicza per token. Uruchom `echo $ANTHROPIC_API_KEY`, a jeśli coś wypisze, usuń go z profilu powłoki, zrestartuj terminal i uruchom `/login`. Tryb wsadowy jest wyjątkiem, bo workery `claude -p` nie używają interaktywnego logowania: uruchom raz `claude setup-token` i wyeksportuj wynik jako `CLAUDE_CODE_OAUTH_TOKEN`. Pełna instrukcja w [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md#2b-already-paying-for-a-subscription-make-sure-you-are-using-it).
**Z jakimi AI CLI działa career-ops?**
career-ops działa z każdym głównym AI CLI do kodowania (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen i inne) przez otwarty Agent Skill Standard, więc nigdy nie jest przywiązany do jednego dostawcy. Użyj CLI, które już masz.
**Jak zainstalować career-ops na Windows?**
career-ops działa na Windows. Konfiguracja specyficzna dla platformy i znane pułapki (wykrywanie Git Bash, końce linii, Harmonogram zadań) są w [docs/WINDOWS.md](docs/WINDOWS.md). Jeśli skille nie ładują się z błędem symlinka podczas instalacji, rozwiązanie jest w [docs/FAQ.md](docs/FAQ.md). Pełne kroki w [docs/SETUP.md](docs/SETUP.md).
**Czy career-ops aplikuje na oferty za mnie?**
Nie. career-ops to filtr, a nie narzędzie do masowego automatycznego aplikowania. AI ocenia, szereguje i pisze szkice; ty sprawdzasz i decydujesz. Pisze szkice i wypełnia pola; nigdy nie składa aplikacji. Ty klikasz Wyślij. Właśnie o to chodzi w projekcie z człowiekiem w pętli.
**Czy career-ops jest darmowy i open source?**
Tak. career-ops jest darmowy i open source, i dla kandydata zawsze taki będzie. To pierwsza referencyjna implementacja [Manifestu CareerOps](https://career-ops.org/manifesto). Przeczytaj go, a jeśli mówi to, w co wierzysz, podpisz.
## O autorze
Jestem [Santiago Fernández de Valderrama Aparicio](https://santifer.io/about) (santifer), były założyciel: zbudowałem i sprzedałem firmę, która nadal działa pod moim nazwiskiem. Zbudowałem career-ops, żeby zarządzać własnym poszukiwaniem pracy, i zadziałało: dzięki niemu dostałem stanowisko Head of Applied AI. Pół roku później odszedłem z tego stanowiska, żeby skupić się na budowaniu career-ops na pełen etat.
Ciekawi cię, jak repozytorium tej wielkości jest utrzymywane przez flotę agentów AI i człowieka, który decyduje o każdym merge'u? Przeczytaj [Agentic maintenance: how career-ops is run by a fleet of AI agents](https://santifer.io/ai-agent-fleet).
Moje portfolio i inne projekty open source → [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).
## Zastrzeżenie prawne
**career-ops to lokalne narzędzie open source, NIE usługa hostowana.** Używając tego oprogramowania, przyjmujesz do wiadomości, że:
1. **Ty kontrolujesz swoje dane.** Twoje CV, dane kontaktowe i dane osobowe zostają na twojej maszynie i są wysyłane bezpośrednio do wybranego przez ciebie dostawcy AI (Anthropic, OpenAI itd.). Nie zbieramy, nie przechowujemy ani nie mamy dostępu do żadnych twoich danych.
2. **Ty kontrolujesz AI.** Domyślne prompty instruują AI, by nie wysyłało aplikacji automatycznie, ale modele AI mogą zachowywać się nieprzewidywalnie. Jeśli modyfikujesz prompty lub używasz innych modeli, robisz to na własne ryzyko. **Zawsze sprawdzaj poprawność treści wygenerowanych przez AI przed wysłaniem.**
3. **Ty przestrzegasz regulaminów stron trzecich.** Musisz używać tego narzędzia zgodnie z regulaminami portali kariery, z którymi wchodzisz w interakcję (Greenhouse, Lever, Workday, LinkedIn itd.). Nie używaj tego narzędzia do spamowania pracodawców ani przeciążania systemów ATS.
4. **Brak gwarancji.** Oceny to rekomendacje, nie prawda. Modele AI mogą halucynować umiejętności lub doświadczenie. Autorzy nie ponoszą odpowiedzialności za wyniki zatrudnienia, odrzucone aplikacje, ograniczenia kont ani żadne inne konsekwencje.
Zobacz [LEGAL_DISCLAIMER.md](LEGAL_DISCLAIMER.md) po pełne szczegóły. To oprogramowanie jest dostarczane na [licencji MIT](LICENSE) „tak jak jest", bez jakiejkolwiek gwarancji.
## Współtwórcy
Każda osoba, która dostarczyła kod, dokumentację, tłumaczenia lub testy, jest wymieniona w
[CONTRIBUTORS.md](CONTRIBUTORS.md), łącznie z wkładem niekodowym, którego
powyższy graf nie może pokazać.
Dostałeś pracę dzięki career-ops? [Podziel się swoją historią!](https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml)
## Licencja i znak towarowy
Kod jest na licencji [MIT](LICENSE). Nazwa i marka
„career-ops" podlegają [Polityce znaku towarowego](TRADEMARK.md): liberalnej
dla użytku społeczności, zastrzeżonej dla nazewnictwa produktów komercyjnych
i rekomendacji.
## Historia gwiazdek