Полный цикл MDR по ивенту в одном скилле, две части: (1) квалификация всех лидов → таблица «целевой / уточнить / нецелевой»; (2) по лидам «Работаем = Да / Уточнить» — бриф из Pipedrive + персональный заход на встречу.
Формат брифа по лиду вынесен из общего описания и живёт отдельно:
| Файл | Что это |
|---|---|
references/brief_format.md |
канон формата: восемь блоков, значки, правила схлопывания, схема JSON, пример |
scripts/render_brief.py |
печатает бриф из JSON — вид форсится кодом, а не памятью агента |
python3 scripts/render_brief.py --in brief.jsonКлючевое, если скилл уже скачан раньше 18.08.2026:
- вердикт «можно ли писать» и бриф теперь ОДИН документ, а не два вывода;
- история касаний идёт третьим блоком, сразу после вердикта — с неё MDR начинает читать;
- гипотез о боли в брифе больше нет — вместо вывода строка «сигналы» с фактами;
- старый абзац с каноном в
references/outreach_brief.mdзаменён указателем сюда.
Часть 1 — квалификация:
- Собрать лидов с ивента (по коду кампании / активности регистрации).
- Pipedrive-first: всё берём готовым. Сами определяем только: статус у нас, компания/персона целевая, причина, работаем.
- Данные компании — as-is из Pipedrive (индустрия / модель / уровень / посещаемость / конкурент).
⚠️ С 21.07.2026 своей квалификации НЕТ: на сайты и в SimilarWeb не ходим, поле пусто → в таблице пусто. - Вердикт + причина; дисквалификаторы: конкурент/партнёр/агентство/незаконное. ⛔ Wood — не работаем вообще (отдельный автоагент).
- Таблица в Google Sheet (канон формата, форсится
format_table.py).
Часть 2 — заходы (по «Да/Уточнить»):
6. Бриф из Pipedrive (история, конкурент, боль из Activity) → колонка «Бриф». Формат — references/brief_format.md, печать — scripts/render_brief.py.
7. Персональный заход (режим A/B, стиль Тагир/Андрей, кейс с цифрой) → колонка «Заход». Батчем параллельными агентами + агент-критик.
- Скопировать папку
mdr/в~/.claude/skills/.⚠️ Вworkflow.jsпутьSKILL— литерал; другой домашний каталог → передайargs.skill_dir. - Доступ к Pipedrive MCP (только чтение).
Браузер для SimilarWeb— больше не нужен (фаза Traffic удалена 21.07.2026).- Google Sheet (без сервис-аккаунта и Google Cloud):
- Рекомендуется: одна командная таблица на всех, 1 вкладка = 1 ивент. Один человек создаёт таблицу и шарит её на каждого MDR как Editor. У всех в
config.jsonодин и тот жеsheet_id. - Альтернатива: у каждого своя таблица (свой
sheet_id). cp config.example.json config.json→ вписатьsheet_id.- Один раз авторизоваться СВОИМ Google (scope Sheets) — токен сохранится в
token_path. Готовый flow:Personal/Integrations/Scripts/sheets_auth.py(браузер → логин → токен Gmail+Sheets). Каждый под своим аккаунтом. config.jsonи токен — личные, в GitHub не коммитятся (см..gitignore).
- Рекомендуется: одна командная таблица на всех, 1 вкладка = 1 ивент. Один человек создаёт таблицу и шарит её на каждого MDR как Editor. У всех в
Скилл читает
sheet_idиtoken_pathизconfig.json.sheet_idможет быть общим (командная таблица) или личным — код один и тот же; каждый пишет своим Google-токеном.⚠️ OAuth-токен в testing-режиме живёт ~7 дней — при ошибке доступа перезапуститьsheets_auth.py.
/mdr Ивент: 250729_on_foxford · «квалифицируй лидов с Фоксфорда» · «проквалифицируй cc.kz».
SKILL.md— воркфлоу обеих частей + канон формата таблицы + границы.- Часть 1 (квалификация):
references/qualification_criteria.md— правила целевой/нет, уровни, сегменты, индустрии, модели, гео, роли, трафик, отток-по-дате, автосайнап.references/pipedrive_fields.md— карта полей Pipedrive + как искать ивент + рецепт стадии сделки + тест-сделки.references/competitors.md·references/partners.md— дисквалификаторы (компания = конкурент/партнёр → нецелевая).references/notion_mdr_playbook.md— дословный MDR Playbook из Notion (первоисточник правил).references/edge_cases.md— крайние случаи и разрешение коллизий: won-и-ушёл, pipe-7 рабочий/шум, дубли org, смена работодателя, JS-SPA ≠ мусор, НКО, нет email/сайта/кейса.references/operations.md— операционка: батчи параллельными агентами (волнами, JSON-хендофф, ретраи), лимиты Pipedrive MCP (custom_fields,getStage, нетgetUsers), грабли Sheets API (merge съедает запись), что реально работает с SimilarWeb / журналом / Notion.references/fields.json— 🔑 ЕДИНСТВЕННЫЙ источник ID полей Pipedrive (машиночитаемый). Workflow и скрипты читают ID отсюда, а не из прозы. Заведён после двух повторов бага «в Уровень попал Сегмент» и бага «трафик не читался» (неверный ID поля посещаемости).
- Часть 2 (заходы):
references/outreach_brief.md— как собрать бриф из Pipedrive (боль явная + косвенная из Activity).references/outreach_message.md— как написать заход (режимы A/B, стили Тагир/Андрей, тон, кейс, конкурент, анти-паттерны).references/product.md·references/case_library.md·references/zahody_examples.md·references/restrictions.md— матчасть Mindbox (продукт, кейсы с цифрами, эталоны заходов, стоп-факторы).
scripts/build_table.py— writer: создаёт вкладку ивента и пишет заголовок + сводку (считает сам) + шапку 23 колонок + данные + структуру (merge/заморозка/фильтр/ширины).python3 scripts/build_table.py --rows rows.json [--tab NAME] [--write]. Контрактrows.json— в докстринге.scripts/format_table.py— форматтер: 2 цветовые схемы, прочерки действующим, персона «—» у нецелевых, чистка доменов, мусор→Нецелевая, заморозка A–F.python3 scripts/format_table.py --tab <вкладка> [--write].scripts/write_part2.py— writer части 2: точечно дописывает «Бриф» · «Кейсы» · «Заход — Telegram» · «Заход — Email» в существующую вкладку, не пересоздавая её. Ест каталог сres_<ROW>.jsonот агентов. Сверяет ФИО в строке (защита от записи не в ту строку) и не перезатирает заполненное без--force.python3 scripts/write_part2.py --dir <каталог> --tab <вкладка> [--write].scripts/apply_touches.py— применяет тест занятости контакта: занят, если двустороннее общение <3 мес (клиент отвечал) ИЛИ есть договорённость о контакте в ближайшие 3 мес (блокирует независимо от даты общения).⚠️ НЕ блокируют общение в одни ворота без ответа и односторонняя задача «попробовать зайти» — двусторонность и природу задачи размечает фаза Touch (last_touch/one_way_touch/task_agreed), скрипт считает только пороги. Естqualified_<event>.json+touches_<event>.json, перезаписывает строки на месте.python3 scripts/apply_touches.py --rows … --touches … --today YYYY-MM-DD.⚠️ Пустойlast_touch= двустороннего общения не было = пишем (это норма, а не «нет данных»).scripts/validate_rows.py— детерминированная валидация квалификации (замена агента-аудитора): уровень ≠ сегмент и только Wood…Diamond, индустрия из фикс-списка (пустая → WARN), чистые домены, согласованность вердиктов с «Работаем», действующие в прочерках.python3 scripts/validate_rows.py --rows rows.json --fields references/fields.json [--json]. Возвращает 1 при ERROR — прогон должен падать.workflow.js— 🚀 канонический прогон квалификации. Не писать workflow заново под каждый ивент:Workflow({scriptPath:"<скилл>/workflow.js", args:{event_code, out_dir}})— больше ничего не нужно, регистранты собираются сами. Зашито: сбор регистрантов САМОСТОЯТЕЛЬНО по коду ивента (никаких заранее заведённых фильтров — фаза Collect сканирует активности регистраций окнами) → один bulk-проход Pipedrive (все поля, включая посещаемость) → склейка дублей орг по названию → отсечение действующих/нецелевых обычным кодом (0 токенов) → сделки только по кандидатам (открытая сделка = батч 2, компания целевая по умолчанию) → тест занятости контакта по шорт-листу (двустороннее общение <3 мес ИЛИ договорённость → не пишем) → валидация скриптом.⚠️ Фазы Qualify (сайты) и Traffic (SimilarWeb) удалены 21.07.2026 — это они жгли часы и лимиты.- Порядок на новом ивенте:
workflow.js→build_table.py --write→format_table.py --write→ (апрув SDR) →write_part2.py --write→format_table.py --write.
Только ивенты (не контент/курсы). Ничего не пишет в Pipedrive (только читает). Заходы — только тёплым лидам после ивента, и это черновик (MDR доводит текст). Не выдумывает цифры.