Как я использую навыки для всего

Фото: Brett Jordan (Unsplash) — https://unsplash.com/photos/brown-wooden-blocks-on-white-table-wvfbpzLbZVg?utm_source=dev48&utm_medium=referral

Источник: Posthog•

Как я использую навыки для всего

Когда навыки агентов только появились, я думал, что это глупость. Что мы теперь, заклинания колдовские творим? Мы до этого докатились? Но со временем я...

Когда навыки агентов только появились, я думал, что это глупость. Что мы теперь, заклинания колдовские творим? Мы до этого докатились?

Но со временем я поверил во всю эту тему с «контекстным инжинирингом» (несмотря на то, что поначалу сопротивлялся хайпу) и стал использовать навыки чаще. Сегодня почти при каждом взаимодействии с агентом на любой поверхности загружается хотя бы один навык из магазина навыков PostHog.

Нет, правда, мой агент это проверил. За последние 28 дней 78% из моих 578 чатов загрузили навык, а 47% обновили его (передаю привет ИИ-наблюдаемости за то, что это так просто, ведь туда отправляются все мои сеансы Claude Code).

У меня в магазине около 139 навыков. Около 100 из них — это кастомные скауты, то есть навыки, которые запускаются самостоятельно по расписанию. Остальные 39 относятся к тому, как я работаю на практике, и именно им посвящен этот пост.

Джейк понимает в этом толк.

Если что, это не питч в стиле «попробуй мой волшебный навык, бро». Существует целая мини-индустрия навыков, которые обещают починить вашего агента, и мне это кажется немного неловким. Бро, я не собираюсь зависеть от твоего навыка. Навыки могут превратиться в технический долг (агентский долг?), поэтому порог для внедрения чужих разработок должен быть очень высоким.

То, за что я выступаю по-настоящему фанатично — это способы их применения.

Навыки — это бомбы магического контекста

Большинство людей считают навыки улучшенными промптами. Чем-то, что обучает агента какому-то трюку. Но это не так.

Навыки следует воспринимать как небольшие переносные системы агентской памяти. Они представляют собой идеальную абстракцию для тегирования набора контекста, чтобы агент (или я) мог извлечь этот контекст именно тогда, когда он нужен, и больше нигде.

Основная часть обычно представляет собой краткий указатель. В приложенных файлах содержатся подробности. Агент читает их и извлекает только те файлы, которых касается текущая задача. Это и есть прогрессивная выдача информации, и в этом по сути вся суть.

Часто навыки используются для того, чтобы дать агенту инструкции, но это, скорее всего, сойдет на нет по мере совершенствования моделей. Они будут просто использовать встроенную память и инструменты для получения того, что им нужно.

Что никуда не денется, так это необходимость управлять контекстом. Это значит объяснять агентам, что актуально прямо сейчас, что произошло на прошлой сессии, что находится в разработке и на чем мы уже обжигались раньше. Именно в эту пользу навыков я верю больше всего, и именно это больше всего изменило мою работу. Вот несколько примеров.

Каждая значимая задача, которую я выполняю, документируется и поддерживается моими агентами с помощью одного из двух навыков: self-driving-work и scouts-work (это две вещи, над которыми я работаю больше всего).

Они родственны и используют одинаковые соглашения: пронумерованный бэклог задач с указателем, папка ideas/, open-prs.md, постоянно обновляемый 14-дневный CHANGELOG.md, environment-notes.md для постоянных подводных камней и HANDOVER.md, в котором каждая сессия перезаписывает свой собственный раздел.

На момент написания этой статьи навык self-driving-work имеет версию 433 и содержит 126 связанных файлов, включая 55 пронумерованных проблем, 17 идей и 39 болевых точек. Большую часть из этого написал не я. Мои агенты сделали это в конце сессий, потому что так им велит навык.

Цикл выглядит следующим образом:

  • Я начинаю сессию на любой поверхности (локальный Claude Code, облачная задача, Slack, PostHog AI, Codex) и говорю: «давай проверим состояние самостоятельной работы /phs».
  • Агент использует мой локальный мост /phs, загружает удаленный навык, читает HANDOVER.md, сканирует индекс бэклога и знает, на чем мы остановились. Мы выполняем работу в репозитории и в продукте, а не в самом навыке.
  • В конце сессии агент регистрирует любую новую проблему или идею, записывает все открытые или объединенные PR, добавляет одну строку в журнал изменений и перезаписывает свой раздел передачи дел (handover).

Это самый простой и спокойный способ доставки сложных функций на больших дистанциях из всех, что я когда-либо находил. Навык — это память, и это память, которую я заставляю своих агентов намеренно контролировать и поддерживать.

Я не полагаюсь на скрытую функцию памяти модели, которую не могу прочитать. Навык в PostHog точно показывает, что, по мнению моих агентов, является правдой. Если там начинается беспорядок, я говорю агенту навести чистоту, а еще лучше — он сам знает, как следовать определенным протоколам, например, очищать журнал изменений через 14 дней (все изменения навыков отслеживаются по версиям, так что в случае необходимости все можно восстановить).

Этот паттерн мне так понравился, что я превратил его в шаблон. Он находится в магазине общественных навыков. Установите его один раз для каждой области работы, привяжите название проекта и окно журнала изменений, и вы получите живой хаб, который может читать и в который может писать любой агент в вашей команде.

Моя любимая часть шаблона — это небольшая таблица, к которой агент обязан обратиться перед тем, как что-либо записать:

Таблица нужна для того, чтобы предотвратить самую частую проблему при использовании этих навыков: агент записывает постоянные подробности прямо в журнал изменений, потому что журнал изменений — это файл, который он уже редактировал. Я видел, как это происходило много раз, прежде чем добавил таблицу.

Тем не менее, вам не нужна вся эта структура с первого дня. Для нового, хаотичного проекта просто заведите навык и скажите агенту хранить свой контекст там. Не особо беспокойтесь о разметке. Агенты сами по себе делают вполне разумные вещи, и, по моему опыту, навык начинает превращаться в кашу примерно к версии 50. Главное, чтобы контекст находился в навыке, который вы можете видеть, версионировать и загружать откуда угодно.

Отфильтруйте наш магазин навыков по запросу self-driving- — и вы получите карту того, как устроена автономная работа внутри PostHog: оповещения, дашборды, уровень хранилища данных, воркеры Temporal, раньбук отладки и дежурства по поддержке. Одиннадцать навыков, написанных несколькими людьми в команде. Новый коллега или свежая сессия агента могут прочитать этот список и понять, где что находится.

Самая подробная часть карты — это self-driving-dwh. Это чертеж представлений хранилища данных, лежащих в основе нашей внутренней автономной аналитики: диаграмма сущностей, показывающая взаимосвязи между запусками скаутов, сигналами, отчетами, задачами и PR, ключи, которые их объединяют, и папка recipes/ с реально работающим SQL.

Диаграмма сущностей в self-driving-dwh. Любой агент, который загружает этот навык, получает ту же картину, что и у меня в голове. Кроме того, никто не любит создавать ERD, но агенты от этого в восторге (или у них нет выбора)!

Когда я говорю «используй навык /self-driving-dwh, чтобы помочь здесь», агент знает, как все соединяется, прежде чем написать запрос. Навык имеет версию 458, и большую часть его написал не я. Скаут signals-scout-self-driving-dwh проверяет, синхронизируются ли представления, отслеживает расхождения при изменении исходной таблицы и обновляет навык при устранении проблемы. Навык, поддерживаемый другим навыком.

Еще один мой любимый пример — self-driving-alerts. Это единое хранилище для всех 178 наших аномальных алертов: что именно каждый из них отслеживает, к какому элементу дашборда он привязан, в какой канал Slack постит сообщения и почему он вообще существует. Когда нам нужен новый алерт, агент читает навык, чтобы проверить, нет ли у нас уже чего-то подобного, а затем добавляет новый в инвентарь в рамках его создания.

Каждый навык имеет версионирование, и у всех изменений есть необязательная строка описания, так что вы можете легко увидеть, как изменился навык и кто это сделал. Это очень полезно для командных навыков вроде этого.

Это также означает, что мы можем сравнить любые две версии тела навыка. Здесь версия v61 сопоставлена с v73: количество алертов растет по мере добавления новых. Помните, что по большей части это просто текст для чтения агентами.

Раньше поддерживать подобные вещи где-либо было настоящей головной болью — теперь вы получаете это практически даром, если просто оформите это в виде навыка (skill) и позволите своим агентам поддерживать его актуальность.

Навык оповещений, упомянутый выше, фиксирует то, что существует. Руководство по устранению неполадок (runbook) фиксирует то, что пошло не так и как мы это исправили, поэтому оно становится лучше каждый раз, когда что-то ломается.

self-driving-debugging — это наше руководство для тех случаев, когда беспилотные функции ведут себя некорректно в продакшене и у пользователей возникают проблемы, в которых нам нужно разобраться.

Вся эта система держится на одной строке в теле навыка: добавлять или расширять справочные материалы при каждом столкновении с новой категорией проблем. Когда тикет поддержки перерастает в реальное расследование, агент фиксирует найденное в виде датированного файла в папке investigations/, а затем дополняет соответствующий справочник, чтобы следующий агент не начинал с нуля. Проведя семь расследований, система охватывает дублирующиеся отчеты, конфликтующие PR для одного исправления, завышенные заголовки отчетов, оставшиеся без внимания комментарии к ревью и источник импорта данных, который ничего не выдавал.

Его аналог, scouts-debugging, выполняет ту же работу для флота агентов-скаутов. Благодаря им фраза «отладить автопилот для команды N» стала командой, которую я могу сказать агенту в любом интерфейсе и получить реальный ответ.

Навык andy-inbox — это то, с чего я начинаю большинство дней. Он собирает каждый отчет во входящих беспилотных систем, где я указан как предлагаемый ревьюер, сопоставляет каждый отчет с соответствующими PR и задачами на GitHub и выводит по одной простой строке на каждый отчет: приоритет, возраст, статус ревью, статус CI и одно следующее действие.

Этот навык объединяет скрипты на Python для выполнения рутинных задач: render_table.py строит таблицу на основе API и gh, pr_candidates.py ранжирует отчеты, готовые к нажатию кнопки создания PR, merge_intent.py находит одобренные мной PR, требующие доработки агентом для слияния, а draft_task.py записывает данные для запуска задачи в PostHog для зависшей строки. В итоге фраза «добиться зеленого CI для этих трех PR» превращается в три асинхронные задачи, за которыми я смогу проследить позже.

В нем также содержится файл working-set.md, в котором фиксируется только то, чем я лично решил владеть, руководствуясь четырьмя правилами:

  • Сначала проверь актуальное состояние, файл — во вторую очередь.
  • API — это истина.
  • Файл — это список моих обязательств.
  • Никогда не сообщай статус только на основе файла.

Существует целый ряд подобных навыков для повседневного использования:

  • my-github отслеживает то, что требует моего внимания на GitHub: открытые PR, запросы на ревью, назначенные задачи, недавние слияния.
  • andy-prs отображает каждый созданный мной PR с указанием его размера, закрываемых им проблем, отчета во входящих, из которого он появился, и результатов проверок.
  • andy-issues охватывает каждую созданную мной задачу, сопоставленную с отчетом во входящих, который ее породил, и PR, который из нее получился, чтобы я мог видеть, какие из моих спецификаций превратились в код.
  • andy-approvals отслеживает созданные ботами PR, которые я одобрил или для которых отправил команду слияния /trunk, а также проверял ли бот код после этого — ведь одобрить PR агента и упустить его из виду является реальным сценарием сбоя.

Скаут под названием signals-scout-andy-github запускает GitHub-навык каждый час и поддерживает актуальность единого динамического отчета в моих входящих, так что в большинство утр ответ уже ждет меня. Универсальная версия, my-inbox, находится в общедоступном магазине.

Незадолго до недавнего отпуска я опубликовал сообщение о текущем положении дел в канале Slack нашей команды. Оно было длинным. В нем был раздел о текущем состоянии, раздел об операционных вопросах и раздел о том, где искать информацию при поломке.

Практически каждый пункт списка был ссылкой на навык.

Каждый пункт был навыком, поэтому любой коллега или его агент может подхватить его:

  • scouts-dogfooding для журнала проекта и открытых проблем.
  • scouts-debugging для руководств по устранению неполадок на основе симптомов, включая плейбук для изучения опыта конкретной команды.
  • scouts-dashboard для дашборда, на который я смотрю.
  • signals-alerts для того, что вызывает пейджинг. И строка, о которой я меньше всего сожалею: «если у вас есть сложные вопросы и задачи для анализа, скажите: "используйте навык signals-dwh в PostHog MCP, чтобы помочь здесь"».

Именно этот аспект, на мой взгляд, упускают из виду, когда говорят об общем хранилище навыков: передача дел происходит не человеку, которому затем приходится загружать информацию в собственного агента. Она передается человеку и его агенту одновременно, поскольку навык уже находится там, где оба могут его прочитать.

Каждый скаут в PostHog — это навык. Тот же формат, то же хранилище, та же история версий. Единственная разница заключается в расписании и окружении (harness), которое его запускает. Это значит, что когда я создал навык для выполнения своей работы, превращение его в самовыполняющуюся задачу — это небольшой шаг, а не новый проект.

signals-scout-agent-feedback отслеживает жалобы агентов в нашем MCP, signals-scout-self-driving-logs следит за нашими логами продакшена, а signals-scout-canonical-drift раз в неделю проверяет канонический флот скаутов на предмет отклонений и несоответствий по мере эволюции кода.

Некоторые навыки посвящены самим навыкам. signals-scout-skills-best-practices проверяет недавно измененные навыки в нашем репозитории на соответствие спецификации Agent Skills. signals-scout-skills-maintenance выявляет влитые PR, которые делают навык в репозитории устаревшим. Оба опираются на skills-best-practices, о котором рассказано в отдельном разделе ниже.

Да, у меня есть навыки, которые поддерживают другие навыки. Я вас предупреждал.

Я даже использовал навык для написания этого блога. Навык andy-blogs содержит по одному файлу на каждую статью с аргументацией, источниками, датированным журналом каждого решения, списком того, что я вырезал из-за чрезмерной конфиденциальности, и открытыми задачами.

Когда я начинаю новую сессию по работе над статьей, агент уже знает, в какой ветке находится черновик, какие цифры еще нужно перепроверить и какой скриншот из Slack я уже отклонил (он был о скаутах, а не о навыках). К настоящему моменту создано уже более 20 версий, и этот абзац входит в историю изменений. Это помогает справляться со всей рутиной при написании постов, такой как добавление скриншотов. Кроме того, я использую этот навык, чтобы рассказать агенту о своем стиле написания: мне нужно запустить VS Code и лично изучить каждый дифф перед коммитом, так как агенты слишком стремятся добавить то, что мне не нужно в финальном посте.

Это не просто набор инструкций. Навык — это документ, который я дорабатываю совместно с агентом на протяжении недель в самых разных интерфейсах. Оказалось, что для этого навык подходит гораздо лучше, чем Google Doc, потому что агент может прочитать его, внести изменения с минимальным количеством правок, и каждое исправление представляет собой версию, для которой я могу посмотреть дифф.

Вы могли бы сделать все это с помощью локальной папки .claude/skills/ или .agents/skills/, но это просто безумие. Настраивать собственные пайплайны и CI, чтобы доставлять навыки каждому агенту — тоже вполне реально, но безумно. Использование хранилища навыков дает такие преимущества, как:

  • Он доступен в любом интерфейсе. Тот же навык загружается в Claude Code на моем ноутбуке, в облачной задаче, в Slack, в Codex, в Cursor и в PostHog AI.
  • Агенты могут вносить в него записи. Инструмент skill-update принимает инкрементальные правки и изменения файлов с проверкой base_version, поэтому две сессии могут поддерживать один и тот же навык, не перезаписывая изменения друг друга.
  • Наличие версий. 433 версии self-driving-work означают 433 диффа, которые я могу прочитать, если что-то выглядит подозрительно. Файл на диске дает мне только один дифф, если только я не забываю делать коммиты.
  • Он является общим. Коллега, его агент или скаут читают ровно то же самое, что и я.
  • Встроено прогрессивное раскрытие информации. skill-list возвращает имена и описания. skill-get возвращает тело и манифест файлов. skill-file-get загружает один файл.

Дело не только во мне. Вот список всех навыков, созданных в нашем внутреннем проекте с конца апреля:

Если вы уже используете PostHog MCP, это доступно вам уже сегодня. Установите плагин PostHog AI, и ваш агент уже знает навык skills-store. Я использую небольшой локальный мост под названием /phs, который просто загружает его; в документации показано, как это сделать.

Во всем этом есть подвох. Оставьте агента поддерживать навык, и он начнет его раздувать: абзац за каждой сессией, строчка в журнале изменений за каждое исправление, пока загрузка навыка не станет обходиться дороже, чем экономить. Моно-навык превращается в информационный мусор.

Поэтому я написал skills-best-practices. Я говорю агенту использовать его для наведения порядка при необходимости, а также прошу следовать ему, когда я создаю новый навык для трекера проектов. Он доступен в общественном магазине, если он вам нужен. Если вкратце:

  • Задайте для каждого навыка единый стандарт. Четко укажите агенту, куда отправляется задача, отчет о передаче смены или результаты расследования. Если этого не сделать, он придумает что-то сам, и каждый раз это будет выглядеть по-новому.
  • Держите основной текст компактным. Примерно один экран: что это такое, подводные камни и карта файлов. Все детали должны находиться в файлах.
  • Ограничьте бесконечный рост. Журнал изменений хранится 14 дней. Отчет о передаче перезаписывается, а не дополняется.
  • Ссылайтесь, а не копируйте. Один навык на одну область, со ссылками на смежные навыки.
  • Тестируйте их на практике (dogfooding). Используйте навык для его прямой задачи, замечайте, где агент спотыкался, и исправляйте навык в рамках той же сессии.
  • Изучите документацию по навыкам и подключите PostHog MCP к любому используемому вами агенту.
  • Затем просто спросите своего агента о магазине навыков PostHog. С установленным плагином PostHog AI у него уже есть навык skills-store, и он умеет перечислять, загружать и редактировать ваши навыки.
  • Установите из общественного магазина для той сферы работы, которую вам надоело каждый раз заново объяснять своему агенту.
  • Установите рядом с ним и поручите агенту загружать его перед созданием или редактированием любого навыка.
  • Когда у вас появится навык выполнения определенной работы, превратите его в скаута и позвольте ему выполнять эту работу за вас.

А если вы создадите навык для чего-то в своей жизни, что вообще не должно быть навыком, расскажите мне. У меня есть скаут с шутками про ежиков. Я не буду вас судить.

О чём эта статья