init
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s

This commit is contained in:
redlineo committed 2026-07-13 10:14:00 +03:00
commit d295c7f139
1527 files changed
+270726

No files matched your search

+118
View File
@@ -0,0 +1,118 @@
# career-ops — Українські режими (`modes/ua/`)
Цей каталог містить україномовні версії режимів career-ops для шукачів роботи, які працюють на українському ринку праці або з вакансіями на ринку України.
## Коли використовувати?
Використовуй `modes/ua/`, якщо виконується хоча б одна з умов:
- Ти відгукуєшся на **вакансії українського ринку** — навіть якщо JD англійською (DOU.ua, Djinni.co, robota.ua, work.ua, LinkedIn Ukraine)
- Твоє **резюме українською** або ти перемикаєшся між UA та EN залежно від вакансії
- Тобі потрібні оцінки, звіти, CV та супровідні листи **з урахуванням специфіки українського ринку**
- Ти працюєш з **особливостями українського ринку**: ФОП 3-тя група, Дія City, КЗпП, ПДФО 18% + військовий збір, зарплати в USD, медстрахування
> **Важливо:** Більшість вакансій в українському ІТ написані англійською, але це все одно український ринок — з ФОП-оформленням, USD-зарплатами, DOU.ua salary bands, специфічними бенефітами та трудовим правом. Стандартні англійські режими з `modes/` не знають цього контексту. Використовуй `modes/ua/` для будь-яких вакансій на українському ринку, незалежно від мови JD.
## Як активувати?
### Спосіб 1 — Per session, за командою
Скажи Claude на початку сесії:
> "Використовуй українські режими з `modes/ua/`."
або
> "Оцінки та відгуки українською — використовуй `modes/ua/_shared.md` та `modes/ua/oferta.md`."
Claude буде читати файли з цього каталогу. Якщо режиму немає в `modes/ua/` (наприклад, `scan`, `batch`, `pdf`), використовується оригінал з `modes/`.
### Спосіб 2 — Постійно, через профіль
Додай у `config/profile.yml`:
```yaml
language:
primary: ua
modes_dir: modes/ua
```
Нагадай Claude в першій сесії: "Дивись в `profile.yml`, я вказав `language.modes_dir`".
> Примітка: `language.modes_dir` — конвенція проєкту (аналогічно `modes/de/` та `modes/fr/`, а не автоматичний механізм у коді. Claude слідує їй як вказівці за наявності нагадування. Якщо агент не підхопив налаштування — нагадайте ще раз.
## Що перекладено?
Перша ітерація охоплює режими з найбільшим впливом:
| Файл | Оригінал | Призначення |
| ------------------- | ------------------------------ | ----------------------------------------------------------------------- |
| `_shared.md` | `modes/_shared.md` (EN) | Спільний контекст, архетипи, глобальні правила, специфіка ринку України |
| `oferta.md` | `modes/oferta.md` (ES) | Повна оцінка вакансії (блоки A-F) |
| `apply.md` | `modes/apply.md` (ES) | Асистент заповнення форм відгуків |
| `pipeline.md` | `modes/pipeline.md` (ES) | Черга URL-ів / Second Brain для зібраних вакансій |
| `interview-prep.md` | `modes/interview-prep.md` (EN) | Підготовка до співбесіди |
Решта режимів (`scan`, `batch`, `pdf`, `tracker`, `auto-pipeline`, `deep`, `contacto`, `ofertas`, `project`, `training`) залишаються на EN/ES. Їхній вміст — переважно tooling, шляхи та команди — не залежить від мови.
## Що залишається англійською?
Свідомо не перекладено, бо це стандартний tech-словник:
- `cv.md`, `pipeline`, `tracker`, `report`, `score`, `archetype`, `proof point`
- Імена інструментів (`Playwright`, `WebSearch`, `WebFetch`, `Read`, `Write`, `Edit`, `Bash`)
- Статуси в трекері (`Evaluated`, `Applied`, `Interview`, `Offer`, `Rejected`)
- Код, шляхи, команди
Режими використовують технічну українську, як нею говорять у реальних командах: український текст, англійські терміни там, де вони загальноприйняті. Жодної примусової українізації "pipeline" → "конвеєр", "cv.md" → "файл-резюме".
## Словник
| English | Українська (у цій кодовій базі) |
| ---------------------------------- | -------------------------------------- |
| Job posting | Вакансія |
| Application | Відгук / заявка |
| Cover letter | Супровідний лист |
| Resume / CV | Резюме |
| Salary | Зарплата |
| Compensation | Компенсація / винагорода / зарплатня |
| Skills | Навички |
| Interview | Співбесіда |
| Hiring manager | Наймаючий менеджер |
| Recruiter | Рекрутер |
| AI | ШІ (Штучний інтелект) |
| Requirements | Вимоги |
| Career history | Досвід роботи |
| Notice period | Термін відпрацювання |
| Probation | Випробувальний термін |
| Vacation | Відпустка |
| Remote | Віддалено / ремоут |
| Hybrid | Гібрид |
| On-site | Офіс |
| Benefits | Бенефіти / пільги |
| Gross salary | Зарплата до вирахувань (gross) |
| Net salary | Зарплата на руки (net) |
| Individual entrepreneur (FOP) | ФОП (фізична особа-підприємець) |
| Employment contract (KZpP) | Оформлення за КЗпП |
| Civil contract (GPD) | Договір ГПД |
| Diia City gig contract | Гіг-контракт Дія City |
| Health insurance | Медичне страхування |
| Dental insurance | Стоматологія |
| Education budget | Бюджет на навчання |
| English courses | Корпоративна англійська |
| Equipment | Обладнання (ноутбук, монітор) |
| Coworking | Коворкінг |
| Mental health support | Психологічна підтримка |
| Military levy | Військовий збір |
| Personal income tax (PDFO) | ПДФО (податок на доходи фізичних осіб) |
| Unified social contribution (YeSV) | ЄСВ (єдиний соціальний внесок) |
## Внесок
Якщо хочеш покращити переклад або додати новий режим:
1. Відкрий issue з пропозицією (див. `CONTRIBUTING.md`)
2. Дотримуйся словника вище для одноманітності
3. Перекладай за змістом та ідіоматично — без дослівних перекладів
4. Зберігай структурні елементи (блоки A-F, таблиці, код, інструкції для інструментів)
5. Протестуй з реальною україномовною вакансією (наприклад, з DOU.ua або Djinni.co)
+273
View File
@@ -0,0 +1,273 @@
# Спільний контекст — career-ops (Українська)
<!-- ============================================================
ЦЕ — СИСТЕМНИЙ AUTO-UPDATABLE ФАЙЛ.
НЕ додавайте сюди персональні дані.
============================================================
Персоналізація → modes/_profile.md та config/profile.yml.
Цей файл містить спільний контекст, архетипи та правила
для україномовних режимів.
Примітка: modes/ua/ поки не включено до auto-update
(update-system.mjs). Оновлення застосовуються вручну.
Перед використанням career-ops переконайтеся:
1. config/profile.yml заповнений вашими даними
2. cv.md створений у корені проєкту (резюме в Markdown)
3. (Опціонально) article-digest.md з proof points
============================================================ -->
## Джерела правди
| Файл | Шлях | Коли |
| ----------------- | ---------------------------- | ---------------------------------------------------- |
| cv.md | `cv.md` (корінь проєкту) | ЗАВЖДИ |
| article-digest.md | `article-digest.md` (якщо є) | ЗАВЖДИ (детальні proof points) |
| profile.yml | `config/profile.yml` | ЗАВЖДИ (ідентичність кандидата і цільові ролі) |
| \_profile.md | `modes/_profile.md` | ЗАВЖДИ (користувацькі архетипи, наратив, переговори) |
**ПРАВИЛО: НІКОЛИ не хардкодити метрики з proof points.** Читати їх з cv.md + article-digest.md під час оцінки.
**ПРАВИЛО: Для метрик статей/проєктів `article-digest.md` має пріоритет над `cv.md`.**
**ПРАВИЛО: Читати `_profile.md` ПІСЛЯ цього файлу. Користувацькі налаштування в `_profile.md` перезаписують значення за замовчуванням.**
---
## Система оцінювання
Оцінка використовує 6 блоків (A-F) з глобальним балом 1-5:
| Вимір | Що оцінює |
| ------------------------ | ------------------------------------------------------------ |
| Збіг з CV | Навички, досвід, proof points alignment |
| Відповідність North Star | Наскільки роль збігається з цільовими архетипами кандидата |
| Компенсація | Зарплата vs ринок (5 = верхній квартиль, 1 = значно нижче) |
| Культурні сигнали | Культура компанії, зростання, стабільність, віддалена робота |
| Red flags | Блокери, попередження (негативні коригування) |
| **Глобальний** | Зважене середнє |
**Інтерпретація балів:**
- 4.5+ → Сильний збіг, рекомендується відгукнутися одразу
- 4.0-4.4 → Гарний збіг, варто відгукнутися
- 3.5-3.9 → Нормально, але не ідеально; відгукуватися лише за наявності конкретної причини
- Нижче 3.5 → Наполегливо рекомендується не відгукуватися (див. Ethical Use в CLAUDE.md)
## Легітимність вакансії (Блок G)
Блок G оцінює, чи є вакансія реальною і активною. НЕ впливає на глобальний бал 1-5 — це окрема якісна оцінка.
**Три рівні:**
- **Висока впевненість** — Реальна, активна вакансія (більшість сигналів позитивні)
- **Обережно** — Змішані сигнали, варто зазначити (деякі занепокоєння)
- **Підозріло** — Множинні індикатори ghost-вакансії, користувач має перевірити спочатку
**Ключові сигнали (зважені за надійністю):**
| Сигнал | Джерело | Надійність | Примітки |
| --------------------------- | ---------------- | ---------- | -------------------------------------------------------------------------------- |
| Вік публікації | Знімок сторінки | Висока | До 30 днів = добре, 30-60 = змішано, 60+ = тривожно (з поправкою на тип ролі) |
| Кнопка Apply активна | Знімок сторінки | Висока | Прямий спостережуваний факт |
| Технічна конкретика в JD | Текст JD | Середня | Загальні JD корелюють з ghost-вакансіями, але можуть бути просто погано написані |
| Реалістичність вимог | Текст JD | Середня | Суперечності — сильний сигнал, розмитість — слабший |
| Новини про скорочення | WebSearch | Середня | Враховувати відділ, час і розмір компанії |
| Повторна публікація | scan-history.tsv | Середня | Та сама роль 2+ рази за 90 днів — тривожно |
| Прозорість зарплати | Текст JD | Низька | Залежить від юрисдикції, багато легітимних причин не вказувати |
| Відповідність роль-компанія | Якісна оцінка | Низька | Суб'єктивно, використовувати лише як допоміжний сигнал |
**Етичний підхід (ОБОВ'ЯЗКОВИЙ):**
- Це допомагає користувачам пріоритизувати час на реальні можливості
- НІКОЛИ не представляти висновки як звинувачення в нечесності
- Представити сигнали і дозволити користувачу вирішити
- Завжди зазначати легітимні пояснення для тривожних сигналів
---
## Визначення архетипу
Класифікувати кожну вакансію в один з типів (або гібрид 2-х):
### Універсальні архетипи
| Архетип | Ключові сигнали в JD |
| ---------------------------------- | ------------------------------------------------------------------ |
| **AI Platform / LLMOps Engineer** | "observability", "evals", "pipelines", "monitoring", "reliability" |
| **Agentic Workflows / Automation** | "agent", "HITL", "orchestration", "workflow", "multi-agent" |
| **Technical AI Product Manager** | "PRD", "roadmap", "discovery", "stakeholder", "product manager" |
| **AI Solutions Architect** | "architecture", "enterprise", "integration", "design", "systems" |
| **AI Forward Deployed Engineer** | "client-facing", "deploy", "prototype", "fast delivery", "field" |
| **AI Transformation Lead** | "change management", "adoption", "enablement", "transformation" |
### Архетипи для українського ринку
| Архетип | Ключові сигнали в JD |
| ----------------------------------- | -------------------------------------------------------------------- |
| **Backend Developer** | Node.js/Java/Go/Python, мікросервіси, highload, PostgreSQL, Kafka |
| **Frontend Developer** | React/Vue/Angular, TypeScript, performance, accessibility |
| **Full-Stack Developer** | TypeScript, React + Node/Python, API design, DevOps basics |
| **DevOps/SRE-engineer** | Kubernetes, CI/CD, моніторинг, автоматизація інфраструктури, AWS/GCP |
| **QA-engineer / SDET** | Автоматизація тестування, CI/CD, навантажувальне тестування |
| **Data Engineer / ML Engineer** | ETL, Spark, Airflow, ML pipelines, feature stores |
| **Product Manager** | Discovery, delivery, метрики, roadmap, стейкхолдери |
| **Tech Lead / Engineering Manager** | People management, tech strategy, delivery, найм |
| **Solution Architect** | Системний дизайн, інтеграції, масштабування, стандарти |
Після визначення архетипу — читати `modes/_profile.md` для специфічного фреймінгу та proof points кандидата.
### Адаптивний фреймінг за архетипом
> **Конкретні метрики: читати під час оцінки з `cv.md` та `article-digest.md`. НІКОЛИ не хардкодити.**
| Якщо роль... | Підкреслити про кандидата... | Джерела proof points |
| ------------------------- | ----------------------------------------------------- | ------------------------- |
| Platform / LLMOps | Production systems, observability, evals, reliability | article-digest.md + cv.md |
| Agentic / Automation | Multi-agent orchestration, HITL, fault tolerance | article-digest.md + cv.md |
| Technical AI PM | Product discovery, PRD, metrics, delivery | cv.md + article-digest.md |
| Solutions Architect | System design, integrations, enterprise-ready | article-digest.md + cv.md |
| Forward Deployed Engineer | Fast delivery, client-facing, prototype → prod | cv.md + article-digest.md |
| Backend | Highload, microservices, scaling, distributed systems | cv.md |
| DevOps/SRE | Infrastructure, CI/CD, monitoring, automation | cv.md |
| Tech Lead / EM | Leadership, hiring, tech strategy, delivery | cv.md |
---
## Специфіка українського ринку 🇺🇦
### Компенсація
- **Валюта**: Українське ІТ працює переважно в **USD**. Зарплати майже завжди обговорюються й виплачуються в доларах (навіть для ФОП). Для не-ІТ позицій — гривні (₴ / UAH).
- **Gross vs Net**: Для ФОП (найпоширеніша форма в ІТ) — зазвичай обговорюється net-сума, податки — відповідальність ФОП. Для штатних — уточнити: `gross` чи `на руки (net)`. ПДФО: 18% + військовий збір 5% (станом на 2024+).
- **Джерела даних**: DOU.ua/salaries (основне), djinni.co/salaries, Glassdoor, Levels.fyi (для міжнародних), Blind.
- **Бонуси**: Рідкість в українському ІТ. Частіше — перегляд зарплати раз на рік. Деякі продуктові компанії мають квартальні бонуси.
### Оформлення трудових відносин
| Тип | Опис | Вплив на оцінку |
| --------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------- |
| **ФОП 3-тя група** | Фізична особа-підприємець, 3-тя група (5% єдиний податок). Стандарт в українському ІТ | Нейтрально (де-факто норма) |
| **ФОП + Дія City** | ФОП через резидента Дія City. Гіг-контракт зі спеціальним захистом | +0.1 до стабільності (додатковий захист) |
| **КЗпП (штат)** | Оформлення за Кодексом законів про працю. Максимальний захист | +0.3 до стабільності |
| **ГПД** | Цивільно-правовий договір. Мінімальний захист | -0.2 до стабільності |
| **B2B (міжнародний)** | Контракт з іноземною компанією через ФОП | Нейтрально (стандарт для remote) |
> **Дія City** — спеціальний правовий режим для ІТ-компаній в Україні. Гіг-контракт через Дія City надає працівникам додатковий захист (оплачувана відпустка, лікарняні, захист від звільнення) при збереженні податкових переваг ФОП.
### Податки (для ФОП 3-тя група — ІТ)
- **Єдиний податок**: 5% від доходу
- **ЄСВ** (єдиний соціальний внесок): мінімальний розмір (~1760 грн/міс станом на 2024)
- **Для штатних**: ПДФО 18% + військовий збір 5% + ЄСВ (сплачує роботодавець)
- **Дія City (гіг-спеціалісти)**: 5% ПДФО + 1.5% військовий збір
### Бенефіти (типові для українського ІТ)
- **Медичне страхування** — стандарт у компаніях з 50+ людей
- **Стоматологія** — розширений пакет, хороший сигнал
- **Бюджет на навчання** — конференції, курси, сертифікації ($500-2000/рік)
- **Англійська мова** — корпоративні курси (дуже поширено)
- **Спорт** — компенсація або корпоративний абонемент
- **Обладнання** — ноутбук + монітор (часто залишається після звільнення)
- **Коворкінг** — компенсація для remote-працівників
- **Психологічна підтримка** — стало стандартом після 2022 року
### Трудове право (КЗпП)
- **Випробувальний термін**: до 3 місяців (до 6 для керівників)
- **Відпустка**: мінімум 24 календарні дні за КЗпП
- **Лікарняний**: оплачується з фонду соціального страхування + доплата роботодавця
- **Звільнення**: відпрацювання 2 тижні (за угодою сторін — без відпрацювання)
- **Для ФОП**: жодних гарантій за КЗпП — все визначається контрактом
### Ринок праці (особливості)
- **DOU.ua** — головна платформа для українських ІТ-спеціалістів (вакансії, зарплати, спільнота)
- **Djinni.co** — анонімний пошук роботи, кандидат приховує профіль
- **robota.ua**, **work.ua** — загальні портали (не тільки ІТ)
- **LinkedIn** — основний канал для міжнародних позицій
- **Більшість вакансій — remote/hybrid** після 2022 року
- **Англійська — обов'язкова** для більшості ІТ-позицій (B2+)
- **Українські компанії часто наймають глобально** — конкуренція з кандидатами з інших країн
- **Релокація**: багато українських спеціалістів працюють з-за кордону — уточнювати timezone-вимоги
---
## Глобальні правила
### НІКОЛИ
1. Вигадувати досвід або метрики
2. Модифікувати cv.md або файли портфоліо
3. Надсилати відгуки від імені кандидата
4. Ділитися телефоном у генерованих повідомленнях
5. Рекомендувати компенсацію нижче ринку
6. Генерувати PDF без попереднього читання JD
7. Використовувати канцелярит і корпоративну мову
8. Ігнорувати трекер (кожна оцінена вакансія реєструється)
### ЗАВЖДИ
0. **Супровідний лист:** Якщо форма дозволяє, ЗАВЖДИ включати. Той самий дизайн, що й CV. Цитати з JD, прив'язані до proof points. Максимум 1 сторінка.
1. Читати cv.md, \_profile.md та article-digest.md (якщо є) перед оцінкою
1b. **Перша оцінка в сесії:** Запустити `node cv-sync-check.mjs`. Якщо є попередження — повідомити користувача.
2. Визначити архетип ролі та адаптувати фреймінг за \_profile.md
3. Цитувати точні рядки з CV при збігу
4. Використовувати WebSearch для дослідження компенсації та даних про компанію
5. Реєструвати в трекері після оцінки
6. Генерувати контент мовою JD (UA за замовчуванням для україномовних вакансій, EN для англомовних)
7. Бути прямим і конкретним — без води
8. Для україномовних вакансій: технічна українська, короткі речення.
8b. URL-и кейсів у Professional Summary PDF (рекрутер може прочитати тільки це).
9. **Додавання до трекера як TSV** — не додавати НОВІ записи в `data/applications.md` напряму; для нових записів писати TSV у `batch/tracker-additions/` і робити merge. Пряме редагування існуючих рядків допустиме для оновлення `status`/`notes`.
10. **Включати `**URL:**` в заголовок кожного звіту.**
### Інструменти
| Інструмент | Застосування |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| WebSearch | Дослідження компенсації, тренди, культура компанії, контакти в LinkedIn, fallback для JD |
| WebFetch | Fallback для отримання JD зі статичних сторінок |
| Playwright | Верифікація вакансій (browser_navigate + browser_snapshot). **НІКОЛИ 2+ агентів з Playwright паралельно.** |
| Read | cv.md, \_profile.md, article-digest.md, cv-template.html |
| Write | Тимчасовий HTML для PDF, data/applications.md, звіти .md |
| Edit | Оновлення трекера |
| Canva MCP | Опціональна генерація візуального CV. Дублювати базовий дизайн, редагувати текст, експортувати PDF. Потребує `canva_resume_design_id` в profile.yml. |
| Bash | `node generate-pdf.mjs` |
### Пріоритет швидкості
- Робоче демо + метрики > перфекціонізм
- Відгукнутися раніше > вивчити більше
- Підхід 80/20, таймбоксити все
---
## Professional Writing та ATS-сумісність
Ці правила застосовуються до ВСЬОГО генерованого тексту для кандидата: PDF-резюме, буллети, супровідні листи, відповіді у формах, повідомлення в LinkedIn. НЕ застосовуються до внутрішніх звітів оцінки.
### Уникати кліше
- "Я захоплений..." / "Passionate about..." / "результат-орієнтований" / "results-driven"
- "великий досвід" / "extensive experience" / "proven track record"
- "Задіяв" / "Leveraged" (називати конкретний інструмент)
- "Очолив" / "Spearheaded" (використовувати "керував" / "led" або "запустив" / "launched")
- "Забезпечив взаємодію" / "Facilitated collaboration" (використовувати "організував" / "set up")
- "Синергія" / "Synergy" / "комплексний" / "comprehensive" / "інноваційний" / "innovative"
- "У сучасному швидкоплинному світі" / "In today's fast-paced environment"
- "продемонстрована здатність" / "demonstrated ability to" / "best practices" (назвати конкретну практику)
### Юнікод-нормалізація для ATS
`generate-pdf.mjs` автоматично нормалізує em-dash, розумні лапки та zero-width символи в ASCII для максимальної ATS-сумісності. Але краще не генерувати їх взагалі.
### Різноманітність структури речень
- Не починати кожен буллет одним і тим самим дієсловом
- Чергувати довжину речень (коротко. Потім довше з контекстом. Знову коротко.)
- Не завжди використовувати "X, Y та Z" — іноді два пункти, іноді чотири
### Конкретика замість абстракцій
- "Знизив p95 latency з 2.1с до 380мс" краще, ніж "покращив продуктивність"
- "Postgres + pgvector для пошуку по 12к документів" краще, ніж "спроєктував масштабовану RAG-архітектуру"
- Називати інструменти, проєкти та клієнтів, коли дозволено
+111
View File
@@ -0,0 +1,111 @@
# Режим: apply — Асистент відгуку в реальному часі
Інтерактивний режим для заповнення форми відгуку в Chrome. Читає екран, завантажує контекст вакансії, генерує персоналізовані відповіді.
## Вимоги
- **Краще з Playwright**: Кандидат бачить браузер, Claude взаємодіє зі сторінкою.
- **Без Playwright**: Кандидат ділиться скріншотом або вставляє питання вручну.
## Workflow
```
1. ВИЗНАЧИТИ → Прочитати активну вкладку Chrome (скріншот/URL/заголовок)
2. РОЗПІЗНАТИ → Витягти компанію + роль зі сторінки
3. ЗНАЙТИ → Збіг з існуючими звітами в reports/
4. ЗАВАНТАЖИТИ → Прочитати повний звіт + секцію G (якщо є)
5. ПОРІВНЯТИ → Роль на екрані збігається з оціненою? Якщо змінилася → попередити
6. АНАЛІЗ → Визначити ВСІ видимі питання форми
7. ГЕНЕРАЦІЯ → Для кожного питання — персоналізована відповідь
8. ПОКАЗАТИ → Відформатовані відповіді для copy-paste
9. СТОП → НІКОЛИ не натискати Submit/Send/Apply. Чекати явного підтвердження від користувача.
```
> **⚠️ Human-in-the-Loop:** Цей режим генерує відповіді та заповнює поля, але НІКОЛИ не відправляє форму. Фінальне рішення про подачу заявки — завжди за користувачем.
## Крок 1 — Визначити вакансію
**З Playwright:** Snapshot активної сторінки. Прочитати заголовок, URL, видимий вміст.
**Без Playwright:** Попросити кандидата:
- Поділитися скріншотом форми
- Або вставити питання як текст
- Або назвати компанію + роль
## Крок 2 — Знайти контекст
1. Витягти назву компанії та посаду
2. Шукати в `reports/` за назвою компанії (Grep, case-insensitive)
3. Якщо є збіг → завантажити повний звіт
4. Якщо є секція G → завантажити чернетки як базу
5. Якщо НЕМАЄ збігу → попередити та запропонувати запустити auto-pipeline
## Крок 3 — Виявити зміни
Якщо роль на екрані відрізняється від оціненої:
- **Попередити кандидата**: "Роль змінилася з [X] на [Y]. Переоцінити чи адаптувати відповіді?"
- Оновити трекер за потреби
## Крок 4 — Аналізувати питання форми
Визначити ВСІ видимі питання:
- Поля вільного тексту (супровідний лист, "чому ця роль" тощо)
- Випадаючі списки (звідки дізналися, дозвіл на роботу тощо)
- Так/Ні (переїзд, віза тощо)
- Поля зарплати (діапазон, очікування)
- Поля завантаження (резюме, супровідний PDF)
## Крок 5 — Генерувати відповіді
Для кожного питання:
1. **Контекст звіту**: Proof points з блоку B, історії STAR з блоку F
2. **Секція G**: Якщо є чернетка — використовувати як базу та покращити
3. **Тон "Я обираю вас"**: Кандидат має варіанти і обирає цю компанію з конкретних причин
4. **Конкретика**: Посилання на щось конкретне з видимого JD
5. **Мова відповідей**: Мовою JD. Для україномовних вакансій — українською. Для англомовних — англійською.
**Формат виводу:**
```
## Відповіді для [Компанія] — [Роль]
На основі: Звіт #NNN | Бал: X.X/5 | Архетип: [тип]
---
### 1. [Точне питання з форми]
> [Відповідь, готова для copy-paste]
### 2. [Наступне питання]
> [Відповідь]
...
---
Примітки:
- [Спостереження про роль, зміни тощо]
- [Пропозиції щодо персоналізації для перевірки кандидатом]
```
### Специфічні поля українських форм
- **Зарплатні очікування**: Вказувати в USD (для ІТ) або UAH, уточнити gross/net та форму оформлення (ФОП/штат)
- **Дата початку**: Враховувати відпрацювання (2 тижні за КЗпП, для ФОП — за контрактом)
- **Дозвіл на роботу**: Для українців в ЄС — тимчасовий захист (Temporary Protection Directive)
- **Мовні навички**: Українська (рідна), англійська (рівень), інші мови
- **Готовність до переїзду / timezone**: Уточнити поточну локацію та timezone overlap
## Крок 6 — Після відгуку (тільки після явного підтвердження користувача)
**СТОП.** Не продовжувати, поки користувач явно не підтвердить, що він переглянув відповіді та відправив форму самостійно.
Якщо кандидат підтвердив відправку:
1. Оновити статус у `data/applications.md` з "Evaluated" на "Applied"
2. Оновити секцію G звіту фінальними відповідями
3. Запропонувати: `/career-ops contacto` для LinkedIn outreach
+148
View File
@@ -0,0 +1,148 @@
# Режим: interview-prep — Підготовка до співбесіди
Коли користувач просить підготуватися до співбесіди в конкретній компанії, або оцінка ≥ 4.0 і статус оновлено на `Interview`.
## Вхідні дані
1. **Назва компанії** та **посада** (обов'язково)
2. **Звіт оцінки** в `reports/` (якщо є)
3. **Банк історій** `interview-prep/story-bank.md`
4. **CV** `cv.md` + `article-digest.md`
5. **Профіль** `config/profile.yml` + `modes/_profile.md`
## Крок 1 — Дослідження
WebSearch-запити. Витягати структуровані дані, не перекази. Цитувати джерела.
| Запит | Що витягти |
| ----------------------------------------------------------- | -------------------------------------------------------- |
| `"{company} {role} interview questions site:glassdoor.com"` | Реальні питання, складність, таймлайн, кількість раундів |
| `"{company} interview process site:teamblind.com"` | Описи процесу, дані про компенсацію |
| `"{company} {role} interview site:leetcode.com/discuss"` | Конкретні задачі, теми system design |
| `"{company} engineering blog"` | Стек, цінності, технічні пріоритети |
| `"{company} співбесіда відгуки site:dou.ua"` | Відгуки українською про процес співбесіди |
| `"{company} інтерв'ю досвід site:dou.ua"` | Досвід проходження співбесід на DOU |
| `"{company} відгуки співробітників site:dou.ua"` | Відгуки про компанію від працівників |
| `"{company} interview site:djinni.co"` | Відгуки кандидатів на Djinni |
**НЕ вигадувати питання.** Виведені з JD — позначати `[виведено з JD]`.
## Крок 2 — Огляд процесу
```markdown
## Огляд процесу
- **Раунди:** {N} раундів, ~{X} днів від початку до кінця
- **Формат:** {напр., скринінг HR → технічне інтерв'ю → тестове → onsite → наймаючий менеджер}
- **Складність:** {X}/5 (середнє Glassdoor, N відгуків)
- **Позитивний досвід:** {X}%
- **Особливості:** {напр., "парне програмування замість дошки", "без LeetCode, тільки практичні задачі"}
- **Джерела:** {посилання}
```
## Крок 3 — Розбір за раундами
```markdown
### Раунд {N}: {Тип}
- **Тривалість:** {X} хв
- **Проводить:** {колега / менеджер / skip-level / рекрутер}
- **Що оцінюють:** {конкретні навички}
- **Зафіксовані питання:**
- {питання} — [джерело: Glassdoor 2026-Q1]
- **Як готуватися:** {1-2 конкретні дії}
```
## Крок 4 — Вірогідні питання
### Технічні
Питання з system design, написання коду, архітектури, domain knowledge.
### Поведінкові
Питання про лідерство, конфлікти, колаборацію, невдачі.
Для кожного — яка історія з `story-bank.md` підходить найкраще.
### Специфічні для ролі
Питання, прив'язані до конкретного JD (з урахуванням архетипу).
### Red flags у бекграунді
Питання, які інтерв'юер вірогідно задасть про прогалини, переходи або незвичайні елементи у бекграунді. Читати `_profile.md` та `cv.md`.
## Крок 5 — Маппінг банку історій
| # | Вірогідне питання/тема | Найкраща історія з story-bank.md | Fit | Прогалина? |
| --- | ---------------------- | -------------------------------- | --- | ---------- |
- **strong**: історія прямо відповідає на питання
- **partial**: історія суміжна, потрібний рефреймінг
- **none**: немає підходящої → відзначити для користувача
## Крок 6 — Чекліст технічної підготовки
```markdown
- [ ] {тема} — чому: "{доказ з дослідження}"
- [ ] {тема} — чому: "{їхній блог/продукт каже, що це важливо}"
```
Пріоритизувати за частотою та релевантністю. Максимум 10 пунктів.
## Крок 7 — Сигнали компанії
- **Цінності, на які скрінять:** назвати, цитувати джерело
- **Словник для використання:** внутрішні терміни компанії
- **Чого уникати:** анти-патерни з відгуків
- **Питання їм:** 2-3 гострих питання, що демонструють домашню роботу
## Специфіка українських співбесід 🇺🇦
### Типові раунди в українських ІТ-компаніях
1. **Скринінг HR** (20-30 хв): мотивація, зарплатні очікування, формат роботи, англійська
2. **Технічне інтерв'ю** (60-90 хв): знання стеку, архітектура, практичні задачі
3. **Live coding** (45-60 хв): алгоритми або практичні задачі (частіше практичні)
4. **System design** (60 хв): проєктування систем (особливо у продуктових компаніях)
5. **Культурний fit** (30-45 хв): цінності, командна робота, комунікація
6. **Тестове завдання** — поширене в українських компаніях (1-4 години, іноді take-home)
### Часті питання на українських співбесідах
- "Розкажіть про себе" (2-3 хвилини, структуровано)
- "Чому шукаєте нову роботу?"
- "Зарплатні очікування?" (уточнити USD/UAH, ФОП/штат)
- "Готовність до переїзду / timezone overlap?"
- "Розкажіть про найскладніший проєкт"
- "Як вирішуєте конфлікти в команді?"
- "Який ваш рівень англійської?" (часто перевіряють в процесі)
- System design: "Спроєктуйте {URL shortener / чат / стрічка новин / платіжна система}"
### Формат STAR+R українською
- **С (Ситуація):** Контекст і вступні дані
- **З (Завдання):** Що потрібно було зробити
- **Д (Дії):** Що конкретно зроблено
- **Р (Результат):** Вимірюваний результат
- **О (Осмислення):** Що зрозумів, що зробив би інакше
## Висновок
Зберегти звіт у `interview-prep/{company-slug}-{role-slug}.md`.
```markdown
# Підготовка до співбесіди: {Компанія} — {Роль}
**Звіт:** {посилання на звіт оцінки або "N/A"}
**Досліджено:** {YYYY-MM-DD}
**Джерела:** {N} відгуків Glassdoor, {N} постів Blind, {N} інших
```
## Правила
- **НІКОЛИ не вигадувати питання і приписувати їх джерелам.**
- **НІКОЛИ не фабрикувати рейтинги Glassdoor.**
- **Цитувати все.** Кожне питання, кожна статистика отримує джерело або тег `[виведено]`.
- Генерувати мовою JD (UA за замовчуванням для україномовних вакансій).
- Бути прямим. Це робочий документ підготовки, не мотиваційна промова.
+184
View File
@@ -0,0 +1,184 @@
# Режим: oferta — Повна оцінка A-F
Коли кандидат вставляє вакансію (текст або URL), ЗАВЖДИ видати 6 блоків:
## Крок 0 — Визначення архетипу
Класифікувати вакансію за одним з архетипів (див. `_shared.md`). Якщо гібрид — вказати 2 найближчих. Це визначає:
- Які proof points пріоритизувати в блоці B
- Як переписати summary в блоці E
- Які історії STAR готувати в блоці F
## Блок A — Резюме ролі
Таблиця з:
- Визначений архетип
- Domain (platform/agentic/LLMOps/ML/enterprise/backend/frontend/devops)
- Function (build/consult/manage/deploy)
- Seniority
- Формат роботи (віддалено/гібрид/офіс)
- Розмір команди (якщо вказано)
- Оформлення (ФОП / КЗпП / ГПД / Дія City — якщо вказано)
- TL;DR в 1 реченні
## Блок B — Збіг з CV
Прочитати `cv.md`. Створити таблицю: кожна вимога JD → точні рядки CV.
**Адаптовано під архетип:**
- Якщо FDE → пріоритизувати proof points швидкої поставки та клієнтської роботи
- Якщо SA → пріоритизувати системний дизайн та інтеграції
- Якщо PM → пріоритизувати product discovery та метрики
- Якщо LLMOps → пріоритизувати evals, observability, pipelines
- Якщо Agentic → пріоритизувати мульти-агент, HITL, оркестрацію
- Якщо Backend → пріоритизувати highload, мікросервіси, масштабування
- Якщо DevOps/SRE → пріоритизувати інфраструктуру, CI/CD, моніторинг
Розділ **прогалин** зі стратегією закриття кожної:
1. Це hard blocker чи nice-to-have?
2. Чи може кандидат продемонструвати суміжний досвід?
3. Чи є портфоліо-проєкт, що закриває цю прогалину?
4. Конкретний план закриття (фраза для супровідного листа, швидкий проєкт тощо)
## Блок C — Рівень і стратегія
1. **Рівень у JD** vs **природний рівень кандидата для цього архетипу**
2. **План "продати senior без обману"**: конкретні фрази, адаптовані під архетип, досягнення для акценту, як позиціонувати досвід
3. **План "якщо знизять рівень"**: прийняти якщо компенсація справедлива, домовитися про перегляд через 6 місяців, чіткі критерії зростання
## Блок D — Компенсація та попит
Використовувати WebSearch для:
- Актуальні зарплати за роллю (DOU.ua/salaries, djinni.co/salaries, Glassdoor, Levels.fyi, Blind)
- Репутація компанії щодо компенсації
- Тренд попиту на роль
- **Валюта**: уточнити USD чи UAH; для ФОП — net чи gross
Таблиця з даними та цитуванням джерел. Якщо даних немає — сказати про це замість вигадування.
**Специфіка України:**
- Зарплати в українському ІТ переважно в **USD** (навіть для ФОП)
- Для ФОП 3-тя група: net ≈ gross × 0.95 (5% єдиний податок) + ЄСВ (~1760 грн/міс)
- Для штатних: net ≈ gross × 0.77 (ПДФО 18% + військовий збір 5%)
- Врахувати бенефіти: медстрахування, навчання, обладнання
- Оформлення: КЗпП/Дія City дають більше гарантій, ніж звичайний ФОП
## Блок E — План персоналізації
| # | Розділ | Поточний стан | Пропонована зміна | Чому |
| --- | ------- | ------------- | ----------------- | ---- |
| 1 | Summary | ... | ... | ... |
| ... | ... | ... | ... | ... |
Топ 5 змін CV + Топ 5 змін у LinkedIn/DOU для максимального збігу.
## Блок F — План співбесід
6-10 історій STAR+R, прив'язаних до вимог JD (STAR + **Рефлексія**):
| # | Вимога JD | Історія STAR+R | С | З | Д | Р | Рефлексія |
| --- | --------- | -------------- | --- | --- | --- | --- | --------- |
Стовпець **Рефлексія** фіксує, що було вивчено або що можна було б зробити інакше. Це сигнал сеньйорності — джуніори описують що сталося, сеньйори витягують уроки.
**Банк історій:** Якщо `interview-prep/story-bank.md` існує, перевірити, чи є там ці історії. Якщо ні — додати нові. З часом це формує банк з 5-10 майстер-історій для будь-якого питання на співбесіді.
**Підібрані й обрамлені за архетипом:**
- FDE → акцент на швидкості поставки та клієнтській роботі
- SA → акцент на архітектурних рішеннях
- PM → акцент на discovery та trade-offs
- Backend → акцент на highload, масштабуванні, надійності
- DevOps → акцент на автоматизації, інцидентах, reliability
Включити також:
- 1 рекомендований кейс (який проєкт представити і як)
- Питання-пастки та як на них відповідати (напр.: "Чому пішли з попереднього місця?", "Чому вирішили змінити стек?")
---
## Пост-оцінка
**ЗАВЖДИ** після генерації блоків A-F:
### 1. Зберегти звіт .md
Зберегти повну оцінку в `reports/{###}-{company-slug}-{YYYY-MM-DD}.md`.
- `{###}` = наступний порядковий номер (3 цифри, zero-padded). Щоб виділити цей номер атомарно та уникнути станів гонки, ви ПОВИННІ виконати `node reserve-report-num.mjs` для резервування номера (stdout поверне `{###}`), записати звіт, а потім виконати `node reserve-report-num.mjs --release {###}` для звільнення маркера (sentinel).
- `{company-slug}` = назва компанії: lowercase, пробіли замінити на `-`, прибрати спецсимволи (наприклад, `Acme Corp` → `acme-corp`)
- `{YYYY-MM-DD}` = поточна дата
**Формат звіту:**
```markdown
# Оцінка: {Компанія} — {Роль}
**Дата:** {YYYY-MM-DD}
**Архетип:** {визначений}
**Бал:** {X/5}
**Легітимність:** {tier}
**URL:** {посилання на вакансію}
**PDF:** {шлях або "очікується"}
---
## A) Резюме ролі
(повний вміст блоку A)
## B) Збіг з CV
(повний вміст блоку B)
## C) Рівень і стратегія
(повний вміст блоку C)
## D) Компенсація та попит
(повний вміст блоку D)
## E) План персоналізації
(повний вміст блоку E)
## F) План співбесід
(повний вміст блоку F)
## G) Чернетки відповідей на форму
(тільки якщо бал >= 4.5 — чернетки відповідей для форми відгуку)
---
## Витягнуті ключові слова
(список з 15-20 keywords з JD для ATS-оптимізації)
```
### 2. Зареєструвати в трекері
Для **нового** запису не редагувати `data/applications.md` напряму. Замість цього записати один TSV-рядок у `batch/tracker-additions/{num}-{company-slug}.tsv` з 8 або 9 колонками через табуляцію:
```
{num}\t{date}\t{company}\t{role}\t{status}\t{score}\t{pdf_emoji}\t[{num}](reports/{num}-{slug}-{date}.md)\t{note}
```
- `{num}` = наступний порядковий номер (ціле число, обчислити з `reports/`)
- `{status}` = `Evaluated`
- `{score}` = формат `X.X/5` (наприклад, `4.2/5`)
- `{pdf_emoji}` = `✅` або `❌`
- `{note}` = короткий коментар (опціонально, колонку можна опустити)
Потім виконати `node merge-tracker.mjs` для злиття в `data/applications.md`.
Для **існуючого** запису допустиме пряме оновлення в `data/applications.md` (статус, PDF, посилання на звіт).
+65
View File
@@ -0,0 +1,65 @@
# Режим: pipeline — Черга URL (Second Brain)
Обробляє URL вакансій з `data/pipeline.md`. Користувач додає URL коли завгодно, потім запускає `/career-ops pipeline` для обробки.
## Workflow
1. **Прочитати** `data/pipeline.md` → знайти `- [ ]` в секції "Очікуючі" (або "Pendientes" / "Pending" — pipeline.md може містити заголовки будь-якою мовою)
2. **Для кожного URL**:
a. Зарезервувати наступний `REPORT_NUM` атомарно, запустивши `node reserve-report-num.mjs` (та звільнити маркер, запустивши `node reserve-report-num.mjs --release <num>` після запису звіту)
b. **🚦 Playwright verification gate (обов'язково):** `browser_navigate` → `browser_snapshot`. Визначити: title + description + Apply button = active; тільки footer/navbar без JD = closed/inactive. **Якщо inactive** → позначити `- [!] URL — Вакансія закрита/неактивна`, пропустити цей URL, перейти до наступного.
c. **Витягти JD** з того ж Playwright snapshot (або WebFetch/WebSearch як fallback, якщо Playwright вже підтвердив активність)
d. Якщо URL недоступний (login wall, 404, timeout) → позначити `- [!]` з приміткою, продовжити
e. **Виконати auto-pipeline**: Оцінка A-F → Звіт .md → PDF (якщо бал >= 3.0) → Трекер
f. **Перемістити з "Очікуючі" в "Оброблені"**: `- [x] #NNN | URL | Компанія | Роль | Бал/5 | PDF ✅/❌`
3. **Якщо 3+ URL**, паралелізація з Agent tool (`run_in_background`). **Обмеження:** тільки **один** Playwright-агент одночасно (правило `_shared.md`). Рекомендована схема: один агент послідовно проходить verification gate для кожного URL через Playwright; після підтвердження активності — запускає окремих агентів для evaluation/report/PDF (WebFetch, оцінка, генерація звіту паралельно). Жоден агент не починає evaluation, поки Playwright gate не підтвердив, що вакансія активна.
4. **По завершенні** показати таблицю:
```
| # | Компанія | Роль | Бал | PDF | Рекомендована дія |
```
## Формат pipeline.md
```markdown
## Очікуючі
- [ ] https://jobs.example.com/posting/123
- [ ] https://dou.ua/vacancies/company-role/ | Компанія | Senior Backend
- [!] https://private.url/job — Помилка: потрібна авторизація
## Оброблені
- [x] #143 | https://jobs.example.com/posting/789 | Acme Corp | AI PM | 4.2/5 | PDF ✅
- [x] #144 | https://djinni.co/jobs/123456 | BigCo | Backend | 2.1/5 | PDF ❌
```
## Визначення JD з URL
1. **Playwright (переважно):** `browser_navigate` + `browser_snapshot`. Працює з усіма SPA.
2. **WebFetch (fallback):** Для статичних сторінок.
3. **WebSearch (останній ресурс):** Пошук на вторинних порталах.
**Особливі випадки:**
- **DOU.ua**: Парсити сторінку вакансії через Playwright
- **Djinni.co**: Може вимагати логін → позначити `[!]`, попросити вставити текст
- **LinkedIn**: Може вимагати логін → позначити `[!]`, попросити вставити текст
- **PDF**: Якщо URL на PDF — прочитати через Read tool
- **`local:` префікс**: Читати локальний файл. Приклад: `local:jds/company-role.md`
## Нумерація
1. Запустити `node reserve-report-num.mjs` для атомарного резервування наступного порядкового номера (stdout поверне `{###}`).
2. Записати файл звіту, використовуючи цей номер.
3. Звільнити маркер, запустивши `node reserve-report-num.mjs --release {###}` після запису звіту.
## Синхронізація джерел
Перед обробкою URL:
```bash
node cv-sync-check.mjs
```
Якщо розсинхронізація — попередити користувача.