README.ua.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">AI-агент з відкритим кодом для пошуку роботи.</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> Створено <a href="https://github.com/santifer"><strong>@santifer</strong></a> за участі <a href="https://github.com/career-ops-hq/career-ops/blob/main/README.ua.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.ua.md#builders">700+ контриб'юторів</a></p>
<p align="center">
<strong>Місяці надсилання резюме в тишу.</strong><br>
Тож я побудував фільтр, який був мені потрібен.
</p>
<p align="center">
<strong>740 вакансій оцінено. 68 відгуків. 12 співбесід. 1 офер.</strong><br>
Я був його першим користувачем. Я отримав роботу. Потім відкрив код.
</p>
<p align="center">
Вставте вакансію. На вашій машині він скаже, чи вона ще відкрита та чи вам підходить.<br>
Він адаптує ваше резюме й готує чернетки відповідей. <strong>Ви натискаєте «Надіслати».</strong>
</p>
<p align="center">
<img src="docs/demo.gif" alt="Власний пошук автора в дашборді career-ops: вакансії з оцінками, червоний лічильник тих, що позначені «не відгукуватися», а потім повний звіт оцінки" width="800">
</p>
<p align="center"><sub>Мій власний пошук, на півдорозі, з інтерфейсом іспанською.</sub></p>
<p align="center">
Компанії використовують AI для фільтрації кандидатів.<br>
<strong>Я дав кандидатам AI, щоб вони могли <em>вибирати</em> компанії.</strong>
</p>
<p align="center">
Через пів року <strong>я залишив цю роботу.</strong><br>
Тепер ми будуємо career-ops, щоб ви могли отримати свою.
</p>
<p align="center"><a href="#ваша-черга">Спробуйте на одній вакансії ↓</a> · <a href="https://santifer.io/career-ops-system">Прочитайте всю історію →</a></p>
<p align="center"><sub>Не хочете працювати в терміналі? <a href="https://career-ops.org/waitlist?ref=readme-ua">Запишіться до списку очікування вебверсії →</a></sub></p>
<br>
<p align="center"><a href="HIRED.md"><img src="docs/hired-badge.svg" alt="Hired with career-ops: public stories on the record"></a></p>
<p align="center">Люди, які прийшли після мене, записали, як їх найняли.</p>
<p align="center">
<a href="HIRED.md"><img src="docs/hired-wall.svg" alt="Історії найму, які можна відкрити й прочитати" width="800"></a>
</p>
<p align="center"><sub>Кожна картка — публічний issue, який можна відкрити. Отримали свою роботу? <a href="https://github.com/career-ops-hq/career-ops/issues/new?template=i-got-hired.yml">Залиште свою картку →</a></sub></p>
<p align="center">⭐ <strong>Якщо career-ops вам допоміг, зірка допоможе наступній людині його знайти.</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: #1 repository of the day (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="Featured on Product Hunt" width="206" height="54"></a>
</p>
## Ваша черга
Вставте одну вакансію, на яку збиралися відгукнутися сьогодні ввечері. Якщо у відповідь прийде <em>не відгукуватися</em>, ви щойно повернули собі вечір. Якщо прийде план, ви знаєте, що робити далі.
```bash
npx @santifer/career-ops init
```
<p align="center"><sub>Відкритий код. Локально. У тому ШІ-CLI, яким ви вже користуєтесь. <a href="docs/RUNNING_ON_A_BUDGET.md">Безкоштовні та локальні моделі включно.</a></sub></p>
## Вам не обов’язково шукати наодинці
Тиша після натискання «надіслати» не про вас. Достатньо людей побачили те саме, щоб записати практику в шість рядків:
> Відгукуватися краще, але на менше. Сигнал важливіший за обсяг. Докази важливіші за ключові слова. Вирішує людина. Спершу локально. Гідність по обидва боки столу.
<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="Маніфест CareerOps: кількість підписантів наживо"></a></p>
<p align="center">Кілька з них, їхніми власними словами.</p>
<p align="center">
<a href="https://career-ops.org/manifesto?utm_source=readme"><img src="docs/manifesto-wall.svg" alt="Три підписи під маніфестом CareerOps, їхніми власними словами" width="800"></a>
</p>
<p align="center"><sub>Кожен підпис — коміт, який можна перевірити. <a href="https://career-ops.org/manifesto?utm_source=readme">Прочитати всі або додати свій →</a></sub></p>
<br>
Найм сам себе не виправить. Люди, які через нього проходять, можуть, і вони вже в кімнаті: звіряють нотатки й лагодять одне одному налаштування.
<a id="builders"></a>
<p align="center"><a href="CONTRIBUTING.md"><img src="https://warpchart.dev/api/builders?lang=ua" alt="Анімована стіна з GitHub-аватарів учасників, що заповнюється в порядку приходу з квітень 2026 р.; наступна клітинка лишається вільною." width="100%"></a></p>
[Саме тут пишеться виправлення](CONTRIBUTING.md). Кімната, а не клуб. **Будуймо разом.**
<p align="center"><a href="https://discord.gg/8pRpHETxa4"><img src="docs/discord-badge.svg" alt="Discord: кількість учасників сервера career-ops наживо"></a></p>
## Спонсори
career-ops безкоштовний для кандидатів, назавжди. Ці компанії спонсорують проєкт:
<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>
> Спонсорство купує чітко позначену видимість, ніколи не вплив: жодна сума грошей не змінює дорожню карту і нічого не розміщує в продукті. Спонсори ніколи не з’являються в оцінках, рейтингах чи рекомендаціях.
## Що career-ops робить для вас
Вставте вакансію. Він скаже, чи варта вона цього вечора.
- **Ще відкрита?** Він перевіряє, що оголошення досі активне, перш ніж ви напишете хоч слово.
- **Не ваше?** Він оцінює роль проти вашого справжнього резюме і радить пропустити слабкий збіг. Ви можете його переважити.
- **Варте уваги?** Він готує чернетки резюме, супровідного листа та відповідей. Ви їх читаєте. Ви їх надсилаєте.
- **З ким говорити?** Він знаходить людину й готує чернетку повідомлення. Він ніколи його не надсилає.
- **Куди все це йде?** Кожен відгук залишається на вашій машині. Нам нічого не завантажується.
- **Що мені вивчити?** Після серії відмов він називає прогалину.
Перші запуски шорсткі. Він вас ще не знає. Поговоріть з ним: ваше резюме, чого ви хочете, від чого відмовляєтесь. Сприймайте це як перший тиждень рекрутера.
Під час першого запуску він запитує все це в чаті. Нічого налаштовувати вручну.
## Чого career-ops не робить
- **Надсилати відгук автоматично.** Він готує чернетку відповіді для кожного поля; ви перевіряєте й натискаєте «Надіслати». Скрипт ніколи не робить POST (`prepare-application.mjs`).
- **Не надсилає листи.** Лише чернетки. У всьому коді немає жодного поштового транспорту.
- **Не дзвонить додому.** Без телеметрії, без нашого бекенду. Ваше резюме йде з вашої машини до обраного вами AI-провайдера і більше нікуди. Єдиний публічний реєстр: цей репозиторій, `HIRED.md` та його issues.
- **Не штовхає подаватися нижче 4.0/5.** Скаже не робити цього. Ви можете проігнорувати, і він про це скаже.
Він переформульовує ваше резюме; вигадувати не має права ніколи. Перевірка в коді зупиняє PDF, у якому є цифри чи факти, яких немає ні у вашому резюме, ні в `article-digest.md`, але оцінити кожне переформулювання вона поки не може. Читайте кожне резюме перед відправкою. Деталі у [FAQ](#faq).
## Що система вміє
| Функція | Опис |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Оцінка A-H** | Резюме ролі, відповідність резюме (з вагою кожної вимоги для цієї вакансії та позначкою, чи взято вагу з формулювання опису, його структури чи з оцінки, з підписом для кожної вимоги; оцінка ніколи не може бути найвищого рівня), стратегія рівня, дослідження компенсації, персоналізація, підготовка до співбесіди (STAR+R), плюс перевірка легітимності вакансії в блоці G (чи вона ще відкрита, чи це не повторна публікація: спостереження, а не вердикти) і сигнал дозволу на роботу, що позначає опис із явною відмовою у спонсорстві візи як жорсткий блокер |
| **Human-in-the-Loop** | AI оцінює та рекомендує, ви вирішуєте та дієте. Система ніколи не подає заявку: останнє слово завжди за вами <!-- hitl: absolute guarantee. Do not add "automatically", "by itself", "without your permission" or any other hedge when translating this row. --> |
| **Генерація ATS PDF** | Резюме, читабельні для ATS і адаптовані під кожен опис вакансії на основі вашого власного досвіду, у дизайні Space Grotesk + DM Sans |
| **Генератор супровідних листів** | Супровідні листи на основі дослідження з віддзеркаленням ключових слів, чотирма інтерактивними запитаннями про кут подачі (чому/проблеми/підхід/тон), затвердженням чернетки в чаті та A4 PDF через той самий конвеєр HTML + Playwright, що й для резюме. Готує чернетку при кожній оцінці; завершити й згенерувати на вимогу через `/career-ops cover` |
| **Поза межами резюме** | Дослідження компанії ([`deep`](modes/deep.md)) розкриває AI-стратегію, нещодавні кроки, інженерну культуру та кут, під яким варто подати ваш профіль. Пошук контактів ([`contacto`](modes/contacto.md)) визначає hiring-менеджера, рекрутера або колегу з команди, до кого варто звернутися, і готує повідомлення для LinkedIn до 300 символів під кожен тип контакту. Чернетки формальних листів-заявок ([`email`](modes/email.md)) перетворюють оцінений звіт або вставлений опис на тему, текст і чекліст вкладень, нічого не надсилаючи, не подаючи і не клікаючи. Заявка ставить вас у чергу, дослідження дає вам розмову. |
| **Аналіз патернів** | Патерни відмов і частка проходження по каналах ATS (`analyze-patterns.mjs`), статистика воронки за весь пошук (`stats.mjs`), виявлення перепублікацій, які можуть вказувати на вакансію-привид (`detect-reposts.mjs`) |
<details>
<summary><b>Усе інше, що він робить</b></summary>
| Функція | Опис |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Авто-конвеєр** | Вставте URL і отримайте повну оцінку + PDF + запис у трекері |
| **Банк історій для співбесід** | Накопичує історії STAR+Reflection між оцінками: 5-10 головних історій, які можна адаптувати під поставлені вам поведінкові питання |
| **Скрипти переговорів** | Фреймворки переговорів про зарплату, відповідь на географічну знижку, важіль конкурентних оферів |
| **Чернетки листів-заявок** | Формальні листи рекрутеру, за рекомендацією або холодні заявки зі звіту чи вставленого опису, з темою, чеклістом вкладень, обґрунтованими пунктами відповідності та блоком контактів із профілю. Лише чернетки: career-ops ніколи не надсилає, не подає і не клікає нічого. |
| **Сканер порталів** | 100+ попередньо налаштованих компаній (Anthropic, OpenAI, ElevenLabs, Retool, n8n...) + власні пошукові веб-запити по Ashby, Greenhouse, Lever, Wellfound |
| **Пошук профінансованих компаній** | Команда `company:funded` (спершу перегляд) показує компанії з нещодавнім фінансуванням і діагностику джерел зі структурованих публічних стрічок, не змінюючи ваші дані |
| **Пакетна обробка** | Паралельна оцінка headless CLI-воркерами (`claude -p` / `opencode run`) |
| **Dashboard TUI** | Термінальний інтерфейс для перегляду, фільтрації та сортування вашого конвеєра |
| **Цілісність конвеєра** | Автоматичне злиття, дедуплікація, нормалізація статусів, перевірки стану |
| **Набір для співбесід** | Плани підготовки за часовими блоками, тренувальні сесії зі зворотним зв'язком, розбори після співбесіди ([`interview/`](modes/interview/README.md)) і детектор тривожних ознак компанії ([`interview-redflag`](modes/interview-redflag.md)) |
| **Етап оферу** | Супровід читання контракту: прохід по пунктах плюс список питань для юриста ([`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) |
</details>
## Як це працює
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/how-it-works-dark.svg"><img src="docs/how-it-works-light.svg" alt="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)." width="760"></picture></p>
## Швидкий старт
**Найшвидший шлях, одна команда:**
```bash
npx @santifer/career-ops init
```
> 💡 `npx` іде разом із [Node.js](https://nodejs.org): він запускає інсталятор один раз,
> нічого не встановлюючи глобально. Ще немає Node? Спершу встановіть його.
> (Уже користуєтеся CLI Claude Code / Codex? Тоді він у вас уже є.)
Це клонує останній реліз у `./career-ops` і встановлює залежності. Потім:
```bash
cd career-ops
claude # or codex / qwen / opencode / agy / grok — open your AI CLI here
```
**При першому запуску career-ops проведе вас через налаштування (ваше резюме, профіль і цільові ролі) просто в розмові. Нічого не треба редагувати вручну.**
<details>
<summary><b>Хочете налаштувати вручну? (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 # 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
# Вставте URL вакансії або текст опису, щоб запустити auto-pipeline.
# Усі інші режими й те, як викликати їх у вашому CLI: див. розділ «Використання» нижче.
```
</details>
### Глобальне встановлення
```bash
npm i -g @santifer/career-ops
```
Це встановлює бінарник `career-ops` глобально, тож ви можете запускати `career-ops init [folder]` без `npx`. `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).
- **Без ШІ-CLI:** автономні скрипти для Gemini, Ollama та OpenAI-сумісних моделей оцінюють вакансію самостійно. Див. [docs/SCRIPTS.md](docs/SCRIPTS.md#geminieval--ollamaeval--openaieval).
> **Система спроєктована так, щоб її налаштовував сам ваш AI-кодинг CLI.** Режими, архетипи, ваги оцінювання, скрипти переговорів: просто попросіть його змінити їх. Він читає ті самі файли, якими користується, тож точно знає, що редагувати.
Дивіться [docs/SETUP.md](docs/SETUP.md) для повного посібника з налаштування, [docs/RUNNING_ON_A_BUDGET.md](docs/RUNNING_ON_A_BUDGET.md) для дешевого запуску career-ops на власних або локальних моделях (і [docs/FREE_TIER.md](docs/FREE_TIER.md) для запуску без витрат на безкоштовному тарифі Antigravity CLI), [docs/AUTOMATION.md](docs/AUTOMATION.md) для планування регулярних сканувань і рецепту відбору в шортліст без витрат токенів, [docs/APPLY_AUTOFILL.md](docs/APPLY_AUTOFILL.md) для деталей автозаповнення форм ATS, [docs/LINKEDIN_JOIN.md](docs/LINKEDIN_JOIN.md) для звірки експорту ваших контактів LinkedIn з компаніями у вашій воронці, та [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).
## Використання
Вставте URL або опис вакансії у ваш ШІ-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. Якщо career-ops встановлено як плагін Claude Code, команда має вигляд `/career-ops:career-ops`.
Усі вони мають один спільний роутер, `.agents/skills/career-ops/SKILL.md`, і ті самі файли `modes/*.md`, тому будь-який CLI спрямовує запит однаково (режимам, що активно використовують браузер, також потрібні інструменти Playwright). Slash-команди в Codex не гарантовані: просіть звичайною мовою або запустіть один промпт у headless-режимі через `codex exec "Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123"` ([docs/CODEX.md](docs/CODEX.md)). Як запускати career-ops у кожному підтримуваному CLI, headless-команди там, де вони є, і нотатки щодо налаштування окремих CLI — у [docs/SUPPORTED_CLIS.md](docs/SUPPORTED_CLIS.md).
### Щоденні команди
| Команда | Що робить |
| --- | --- |
| *вставте URL або опис вакансії* | Повний пайплайн: перевірка, що вакансія ще відкрита (лише для URL), оцінка за блоками A-G (і H, якщо бал високий), звіт, адаптоване резюме (за замовчуванням PDF), рядок у трекері |
| `scan` | Сканує ваші портали в пошуку нових вакансій і додає їх до вхідних (`data/pipeline.md`) |
| `pipeline` | Обробляє URL, що чекають у вхідних (рівні standard і premium можуть пропускати явні невідповідності) |
| `apply` | Заповнює форму заявки разом із вами, поле за полем. Зупиняється перед надсиланням |
| `tracker` | На якому етапі кожна заявка |
| `followup` | За якими заявками час нагадати про себе, з готовими чернетками |
<details>
<summary><b>Усі команди за етапами пошуку</b></summary>
`oferta`, `ofertas` і `contacto` зберігають первісні іспанські назви: пропозиція, пропозиції, контакт.
**Знайти вакансії**
| Команда | Що робить |
| --- | --- |
| [`scan`](modes/scan.md) | Сканує портали та знаходить нові вакансії |
| [`discover`](modes/discover.md) | Перетворює список назв компаній на сторінки вакансій в ATS, які можна сканувати. За замовчуванням лише показує попередній перегляд і додає їх до `portals.yml` тільки з `--write` (без токенів) |
| [`pipeline`](modes/pipeline.md) | Обробляє відкладені URL із вхідних (`data/pipeline.md`) |
| [`triage`](modes/triage.md) | Швидка первинна оцінка «варто / не варто» за `modes/_brief.md` перед повною оцінкою (файлів не пише) |
| [`batch`](modes/batch.md) | Оцінює багато вакансій headless-воркерами (паралельно з Claude, по одній з іншими CLI) |
| [`titles`](modes/titles.md) | Пропонує суміжні назви посад за вашим резюме, щоб розширити пошук |
**Оцінити вакансію**
| Команда | Що робить |
| --- | --- |
| *вставте URL або опис вакансії* | [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) | Читає разом із вами отриманий офер або договір: розбір пунктів і питання до юриста (не юридична консультація) |
**Ваш профіль і резюме**
| Команда | Що робить |
| --- | --- |
| [`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 і перевіркою сумісності |
</details>
## Попередньо налаштовані портали
Сканер постачається зі **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
**Enterprise:** Salesforce, Twilio, Gong, Dialpad
**LLMOps:** Langfuse, Weights & Biases, Lindy, Cognigy, Speechmatics
**Автоматизація:** n8n, Zapier, Make.com
**Європа:** Factorial, Attio, Tinybird, Clarity AI, Travelperk
**Дошки вакансій, що скануються:** 55+ модулів провайдерів покривають API ATS, стрічки цілих дошок, 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/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/` і самі скрипти завжди розв'язуються відносно репозиторію, ніколи відносно кореня даних.
Дашборд TUI на Go, скрипти Node.js і режими AI-агента автоматично дотримуються цієї ієрархії.
## Технологічний стек





- **Агент**: 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
<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>Працює також у будь-якому CLI зі стандартом agent skills. Див. <a href="docs/SUPPORTED_CLIS.md">підтримувані CLI</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>
## Також у відкритому коді
- **[cv-santiago](https://github.com/santifer/cv-santiago)**: сайт-портфоліо (santifer.io) з AI-чатботом, дашбордом LLMOps і кейс-стаді. Якщо вам потрібне портфоліо на додачу до пошуку роботи, зробіть форк і зробіть його своїм.
## 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 використовує ключ і тарифікує за токен. Виконайте `echo $ANTHROPIC_API_KEY`, і якщо щось виводиться, приберіть його з профілю оболонки, перезапустіть термінал і виконайте `/login`. Пакетний режим є винятком, бо воркери `claude -p` не використовують інтерактивний вхід: один раз виконайте `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).
**З якими AI CLI працює career-ops?**
career-ops працює з будь-яким основним AI-кодинг CLI (Claude Code, Codex, Gemini / Antigravity, OpenCode, Grok, Qwen та іншими) через відкритий Agent Skill Standard, тож ніколи не прив'язаний до одного вендора. Використовуйте той CLI, що у вас уже є.
**Як встановити career-ops на Windows?**
career-ops працює на Windows. Специфічне для платформи налаштування і відомі гострі кути (пошук Git Bash, кінці рядків, Планувальник завдань) описано в [docs/WINDOWS.md](docs/WINDOWS.md). Якщо скіли не завантажуються з помилкою символічного посилання під час встановлення, рішення в [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).
Моє портфоліо та інші 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).
## Застереження
**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) "як є", без будь-яких гарантій.
## Контриб'ютори
<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>
Усі, хто зробив внесок кодом, документацією, перекладами чи тестами, перелічені в
[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): дозвільною
для використання спільнотою, зарезервованою для назв комерційних продуктів
і схвалень.
## Історія зірок
<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="Live star telemetry of career-ops-hq/career-ops" src="https://warpchart.dev/api/chart?theme=light&v=3" loading="lazy">
</picture>
</a>
</p>
<p align="center"><sub>Створив і підтримує <a href="https://santifer.io">Santiago Fernández de Valderrama Aparicio</a> (<a href="https://github.com/santifer">@santifer</a>)</sub></p>
## Контакти
[](https://santifer.io)
[](https://linkedin.com/in/santifer)
[](https://x.com/santifer)
[](https://discord.gg/8pRpHETxa4)
[](mailto:hi@santifer.io)