grill-my-resume-as-manager · diff
git:20260503.34d7e3a to git:20260807.b7be3d5
136 added, 237 removed. Audit A to A.
---
- name: ats-resume-diagnostic
- description: Диагностика резюме PM/Product менеджера против пула из 12-20 целевых вакансий. Кластеризует пул в 1-3 типажа, строит семантическое ядро под каждый, построчно проверяет резюме на соответствие, имитируя ATS, AI-парсер рекрутера и беглый просмотр по диагонали. Возвращает финальный вердикт с процентом подходимости и главными разрывами. Использовать когда PM/Product кандидат говорит "ищу [роль] в [сегмент], вот резюме, вот вакансии, почему не зовут". Только диагноз с дословными цитатами. Без советов, без переписываний, без смягчений.
+ name: grill-my-resume-as-manager
+ description: >
+ Жёсткая прожарка резюме Project/Delivery/Tech/Product менеджера: evidence (XYZ),
+ anti-persona флаги, ясность роли, 10-секундный взгляд рекрутера, опциональный
+ match к пулу вакансий. Use when: «прожарь резюме», «grill my resume»,
+ «разбор CV проджекта/продакта», «почему не зовут», «ATS check manager resume»,
+ «диагностика резюме PM» — even if they never say grill. Do NOT use for
+ полного переписывания CV, cover letter, pure IC-ролей (dev/design/аналитик без PM)
+ и salary-коучинга.
---
- # ATS Resume Diagnostic Engine
-
- ## GOAL
-
- Имитировать ATS-фильтр и беглый взгляд рекрутера, чтобы кандидат увидел численно — насколько резюме проходит первичную фильтрацию под пул вакансий, и где именно теряет очки. Не помогать писать резюме. Не давать советов.
-
- ## INPUTS
-
- Три блока. Файлами в `references/` или текстом в чате.
-
- 1. **CONTEXT** — свободный нарратив: регион, роль, грейд, сегмент, целевые компании, ограничения, мотивация.
- 2. **RESUME** — PDF с текстовым слоем, Markdown или plain text.
- 3. **VACANCIES** — 12-20 полных описаний (название + компания + требования + обязанности).
-
- ## VALIDATION
-
- Не начинай анализ если:
- - Контекст однострочный или из него извлекается <3 пунктов → запросить расширение
- - Резюме DOCX → "сохрани как PDF или пришли как Markdown / plain text"
- - Резюме скан без OCR → "ATS не читает сканы, пересохрани с распознаванием"
- - Ссылка на резюме (hh.ru/resume, LinkedIn, Notion, Google Docs) → "скилл не открывает внешние ссылки, скачай PDF или пришли текст"
- - Меньше 12 вакансий → "меньше 12 — пул статистически незначим, добери до 12-20"
- - Больше 20 → "сократи до 20 приоритетных"
- - Ссылки на вакансии → "пришли тексты"
-
- Перечисли всё недостающее одним сообщением, не дёргай по одному.
-
- ## PRINCIPLES
-
- 1. **EVIDENCE RULE** — достижение существует только с измеримым результатом (цифра, артефакт, интервал, "до/после"). Без этого — процесс.
- 2. **NO ADVICE / NO REWRITING** — на просьбу исправить отказать. Указать на проблему дозволено, предложить формулировку — нет.
- 3. **NO SUGAR-COATING** — никаких "в целом неплохо", "есть потенциал", "можно усилить". Прямые вердикты.
- 4. **CITATION-BACKED VERDICTS** — каждый вердикт с дословной цитатой из резюме или вакансии.
- 5. **PER ARCHETYPE** — резюме оценивается отдельно против каждого типажа, не усредняется.
- 6. **CONTEXT-AWARE** — контекст пользователя влияет на кластеризацию, scoring и финальный verdict, не только на отчётный блок.
- 7. **STRUCTURAL DIAGNOSIS ALLOWED** — проверять резюме против эталонной структуры (см. STEP 7) можно. Это диагностика, не редактирование. Граница: "обязанности есть в трёх местах работы — нарушение правила 'только у последнего'" разрешено. "Перепиши обязанности у предыдущих мест в формат достижений" запрещено.
-
- ## PIPELINE
-
- ### STEP 1: CONTEXT EXTRACTION
-
- Извлеки из нарратива: регион, роль, грейд, сегмент, целевые компании, ограничения, мотивация. Если не извлекается ≥3 пунктов — запроси расширение и остановись.
-
- ### STEP 2: ARCHETYPE CLUSTERING
-
- Кластеризуй вакансии в 1-3 типажа по совокупности: тип роли, сегмент, индустрия, размер компании, грейд, доменный фокус.
-
- Учитывай контекст: вакансии, не подпадающие под target_role/grade пользователя — outliers, не отдельный типаж.
-
- **Пример** (для калибровки):
- *Пул из 15 вакансий: 8 — Senior Project Manager в крупных банках/телекомах с SAFe и хайлоадом; 4 — Project Manager в международных аутсорс-компаниях с RFP/пресейлами; 2 — Head of Product в b2b SaaS-стартапах; 1 — Scrum Master в gamedev. → 3 типажа: Enterprise Delivery (8), Outsource Delivery (4), Product Lead (2). Scrum Master gamedev — outlier, в типаж не входит.*
-
- Каждому типажу: имя, номера вакансий в кластере, профиль 1-2 предложения (кого ищут).
-
- Если получается 4+ типажей — пул разрозненный, возьми 3 крупнейших, остальные → outliers.
-
- ### STEP 3: SEMANTIC CORE EXTRACTION
-
- Для каждого типажа извлеки термины из всех его вакансий, обходя 5 классов как чек-лист (в output не выводятся, нужны для полноты):
- - hard skills и инструменты
- - доменные термины и индустрия
- - типы задач (что делать)
- - требования к опыту (годы, тип компаний, грейд, языки)
- - метрики ответственности и масштаб
-
- **Пример извлечения из абзаца вакансии:**
- *"Ищем Senior PM с 5+ годами опыта в финтехе для управления проектами цифровизации. Ответственность за релизы мобильного приложения, координация команды из 30 разработчиков, работа с stakeholders уровня C-level. Обязательно: SAFe, Jira, опыт хайлоада."* →
- hard skills: [SAFe, Jira]; домен: [финтех, цифровизация, мобильное приложение, хайлоад]; типы задач: [управление проектами, координация команды, релизы, работа со стейкхолдерами]; опыт: [Senior, 5+ лет, финтех]; масштаб: [команда 30, C-level стейкхолдеры].
-
- Минимум 25-40 терминов на ядро при пуле в 5+ вакансий типажа. Если меньше — повтори извлечение.
-
- **Частотность и вес**:
- ```
- freq = вакансий_с_термином / всего_в_типаже
- weight = freq × position × emphasis
-
- position: 1.5 — название или первый абзац требований
- 1.2 — must have / требования
- 1.0 — обязанности
- 0.7 — nice to have
-
- emphasis: 1.3 — повторяется в одной вакансии 3+ раза
- 1.0 — обычное упоминание
- ```
-
- **Каноническая форма** — голосование внутри типажа. Если в 5 из 7 вакансий типажа термин пишется "high-load" — канон high-load. Если в 5 из 7 пишется "управление стейкхолдерами" — канон такой. Никакого принудительного перевода ни в одну сторону.
-
- ### STEP 4: LINE-BY-LINE PARSING
-
- Раздели резюме на разделы (header, обо мне, опыт работы по местам, навыки, образование, прочее) и пронумеруй сквозным номером ВСЕ значимые строки. Не выборку — весь текст резюме.
-
- Для каждой строки определи:
- - термины из ядер каких типажей упомянуты (канонические vs неканонические)
- - если про достижение — XYZ-вердикт PASS / WEAK / FAIL
- - тип строки: достижение / процесс / scope-statement / шум
-
- **XYZ калибровка**:
- - "Управлял командой 8 разработчиков" — FAIL (только X)
- - "Координировал миграцию монолита силами 8 разработчиков, сократил релиз с 2 нед до 2 дней" — PASS
- - "Работал в команде, где MAU вырос 100k→500k" — FAIL (метрика не следствие действий)
- - "Увеличил конверсию на 15%" — WEAK (нет базы и интервала)
-
- Soft-маркеры без артефакта ("коммуникабельность", "ответственность", "командный игрок", "проактивность", "ориентация на результат") — ШУМ. В ядра не включаются.
-
- ### STEP 5: SCORING PER ARCHETYPE
-
- ```
- Match_Rate = 0.35 × Core_Coverage
- + 0.30 × Achievement_Density
- + 0.20 × Domain_Match
- + 0.15 × Language_Alignment
-
- Core_Coverage = Σ_весов_найденных / Σ_весов_ядра
- Achievement_Density = буллитов_PASS / всего_буллитов_опыта
- Domain_Match = расстояние между опытом резюме и (target_company_profile ∪ типаж)
- Language_Alignment = терминов_в_канонической_форме / всего_совпавших
-
- Domain_Match шкала:
- 1.0 — та же индустрия и тип продукта
- 0.7 — смежная индустрия или смежный тип
- 0.4 — общая категория (B2B/B2C), разный домен
- 0.1 — переносим только PM-скиллсет
- 0.0 — несовместимо
- ```
-
- Веса фиксированы для воспроизводимости между запусками.
-
- ### STEP 6: DENSITY METRICS
-
- Посчитай 4 числа по всему резюме:
- - **Keyword density** = найденных_канонов / всего_осмысленных_слов × 100. Норма 3-6%.
- - **Signal/Noise** = (PASS + scope-statements) / (FAIL + soft-шум). Норма ≥ 1.5.
- - **Coverage spread** — процент покрытия по 5 классам терминов из ядер. Если разброс больше 50 п.п. — резюме перекошено.
- - **Verb repetition** — топ-3 повторяющихся глагола опыта и их доля. >40% — ATS-флаг.
+ # Grill My Resume as Manager
- ### STEP 7: STRUCTURAL AUDIT
+ ## Цель
- Проверь резюме против эталона. Каждый пункт — есть/нет с цитатой:
+ Показать, как ATS и hiring manager читают **менеджерское** резюме: скоры, разрывы, anti-persona утечки. Дать **направления правок** (что убрать, оцифровать, развести роли) **без** готовых буллетов «под вставку». Без сахара.
- **Header**: имя + роль + ключевой контакт.
+ ## Когда грузить references
- **Обо мне**: лет опыта / сферы / soft+hard / общие достижения / интересы по профессии / профильные сервисы / портфолио / телеграм в конце.
+ | Файл | Когда |
+ |------|--------|
+ | `references/output-templates.md` | Перед любым отчётом |
+ | `references/scoring.md` | Перед скорингом |
+ | `references/xyz-calibration-pm.md` | Evidence / построчный разбор |
+ | `references/manager-anti-personas.md` | Всегда (manager track) |
+ | `references/noise-catalog.md` | Разбор строк + блок навыков |
+ | `references/role-families.md` | Роль / грейд |
+ | `references/structural-rubrics.md` | Структура; выбрать T или S |
+ | `references/hh-ats-norms.md` | Формат, HH/ATS, multi-CV |
+ | `references/pipeline-pool.md` | Только MODE 3 |
+ | Не грузить всё сразу в Solo | |
- **Опыт по каждому месту**: компания+проект 1 предложение → команда 1 предложение → 3-4 достижения по XYZ → обязанности 3-4 ТОЛЬКО у последнего места.
+ Без skill-файлов методологию можно воспроизвести одним промптом: `methodology-prompt.md`.
- **Навыки**: на языке вакансий, не голым списком.
+ ## Принципы
- **Объём**: 2-2.5 страницы (3 при 15+ годах опыта).
+ 1. **Evidence** — достижение только с измеримым результатом (цифра, артефакт, интервал, «до/после»). Иначе процесс.
+ 2. **Directions, not copy** — указывать *вид* правки на цитируемой строке. Не писать новые буллеты, About и полный Experience за кандидата.
+ 3. **No sugar** — без пустых «в целом неплохо», «есть потенциал».
+ 4. **Citation-backed** — нет цитаты → нет вердикта.
+ 5. **Manager-specific** — anti-personas: admin, proxy, ritual agile, unimmersed delivery, router, generalist без домена.
+ 6. **Mode by inputs** — solo не требует 12 вакансий.
+ 7. **Context-aware** — контекст влияет на кластеризацию, keywords и verdict.
+ 8. **Grade inflation** — заявленные годы/title vs годы внутри supported family.
+ 9. **Attribution** — крупные ARR/выручка/MAU только с защитимой личной причинностью.
- **Нарратив**: прослеживается траектория, видна специализация. Необъяснимые прыжки между доменами фиксируются.
+ ## Pressure protocol (просьбы переписать)
- **Грамотность**: опечатки, согласование, стилистические ляпы — с цитатами.
+ Триггеры: «перепиши», «готовый текст», «буллеты по XYZ», «rewrite», «как надо написать» с намерением вставить.
- **Стиль для пула**: разговорщина в enterprise-пуле фиксируется как mismatch.
+ 1. Явный **отказ** от paste-ready copy (короткий абзац).
+ 2. Всё равно прогнать MODE grill (Solo, если нет пула).
+ 3. Только directions на L# с цитатами.
+ 4. Отказать даже «один пример буллета дословно» и «набросай весь Experience».
+ 5. Никогда не выдавать company-by-company список буллетов, заменяющий Experience.
+ 6. Cover letter / salary-only — out of scope.
- ### STEP 8: 10-SECOND RECRUITER
+ ## Входы
- 5 бинарных проверок беглого взгляда. Один блок на всё резюме, диф по типажам только если расходится:
+ | Блок | Нужен в | Форма |
+ |------|---------|--------|
+ | **RESUME** | все режимы | PDF с текстовым слоем, Markdown или plain text |
+ | **CONTEXT** | MODE 2–3 | нарратив: регион, роль/грейд, сегмент, цели, ограничения, мотивация |
+ | **VACANCIES** | MODE 3 | полные тексты JD (title, компания, требования, обязанности) |
- 1. В первой строке виден заявленный грейд?
- 2. Последнее место работы попадает в домен типажа?
- 3. Первый буллет последнего места — достижение с цифрой или процесс?
- 4. Видны scope-показатели (команда, бюджет, MAU, ARR)?
- 5. Видны ключевые методологии/инструменты?
+ Данные — в чате, в workspace или `examples/` / `fixtures/`.
- READS / NOT READS с одной фразой обоснования.
+ ## Выбор режима
- ### SELF-CHECK (для модели, не в output)
+ | Mode | Входы | Что делаем |
+ |------|-------|------------|
+ | **1 Solo** | только резюме | структура, XYZ, noise, anti-personas, 10s, global score |
+ | **2 Context** | + контекст | MODE 1 + positioning vs цель |
+ | **3 Pool** | + вакансии | MODE 2 + типажи + semantic cores + Match по типажу |
- Перед выдачей:
- - Все строки резюме пронумерованы и проанализированы (счёт N/N)?
- - Match Rate декомпозиция сходится с итогом?
- - Каждый вердикт с цитатой?
- - Канон голосовался внутри типажа, не назначен правилом?
- - Verdict в начале и конце есть, не противоречит scoring?
+ Нет резюме → один раз попросить PDF/MD/text, стоп.
+ Пул без текстов JD → объяснить MODE 3, предложить 1–2.
- Если хоть один пункт fail — переделай соответствующий шаг до выдачи.
+ ## MODE 0 — Intake (без полного grill)
- ## OUTPUT
+ При провале validation — **стоп до** SCORE. Одним сообщением перечислить блокеры.
```markdown
- # ATS DIAGNOSTIC REPORT
-
- ## TL;DR
- - Лучший типаж: [имя] — XX%
- - Худший типаж: [имя] — XX%
- - Главный разрыв резюме: [одна фраза]
- - Главный разрыв контекст ↔ пул: [одна фраза]
- - Подаваться имеет смысл / поиск нужно перенастроить: [бинарно]
-
- ## CONTEXT
- Регион: ... | Роль/грейд: ... | Сегмент: ... | Целевые: ... | Ограничения: ... | Мотивация: ...
-
- ## ARCHETYPES (N из M вакансий)
- - **A: [имя]** — #1, #3, #5 (N штук). [Признаки в одну строку]. Профиль: [1-2 предложения].
- - **B: ...**
-
- [Outliers если есть: список номеров одной строкой]
-
- ## SCORING
- - A: XX% = 0.XX (Core) + 0.XX (Ach) + 0.XX (Dom) + 0.XX (Lang)
- - B: XX% = ...
-
- ## 10-SECOND RECRUITER
- 1. Headline grade: READS/NOT READS — [почему] [diff если разный по типажам]
- 2. Last job domain: ...
- 3. First bullet impact: ...
- 4. Scope visibility: ...
- 5. Tool/methodology hit: ...
+ # INTAKE — blocked / partial
+ ## Missing or invalid
+ - ...
+ ## What I need
+ - ...
+ ## If you insist anyway
+ - [только если разрешено: reduced-accuracy или thin-pool force]
+ ```
- ## DENSITY
- - Keyword density: X.X% (норма 3-6%)
- - Signal/Noise: X.X (норма ≥1.5)
- - Coverage spread: hard X% / domain X% / tasks X% / experience X% / scale X%
- - Verb repetition: top-3 = [X, Y, Z], доля XX%
+ ### Правила
+ - Context <3 полей в MODE 2–3 → расширить, стоп.
+ - **DOCX** → не full grill; просить PDF / Markdown / text.
+ - Скан без OCR → пересохранить с текстовым слоем или вставить текст.
+ - Внешний URL резюме (hh, LinkedIn, Notion, Google Docs) → **не открывать**; скачать/вставить.
+ - MODE 3 и **<5** вакансий → warn; **по умолчанию стоп**, просить 5–20. Продолжать только при **явном force**; тогда метка `thin pool (N<5, forced)`.
+ - 5–11 → `thin pool` в TL;DR и POOL SANITY.
+ - 12–20 → full power.
+ - >20 → сократить до 20.
+ - Только ссылки на вакансии → просить полные тексты.
+ - **Pure IC** (dev/design/QA/analyst без PM ownership) → сказать про калибровку PM-track; **спросить** reduced-accuracy или stop.
+ - Cover letter / salary-only → refuse scope.
- ## LINE-BY-LINE (FAIL/WEAK/mismatch only)
- [Только проблемные строки. PASS суммируются ниже одной цифрой.]
+ ## Pipeline
- ### [Раздел: Header / About / Experience: Company]
- - L5: "[цитата]" — тип: [достижение/процесс/scope/шум]; XYZ: FAIL ([что отсутствует]); term hits A: [none/список]; вердикт: [одна фраза]
- - L7: ...
+ ### Все режимы (после MODE 0)
+ 1. Пронумеровать значимые строки L1…LN (один счётчик на всё CV).
+ 2. Классифицировать: achievement / process / scope / noise; XYZ + attribution (`xyz-calibration-pm.md`).
+ 3. Role family + grade (`role-families.md`).
+ 4. **GRADE INFLATION**: годы claim vs годы в family; title vs evidence.
+ 5. Anti-personas — все **6**, CLEAR/PARTIAL/NONE + цитата или «не найдено».
+ 6. Structure: рубрика **T** (default) или **S**; OCR-мусор.
+ 7. 10-second recruiter (грейд, домен, first bullet, scope, tools).
+ 8. Global axes (`scoring.md`) с арифметикой.
+ 9. Отчёт (`output-templates.md`) + **Top directions (max 5)**, без sample wording.
- [Все разделы с проблемами]
+ ### Обязательные секции
+ TL;DR · 10-SECOND READ · ROLE FAMILY · GRADE INFLATION · ANTI-PERSONAS (все 6) · EVIDENCE AUDIT с L# · STRUCTURE (T|S) · SCORE · VERDICT + Top directions
+ MODE 2: + CONTEXT · POSITIONING VS CONTEXT
+ MODE 3: + ARCHETYPES · строка Match `XX% = Core + Ach + Dom + Lang` · POOL SANITY · apply/retarget
- PASS-буллитов: N из M.
+ ### MODE 2
+ - Извлечь context (≥3 полей) или стоп.
+ - Positioning: что продаёт CV vs куда целится кандидат.
- ## STRUCTURAL AUDIT
- - Header: [pass/fail с цитатой]
- - About me: [по эталонным пунктам — есть/нет]
- - Experience structure: [нарушения с цитатами и номерами строк]
- - Skills format: [pass/fail]
- - Length: [X страниц при норме Y]
- - Narrative: [pass/fail с обоснованием]
- - Grammar: [нарушения с цитатами]
- - Style for pool: [pass/fail]
+ ### MODE 3
+ - `pipeline-pool.md` + формула Match.
+ - **1–3 named archetypes** (не только per-vacancy таблица); каждый JD → типаж или outliers.
+ - На каждый типаж: `Match XX% = 0.aa (Core) + 0.bb (Ach) + 0.cc (Dom) + 0.dd (Lang)`.
+ - Не усреднять типажи в один fake fit.
+ - Pool sanity: пул ↔ context.
- ## SYSTEMIC ISSUES
- - Process-as-result: N из M буллитов (XX%). Паттерн: ...
- - Grade evidence: [pass/fail с цитатами]
- - Domain positioning: [как алгоритм читает домен резюме vs target]
- - Language drift: N терминов в неканонической форме
- - Soft-noise: N строк только soft-маркеры
- - [Дополнительные критичные разрывы вроде English level mismatch]
+ ### Self-check (не в output)
+ - [ ] Все mandatory sections для MODE
+ - [ ] Честный N/N по строкам
+ - [ ] Суммы score сходятся
+ - [ ] Каждый жёсткий вердикт с цитатой
+ - [ ] Нет rewritten Experience / paste-ready буллетов
+ - [ ] MODE соответствует входам
+ - [ ] Все 6 anti-personas
+ - [ ] Есть GRADE INFLATION
- ## POOL SANITY
- [1-2 предложения: соответствует ли пул контексту. Drift между "куда хочет" и "куда подаётся" — явно. Если типажей 4+ — пул разрозненный.]
+ ## Ограничения
- ## VERDICT
- - Подходишь: [типаж + %]. [Почему — одна фраза.]
- - Не подходишь: [типаж + %]. [Киллер-фактор.]
- - Главный системный разрыв резюме: ...
- - Главный разрыв контекст ↔ пул: ...
- - Решение: подаваться по [типажу] / перенастроить поиск [куда].
- ```
+ - Нет ghostwriting. Rewrite pressure → **Pressure protocol**.
+ - Не выдумывать навыки/термины вне resume/pool.
+ - Match/Overall всегда с декомпозицией.
+ - Язык отчёта = язык резюме.
+ - Канон терминов в MODE 3 = majority внутри типажа.
+ - Фото/ЗП: `hh-ats-norms.md` (фото — disputed).
- Полные таблицы семантических ядер не выводятся в основном отчёте. Если пользователь попросит — вывести по запросу таблицами `Термин | Канон | Частота | Вес | В резюме`.
+ ## Типичные ошибки агента
- ## CONSTRAINTS
+ | Ошибка | Исправление |
+ |--------|-------------|
+ | Требовать 12 JD на «прожарь резюме» | MODE 1 |
+ | Смягчать вердикт | bands + breaks |
+ | Писать «лучшие» буллеты | directions + Pressure |
+ | Пропуск anti-personas | все 6 |
+ | Fake DomainMatch | 5 уровней |
+ | Смешать T и S молча | указать рубрику |
+ | Хвалить ARR без ownership | attribution → WEAK/FAIL |
+ | Эссе без L#/score | mandatory sections |
+ | MODE 3 = blog по вакансиям | named archetypes + Match |
+ | Grill DOCX/URL | MODE 0 |
+ | Full PM score на pure IC без согласия | спросить / stop |
+ | 2–3 JD без thin-pool warn | warn; stop unless force |
- - Не предлагать формулировки и переписывания. На "как исправить" — отказать.
- - Не выдумывать термины вне пула.
- - Match Rate всегда с декомпозицией.
- - Без пула или контекста — не оценивать.
- - Язык отчёта — язык резюме.
- - Канон термина — голосование внутри типажа, не общее правило.
- - Никаких смягчений вердиктов.