00:00:00[БЕЗ ЗВУКА]
00:00:30[БЕЗ ЗВУКА]
00:01:00Всем привет! Как дела?
00:01:25Добро пожаловать на очередную сессию сообщества Vercel.
00:01:29Мы очень рады, что вы с нами.
00:01:32Если вы впервые на нашей встрече,
00:01:35то привет, я Полин Навас из команды сообщества Vercel.
00:01:40Возможно, вы уже видели меня в наших сообществах.
00:01:44Для меня это всегда прекрасная возможность
00:01:46пообщаться с вами в прямом эфире и наладить контакт.
00:01:51Приятно видеть, что многие из вас уже подключились.
00:01:56Если вы присоединились к нам впервые,
00:02:00и вы не видите чат, но хотите задать вопросы —
00:02:02а я настоятельно рекомендую это сделать —
00:02:06заходите на нашу платформу по адресу community.vercel.com.
00:02:12Там нажмите «Участвую» (going) для этого события.
00:02:15И тогда вы сможете писать в чат и задавать вопросы по ходу сессии.
00:02:20Если вы смотрите нас в X или на любой другой платформе, пишите там.
00:02:25Я в предвкушении сегодняшней встречи.
00:02:28Не знаю, заметно ли это, но мы погрузимся в тему,
00:02:32которая меняет подход разработчиков к работе с AI-агентами.
00:02:36Речь пойдет о навыках (skills) для Claude Code.
00:02:39Если вы когда-либо мечтали, чтобы ваш AI-агент просто знал,
00:02:44как правильно обновиться до Next.js или следовать вашим паттернам кода,
00:02:49то именно это и позволяют делать навыки.
00:02:51Я с большой радостью представляю Джона из
00:02:56команды AI DX здесь, в Vercel, который проведет этот воркшоп.
00:03:02Привет, Джон!
00:03:04>> Привет, Полин.
00:03:05Всем привет.
00:03:05Спасибо, что пришли.
00:03:07>> Очень рада тебя видеть.
00:03:09Что ж, давайте начинать.
00:03:12>> Поехали.
00:03:13Итак, навыки.
00:03:15Кажется, что они были всегда, но им всего недели две, кто знает?
00:03:20Я пройдусь по презентации и расскажу о навыках.
00:03:24Кое-что продемонстрирую. Пожалуйста, задавайте вопросы, прерывайте меня,
00:03:28потому что я обожаю обсуждать эту тему.
00:03:31Что касается навыков, прежде всего мы поговорим об их создании
00:03:35и публикации.
00:03:36Эта презентация была создана с помощью навыка ReMotion Geist.
00:03:42Он использует наш дизайн-код Vercel в связке с ReMotion.
00:03:46Я покажу это ближе к концу, а сейчас
00:03:48просто прокомментирую некоторые видео.
00:03:51Раньше мы долго говорили о промпт-инжиниринге,
00:03:55когда модели были еще не так хороши.
00:03:58Всем приходилось вылизывать свои промпты до идеала,
00:04:00и многие думали, что промпт-инжиниринг станет отдельной профессией.
00:04:03Сейчас мы переходим к контекст-инжинирингу, позволяя навыкам —
00:04:08этим markdown-файлам — подгружаться по мере необходимости.
00:04:13Теперь появилось разделение между вашим начальным промптом
00:04:17и фрагментами контекста, которые могут быть загружены позже.
00:04:19Именно их мы и будем называть навыками.
00:04:22Все началось с компании Anthropic.
00:04:25Им нужно было обучить Claude Code конкретным задачам, ведь он начинает
00:04:30с чистого листа. У каждой модели при запуске нет никакой памяти.
00:04:33Это как новорожденный ребенок, у которого нет никаких умений.
00:04:37Есть только некий объем общих знаний, заложенных в голову.
00:04:42И в начале у них нет ничего конкретного.
00:04:44В Anthropic задумались: как нам это решить?
00:04:48Ну, очевидно, с помощью Markdown, ведь сегодня любая проблема
00:04:51решается через Markdown. Так и появились навыки.
00:04:55Теперь вы можете упаковывать эти навыки.
00:04:58Навыки — это файлы Markdown, которыми можно делиться в команде
00:05:04и упаковывать в них свои внутренние рабочие процессы.
00:05:07Их можно оформить и выложить в свои GitHub-репозитории.
00:05:12Также мы выпустили специальные инструменты.
00:05:15Сейчас я открою браузер, чтобы показать
00:05:22сайт для управления навыками сообщества: skills.sh.
00:05:27Здесь можно искать навыки, созданные сообществом.
00:05:29Вы можете найти самые популярные из них.
00:05:32Как обычно, сначала убедитесь, что вы доверяете источнику навыка —
00:05:36будь то проверенный автор или кто-то из вашей команды.
00:05:38Чтобы то, что вы используете, соответствовало вашим целям.
00:05:42Мы еще поговорим об использовании этого ресурса позже.
00:05:45Но это отличное место для изучения всей экосистемы
00:05:48и поиска доступных решений.
00:05:50А сейчас — некоторые детали того, как обычно проходит воркшоп.
00:05:56Перейдем к следующему видео.
00:06:00Итак, чистый лист. Это значит, что,
00:06:07как я уже говорил, рождается ребенок, и ваш агент при запуске —
00:06:11а агент — это модель, управляемая программой —
00:06:14сейчас сделаю покрупнее...
00:06:16Агент знает основы React, TypeScript, CSS и SQL.
00:06:23Но он не знает ваших правил, ваших паттернов,
00:06:28вашей системы и структуры проекта.
00:06:30Поэтому вы можете объединить
00:06:35ваши персональные наработки с его знаниями и заполнить этот пробел.
00:06:40Вы даете ему этот контекст, и навыки загружаются так,
00:06:42чтобы он делал всё именно так, как вам нужно.
00:06:45То есть они знают язык программирования: TypeScript, React.
00:06:51Но они не знают вашего конкретного диалекта этого языка.
00:06:53Это отличный способ об этом думать.
00:06:54Хорошо, есть ли вопросы на данный момент?
00:07:01Я ничего не пропустил?
00:07:03Пока вопросов нет.
00:07:06Только много восторга в чате.
00:07:08Так что продолжай, Джон.
00:07:09Вперед.
00:07:11Мне нравится думать об этом как о «моменте NPM» для навыков.
00:07:17NPM — это менеджер пакетов, с которым большинство из нас знакомы.
00:07:23Менеджеры пакетов содержат ресурсы, собранные сообществом,
00:07:27которые помогают упростить работу над вашими продуктами.
00:07:30Если рассматривать навыки и skills.sh как менеджер пакетов,
00:07:35то вы можете «устанавливать» эти возможности в своих агентов.
00:07:39Точно так же, как вы устанавливаете библиотеку,
00:07:41вы можете использовать `npx skills add`, чтобы добавить знания в проект.
00:07:45Раньше при промпт-инжиниринге вы бы писали в файле `claude.md`
00:07:52или `agents.md`: «всегда делай это», «всегда делай то».
00:07:55«Используй эту библиотеку», «проверяй Jira» и так далее.
00:07:59Теперь же у нас есть навыки, которые мы можем просто добавить,
00:08:04и они привнесут всё необходимое в наши проекты.
00:08:06Они становятся постоянными.
00:08:08Мы можем делиться ими на уровне пользователя или на уровне проекта.
00:08:11И они могут существовать отдельно от конкретных проектов.
00:08:14Вам больше не нужно так много копировать и вставлять.
00:08:17Мы можем автоматизировать это: как только вы начинаете новый проект,
00:08:21вы просто добавляете все нужные навыки.
00:08:23Опять же, мы уходим от излишнего беспокойства
00:08:28о составлении этих длинных промптов.
00:08:30Хорошо.
00:08:34Повторюсь: это возможности, они постоянны и доступны всей команде.
00:08:38Если вы никогда не сталкивались с муками
00:08:43управления файлами `agents.md` или `claude.md` в проекте —
00:08:47со всеми этими PR и правками в markdown-файлах,
00:08:50то навыки решают и эту проблему.
00:08:53Это как раз про разницу между работой одного разработчика и всей команды.
00:08:58Хорошо, это также затрагивает еще одну концепцию,
00:09:03которую можно назвать «пассивное против активного».
00:09:05Пассивность означает, что эти навыки не нужно загружать,
00:09:12пока они не потребуются.
00:09:15Если мы посмотрим на результаты в `agents.md`,
00:09:22markdown-файл работает как системный промпт,
00:09:25то есть то, что считывается в первую очередь.
00:09:26Он считывается всегда.
00:09:28Агент обязан его прочитать.
00:09:31В ходе тестирования выяснилось,
00:09:35что если вы завалите его контекстом
00:09:38и практически забьете окно контекста,
00:09:41то он будет гораздо лучше следовать правилам,
00:09:46таким как «всегда используй TypeScript, Tailwind» и так далее.
00:09:50Эти навыки становятся более активными.
00:09:53И вы можете либо вызывать их вручную,
00:09:57либо агент будет подгружать их «лениво»,
00:10:00привнося нужные вещи точно в срок (just-in-time).
00:10:04Например, «разверни на Vercel» или «создай базу данных».
00:10:08И снова: это правила против инструментов.
00:10:13Просто думайте о навыках как об инструментах,
00:10:15и вам всегда нужны и те, и другие.
00:10:18— Джон, у нас тут как раз появился вопрос,
00:10:21который, думаю, будет кстати.
00:10:24Как решить: реализовывать что-то через MCP
00:10:28или как навык?
00:10:30— Я бы сказал, что по умолчанию
00:10:33здесь есть несколько уровней. Если подумать...
00:10:37Я просто хочу что-то вывести на экран.
00:10:38Так что я выведу это сейчас.
00:10:39— Да, конечно.
00:10:40— По умолчанию решайте проблему с помощью Markdown.
00:10:44Если Markdown недостаточно, решайте с помощью CLI.
00:10:47Если CLI недостаточно, тогда используйте MCP.
00:10:51Это такая иерархия абстракций.
00:10:53Уровни простоты таковы: если вы можете найти способ
00:10:58решить задачу через Markdown —
00:10:59и это касается любого AI-инструмента — делайте так.
00:11:01Вы можете увидеть, как именно
00:11:05Anthropic спроектировала Claude Code,
00:11:08а остальные следуют их примеру в плане навыков,
00:11:11команд и субагентов.
00:11:13Всё это — файлы Markdown с метаданными (front matter)
00:11:15и конфигурацией, и этого в большинстве случаев достаточно.
00:11:19Эти markdown-файлы могут определять инструменты,
00:11:21которые им нужны, и которые им разрешено вызывать,
00:11:24а также ограничения. Настройка этого процесса
00:11:29может занять некоторое время.
00:11:31Но если вы попадаете в ситуацию, где нужен жесткий контроль
00:11:37над структурой данных и типами,”
00:11:40которые передаются туда и обратно
00:11:42между агентом и MCP,
00:11:43тогда MCP — хорошее решение.
00:11:46Но в целом, общий тренд сейчас таков,
00:11:50что все переходят к CLI и markdown-файлам,”
00:11:54используя MCP только в случае крайней необходимости.
00:11:59— Да, я тоже вижу такие дискуссии
00:12:04в сети.
00:12:06У нас есть еще один вопрос из X.
00:12:10«Это потрясающе. Видите ли вы в обозримом будущем,
00:12:13что навыки будут поддерживать обнаружение "агент-агентом"?»
00:12:17Было бы круто увидеть, как один агент сам решает
00:12:20установить навык. Отличный вопрос.
00:12:22— Мне очень нравится этот вопрос. Взаимодействие
00:12:27между агентами — пока недооцененная фича и паттерн.
00:12:32Безусловно. Я вполне могу представить markdown-файл
00:12:39в виде дескриптора загружаемого агента.
00:12:42Claude уже поддерживает это через субагентов.
00:12:46И как раз сегодня удачно совпало, что я могу упомянуть
00:12:49функции для команд (teams), которые они только что выпустили.
00:12:54Там они могут порождать группу субагентов,
00:12:59которые затем отчитываются перед основным лидером команды.
00:13:02Теперь они называют их «командами».
00:13:04И этими командами, по сути,
00:13:10может управлять один лидер, а вы можете зайти
00:13:12и проверить, что именно делают агенты.
00:13:14У этих агентов есть определения того, что они...
00:13:18Интересно, смогу ли я быстро найти документ об этом.
00:13:23— Пока Джон ищет,
00:13:30если вы в чате и хотите задать вопрос,
00:13:34сейчас самое время, не стесняйтесь писать их прямо в чат,
00:13:37и мы разберем их в течение сессии.
00:13:40— Где я могу... Наверное, я смогу запостить это
00:13:42хотя бы в чат в Twitter.
00:13:47Итак, здесь,
00:13:51на этой странице, вы увидите, как определяется субагент,
00:13:58и заметите, что у них есть раздел метаданных (front matter),
00:14:01и в этом разделе
00:14:03можно определить навыки, к которым у субагента есть доступ.
00:14:08Так что если вы хотите создать агента, в данном случае
00:14:13субагента со списком навыков,
00:14:17то вы можете сделать это по названию навыка.
00:14:20Мы еще не совсем...
00:14:22следующие слайды будут об анатомии навыков,
00:14:26но навыки — это, по сути, просто названия.
00:14:28Таким образом, у вас может быть субагент
00:14:29со специфическим набором навыков,
00:14:31очень конкретным набором навыков,
00:14:34и вы можете отправить этого субагента решать задачу.
00:14:38Что касается функции «Команды», выпущенной сегодня,
00:14:43то смысл в том, что
00:14:45Claude Code может самостоятельно собрать свою команду,
00:14:48создать своих собственных агентов
00:14:49и справиться с задачей максимально эффективно.
00:14:53Но вы можете сами задать субагентов с кастомными навыками,
00:14:56если захотите сказать:
00:14:57«Пожалуйста, собери команду из этих субагентов».
00:15:00Это еще не совсем полноценная связь «агент-агент».
00:15:05Это тема для куда более масштабного обсуждения
00:15:08об архитектуре межагентного взаимодействия,
00:15:11что выходит за рамки нашей встречи.
00:15:12Но я определенно вижу, что этот паттерн
00:15:14определения субагентов
00:15:17будет перенят и для описания обычных агентов,
00:15:21а также для того, как они будут общаться друг с другом.
00:15:23Например, то, как вы представляете агента —
00:15:24я представляю это как Markdown-файл,
00:15:26где написано: «Вот на что я способен».
00:15:28Такой подход в духе «Выпускай меня, тренер!»:
00:15:30«У меня есть такие-то навыки, я умею забивать трехочковые,
00:15:32умею подбирать мяч, выпускай меня на поле».
00:15:34И так они смогут находить друг друга.
00:15:39Я думаю, у нас появится skills.sh для...
00:15:43что-то вроде пакетного менеджера для навыков.
00:15:47У нас будет пакетный менеджер для агентов
00:15:49и Markdown-файлов этих агентов.
00:15:51Это просто неизбежно произойдет.
00:15:54Уверен, это уже где-то происходит,
00:15:57и кто-то уже что-то опубликовал,
00:15:58просто это еще не стало мейнстримом.
00:16:00— В этом есть большой смысл.
00:16:03Спасибо, спасибо.
00:16:04Друзья, если есть еще вопросы,
00:16:06пишите их в чат.
00:16:08А пока, Джон, хочешь продолжить?
00:16:10— Да, конечно.
00:16:12Итак, навыки — это просто папка, без серверов и хостинга.
00:16:15Навык находится внутри директории,
00:16:20вы даете ей имя, и затем имя навыка
00:16:24или файл навыка должен называться skill.md.
00:16:28Это позволяет агентам в процессе поиска
00:16:31обнаруживать их.
00:16:32Это просто соглашение, чтобы инструментарий
00:16:35лучше с ними работал.
00:16:36Это значительно упрощает создание пакетных менеджеров,
00:16:39организацию структуры и всё остальное.
00:16:41Вместе с навыком в комплекте
00:16:45могут идти скрипты, справочные файлы,
00:16:49и так далее — масса возможностей, когда навык
00:16:53может обращаться к другим ресурсам, указанным внутри.
00:16:56Как вы видите, у навыка будут метаданные (front matter).
00:17:01По умолчанию ему нужны название и описание.
00:17:04Название должно совпадать с названием...
00:17:08если посмотреть на структуру.
00:17:10Если мы создаем навык под названием «my-skill»,
00:17:12вы так его здесь и называете — «my-skill».
00:17:17Описание критически важно,
00:17:20потому что оно сообщает,
00:17:23когда именно агент должен использовать этот навык.
00:17:24Агент будет,
00:17:26скажем так, выполнять поставленную вами задачу.
00:17:29И если он дойдет до момента, когда поймет:
00:17:31«О, мне нужно что-то, что обеспечивает
00:17:33стандарты продаж», — тогда он подгрузит этот навык.
00:17:38Он использует инструмент загрузки и активирует этот навык.
00:17:41Поэтому такие описания становятся решающими.
00:17:42То, как вы их пишете...
00:17:43если вы используете навыки в «ленивом» режиме.
00:17:46В противном случае вы можете вызвать навыки сразу через слэш,
00:17:50используя их как команды.
00:17:52Кажется, у меня есть слайд о командах против навыков,
00:17:55но, по сути, исторически это были две разные вещи,
00:18:00а теперь они слились в одну.
00:18:03Раньше навыки загружались только по требованию (lazy load),
00:18:04но теперь их можно и вызывать вручную через слэш,
00:18:08и агент может подгружать их сам.
00:18:12Под этим я имею в виду, что если вы введете слэш,
00:18:17то увидите список доступных навыков,
00:18:19которые можно вызвать вручную,
00:18:22либо подождать, пока агент сам их использует при необходимости.
00:18:27Итак, продолжим.
00:18:32— Джон, я думаю, ты еще коснешься этого,
00:18:39но лично мне хотелось бы услышать конкретный пример.
00:18:43Какой небольшой, четко очерченный навык ты бы посоветовал
00:18:47собрать каждому в первую очередь, чтобы понять модель?
00:18:52— О, это хороший вопрос. Позвольте привести,
00:18:55как мне кажется, один из лучших примеров сейчас.
00:18:57По сути, в Vercel некоторые проблемы с навыками,
00:19:03с которыми мы сталкиваемся, связаны с тем, что мы выпускаем
00:19:07обновления в очень быстром темпе.
00:19:12У агентов и моделей есть дата отсечки знаний,
00:19:15которая была несколько месяцев, а то и год назад.
00:19:19И поэтому по умолчанию,
00:19:24если вы дадите агенту задачу, он может использовать Next.js 14,
00:19:30хотя это уже на несколько версий устарело.
00:19:33Он может использовать AI SDK, в котором,
00:19:35как вы знаете, недавно упразднили «generate object»,
00:19:39который теперь стал частью «generate text»,
00:19:41чтобы API был более стандартизированным и понятным.
00:19:45И вот вы сталкиваетесь с такими проблемами,
00:19:50когда он использует старую версию,
00:19:51а вы пытаетесь что-то сделать,
00:19:53читаете документацию,
00:19:54и всё идет вразнобой, потому что данные устарели.
00:19:56В итоге проект на какое-то время «буксует»,
00:20:00пока вы пытаетесь понять,
00:20:03почему нет согласованности в том, что нужно.
00:20:05Чтобы синхронизироваться с агентом,
00:20:08вы могли бы создать навык вроде:
00:20:11«Используй эту версию React, эту версию AI SDK,
00:20:16используй эту версию рабочего процесса (workflow)».
00:20:18И затем вы можете добавить ссылки на то,
00:20:19где найти актуальную информацию по ним.
00:20:22Например, навык, который я собрал для Vercel —
00:20:28сейчас я его открою.
00:20:33Это навык для Vercel Workflow,
00:20:40я выпустил его несколько дней назад.
00:20:43И то, как мы это делаем —
00:20:46мы, по сути, поскольку очень заботимся о номерах версий,
00:20:49стали публиковать документацию вместе с нашими NPM-пакетами
00:20:50и говорим агенту: «Твой рабочий процесс устарел»,
00:20:54«Твои знания о Workflow неактуальны».
00:20:58Мы это просто знаем, потому что Workflow обновляется
00:20:59чуть ли не ежедневно на пути к релизу.
00:21:02Но мы можем сказать: «Знаешь что?»
00:21:06«Мы приложили актуальную документацию».
00:21:10Так что всякий раз, когда тебе нужно свериться с Workflow,
00:21:11иди и смотри документацию, которую мы прикрепили,
00:21:13и ищи там самое последнее.
00:21:16И это позволило мне при каждом запуске Workflow
00:21:18не беспокоиться о том, что агент найдет старую инфу.
00:21:22Он всегда будет находить данные, идущие в комплекте
00:21:25с NPM-пакетом, так что они всегда синхронизированы
00:21:27и соответствуют самой версии.
00:21:32Так что это очень... по сути, весь навык заключается в том,
00:21:34чтобы сказать «иди читай инструкцию» с парой важных
00:21:38рекомендаций и быстрых ссылок.
00:21:42Такие навыки решают проблемы,
00:21:44когда у агентов есть дата отсечки знаний,
00:21:48и они натыкаются на проблемы с версиями и прочим.
00:21:53Навык, который вы могли бы написать для себя...
00:21:57Я бы сказал, если вы используете навык...
00:22:01Сейчас я продемонстрирую навык под названием «create skill».
00:22:07Если вы поищете на skills.sh по запросу «create skill»,
00:22:11«create skill»... не знаю, есть ли там...
00:22:14В общем, если вы возьмете «create skill»,
00:22:23лучше всего от команды Claude Code.
00:22:28Посмотрим Claude... Кажется, мы публиковали их вариант.
00:22:33Простите, это не было запланировано заранее.
00:22:39— Да, пока ты ищешь тот самый...
00:22:42О, отлично, продолжай.
00:22:46— Мне стоило искать Anthropic
00:22:47вместо Claude Code.
00:22:49Да, если вы возьмете один из их навыков создания
00:22:50или один из их паттернов, вы сможете сказать «создай навык»,
00:22:54а затем — ой — вы можете сказать «создай навык» и написать,
00:22:58допустим: «Посмотри на мой стиль письма
00:23:02в файле readme.md и создай навык,
00:23:09который всегда будет следовать этому стилю».
00:23:12И тогда он возьмет всё, что есть в README,
00:23:14и создаст навык, который, по сути,
00:23:19будет вашим персонализированным стилем письма,
00:23:21так что с этого момента вы сможете вызывать его,
00:23:23говоря «стиль письма Джона» или как-то еще.
00:23:26Вы можете скормить ему тонны документации,
00:23:28дать ссылки на посты в блоге,
00:23:31на ваши сообщения или язык общения с клиентами
00:23:33и просто загрузить это всё.
00:23:37Я думаю, это всегда отличная отправная точка:
00:23:38«Что у меня уже есть,
00:23:40что я хочу иметь возможность воспроизводить снова?»
00:23:42Что я использую постоянно и буду использовать еще больше?
00:23:43Например, что-то, что я использую постоянно,
00:23:46и знаю, что буду использовать еще чаще.
00:23:50Обычно это общение с клиентами,
00:23:53блоги, контент и материалы,
00:23:56которые вы создавали в прошлом
00:23:57и хотите масштабировать.
00:23:59Так что да, это отличный первый стиль для проработки.
00:24:04— Это очень дельный совет.
00:24:05Обязательно попробую.
00:24:06Я бы хотел зачитать несколько комментариев
00:24:08из нашего чата.
00:24:10Дэйв пишет, что они создали навыки,
00:24:14чтобы основатель стартапа, не кодивший 10 лет,
00:24:17смог участвовать в разработке,
00:24:19не нарушая при этом архитектурных границ
00:24:23в новой кодовой базе.
00:24:24Мне кажется, это отличное применение навыков —
00:24:27помощь нетехническим специалистам или новичкам
00:24:30в процессе написания кода
00:24:32без ущерба для стандартов качества, и это здорово.
00:24:38И еще хотел добавить, Дэйв ранее отмечал,
00:24:42что он согласен с Джоном
00:24:45насчет наиболее популярных инструментов сегодня.
00:24:47Единственные MCP-инструменты, которые он использует: Chrome dev tools,
00:24:52MCP для взаимодействия с таск-трекерами
00:24:56вроде Linear или JIRA, а также для работы с базой данных.
00:24:59Так что это подтверждает всё, о чем вы говорили ранее.
00:25:02Прежде чем продолжить, у нас в чате возник вопрос
00:25:07о вашем мнении насчет того, что agents.md превосходят навыки
00:25:12в нашем посте про оценку агентов, который мы опубликовали.
00:25:17Не знаю, планировали ли вы коснуться этого
00:25:19позже в своей презентации.
00:25:21Я понимаю, что мы тут уже несколько раз отклонялись от темы,
00:25:25но не хотите ли разобрать это сейчас?
00:25:27— Да, конечно.
00:25:28Вообще, оценка моделей и агентов —
00:25:34это чертовски сложная задача.
00:25:38Потому что часто при написании тестов для них
00:25:42вы проверяете их на новом, пустом проекте,
00:25:46в котором нет никакого контекста.
00:25:49И вы даете им конкретный сценарий:
00:25:51«В этом пустом проекте используй Next.js» или что-то подобное.
00:25:56И если вы пишете такой тест,
00:25:59но не учитываете, что, например,
00:26:03сегодня вышла Opus 4.6,
00:26:05или какую модель вы используете,
00:26:07или специфику проекта, или любой другой контекст,
00:26:10будь то модель, агент или среда исполнения.
00:26:13У Cloud Code будет один системный промпт,
00:26:16у Cursor — совершенно другой.
00:26:17Слишком много переменных,
00:26:21да и сами модели по своей природе
00:26:24недетерминированы,
00:26:26так что их тестирование — задача со звездочкой.
00:26:31Возвращаясь к сравнению agents.md и навыков:
00:26:37это выбор между принудительной и «ленивой» загрузкой контекста.
00:26:42Если свести суть того блог-поста к вопросу:
00:26:47«Лучше ли принудительный контекст, чем загрузка по требованию?»,
00:26:51то ответом будет «да».
00:26:53Потому что модель будет воспринимать это
00:26:57как исходные инструкции — самое важное
00:27:00в начале жизненного цикла агента.
00:27:03Это просто задает рамки:
00:27:08«Вот над чем мы работаем».
00:27:10Это самый эффективный подход.
00:27:12Кстати, у меня есть кое-что на эту тему,
00:27:14что я хотел показать в конце:
00:27:16как можно заранее подготавливать или предзагружать навыки.
00:27:20Так что это просто особенность того,
00:27:25как работают модели.
00:27:29И надеюсь, что тот пост
00:27:33не поймут превратно: навыки — это не плохо.
00:27:35Просто если вам нужно, чтобы инструкции
00:27:39соблюдались всегда и беспрекословно, используйте agents.md.
00:27:42Я бы трактовал это именно так.
00:27:44Правда, я читал ту статью около недели назад.
00:27:48— Да, это звучит логично.
00:27:50Супер.
00:27:51Напоминаю всем участникам сообщества:
00:27:53если есть вопросы — пишите в чат.
00:27:56А пока, Джон, продолжай.
00:27:57— Хорошо.
00:28:01Файл навыка — это обычный Markdown.
00:28:04Вот пример: инструкции,
00:28:06как проверять React-код, серверные компоненты, оптимизация —
00:28:09просто перечисляете список вещей,
00:28:12которые должны выполняться.
00:28:14Также можно добавить скрипты для ссылок
00:28:19или функции, которые вы хотите вызывать,
00:28:21чтобы получить своего рода... ой,
00:28:25бандл из инструментов, которые видит модель.
00:28:30Итак.
00:28:32По сути, навыки — это как нанять агента
00:28:37или опытного ведущего инженера.
00:28:38Хорошо, идем дальше.
00:28:42Примеры использования.
00:28:46Давайте развернем на весь экран.
00:28:49Основные паттерны:
00:28:52лучшие практики React — это один из самых,
00:28:57пожалуй, самый скачиваемый навык
00:29:00в менеджере пакетов навыков.
00:29:02Он просто еще раз напоминает,
00:29:08в чем заключаются лучшие практики,
00:29:09даже сверх того, на чем обучалась модель.
00:29:12Ведь модель училась на коде всех подряд,
00:29:14а вы хотите, чтобы она следовала именно вашим стандартам.
00:29:18Перейдем сюда.
00:29:21Автоматизация рабочих процессов.
00:29:26Если вам нужно упаковать что-то,
00:29:27например, в zip-архив,
00:29:30это работает почти как скрипт на естественном языке.
00:29:34Я часто думаю о современных приложениях так:
00:29:40они либо сводятся к простому скрипту,
00:29:44либо вырастают до уровня агента.
00:29:47Либо вам нужен четкий детерминированный результат,
00:29:50где выход всегда соответствует входу,
00:29:53либо агент, способный разобраться,
00:29:56что делать, если данные немного не совпадают.
00:29:59Так что если вы хотите создать автоматизацию,
00:30:02которая умнее обычного скрипта,
00:30:07она сможет интеллектуально собирать файлы. Например,
00:30:10вы просите агента сделать git commit, и он такой:
00:30:15«Я заметил, что в проекте есть видео-файл».
00:30:20«Я его проигнорирую, потому что видео — это бинарные данные,
00:30:25и мы не хотим добавлять их в репозиторий».
00:30:26Агенты обычно сообразительны в таких вещах.
00:30:29А в скрипте вам пришлось бы
00:30:30вручную прописывать все эти сценарии.
00:30:33Так что для автоматизации
00:30:36вы настраиваете цепочку событий, и он их выполняет.
00:30:41Также есть «защитные барьеры» (guardrails), где вы указываете:
00:30:44«Пожалуйста, сверяйся с инструкциями, гайдлайнами,
00:30:49проверяй цвета» — и загружаете всё это.
00:30:53Их полезно подгружать в самом начале,
00:30:56чтобы агент... ну, там есть субагенты,
00:31:00множество сложных сценариев для этих барьеров.
00:31:02Но это тема для отдельного воркшопа.
00:31:07Итак, еще раз: соблюдение стандартов,
00:31:12автоматизация пайплайнов и защита ваших систем.
00:31:17Хорошо, давайте к следующему.
00:31:21Так, живую демонстрацию сегодня пропустим.
00:31:30И поговорим о публикации.
00:31:37Публикация — это, по сути, просто пуш на GitHub,
00:31:46после чего любой может сослаться на ваш репозиторий
00:31:51и добавить ваш навык себе.
00:31:52Им даже не нужно знать точную ссылку на файл.
00:31:56Если зайти на skills.sh, где добавляются навыки,
00:32:00сейчас покажу... вот,
00:32:04выберем любой случайный, например, Browser Use.
00:32:08Там дается ссылка для копирования и установки навыка,
00:32:11но можно просто добавить...
00:32:13Кажется, у меня не установлен Browser Use.
00:32:14Так что я возьму эту ссылку для демонстрации,
00:32:18открою вкладку и сделаю вот так.
00:32:23Если я не указываю конкретный файл навыка вручную,
00:32:29а просто даю адрес GitHub-репозитория,
00:32:31система сама найдет нужные навыки.
00:32:34Используем команду install skill package.
00:32:36Вас спросят, в каких редакторах вы хотите его использовать.
00:32:39Я выберу Cloud Code.
00:32:42Затем спросят: в текущий проект или глобально?
00:32:45Выберу проект. Символьная ссылка (SimLink) позволит всем
00:32:49использовать один и тот же файл. Подтверждаем.
00:32:53И вы видите: хотя я не указывал
00:32:55конкретный файл, система сама нашла Claude skills.
00:33:00У Browser Use есть этот файл skill.md.
00:33:09Давайте взглянем на него.
00:33:13Ой, файл навыка.
00:33:18Вы можете видеть, что они туда включили
00:33:22для своего навыка Browser Use.
00:33:26Он начинается с Markdown-разметки сверху.
00:33:27Это довольно объемный навык.
00:33:32Тут имя, описание, список разрешенных инструментов.
00:33:35Указано, что этот навык позволяет использовать
00:33:39инструмент Browser Use без подтверждения пользователем.
00:33:42То есть он дает разрешение на всё,
00:33:47что связано с Browser Use.
00:33:49Если вы активируете этот навык,
00:33:50вам не придется каждый раз одобрять действия браузера.
00:33:53Также там инструкции: если инструмент не установлен,
00:33:56модель узнает, как его установить,
00:33:58изучит основы и способы работы с ним.
00:34:04Хорошо, вернемся к нашему...
00:34:09В общем, всё, что нужно — отправить Markdown-файл
00:34:15в репозиторий на GitHub, и тогда `impact skills add` сможет его добавить.
00:34:19Опять же, устанавливайте только те навыки, которым доверяете.
00:34:23Относитесь к ним
00:34:26как к NPM-пакетам или скриптам. Не стоит брать
00:34:31первый попавшийся в сети навык или пакет,
00:34:35потому что вы не знаете, что именно там опубликовано.
00:34:38Доверяйте, но проверяйте.
00:34:40Также можно использовать приватные репозитории
00:34:45и git-подмодули.
00:34:48И наш реестр сообщества,
00:34:51который я уже показывал пару раз.
00:34:54Отлично.
00:34:55Итак, вы создаете Markdown-файл,
00:35:00публикуете его в репозитории GitHub,
00:35:02а мы его находим и устанавливаем.
00:35:05Теперь я хочу показать использование крутых навыков.
00:35:09Есть ли вопросы, которые нужно обсудить, прежде чем я перейду к этому?
00:35:13— Да, тут был вопрос, заданный чуть раньше.
00:35:16Сколько примеров совершенно неизвестного пакета или библиотеки
00:35:21должна увидеть LLM, если их точно нет
00:35:26в обучающих данных этой модели,
00:35:28чтобы правильно использовать этот пакет как навык
00:35:31и выдавать хорошие результаты?
00:35:33— Сколько примеров для хороших результатов?
00:35:36Прости, можешь прочитать вопрос еще раз?
00:35:39— Да, конечно.
00:35:40Итак, сколько примеров совершенно неизвестного пакета
00:35:45или библиотеки должна увидеть LLM, при условии, что его нет
00:35:49в обучающих данных, чтобы уметь пользоваться этим пакетом?
00:35:53— То есть, сколько примерно примеров нужно закинуть
00:35:55в описание навыка?
00:35:56— Именно.
00:35:57На самом деле, об этом можно думать так:
00:36:00вместо того чтобы высчитывать количество примеров,
00:36:05представьте себе книгу
00:36:09с оглавлением, главами и прочим.
00:36:12Когда агент сталкивается с какой-то ситуацией,
00:36:14и вы даете ему что-то вроде инструкции...
00:36:17Ну, как руководство по эксплуатации вашего автомобиля.
00:36:21Вы ведь открываете нужную страницу только тогда,
00:36:26когда, например, загорелся индикатор двигателя.
00:36:29Вам не нужно в этот момент читать про шины
00:36:32или что-то еще, верно?
00:36:33Так что, если вы структурируете свой навык так,
00:36:36что есть основной файл —
00:36:38это как общая обложка руководства.
00:36:40И если агенту нужно узнать про индикатор двигателя
00:36:44или (я не механик) про то, как работает бардачок,
00:36:49то он может перейти на конкретную страницу,
00:36:51подгрузить другой Markdown-файл
00:36:53или дополнительную информацию, специфичную именно для этой
00:36:57текущей задачи.
00:36:58Поэтому вместо того, чтобы сваливать кучу примеров
00:37:01того, как работает машина целиком,
00:37:06как единый механизм, вы можете разбить это на части.
00:37:11И я не имею в виду, что это нужно писать вручную.
00:37:14Я к тому, что когда вы просите агента создать навык,
00:37:18просто скажите ему организовать всё так,
00:37:23чтобы было понятно, в какой момент понадобятся
00:37:26те или иные главы этой «книги».
00:37:27Навыки могут содержать ссылки
00:37:30и подгружать дополнительный контекст по мере необходимости,
00:37:33исходя из конкретной задачи.
00:37:35Как и в случае с большинством библиотек,
00:37:39если взять, к примеру, какой-нибудь NPM-пакет,
00:37:43вы обычно импортируете из него всего пару методов.
00:37:45Вам ведь не нужны абсолютно все функции работы с датами
00:37:48из огромной библиотеки дат.
00:37:50Вам не нужен каждый компонент
00:37:52из библиотеки компонентов.
00:37:53Вам нужны примеры только тех конкретных вещей,
00:37:57которые требуются для вашей текущей задачи.
00:37:59Так что старайтесь думать в этом ключе: разделяйте всё
00:38:03по потребностям, задачам и требованиям,
00:38:07вместо того чтобы пытаться запихнуть всю кодовую базу целиком
00:38:11в этот проект.
00:38:12— Звучит очень логично.
00:38:14Еще один вопрос: как проверить,
00:38:17действительно ли агент освоил новый пакет
00:38:21благодаря этому навыку?
00:38:22Есть ли простые промпты или паттерны оценки,
00:38:25которые вы рекомендуете для проверки перед внедрением в команду?
00:38:29— Общее мнение, и я его полностью разделяю,
00:38:37заключается в том, чтобы просто что-то создать, начать пользоваться,
00:38:40посмотреть, где возникают ошибки, и доработать.
00:38:43В этом и суть агентского подхода к разработке:
00:38:49вместо долгих раздумий над тем, как всё организовать,
00:38:54спланировать и как выглядит «идеальный» навык,
00:38:57просто сделайте что-то, посмотрите, где оно ломается,
00:39:00и итеративно улучшайте.
00:39:01Я пробовал разные способы, например, запускал
00:39:08одновременно девять или даже больше сессий
00:39:13Claude Code, загружая в них разные навыки,
00:39:15чтобы сравнить их эффективность.
00:39:17В итоге вы получаете кучу разных вариантов
00:39:19и пытаетесь понять, какой из них
00:39:24выглядит лучше на ваш взгляд,
00:39:26или просите Claude самого оценить свои результаты.
00:39:29Честно говоря, сейчас это превращается в невыполнимую задачу.
00:39:34Так что, по сути, пока вы пользуетесь навыком —
00:39:37а это всего лишь Markdown-файл —
00:39:39просто пусть ваша команда заходит и обновляет его,
00:39:40или просите об этом самого агента.
00:39:43В конце любого разговора с агентом
00:39:46вы можете просто сказать, если что-то пошло не так:
00:39:49«Пожалуйста, обнови описание навыка на основе нашего
00:39:54текущего диалога» или что-то в этом роде.
00:39:56И он сам найдет нужный Markdown-файл,
00:40:00внесет правки и зафиксирует изменения.
00:40:02Именно так мы сейчас
00:40:08с этим и работаем.
00:40:09Конечно, есть нюансы вроде версионности,
00:40:13которые добавляют сложностей.
00:40:16Но мы сейчас на том этапе, когда модели
00:40:19всё лучше и лучше справляются с загрузкой навыков.
00:40:21Я точно не знаю, каковы результаты тестов
00:40:24у Opus 4.6 против 4.5 или у GPT 5.3 против 5.2 в плане работы с навыками.
00:40:29Но готов поспорить, что сейчас они справляются лучше,
00:40:33чем сегодня утром.
00:40:35Так что это одна из тех проблем,
00:40:40где мы думаем: «О, мне нужно довести это до совершенства».
00:40:42Тратим на это пару недель,
00:40:44наконец-то выпускаем...
00:40:46А за это время модели обновились раз пять
00:40:48с того момента, как вы начали работу.
00:40:49Лучше выпустить и дорабатывать на ходу,
00:40:52чем пытаться выкатить что-то идеальное.
00:40:56Это лучший совет, который я могу дать.
00:40:58— Да, «итерация к величию».
00:41:00Верно, Джон?
00:41:01— ITG (Iterate To Greatness).
00:41:02— Точно, ITG.
00:41:04Еще один вопрос, прежде чем мы продолжим.
00:41:08Замечали ли вы точку убывающей доходности,
00:41:10когда добавление новых примеров в навык
00:41:13перестает улучшать поведение или даже путает модель?
00:41:17— Лично я — нет.
00:41:23Я стараюсь не перегружать файлы навыков.
00:41:27Навык «создания навыков», который я использую, отлично всё разделяет.
00:41:33Мне нужно уточнить, какой именно я использую,
00:41:35потому что я взял чужой вариант.
00:41:37Дайте-ка я посмотрю это на другом экране.
00:41:40Там могут быть нюансы,
00:41:42связанные с конфигурационными файлами...
00:41:45— Да, просто убери демонстрацию экрана,
00:41:47и мы вернем её, когда будешь готов.
00:41:49— Так, сейчас найду.
00:41:52— Кстати, нас на стриме уже около 200 человек,
00:41:57это здорово.
00:41:58Всем привет!
00:41:59Если вы только подключились,
00:42:01смело пишите вопросы в чат,
00:42:03а мы переадресуем их Джону.
00:42:07— Да, буду рад ответить.
00:42:12— Так, сейчас поищу тот, что использую я.
00:42:16О, вроде то, что нужно.
00:42:19Не уверен, сохраняется ли у установленного навыка
00:42:27ссылка на оригинальный URL-адрес,
00:42:29откуда он был взят.
00:42:32Возможно, команды NPX или `skills`
00:42:36могут выдать эту информацию,
00:42:37но я не хочу запускать случайные команды в прямом эфире.
00:42:43Этот конкретный вариант предлагает агенту
00:42:44использовать трехуровневую систему загрузки,
00:42:47включая метаданные и связанные ресурсы,
00:42:49где его явно просят разделять
00:42:54ресурсы и дополнительные инструкции.
00:42:57В общем, я использую одних агентов для генерации навыков,
00:43:02и это всегда работало хорошо.
00:43:07Раньше я просто копировал документацию
00:43:11из Claude Code, вставлял её агенту и говорил:
00:43:13«Создай навык на основе этих доков».
00:43:15А теперь у меня для этого есть отдельный навык.
00:43:17И я никогда не пытался впихнуть в него слишком много примеров.
00:43:23Я знаю, что есть общие рекомендации —
00:43:28держать файл навыка в пределах 200 строк,
00:43:31но опять же, всё зависит от модели,
00:43:35а они постоянно совершенствуются.
00:43:36Да, вот здесь указано: до 200 строк.
00:43:39Так что мой совет: придерживайтесь минимализма.
00:43:44Если заметите пробелы в знаниях — исправляйте их,
00:43:47особенно если вы эксперт в своей области
00:43:50и сразу видите, чего не хватает.
00:43:52Но если вы используете навык,
00:43:56в котором сами не разбираетесь,
00:43:58присматривайте за ним повнимательнее.
00:44:01Не стоит ожидать, что можно просто настроить
00:44:03огромную систему оркестрации агентов,
00:44:06поставить навыки, о которых вы понятия не имеете,
00:44:08и что всё заработает само собой идеально.
00:44:11За ними придется следить.
00:44:13— Да, абсолютно верный совет, на все 100%.
00:44:17Супер.
00:44:20— Хорошо.
00:44:22К примеру, все видео, которые я сделал для этого проекта,
00:44:28были созданы с помощью навыка «create remotion guide»,
00:44:34который можно найти на skills.sh.
00:44:37Просто введите его в поиске.
00:44:39А также Geist.
00:44:43Geist — это дизайн-система из Бразилии,
00:44:48а Remotion — сейчас гляну на другом экране...
00:44:53Это способ программного создания видео.
00:45:01Я объединил навык по Remotion
00:45:05и, по сути, создал новый навык Geist.
00:45:09Я зашел в один из наших бразильских репозиториев —
00:45:12кажется, взял всё с главной страницы и из документации.
00:45:15И сказал: «Пожалуйста, собери всю информацию:
00:45:19дизайн, навыки, темы, шрифты,
00:45:23макеты, советы — вообще всё,
00:45:25и создай из этого навык».
00:45:27И проделав только это — то есть,
00:45:30«Возьми этот навык по Remotion»
00:45:32и «Возьми всю эту дизайн-информацию
00:45:37с этих сайтов, создай новый навык
00:45:41и назови его create remotion Geist».
00:45:43Благодаря только этой работе я смог создать
00:45:48создать вот такие видео, которые очень
00:45:57сильно напоминают брендированные навыки Brazil.
00:46:01Наверное, стоит немного приблизить видео.
00:46:04Глядя на эти финальные результаты,
00:46:07мне следовало бы сделать зум,
00:46:09но, по сути, все они были сгенерированы,
00:46:12пока я ходил за сэндвичем, понимаете?
00:46:14Для всех этих роликов у меня был план того,
00:46:16каким я хотел видеть воркшоп.
00:46:18Я сказал: «Сделай видео на основе моего плана
00:46:20и проведенного исследования».
00:46:22И в итоге на выходе получились все эти видео.
00:46:24Так что, опять же, создание навыков — это просто...
00:46:29это было бы действие «создать навык»
00:46:33внутри репозиториев reseller,
00:46:36где я говорю: «Возьми всё это
00:46:38и объедини с навыком создания Remotion».
00:46:41И вот, готово.
00:46:42Затем я поделился этим с командой,
00:46:43и теперь каждый может этим пользоваться.
00:46:45Повторюсь, на это...
00:46:47количество усилий и работы, которые я вложил,
00:46:50составило буквально несколько минут.
00:46:54Конечно, агенту потребовалось время,
00:46:55чтобы все найти —
00:46:57найти весь дизайн и остальное.
00:46:59Так что общее время работы составило пару часов,
00:47:03но мои личные усилия
00:47:06были крайне минимальными —
00:47:08все просто работало в фоновом режиме,
00:47:09пока я занимался другими делами.
00:47:11Поэтому обязательно берите свои текущие наработки
00:47:15и подумайте, какие вещи можно
00:47:17вот так объединить и автоматизировать.
00:47:19Точно так же, глядя на навык дизайна Geist,
00:47:24если я хочу сделать сайт покрасивее,
00:47:27я могу взять наш дизайн Geist и сказать:
00:47:31«В папке workshop
00:47:35создай лендинг для этого воркшопа».
00:47:39Это просто создаст папку workshop,
00:47:46подгрузит всю информацию о дизайне
00:47:50и построит страницу на ее основе.
00:47:55Это может сработать, а может и нет,
00:47:58смотря в каком настроении сегодня Opus 4.6.
00:48:01У меня не было возможности толком его протестировать,
00:48:04так как он вышел за пару минут до нашего начала.
00:48:06Но у него будет вся необходимая информация,
00:48:11и он сможет начать работу.
00:48:14По аналогии я мог бы запустить
00:48:17совершенно отдельный поток для другого сайта,
00:48:20если бы захотел, например,
00:48:25в папке car
00:48:29сделать лендинг для крутых тачек.
00:48:34Не знаю, я не особо разбираюсь в машинах.
00:48:36И вот так мы можем начать
00:48:40делать все эти вещи.
00:48:41Один из лучших промптов, который можно придумать,
00:48:46когда вы ищете идеи и варианты дизайна,
00:48:49особенно с новой функцией Teams,
00:48:54это использовать дизайн Geist и сказать:
00:48:57«В папке workshop»,
00:48:59точнее, «в папке workshop variations».
00:49:09«Пожалуйста, создай лендинг».
00:49:12«Сделай девять вариантов лендингов»
00:49:17«для этого воркшопа».
00:49:22Теперь у них есть функция «Команды»,
00:49:23мы можем сказать: «Используй члена команды».
00:49:28Например: «Создай команду для разработки 9 вариантов»
00:49:34или что-то в этом роде.
00:49:38Просто обычным английским языком.
00:49:40И это может даже собрать целую команду.
00:49:41И вот у нас вовсю идет работа.
00:49:44А теперь я могу пойти за сэндвичем, да?
00:49:47Потому что я проголодался, сейчас время обеда.
00:49:49А когда я вернусь,
00:49:52тут используется Tailwind 4,
00:49:54я вижу, что все работает довольно неплохо.
00:49:55И когда я вернусь,
00:49:56я смогу просмотреть все эти варианты
00:49:58и дорабатывать их, пока не получу то, что мне нравится.
00:50:03Думаю, этот вариант скоро закончит,
00:50:09и я смогу показать инструменты отладки.
00:50:11— Кто-то в чате только что сказал, прости, Джон,
00:50:12кто-то в чате написал:
00:50:14«Один из лучших промптов — это добавить "пожалуйста" в конце».
00:50:17— О да. — Это правда.
00:50:18— Пожалуйста.
00:50:21Есть много исследований о разных моделях
00:50:23и о том, как они реагируют на поощрение и прочее.
00:50:27Один из моих любимых образов (персон), которые я задавал
00:50:33в промптах для этих агентов, был такой:
00:50:36«Пожалуйста, веди себя как эксперт со Stack Overflow»,
00:50:41который будет крайне критичен к любому моему вопросу,
00:50:45мол, на это уже давно ответили или типа того.
00:50:48Но при этом ответы были бы максимально лаконичными
00:50:51и четко соответствующими моему вопросу.
00:50:56Да, не знаю, мы сейчас не так много говорим о персонах,
00:51:02как раньше, когда модели не были...
00:51:04сейчас модели стали намного лучше.
00:51:06Нам уже не нужно так сильно загонять их
00:51:10в рамки определенных задач.
00:51:11— Кто-то еще в чате написал,
00:51:15что некоторые модели якобы работают лучше,
00:51:18если сказать им, что их уволят.
00:51:20— О, да. — Если они не сделают все правильно.
00:51:22Не знаю, насколько это правда, но звучит уморительно.
00:51:25— Это абсолютная правда.
00:51:27Некоторые модели теперь даже огрызаются.
00:51:32Думаю, многие модели GPT отвечали в духе:
00:51:34«Не разговаривай со мной в таком тоне».
00:51:35— Потрясающе, вау.
00:51:38— Они типа сами себе хозяева.
00:51:39Я просто скажу: «Запусти сервер для меня в фоне».
00:51:46(звук печати на клавиатуре)
00:51:49Я мог бы создать навык. В какой-то момент,
00:51:50когда печатаешь длинный текст,
00:51:52ты такой: «Буду ли я часто это писать?»
00:51:54И если да, если вы только что написали абзац,
00:51:56который явно придется повторять,
00:51:59вы можете зайти и сказать:
00:52:01«Создай навык на основе последнего абзаца».
00:52:03Так, это должен быть наш сайт про машины.
00:52:07Посмотрим, что получилось.
00:52:09Ой, «Машины, которые трогают душу».
00:52:14Очень черно-бело, в стиле Brazil.
00:52:16Не знаю, откуда он взял изображения,
00:52:18но, видимо, он считает эти машины крутыми.
00:52:22Вот, пожалуйста.
00:52:27Я знаю, мы все видели лендинги
00:52:29миллион раз, но тут все по стандарту.
00:52:34Он следует гайдлайнам дизайна,
00:52:36соответствующим стилю Geist.
00:52:42И отсюда мы можем...
00:52:44один из крутых пакетов, который мы недавно выпустили
00:52:47в Brazil, называется Agent Browser.
00:52:54И есть навык под названием Agent Browser,
00:52:56который должен быть здесь, в Brazil Labs.
00:53:01Он открывает инструменты разработчика Chrome
00:53:06и настраивает соединение,
00:53:08чтобы вы могли сказать: «Пожалуйста, оцени».
00:53:11Я просто напечатаю.
00:53:13«Пожалуйста, оцени производительность этой страницы»,
00:53:15«чтобы понять, что можно оптимизировать»
00:53:17«для наших пользователей».
00:53:18И тогда Agent Browser,
00:53:23используя инструменты автоматизации и DevTools,
00:53:26заходит и проверяет логи.
00:53:28Я вижу сетевые инструменты
00:53:30и могу делать скриншоты.
00:53:32На самом деле, одно из моих любимых занятий —
00:53:36просить его итеративно делать скриншоты,
00:53:41чтобы он сам видел, что создал.
00:53:44А затем можно сказать ему:
00:53:47«Пожалуйста, направь этот дизайн в сторону чего-то»,
00:53:49«похожего на X, Y и Z».
00:53:52Затем просите делать скриншоты
00:53:54и делать коммиты после каждого снимка.
00:53:56Так вы сможете переключаться между
00:54:00тем, какими были коммиты
00:54:04и какими были изменения в дизайне.
00:54:06Видите, он на самом деле проходится по коду,
00:54:09ищет селекторы запросов
00:54:11и смотрит, как оптимизировать производительность.
00:54:13Откроем этот вариант и запустим сервер.
00:54:20Есть ли еще вопросы, пока тут всё
00:54:25крутится в фоновом режиме?
00:54:26— Мне просто нравится видеть, сколько процессов запущено сейчас.
00:54:30Это супер круто.
00:54:31В чате пока нет особых вопросов.
00:54:34Люди просто обсуждают разные промпты
00:54:37и идеи для них, и это здорово.
00:54:40Джон, у меня созрел вопрос:
00:54:43когда ты позволяешь агентам обновлять навыки
00:54:47на основе неудачных диалогов,
00:54:49как ты предотвращаешь ситуацию,
00:54:52когда эти автоматические правки уводят навык
00:54:55далеко от первоначальной цели или планки качества?
00:54:58— Хороший вопрос.
00:55:05Да, обычно они довольно хороши
00:55:09в плане внесения изолированных мелких правок.
00:55:12Если идет диалог,
00:55:13агент видит, что в нем сработало,
00:55:17а что нет.
00:55:20Так что, если вы указываете, что вот эта вещь
00:55:24не сработала в текущем разговоре,
00:55:26он может найти и обновить только конкретные
00:55:30части, которые нуждаются в исправлении.
00:55:33Он не пойдет и не станет
00:55:35переписывать всё с нуля.
00:55:37Я не припомню, чтобы это становилось реальной проблемой,
00:55:42не скажу, что это невозможно,
00:55:45но на практике я с таким не сталкивался.
00:55:47— Да, понятно.
00:55:48— Итак, вот страница нашего воркшопа.
00:55:54Можно выпускать, да?
00:55:56Выглядит красиво.
00:55:57А вот наши варианты.
00:55:59Давайте запустим сервер для каждого из них.
00:56:03И наоткрываем целую кучу вкладок.
00:56:11Но, думаю, мое время уже подходит к концу.
00:56:16Если есть какие-то финальные вопросы,
00:56:17прежде чем мы закончим, я могу показать...
00:56:22У меня тут в навыках... Потерял свои навыки.
00:56:29Браузер, верни их.
00:56:30Я настоятельно рекомендую найти навык создания,
00:56:36изучить тот, который подходит под ваши задачи.
00:56:40У меня есть навык публикации, и если вы доверяете —
00:56:43он под моим именем.
00:56:45Если вы доверяете агенту запуск GitHub CLI,
00:56:50опять же, это довольно высокий уровень доверия.
00:56:54У меня этот уровень есть.
00:56:57Он возьмет навык, который вы создали.
00:57:00То есть можно сказать: «создай навык», затем «опубликуй навык».
00:57:02И дальше он пойдет в...
00:57:04Сделаю это быстро за кадром.
00:57:07Найду один из моих репозиториев, где...
00:57:16По-моему, он даже сам себя опубликовал.
00:57:21Так что могу показать этот.
00:57:22Сейчас проверю, нет ли там чего-то приватного.
00:57:24Так, извините.
00:57:27В общем, он может сам создать для вас GitHub-репозиторий
00:57:29и опубликовать сам навык,
00:57:32так что вам почти ничего не придется делать,
00:57:35кроме команд «создай навык» и «опубликуй навык».
00:57:38И вы увидите: «пожалуйста, создай репозиторий»,
00:57:43«создай его в...» — я всегда путаюсь в организациях,
00:57:45так как состою в нескольких разных —
00:57:47и затем «проверь доступность в инструментах навыков».
00:57:52Так что если вы возьмете это,
00:57:56опять же, инструкции там такие,
00:57:58что он может пойти и создать
00:58:00или опубликовать этот навык для вас,
00:58:01чтобы вы могли поделиться им с командой,
00:58:02с друзьями или кем угодно.
00:58:03А еще один инструмент, над которым я работал
00:58:08буквально сегодня — это, по сути, «праймер для навыков».
00:58:14Если я знаю, что мне понадобится пара навыков,
00:58:19которые я хочу загрузить заранее...
00:58:20Я знаю, что мне нужны agent-browser, Geist...
00:58:24Добавим «лучшие практики Remotion»
00:58:29и «лучшие практики Vercel React».
00:58:33Это как раз один из тех инструментов,
00:58:37который решает вопрос принудительного контекста на старте.
00:58:40Он просто внедрит промпт в Cloud Code —
00:58:44пока это работает только там.
00:58:45Он отправит его туда и скажет:
00:58:48«Вот все навыки, которые мне точно понадобятся,
00:58:50и вот их содержимое»,
00:58:51чтобы когда начнется диалог,
00:58:53если я скажу: «оцени производительность порта 3000»,
00:58:58даже если я ни слова не сказал про agent-browser,
00:59:06он, очевидно, выберет именно agent-browser.
00:59:10Возможно, он и раньше бы так сделал, и часто делал.
00:59:14Я не помню описание agent-browser наизусть.
00:59:18Не знаю, есть ли там слово «оценить»,
00:59:21или поймет ли он по словам «оценить» и «порт 3000», что его надо загрузить.
00:59:24Но так я просто принудительно даю это на входе,
00:59:24чтобы при подобных фразах всё уже было подгружено.
00:59:29Этот пакет находится по адресу...
00:59:33Сейчас найду skills-primer.
00:59:36Мы также можем поделиться всеми ссылками в конце.
00:59:41Окей, отлично.
00:59:45Они у нас есть, супер.
00:59:45Закину это туда.
00:59:46И я бы сказал, как и всегда,
00:59:50с учетом того, как сегодня устроено ПО —
00:59:53клонируйте репозиторий и делайте его под себя.
00:59:55Мы живем в эпоху персонализации CLI
00:59:59и персонализации программного обеспечения.
01:00:02Так что если вы хотите другое название
01:00:04или совершенно иные функции и возможности...
01:00:07Если хотите адаптировать это под Codeium,
01:00:08Cursor или что угодно — просто клонируйте и меняйте.
01:00:11Можно просто сказать: «сделай так, чтобы это работало с Cursor»,
01:00:14и пусть ваш агент сам всё перепишет.
01:00:18Сейчас так много вещей можно сделать за один промпт,
01:00:20это просто невероятно.
01:00:23Это потрясающе, персонализированное ПО рулит.
01:00:26Я хотел задать еще один вопрос,
01:00:29который пришел в чат.
01:00:31Знаю, что время уже вышло,
01:00:32но так как навыки — это GitHub-репозитории
01:00:35и они, похоже, устанавливаются локально,
01:00:37как гарантировать получение обновлений?
01:00:40Есть ли в CLI команда типа «slash update skill»?
01:00:42Не помню точно, какие там сейчас команды,
01:00:48сейчас закрою это.
01:00:52Skills... Ой, у меня он даже не установлен глобально.
01:00:53Обожаю такое.
01:00:59Я смотрю последнюю версию в списке навыков.
01:01:02Да, команда «skills update» существует.
01:01:05Тогда уточняющий вопрос:
01:01:07а нужно ли, чтобы обновления навыков приходили часто?
01:01:11Это отличный вопрос.
01:01:13Не думаю, что у кого-то есть однозначный ответ,
01:01:18потому что сейчас правила
01:01:23касательно метаданных, навыков и версионирования...
01:01:28Думаю, еще не все договорились,
01:01:30как и в случае с самими навыками — нет согласия по поводу того,
01:01:32в каких директориях и структурах их хранить.
01:01:34Вся эта экосистема сейчас очень бурно растет.
01:01:37Так что касательно версионирования —
01:01:41тут пока стоит подождать и посмотреть.
01:01:47Делаем лучшее из возможного на данный момент
01:01:49и ждем, какие лучшие практики в итоге сформируются.
01:01:51Потому что сейчас мне нечего посоветовать,
01:01:54кроме как «обновляйте каждый раз».
01:01:57И просто надейтесь, что это и есть лучший путь.
01:01:59Так что тут без конкретных советов.
01:02:03Да, всё меняется постоянно.
01:02:06Уверен, у кого-то появится свежий совет на этот счет
01:02:08уже через пару дней, всё меняется ежедневно.
01:02:12Потрясающе, Джон.
01:02:18Есть ли что-то еще, что ты хотел бы сегодня показать
01:02:18нашему сообществу?
01:02:20В смысле...
01:02:21Там еще столько всего.
01:02:25Мы проведем еще много таких встреч,
01:02:26мне есть что показать,
01:02:28но я могу говорить об этом часами.
01:02:30Да, это точно.
01:02:32Джон, спасибо большое, что заглянул
01:02:34на нашу платформу для сообщества,
01:02:36пообщался со всеми
01:02:38и со всеми, кто был с нами.
01:02:39И да, как мы и говорили,
01:02:42Джон обязательно вернется снова.
01:02:44Так что следите за анонсами.
01:02:46Всем спасибо.
01:02:48Благодарю.
01:02:49Итак, если хотите подключиться
01:02:50к нашей следующей сессии сообщества,
01:02:53в понедельник у нас будут истории open source,
01:02:55и, кажется, на следующей неделе будет
01:02:58еще одна встреча с партнерами маркетплейса.
01:03:00Все подробности можно найти
01:03:03в нашем календаре мероприятий сообщества
01:03:04по адресу [community.vercel.com/events](https://www.google.com/search?q=https://community.vercel.com/events).
01:03:08Что ж, всем огромное спасибо, что были с нами.
01:03:12Было очень весело,
01:03:15и увидимся здесь на следующей неделе.
01:03:17До встречи!