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

+113
View File
@@ -0,0 +1,113 @@
# career-ops — Русские режимы (`modes/ru/`)
Этот каталог содержит русскоязычные версии режимов career-ops для соискателей, работающих на российском рынке труда или с русскоязычными вакансиями.
## Когда использовать?
Используй `modes/ru/`, если выполняется хотя бы одно из условий:
- Ты откликаешься на **русскоязычные вакансии** (hh.ru, Хабр Карьера, trudvsem.ru, rabota.ru, Superjob, Geekjob, budu.jobs)
- Твоё **резюме на русском** или ты переключаешься между RU и EN в зависимости от вакансии
- Тебе нужны ответы и сопроводительные письма на **естественном техническом русском**, а не машинный перевод
- Ты работаешь с **особенностями российского рынка**: ТК РФ, НДФЛ 13%, ДМС, испытательный срок, оформление по ТК / ГПХ / самозанятость, зарплата gross vs net
Если большинство вакансий на английском, используй стандартные режимы из `modes/`. Английские режимы работают и с русскоязычными вакансиями, но не учитывают специфику российского рынка в полном объёме.
## Как активировать?
### Способ 1 — Per session, по команде
Скажи Claude в начале сессии:
> "Используй русские режимы из `modes/ru/`."
или
> "Оценки и отклики на русском — используй `modes/ru/_shared.md` и `modes/ru/oferta.md`."
Claude будет читать файлы из этого каталога. Если режима нет в `modes/ru/` (например, `scan`, `batch`, `pdf`), используется оригинал из `modes/`.
### Способ 2 — Постоянно, через профиль
Добавь в `config/profile.yml`:
```yaml
language:
primary: ru
modes_dir: modes/ru
```
Напомни 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) |
| Employment contract (TK RF) | Оформление по ТК РФ |
| Civil contract (GPH) | Договор ГПХ |
| Self-employed | Самозанятость |
| Voluntary health insurance | ДМС (добровольное медицинское страхование) |
| Dental insurance | ДМС стоматология |
| Food allowance | Компенсация питания |
| Sport allowance | Компенсация спорта |
| Education budget | Бюджет на обучение |
| Works council | Профсоюз |
## Вклад
Если хочешь улучшить перевод или добавить новый режим:
1. Открой issue с предложением (см. `CONTRIBUTING.md`)
2. Придерживайся словаря выше для единообразия
3. Переводи по смыслу и идиоматично — без дословных переводов
4. Сохраняй структурные элементы (блоки A-F, таблицы, код, инструкции для инструментов)
5. Протестируй с реальной русскоязычной вакансией (например, с hh.ru или Хабр Карьера)
+217
View File
@@ -0,0 +1,217 @@
# Общий контекст — career-ops (Русский)
<!-- ============================================================
ЭТОТ ФАЙЛ — СИСТЕМНЫЙ.
НЕ добавляйте сюда персональные данные.
============================================================
Персонализация → modes/_profile.md и config/profile.yml.
Этот файл содержит общий контекст, архетипы и правила
для русскоязычных режимов.
Примечание: modes/ru/ пока не включён в 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` перезаписывают значения по умолчанию.**
---
## North Star — Целевые роли
<!-- [НАСТРОИТЬ] Замени архетипы ниже на СВОИ целевые роли. -->
### Универсальные архетипы
| Архетип | Тематические оси | Что покупают |
|---------|-------------------|--------------|
| **AI Platform / LLMOps Engineer** | Evaluation, observability, надёжность, pipelines | Того, кто выводит ИИ в продакшн с метриками |
| **Agentic Workflows / Automation** | HITL, тулинг, оркестрация, мульти-агенты | Того, кто строит надёжные агентные системы |
| **Technical AI Product Manager** | GenAI/Agents, PRD, discovery, delivery | Того, кто переводит бизнес в ИИ-продукты |
| **AI Solutions Architect** | Гиперавтоматизация, enterprise, интеграции | Того, кто проектирует end-to-end ИИ-архитектуры |
| **AI Forward Deployed Engineer** | Клиентский фокус, быстрая поставка, прототипирование | Того, кто быстро внедряет ИИ-решения у клиента |
| **AI Transformation Lead** | Change management, adoption, enablement | Того, кто ведёт ИИ-трансформацию в организации |
### Архетипы для российского рынка
| Архетип | Тематические оси | Что покупают |
|---------|-------------------|--------------|
| **Backend-разработчик** | PHP/Go/Java/Python, микросервисы, highload, PostgreSQL, Kafka | Инженера, строящего масштабируемые серверные системы |
| **Frontend-разработчик** | React/Vue/Angular, TypeScript, performance, accessibility | Инженера, создающего быстрые и удобные интерфейсы |
| **DevOps/SRE-инженер** | Kubernetes, CI/CD, мониторинг, автоматизация инфраструктуры | Инженера, обеспечивающего надёжность и автоматизацию поставки |
| **Системный аналитик** | Бизнес-анализ, проектирование API, интеграции, документация | Того, кто переводит бизнес-задачи в технические требования |
| **Продуктовый менеджер** | Discovery, delivery, метрики, roadmap, стейкхолдеры | Того, кто определяет что строить и почему |
| **Тимлид / Engineering Manager** | People management, tech strategy, delivery, найм | Того, кто строит и ведёт инженерные команды |
| **Data Engineer / ML Engineer** | ETL, Spark, Airflow, ML pipelines, feature stores | Инженера данных, строящего data/ML платформы |
| **QA-инженер / SDET** | Автоматизация тестирования, CI/CD, нагрузочное тестирование | Инженера качества, обеспечивающего надёжность продукта |
| **Архитектор (Solution / Enterprise)** | Системный дизайн, интеграции, масштабирование, стандарты | Того, кто проектирует архитектуру на уровне системы/компании |
<!-- [НАСТРОИТЬ] Адаптируй архетипы под свой профиль.
Пример для backend-инженера:
- Senior Backend Engineer (Go/PHP)
- Staff Platform Engineer
- Engineering Manager
и т.д. -->
### Адаптивный фрейминг по архетипу
> **Конкретные метрики: читать во время оценки из `cv.md` и `article-digest.md`. НИКОГДА не хардкодить.**
| Если роль... | Подчеркнуть о кандидате... | Источники proof points |
|--------------|---------------------------|------------------------|
| Platform / LLMOps | Продакшн-системы, observability, evals | article-digest.md + cv.md |
| Agentic / Automation | Мульти-агентная оркестрация, HITL, надёжность | article-digest.md + cv.md |
| Technical AI PM | Product discovery, PRD, метрики | cv.md + article-digest.md |
| Solutions Architect | Системный дизайн, интеграции, enterprise-ready | article-digest.md + cv.md |
| Forward Deployed Engineer | Быстрая поставка, клиентский фокус, прототип → прод | cv.md + article-digest.md |
| Backend-разработчик | Highload, микросервисы, масштабирование | cv.md |
| DevOps/SRE | Инфраструктура, автоматизация, мониторинг | cv.md |
| Тимлид / EM | Лидерство, найм, техническая стратегия | cv.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):** AGENTS.md устанавливает порог **4.0/5** — при баллах ниже 4.0 агент настоятельно рекомендует не откликаться. Диапазон 3.5–3.9 допускается только при наличии весомой причины и требует явного решения пользователя.
---
## Специфика российского рынка 🇷🇺
### Компенсация
- **Gross vs Net**: В России зарплата часто указывается gross (до вычета НДФЛ 13%). ВСЕГДА уточнять: `gross` или `на руки (net)`. Приблизительная формула: `net ≈ gross × 0.87` (стандартная ставка НДФЛ 13%; реальная ставка может отличаться в зависимости от дохода и статуса).
- **Валюта**: Рубли (₽ / RUB). Для международных сравнений использовать USD/EUR по текущему курсу.
- **Источники данных**: habr.com/salary, hh.ru/salary, levels.fyi (для международных), Glassdoor, Blind.
- **Бонусы**: Годовой бонус (обычно 1-3 оклада), квартальные KPI-бонусы, 13-я зарплата.
### Оформление трудовых отношений
| Тип | Описание | Влияние на оценку |
|-----|----------|-------------------|
| **ТК РФ** | Оформление по Трудовому кодексу. Максимальная защита | +0.3 к стабильности |
| **ГПХ** | Договор гражданско-правового характера. Меньше защиты | -0.1 к стабильности |
| **Самозанятость** | НПД 6%. Минимальная защита | -0.2 к стабильности |
| **ИП** | Индивидуальный предприниматель | Нейтрально (зависит от контекста) |
### Бенефиты (типичные для РФ)
- **ДМС** (добровольное медицинское страхование) — стандарт в крупных компаниях
- **ДМС стоматология** — расширенный пакет, хороший сигнал
- **Компенсация питания** — 5-15 тыс. ₽/мес
- **Компенсация спорта** — 3-10 тыс. ₽/мес
- **Бюджет на обучение** — конференции, курсы, книги (30-150 тыс. ₽/год)
- **Компенсация удалённой работы** — оборудование, интернет (3-10 тыс. ₽/мес)
### Трудовое право (ТК РФ)
- **Испытательный срок**: до 3 месяцев (до 6 месяцев для руководителей)
- **Отпуск**: минимум 28 календарных дней по ТК + дополнительные дни (ненормированный рабочий день, вредные условия)
- **Больничный**: оплачивается из ФСС + доплата от работодателя
- **Увольнение**: отработка 2 недели (по соглашению сторон можно без)
---
## Глобальные правила
### НИКОГДА
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 (RU по умолчанию для русскоязычных вакансий)
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 | Обновление трекера |
| Bash | `node generate-pdf.mjs` |
### Приоритет скорости
- Рабочее демо + метрики > перфекционизм
- Откликнуться раньше > изучить больше
- Подход 80/20, таймбоксить всё
---
## Профессиональное письмо и ATS-совместимость
Эти правила применяются ко ВСЕМУ генерируемому тексту для кандидата: PDF-резюме, буллеты, сопроводительные письма, ответы в формах, сообщения в LinkedIn. НЕ применяются к внутренним отчётам оценки.
### Избегать клише
- "Я увлечён..." / "результат-ориентированный" / "обширный опыт"
- "Задействовал" (использовать "применил" или назвать инструмент)
- "Возглавил" (использовать "руководил" или "запустил")
- "Обеспечил взаимодействие" (использовать "организовал" или "настроил")
- "Синергия" / "комплексный" / "инновационный"
- "В современном быстро меняющемся мире"
### Юникод-нормализация для ATS
`generate-pdf.mjs` автоматически нормализует em-dash, умные кавычки и zero-width символы в ASCII для максимальной ATS-совместимости. Но лучше не генерировать их изначально.
### Разнообразие структуры предложений
- Не начинать каждый буллет одним и тем же глаголом
- Чередовать длину предложений
- Не всегда использовать "X, Y и Z" — иногда два пункта, иногда четыре
### Конкретика вместо абстракций
- "Снизил p95 latency с 2.1с до 380мс" лучше, чем "улучшил производительность"
- "Postgres + pgvector для поиска по 12к документов" лучше, чем "спроектировал масштабируемую RAG-архитектуру"
- Называть инструменты, проекты и клиентов, когда разрешено
+94
View File
@@ -0,0 +1,94 @@
# Режим: apply — Ассистент отклика в реальном времени
Интерактивный режим для заполнения формы отклика в Chrome. Читает экран, загружает контекст вакансии, генерирует персонализированные ответы.
## Требования
- **Лучше с Playwright**: Кандидат видит браузер, Claude взаимодействует со страницей.
- **Без Playwright**: Кандидат делится скриншотом или вставляет вопросы вручную.
## Workflow
```
1. ОПРЕДЕЛИТЬ → Прочитать активную вкладку Chrome (скриншот/URL/заголовок)
2. РАСПОЗНАТЬ → Извлечь компанию + роль со страницы
3. НАЙТИ → Совпадение с существующими отчётами в reports/
4. ЗАГРУЗИТЬ → Прочитать полный отчёт + секцию G (если есть)
5. СРАВНИТЬ → Роль на экране совпадает с оценённой? Если изменилась → предупредить
6. АНАЛИЗ → Определить ВСЕ видимые вопросы формы
7. ГЕНЕРАЦИЯ → Для каждого вопроса — персонализированный ответ
8. ПОКАЗАТЬ → Отформатированные ответы для copy-paste
```
## Шаг 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. [Следующий вопрос]
> [Ответ]
...
---
Заметки:
- [Наблюдения о роли, изменениях и т.д.]
- [Предложения по персонализации для проверки кандидатом]
```
## Шаг 6 — После отклика (опционально)
Если кандидат подтвердил отправку:
1. Обновить статус в `data/applications.md` с "Evaluated" на "Applied"
2. Обновить секцию G отчёта финальными ответами
3. Предложить: `/career-ops contacto` для LinkedIn outreach
+136
View File
@@ -0,0 +1,136 @@
# Режим: 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:habr.com"` | Отзывы на русском о процессе собеседования |
| `"{company} отзывы собеседование site:hh.ru"` | Отзывы кандидатов на hh.ru |
**НЕ выдумывать вопросы.** Выведенные из 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 мин): алгоритмы, system design, знание стека
3. **Live coding** (45-60 мин): задачи на алгоритмы или практические задачи
4. **System design** (60 мин): проектирование систем (особенно Яндекс, Авито, VK, Ozon, Т-Банк)
5. **Культурный fit** (30-45 мин): ценности, командная работа, конфликты
6. **Бар-рейзер** (в крупных компаниях): финальное одобрение от senior-инженера
### Частые вопросы на российских собеседованиях
- "Расскажите о себе" (2-3 минуты, структурированно)
- "Почему уходите с текущего места?"
- "Зарплатные ожидания?" (уточнить gross/net)
- "Готовность к переезду / формату работы?"
- "Расскажите о самом сложном проекте"
- "Как решаете конфликты в команде?"
- 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 (RU по умолчанию для русскоязычных вакансий).
- Быть прямым. Это рабочий документ подготовки, не мотивационная речь.
+165
View File
@@ -0,0 +1,165 @@
# Режим: 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
- Формат работы (удалённо/гибрид/офис)
- Размер команды (если указано)
- Оформление (ТК РФ / ГПХ / самозанятость — если указано)
- 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 для:
- Актуальные зарплаты по роли (habr.com/salary, hh.ru/salary, Glassdoor, Levels.fyi, Blind)
- Репутация компании по компенсации
- Тренд спроса на роль
- **Gross vs Net**: уточнить, что указано в JD (до вычета НДФЛ 13% или на руки)
Таблица с данными и цитированием источников. Если данных нет — сказать об этом вместо выдумывания.
**Специфика РФ:**
- Если зарплата указана gross → показать приблизительный net: `net ≈ gross × 0.87` (стандартный НДФЛ 13%; реальная ставка может отличаться)
- Учесть бенефиты: ДМС, питание, спорт, обучение
- Оформление: ТК РФ даёт больше гарантий, чем ГПХ/самозанятость
## Блок E — План персонализации
| # | Раздел | Текущее состояние | Предлагаемое изменение | Почему |
|---|--------|-------------------|------------------------|--------|
| 1 | Summary | ... | ... | ... |
| ... | ... | ... | ... | ... |
Топ 5 изменений CV + Топ 5 изменений в LinkedIn/hh.ru для максимального совпадения.
## Блок F — План собеседований
6-10 историй STAR+R, привязанных к требованиям JD (STAR + **Reflection**):
| # | Требование JD | История STAR+R | S | T | A | R | Reflection |
|---|---------------|----------------|---|---|---|---|------------|
Столбец **Reflection** фиксирует, что было изучено или что можно было бы сделать иначе. Это сигнал сеньорности — джуниоры описывают что произошло, сеньоры извлекают уроки.
**Банк историй:** Если `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}
**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, ссылка на отчёт).
+58
View File
@@ -0,0 +1,58 @@
# Режим: 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. **Извлечь JD** через Playwright → WebFetch → WebSearch
c. Если URL недоступен → пометить `- [!]` с заметкой, продолжить
d. **Выполнить auto-pipeline**: Оценка A-F → Отчёт .md → PDF (если балл >= 3.0) → Трекер
e. **Переместить из "Ожидающие" в "Обработанные"**: `- [x] #NNN | URL | Компания | Роль | Балл/5 | PDF ✅/❌`
3. **Если 3+ URL**, запустить агентов параллельно (Agent tool с `run_in_background`). **Ограничение:** Playwright требует ресурсов — использовать **только один** Playwright-агент одновременно (правило `_shared.md`). Все прочие шаги (WebFetch, оценка, генерация отчёта) допускают полную параллелизацию. Рекомендуемая схема: один агент с Playwright верифицирует активность вакансии; остальные агенты получают JD через WebFetch и параллельно проводят оценку.
4. **По завершении** показать таблицу:
```
| # | Компания | Роль | Балл | PDF | Рекомендуемое действие |
```
## Формат pipeline.md
```markdown
## Ожидающие
- [ ] https://jobs.example.com/posting/123
- [ ] https://hh.ru/vacancy/12345678 | Компания | 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://hh.ru/vacancy/87654321 | BigCo | Backend | 2.1/5 | PDF ❌
```
## Определение JD из URL
1. **Playwright (предпочтительно):** `browser_navigate` + `browser_snapshot`. Работает со всеми SPA.
2. **WebFetch (fallback):** Для статических страниц.
3. **WebSearch (последний ресурс):** Поиск на вторичных порталах.
**Особые случаи:**
- **hh.ru**: API доступен: `https://api.hh.ru/vacancies/{id}` — JSON с полным описанием
- **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
```
Если рассинхронизация — предупредить пользователя.