init
This commit is contained in:
commit
d295c7f139
1527 files changed
+270726
No files matched your search
@@ -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)
|
||||
@@ -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-архітектуру"
|
||||
- Називати інструменти, проєкти та клієнтів, коли дозволено
|
||||
@@ -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
|
||||
@@ -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 за замовчуванням для україномовних вакансій).
|
||||
- Бути прямим. Це робочий документ підготовки, не мотиваційна промова.
|
||||
@@ -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, посилання на звіт).
|
||||
@@ -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
|
||||
```
|
||||
|
||||
Якщо розсинхронізація — попередити користувача.
|
||||
Reference in new issue
Block a user