Yandex Direct Client Lifecycle
Overview
Этот навык закрывает upstream-слой работы с клиентом по Яндекс.Директ: intake -> база знаний -> raw research -> analysis -> human review -> client proposal -> handoff.
Path Contract
<plugin-root>= корень этого bundle, где лежат.codex-plugin/plugin.json,skills/,mcp/,scripts/.- Repo-local пример:
./plugins/yandex-direct-for-all - Home-compatible install пример:
~/.codex/plugins/yandex-direct-for-allили~/.claude/plugins/yandex-direct-for-all - Все runtime-команды в этом skill должны ссылаться на
<plugin-root>/..., а не на~/.codex/skills/....
Новый skill не имеет права заменять канонические source-skills по Wordstat, Direct semantics и Direct.
Перед любым sematics/Direct блоком считай обязательным upstream contract:
references/source_skill_contract.md
Используй его, когда задача не про “ежедневно вести уже живой кабинет”, а про:
- онбординг нового клиента;
- re-onboarding старого/непонятного клиента;
- сбор первой базы знаний о компании, продуктах, сайтах, соцсетях, кейсах и аналитике;
- подготовку research-backed плана и предложения для клиента;
- сбор и систематизацию всех данных перед build/launch;
- передачу клиента в downstream-слой
yandex-performance-ops.
Товарный или фидовый слой не предлагай по умолчанию. Включать его в клиентский пакет можно только по прямому запросу пользователя или после отдельного решения, что такой слой действительно нужен.
Не используй этот навык как замену yandex-performance-ops для day-2/day-N операций. Когда контекст собран, структура согласована и начинается build/live/monitoring, переключайся на yandex-performance-ops.
Если работа идет по уже начатому клиенту, сначала искать готовые артефакты исследования, generated tables, готовую клиентскую страницу и deploy bundle, а не поднимать новый слой поверх старого. Перед таким продолжением сначала опираться на:
<plugin-root>/skills/yandex-performance-ops/references/future_session_start_checklist.md
Quick Start
Если в проекте еще нет локального клиентского слоя, сначала создай его:
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/scaffold_client_lifecycle.py \
--output-dir . \
--client-key acme \
--client-name "Acme"
Скрипт создает локальный стартовый пакет:
./client-kb.md./source-register.tsv./competitor-raw-register.tsv./human-review.tsv./proposal-pack.md./product-map.md./routing-map.tsv./research/analysis/company-footprint.md./research/analysis/landing-inventory.md./research/analysis/research-backlog.md./research/analysis/единая-карта-конкурентов.md./research/analysis/пакет-структуры-будущего-кабинета.md./research/analysis/пакет-текстов-и-офферов.md./research/analysis/готовые-тексты-для-директа.tsv./research/jobs/organic-serp-jobs.tsv./research/jobs/ad-serp-jobs.tsv./research/jobs/page-capture-jobs.tsv./research/jobs/sitemap-jobs.tsv./research/jobs/search-api.env.example./.codex/yandex-performance-client.json./research/semantics/__CLIENT_KEY__/00-product-map.md./research/semantics/__CLIENT_KEY__/01-masks-wave1.tsv
Для batch-сбора используй канонические job-spec -> collector paths:
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/yandex_search_batch.py \
--jobs-file ./research/jobs/organic-serp-jobs.tsv \
--output-dir ./research/raw/competitor-search/wave-01
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/yandex_search_ads_batch.py \
--jobs-file ./research/jobs/ad-serp-jobs.tsv \
--output-dir ./research/raw/ad-serp/wave-01
Если cloud-auth еще не подключен, сначала прогони только request preview:
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/yandex_search_batch.py \
--jobs-file ./research/jobs/organic-serp-jobs.tsv \
--output-dir ./research/raw/competitor-search/wave-01-preview \
--dry-run
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/firecrawl_scrape.py \
--jobs-file ./research/jobs/page-capture-jobs.tsv \
--output-dir ./research/raw/competitors/firecrawl/wave-01 \
--proxy enhanced \
--location-country RU
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/sitemap_probe_batch.py \
--jobs-file ./research/jobs/sitemap-jobs.tsv \
--output-dir ./research/raw/competitors/sitemaps/wave-01
Пакет текстов после ручной подготовки нужно прогонять через reusable validator:
python3 <plugin-root>/skills/yandex-performance-ops/scripts/validate_direct_copy_pack.py \
--input-tsv ./research/analysis/готовые-тексты-для-директа.tsv \
--output-dir ./research/analysis/валидация-текстов-директ
Если клиентский отчет выводится в веб-страницу, в него нужно включать отдельный слой спрос из Wordstat:
- широкие корневые маски отдельно;
- точные базовые маски отдельно;
- без суммирования вложенных запросов и без складывания масок между собой.
- использовать готовый renderer
<plugin-root>/skills/yandex-performance-ops/scripts/render_wordstat_mask_demand.py, а не дописывать цифры вручную. - сезонность и географию считать обязательными частями этого же блока.
- использовать готовые renderer paths:
<plugin-root>/skills/yandex-performance-ops/scripts/render_wordstat_seasonality.py<plugin-root>/skills/yandex-performance-ops/scripts/render_wordstat_geo.py
- raw для сезонности и географии собирать тем же wave-collector path, а не отдельными ручными
wordstat_*вызовами:<plugin-root>/skills/yandex-performance-ops/scripts/wordstat_collect_wave.js --dynamics true --regions-report true --regions-tree true
python3 <plugin-root>/skills/yandex-direct-client-lifecycle/scripts/build_followup_jobs_from_serp.py \
--serp-results ./research/raw/competitor-search/wave-01/serp_results.tsv \
--page-capture-out ./research/jobs/page-capture-jobs.tsv \
--sitemap-out ./research/jobs/sitemap-jobs.tsv \
--exclude-domain yandex.ru \
--exclude-domain ya.ru
Workflow
1. Set The Phase
Перед работой явно зафиксируй текущую фазу:
intakeknowledge-baseraw-researchanalysisproposalhandoffops
Если пользователь просит “сделать стратегию / предложение / исследование / онбординг”, почти всегда это фазы intake -> proposal.
1.1. Re-read Source Skills Before Wordstat/Direct Work
Когда работа доходит до Wordstat, Direct semantics или Direct account слоя, этот skill обязан заново опираться на source-skills, а не на сжатое пересказанное знание.
Обязательные источники:
references/source_skill_contract.md- глобальный
yandex-performance-opsWordstat framework - канонический
yandex-wordstatsource skill - канонический
direct-search-semanticssource skill - канонический
yandex-directsource skill
Если локальный lifecycle workflow конфликтует с source-skill, source-skill побеждает.
2. Build The Client Knowledge Base First
До глубокого анализа сначала собери и оформи клиентский контекст в client-kb.md.
Что вносить:
- компания и бизнес-модель;
- продукты / услуги / направления;
- гео;
- цикл сделки;
- lead path;
- сайт, owned company pages, лендинги, соцсети, каталоги, карты, отзывы, кейсы;
- ограничения и red lines;
- подтвержденные данные и неизвестные.
Используй шаблон:
templates/client-kb-template.md
Все источники фиксируй отдельно в source-register.tsv, чтобы будущие чаты не переизобретали контекст.
Используй шаблон:
templates/source-register-template.tsv
Параллельно веди отдельный операционный слой company footprint, если уже есть owned pages, реквизиты, адреса, логистика и внешние registry-сигналы.
Используй:
templates/company-footprint-template.md
3. Separate Collection From Analysis
Парсинг и сбор данных не смешивай с выводами.
Сначала собирай raw-слой, потом анализируй.
Для upstream research ручные одиночные прогоны не считать нормой. Default path теперь:
- job-spec
.tsv; - batch collector script;
- raw
json/xml/html/md/tsv; - только потом markdown analysis.
Это особенно важно для:
- конкурентов;
- объявлений конкурентов;
- Wordstat;
- старых рекламных кабинетов;
- аналитических выгрузок;
- креативных ассетов.
Для конкурентов сначала заполняй competitor-raw-register.tsv, без оценок и “кто лучше”.
Используй шаблон:
templates/competitor-raw-register-template.tsv
Для competitor research обязательно веди два раздельных raw-слоя:
organic SERPad SERP
Их нельзя смешивать в один без явного поля discovery_layer, потому что это разные поверхности рынка и разные последующие выводы.
Для самого SERP действуют отдельные правила:
organic SERPиad SERPпо Яндексу собирай только через официальный путь Яндекса:- API;
- официальный экспорт;
- подтвержденную выгрузку из интерфейса.
- Браузерный скрейпинг Яндекс-выдачи не считать допустимым каноническим методом.
- Не используй
Firecrawlдля discovery, parsing или эмуляции самого SERP. Firecrawlразрешен только после discovery, чтобы забирать уже найденные landing pages и публичные страницы.- Для поисковых рекламных объявлений Яндекса подтвержден рабочий путь через
Yandex Search APIвFORMAT_HTML. - Канонический batch collector для этого слоя:
scripts/yandex_search_ads_batch.py6.1. Если этот path уже был локализован глобально, не искать его заново по remote-машинам. Сначала проверять:- локальный private credentials file вне git
../yandex-performance-ops/references/yandex_cloud_search_handoffs.md
- Этот слой не закрывает автоматически
РСЯ; дляРСЯнужен отдельный подтвержденный официальный источник. - Если в поисковых рекламных объявлениях всплывают спорные хосты, их нельзя механически записывать в карту конкурентов.
Сначала нужно посмотреть фактический
source_urlи отнести сущность к одному из слоев:- прямой конкурент;
- товарная витрина;
- теххост / квиз;
- шум и самореклама поисковой системы.
Для Wordstat действуют еще более жесткие правила:
- только
masks-file -> wave collector, не one-off запросы по ходу работы; - сначала
00-product-map.md, потом01-masks-wave1.tsv; Wave 1должен включатьL1root-маски; где возможно это однословные маски;- для текущего канона
Wave 1в основном однословный;Wave 2добавляет двухсловные product/object masks; - после составления
Wave 1обязателенmask reviewпо двум плоскостям:- web/source synonyms review;
- Wordstat associations review;
Wave 1иWave 2обязательны;- до анализа обязателен completeness gate:
- все raw-файлы на месте;
- пустые/ошибочные raw обнаружены;
- новые маски из associations вынесены в gap/wave2 backlog;
- lifecycle skill не имеет права подменять этот процесс “ручным набором запросов”.
Для полноты competitor collection действуют отдельные правила очередности:
- ранний competitor scout до семантики допустим только как
reconnaissance, чтобы понять рынок и проверить collectors; - исчерпывающий competitor raw collection нельзя считать начатым, пока не собран и вручную не валидирован keyword set;
- после валидации семантики
organic SERPиad SERPjobs должны генерироваться от матрицыvalidated keyword x geo, а не от произвольного shortlist запросов; - для каждой валидированной фразы нужно сохранять
query,region,timestamp,domain,landing,discovery_layer, а затем запускатьsitemapиpage-captureуже по найденным доменам; 4.1. послеorganic SERPwave домены и landing URLs должны переводиться вpage-capture-jobs.tsvиsitemap-jobs.tsvтолько через reusable builder script, а не вручную; 4.2. перед follow-up сбором обязателен отдельный шаг shortlist:- сводка повторяемости доменов по подтвержденной выдаче;
- ручное утверждение укороченного списка сильных доменов;
- ориентир по умолчанию =
топ-15доменов, которые повторяются по большинству целевых фраз; - страницы статей, новостей, справочников, PDF и прочие некоммерческие URL должны исключаться механическими паттернами до
page-captureиsitemap;
- pre-semantics waves нельзя выдавать человеку как полный competitor set: это только разведка и proof-of-pipeline.
Канонический batch collector для Yandex-native organic SERP:
scripts/yandex_search_batch.py- job template:
templates/serp-job-template.tsv
Канонический batch collector для поисковых рекламных объявлений Яндекса:
scripts/yandex_search_ads_batch.py- вход =
research/jobs/ad-serp-jobs.tsv - источник =
Yandex Search APIвFORMAT_HTML
Канонический рендер доменного shortlist из поисковой выдачи:
scripts/build_domain_shortlist_from_serp.py- использовать после подтвержденной поисковой волны и до follow-up jobs
- скрипт только сортирует и рендерит повторяемость доменов, не принимает решения
Канонический batch collector для second-pass page capture:
scripts/firecrawl_scrape.py --jobs-file ...- job template:
templates/page-capture-job-template.tsv
Канонический batch collector для sitewide discovery по конкуренту:
scripts/sitemap_probe_batch.py- job template:
templates/sitemap-job-template.tsv
Канонический utility для batch chunking:
scripts/split_tsv_batch.py- использовать когда один большой jobs-файл нужно распараллелить на несколько workers
Канонический utility для merge chunked sitemap waves:
scripts/merge_sitemap_batch_outputs.py- использовать после параллельного
sitemap_probe_batch.py, чтобы собрать единыйsitemap_manifest.tsvиcandidate_urls.tsv
Канонические render utilities для ручного review:
scripts/render_serp_wave.pyscripts/render_ad_serp_wave.pyscripts/render_sitemap_candidates.pyscripts/render_page_capture_inventory.py- эти scripts только сортируют, чанкуют и рендерят verified raw для ручного анализа
Канонический builder между organic SERP raw и follow-up collectors:
scripts/build_followup_jobs_from_serp.py- вход:
serp_results.tsv - выход:
page-capture-jobs.tsvsitemap-jobs.tsv
- script не анализирует конкурентов и не фильтрует таргетность по смыслу; он только преобразует raw SERP в batch job-spec для следующего шага.
- использовать после domain discovery, чтобы не ограничиваться одним landing URL
Все operator-facing и client-facing отчеты, summary и proposal-паки писать на русском языке. По возможности не использовать англицизмы, если есть ясный русский эквивалент.
Если доступен FIRECRAWL_API_KEY, предпочитай scripts/firecrawl_scrape.py для raw-сбора публичных страниц, особенно когда:
- страница сильно JS-driven;
curlвозвращает anti-bot,403, security-check или обрезанный HTML;- нужен нормализованный markdown/html/json-слой для дальнейшего ручного анализа.
Firecrawl не заменяет source register и raw register: он только улучшает слой извлечения.
Если second-pass нужен для антиботных доменов:
- сначала обычный
Firecrawl; - затем retry с
proxy=enhanced; - при geo-sensitive сайте можно передать
location.countryиlocation.languages; - но даже в таком режиме это page-capture tool, а не SERP tool.
Перед любым analysis-stage bundle нужно закрыть отдельной машинной проверкой:
scripts/verify_research_bundle.py- verifier только проверяет полноту и presence raw/job artifacts
- verifier не делает выводов и не решает достаточно ли хороши сами данные по смыслу
4. Cover The Full Research Surface
Не ограничивайся одной плоскостью.
Покрытие должно пройти по блокам из:
references/coverage-checklist.md
Минимальный каркас:
- клиент и его компания;
- продукты и офферы;
- сайт и посадочные;
- аналитика и lead routing;
- конкуренты;
- объявления конкурентов;
- спрос / маски / ключи / минус-фразы;
- структура кампаний;
- тексты объявлений, изображения, расширения;
- план, гипотезы, аналитические требования, договорный контур, build/handoff.
После закрытия ручного analysis-stage этот skill обязан выдавать еще три обязательных операторских артефакта, не откладывая их "на потом":
research/analysis/единая-карта-конкурентов.mdНормализованная ручная карта: органика + поисковые рекламные объявления + тип игрока + сегменты.research/analysis/пакет-структуры-будущего-кабинета.mdКаркас будущего кабинета: кампании, группы, посадочные, география, без запуска.research/analysis/пакет-текстов-и-офферов.mdПолный пакет текстов, быстрых ссылок и уточнений для ручной сборки.research/analysis/готовые-тексты-для-директа.tsvМашинно-читаемый пакет текстов для проверки длин и дальнейшей сборки.
5. Use Other Skills Deliberately
Связки по умолчанию:
playwrightИспользуй для реального браузерного сбора объявлений конкурентов, выдачи и страниц. Если relevant competitor pages отдают403, anti-bot илиDDoSchallenge приcurl, сразу планируй second-pass через браузер вместо ложного ощущения, что raw уже собран.Firecrawl scriptЕсли естьFIRECRAWL_API_KEY, сначала попробуйscripts/firecrawl_scrape.pyдля публичных страниц и лендингов конкурентов. Это preferred path для page parsing, когда нужна чистая markdown/html/json-выгрузка без ручной браузерной возни. Не используй его для SERP collection: поиск выдачи и ads discovery идут только через Яндекс-native paths. Для batch-режима используй--jobs-fileвместо перечисления URL вручную.yandex-performance-opsИспользуй для:- официального
Wordstat; - client overlay;
- Direct/Metrika/Roistat raw-сборов;
- структуры, validation, build, launch, ongoing ops. Делай это по канону source-skills, а не по самодельным shortcut-правилам lifecycle skill.
- официального
russian-b2b-service-contractsИспользуй, когда нужно собрать:- договор;
- ТЗ;
- акт;
- клиентский комплект документов.
6. Human Review Is A First-Class Artifact
Не делай процесс завязанным на “копировать в чат” и “смотреть скриншоты”.
Веди отдельный human-review queue:
human-review.tsv
Там должны жить:
- что именно нужно утвердить;
- из какого артефакта это пришло;
- какой тип решения нужен;
- текущий статус;
- комментарий человека.
Используй шаблон:
templates/human-review-template.tsv
7. Proposal Pack Must Be Client-Facing
Когда делаешь предложение клиенту, собери не просто заметки, а читаемый пакет:
- что исследовано;
- какие факты подтверждены;
- на какие источники опираемся;
- какие гипотезы и почему;
- какую структуру кабинета предлагаем;
- что нужно по аналитике;
- что будет в first wave;
- что не обещаем;
- что нужно согласовать.
Используй:
templates/proposal-pack-template.md
Но proposal не заменяет три операторских пакета выше. Сначала вручную собрать:
- единую карту конкурентов;
- пакет структуры будущего кабинета;
- пакет текстов и офферов;
и только потом вносить их выводы в client-facing документы.
Если полезно, добавляй эмуляцию реального вида объявлений в Поиске и РСЯ, но только как наглядный mockup, а не как обещание финального live-вида.
Если собираешь клиентскую веб-страницу или веб-презентацию, действуют обязательные правила:
- это клиентский артефакт, а не operator-dump;
- не тянуть в страницу ссылки на исходные markdown/tsv/json документы и не показывать внутренние названия файлов;
- не оставлять внутренние подписи вроде
главный документ,клиентская версия,полный комплект,сводка исследования; - не дублировать один и тот же смысл в нескольких секциях;
- длинный контент раскладывать по вкладкам, переключателям и отдельным блокам, а не сваливать в бесконечную ленту;
- объявления на такой странице показывать в виде, максимально близком к реальному интерфейсу Яндекс.Директа, а не в стиле общей декоративной темы страницы;
- текст страницы писать в прямом обращении к клиенту, без рассказа о клиенте в третьем лице там, где это читается как внутренняя заметка.
- если страницу нужно отдать клиенту по ссылке, собирать отдельный deploy-пакет, а не публиковать рабочую папку целиком;
- для защищенной ссылки использовать отдельную однофайловую сборку через
scripts/build_secure_client_report.py, затем проверять live-страницу на десктопе и мобиле уже после выката; - не полагаться на внешние markdown/tsv/json в клиентском деплое: нужные данные должны быть встроены в итоговый пакет.
8. Handoff Cleanly
Когда proposal и human review завершены:
- обнови
client-kb.md; - обнови
source-register.tsv; - обнови
product-map.md; - обнови
routing-map.tsv; - обнови
./.codex/yandex-performance-client.json; - зафиксируй, что готово для downstream-этапа.
Дальше:
- build / validation / live apply / daily ops веди через
yandex-performance-ops; - юридический пакет веди через
russian-b2b-service-contracts.
Границы handoff описаны в:
references/handoff-map.md
Guardrails
- База знаний клиента создается раньше глубокого анализа.
- На старте задавай только блокирующие вопросы, а не длинный generic-бриф.
ПАРСИНГ != АНАЛИЗ.- Конкурентов сначала собирай как raw-слой, потом анализируй.
- Для
Wordstatдействуют правила downstream skill:- только официальный путь;
numPhrases=2000;- не резать low volume;
- собирать хвост до
1 показа/месяц, если задача про новую семантику.
- Не обещай клиенту лиды и продажи без доказательной базы.
- Перед build/live этапами нужен human approval.
- После каждого крупного цикла обновляй KB, source register и proposal artifacts, чтобы следующие чаты работали от канонического слоя, а не “из головы”.
References
Читай по необходимости:
references/artifact-contract.mdЧто именно должно лежать в локальном проекте и когда это обновлять.references/coverage-checklist.mdКак не пропустить важные плоскости исследования и подготовки.references/handoff-map.mdГде заканчивается этот skill и начинаетсяyandex-performance-ops.
Templates
Переиспользуемые шаблоны:
templates/client-kb-template.mdtemplates/source-register-template.tsvtemplates/company-footprint-template.mdtemplates/competitor-raw-register-template.tsvtemplates/human-review-template.tsvtemplates/proposal-pack-template.mdtemplates/product-map-template.mdtemplates/routing-map-template.tsvtemplates/landing-inventory-template.mdtemplates/research-backlog-template.mdtemplates/yandex-performance-client-template.jsontemplates/unified-competitor-map-template.mdtemplates/future-cabinet-structure-template.mdtemplates/offers-pack-template.md
Trigger Examples
Этот skill должен триггериться на запросы типа:
- “Новый клиент по Директ, собери мне онбординг и базу знаний.”
- “Подготовь исследование и предложение клиенту по Яндекс.Директ.”
- “Собери все данные по компании, конкурентам и спросу, потом упакуй план.”
- “Нужно системно заводить клиентов в полный цикл от онбординга до handoff.”