Как собирать красивые дайджесты с AI-агентом: связка скиллов и автозапуск

Как собирать красивые дайджесты с AI-агентом: связка скиллов и автозапуск

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

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

Что получается на выходе

Начну с результата, чтобы дальше было понятно, ради чего все это. Вот обложка августовского выпуска.

Первый экран дайджеста. Цифры внизу собираются из фактического содержимого: 21 слайд, 194 источника, 3 главы.
Первый экран дайджеста. Цифры внизу собираются из фактического содержимого: 21 слайд, 194 источника, 3 главы.

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

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

Как собирать красивые дайджесты с AI-агентом: связка скиллов и автозапуск

Первые две части у меня работают, третья пока запускается руками. Поэтому раздел про автоматизацию собран как разбор трех рабочих способов с командами, и любой из них ставится за вечер.

Шаг 1. Скилл, который приносит факты

Самая скучная часть работы над дайджестом это сбор. Обойти два десятка источников, выписать, что там обсуждали, найти цифры, сохранить ссылки. На этом месте у меня стоит готовый открытый скилл last30days.

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

Этот конкретный скилл обходит Reddit, Hacker News, X, YouTube, TikTok, GitHub, Polymarket, arXiv, Techmeme и веб-поиск. Возвращает он конкретные посты со ссылками, датами и цифрами вовлеченности за окно в тридцать дней. Внутри лежит питоновский движок, который ходит по источникам, и длинная инструкция для модели о том, как из этого собирать текст.

# в Claude Code > /plugin marketplace add mvanhorn/last30days-skill > /plugin install last30days # в Codex, Cursor, Gemini CLI и других агентах $ npx skills add mvanhorn/last30days-skill -g # дальше в любом проекте > /last30days ИИ-агенты и безопасность Собираю: Reddit, HN, X, YouTube, GitHub, arXiv, веб. Окно: 14 июля - 13 августа. Источников: 194.

Reddit, Hacker News, GitHub и Polymarket работают сразу и без ключей. X, YouTube и TikTok подключаются отдельно, мастер настройки предлагает это на первом запуске.

Две вещи, которые стоит знать до того, как вы на них наткнетесь.

Источники периодически отваливаются. Соцсети меняют выдачу, ключи протухают, лимиты кончаются. У скилла для этого есть отдельная команда проверки. Попросите его прогнать doctor, и он покажет построчно, что работает, что настроено, но ни разу не проверялось, и что сломалось. Полезно запускать перед большим прогоном.

Тишина по источнику и отвал источника это разные вещи. Если X не ответил, честный вывод звучит как по X данных нет. Скилл эти состояния различает и помечает в отчете, и на длинной дистанции это спасает от выводов, построенных на пустоте.

Тема формулируется узко. Запрос про ИИ вернет кашу из всего подряд, запрос про безопасность агентов и побеги из песочницы вернет материал, из которого получается глава.

На выходе получается текст с фактами и ссылками. Дальше начинается вторая часть, где этот текст превращается в то, на что приятно смотреть.

Шаг 2. Дизайн-токен, файл, который держит стиль

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

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

:root { /* поверхности */ --cream: #F6F4EF; /* светлый экран */ --ink: #1A1A1A; /* темный экран и текст */ /* три градации текста, больше не нужно */ --ink2: #4A4A4A; --ink3: #666666; /* один акцент на всю систему */ --yellow: #EFFF3E; --hair: rgba(26,26,26,.16); /* две гарнитуры: mono для заголовков, sans для тела */ --mono: "JetBrains Mono", ui-monospace, monospace; --body: "Inter", system-ui, sans-serif; /* геометрия */ --mx: clamp(20px, 5vw, 64px); --r-card: 11px; }

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

Как такой файл рождается

Механика простая и повторяется для любого бренда.

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

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

Третье. Называете по роли. Имя --yellow живет ровно до смены палитры, имя --accent переживет ее. Мне удобнее физические имена, потому что кроме меня токен никто не редактирует, и здесь важнее договориться с собой один раз.

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

Цвета: только из списка выше. Любой другой hex в коде - ошибка. Шрифты: только эти две гарнитуры. // никаких системных подстановок на свой вкус Тени: нет. Глубина делается волосяной линией --hair. Градиенты: нет. Иконки: нет. Смысловые метки задаются знаком // перед заголовком. Пустое поле: часть дизайна. Не заполнять декором.

Проверяется механически. Попросите агента поискать в готовом файле цвета вне списка. Если нашлись, правило дописывается и остается в файле навсегда.

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

Стиль держится сам, когда описан один раз и лежит в файле. Все остальное это попытка вспоминать его каждый раз заново.

Шаг 3. Сборка, два скилла подряд в одном окне

Дальше вы приходите в Claude Code. Терминал или нативное приложение, разницы нет, скиллы и файлы там одни и те же. И вызываете скиллы по очереди.

Первый вызов приносит материал. Второй превращает его в страницу.

> /last30days события в индустрии ИИ за месяц: безопасность агентов, релизы моделей, деньги, споры 194 источника. Сохранил в digest-raw.md > Собери из digest-raw.md одностраничный HTML-дайджест строго по tokens.css. Три главы, экран на тезис, хронология раскрывающимися строками, цифры с анимацией при появлении, навигация стрелками и скроллом. Шрифты положи внутрь файла. Один файл на выходе. Готово: daydzhest-avgust.html, 21 экран, 2.8 МБ

Второй промпт длинный намеренно. Он описывает поведение страницы, а вид целиком берется из токена.

Что стоит проговорить агенту прямо, потому что само оно не появится.

Один экран, одна мысль

Модели охотно набивают экран шестью пунктами. В дайджесте это убивает чтение, поэтому правило про один тезис на экран лежит в промпте. Заголовок, подзаголовок, три карточки максимум.

Цифры набегают анимацией, когда экран появляется в поле зрения. Ключевая подсвечена акцентом из токена. Внизу оговорка авторов исследования, без нее цифры врут.
Цифры набегают анимацией, когда экран появляется в поле зрения. Ключевая подсвечена акцентом из токена. Внизу оговорка авторов исследования, без нее цифры врут.

Интерактив вместо мелкого текста

Хронология из семи событий с описаниями это стена текста. Те же семь событий раскрывающимися строками читаются за минуту. Сначала видно скелет, детали открываются по клику.

Раскрывается только одна строка за раз, соседние закрываются сами. Так экран остается в своих границах, и ничего не уезжает вниз.
Раскрывается только одна строка за раз, соседние закрываются сами. Так экран остается в своих границах, и ничего не уезжает вниз.

Сравнения показываются

Две цифры рядом это повод для полос. Полоса рисуется теми же переменными: акцент на первой, чернила на второй, волосяная линия на дорожке.

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

Ритм светлого и темного

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

Финальный экран собирает выводы. Он же самый полезный при пересылке: человек открывает файл, видит итоги и решает, листать ли остальное.
Финальный экран собирает выводы. Он же самый полезный при пересылке: человек открывает файл, видит итоги и решает, листать ли остальное.

Шрифты внутри файла в base64 дают вес. Дайджест из примера весит 2,8 МБ, и это нормально для одного файла, который открывается офлайн. Если вес критичен, шрифты подключаются ссылкой и файл худеет до сотен килобайт, но тогда без интернета он выглядит иначе.

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

Шаг 4. Как получать это каждый день

До сих пор цепочку запускал человек. Теперь про то, как сделать так, чтобы дайджест собирался сам и приходил утром готовым.

Способов много, разберу три рабочих. Они складываются друг с другом, поэтому смотрите на них как на детали конструктора.

Как собирать красивые дайджесты с AI-агентом: связка скиллов и автозапуск

Способ 1. Расписание на стороне провайдера

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

> /schedule каждый будний день в 8:57 утра: собери материал скиллом last30days по теме ИИ-агенты за последние сутки, сверстай HTML по tokens.css и пришли готовый файл Рутина создана. Ближайший запуск: завтра, 08:57. Расписание: 57 8 * * 1-5

Время лучше брать не круглое. В 9:00 просыпаются рутины всех пользователей планеты разом, в 8:57 очередь короче.

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

Способ 2. Cron и headless-запуск CLI

Главный универсальный путь. Агентские CLI умеют работать без человека. Вы передаете промпт параметром, агент выполняет его молча и завершается. Это ровно то, что нужно расписанию.

Скрипт целиком выглядит так.

#!/bin/zsh # cron не читает ваш .zshrc, поэтому PATH и ключи задаем явно export PATH=/opt/homebrew/bin:/usr/local/bin:$PATH source "$HOME/.digest-env" DAY=$(date +%F) OUT="$HOME/digests/$DAY.html" claude -p "Собери материал скиллом last30days по теме ИИ-агенты за последние сутки. Затем сверстай одностраничный HTML по $HOME/design/tokens.css и сохрани в $OUT. Исключи все ссылки, которые есть в $HOME/digests/seen.txt, и допиши новые туда же." \ --allowedTools "Bash,Read,Write,WebSearch" \ >> "$HOME/digests/log.txt" 2>&1

Файл со ссылками решает главную проблему ежедневного дайджеста. Без него вы каждое утро читаете одни и те же три новости.

Расписание ставится одной строкой.

# минуты часы день месяц день-недели 7 9 * * 1-5 /Users/me/bin/daily-digest.sh # проверить, что записалось $ crontab -l

Здесь же лежат все грабли, поэтому по порядку.

Ноутбук спит. Cron на макбуке не выполнит задачу, если крышка была закрыта, и пропуск не догонит. Штатное решение на macOS это launchd, агент с ключом StartCalendarInterval запускает пропущенную задачу при пробуждении. Если дайджест нужен железно каждый день, его место на VPS за пару сотен рублей в месяц.

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

Падения тихие. Скрипт, который молча не отработал, вы заметите через неделю. Лог обязателен, а лучше короткое сообщение себе при ненулевом коде возврата.

Прогон стоит денег. Ежедневная сборка это ежедневные токены. Считайте это до того, как поставите расписание на каждый час.

Схема не привязана к Claude. Строка запуска меняется на codex exec или на gemini -p, скилл ставится через npx, остальное остается как есть.

Если своей машины нет, тот же скрипт живет в GitHub Actions. Расписание задается в файле workflow, ключи лежат в секретах репозитория, результат уходит в Telegram или коммитится в репозиторий. Оговорка одна: время запуска в Actions плавает на несколько минут, а при высокой нагрузке запуск может быть пропущен.

Способ 3. Доставка в Telegram

Файл, который лежит в папке, читать никто не будет. Доставка решается одной строкой в конце скрипта, бот кладет готовый дайджест вам в личку.

Заводите бота у BotFather, получаете токен, узнаете свой chat_id, дописываете отправку.

$ curl -sS -F document=@"$OUT" \ -F caption="Дайджест за $DAY" \ "https://api.telegram.org/bot$TG_TOKEN/sendDocument?chat_id=$TG_CHAT" # если файл тяжелее 50 МБ, шлем ссылку вместо файла $ curl -sS -F chat_id=$TG_CHAT \ -F text="Дайджест за $DAY: $URL" \ "https://api.telegram.org/bot$TG_TOKEN/sendMessage"

Тот же ход работает для канала. Подставьте вместо личного chat_id идентификатор канала, где бот админ, и дайджест начнет выходить публично.

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

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

Что выбрать

  • Попробовать за десять минут - облачная рутина. Ничего не поднимаете, задача описывается словами.
  • Сделать надежно и по-своему - cron на VPS плюс отправка в Telegram. Вечер работы, дальше работает само.
  • Нужен только результат в чате - рутина плюс бот, без своей машины и без сервера.

Что дает эта связка, кроме дайджеста

Цепочка собрана из трех кусков, и каждый переиспользуется отдельно. Токен, который держит стиль дайджеста, точно так же держит стиль отчета для клиента, страницы с итогами квартала, инструкции для команды. Скилл сбора подключается к любой теме: к нише, конкурентам, отзывам, вакансиям. Расписание запускает любой сценарий, который вы уже умеете выполнять руками.

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

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

Такая штука перестает быть проектом примерно на втором выпуске. Дальше это просто утренний файл, который приходит сам и который приятно открыть.

Что запомнить

  • Дайджест собирается из трех независимых частей: сбор фактов, оформление, расписание. Менять их можно по отдельности.
  • Сбор закрывается готовым скиллом. last30days обходит два десятка источников и возвращает посты со ссылками и цифрами за тридцать дней.
  • Часть источников работает без ключей, остальные подключаются мастером. Перед большим прогоном полезно прогнать проверку doctor.
  • Стиль держит файл дизайн-токена: около двенадцати переменных плюс раздел запретов. Больше двадцати переменных, и агент начинает выбирать наугад.
  • Токен рождается из того, что уже есть. Агент выписывает значения из сайта и старых материалов, вы сокращаете до минимума.
  • Сборка это два вызова подряд в одном окне. Скилл приносит материал, второй промпт описывает поведение страницы.
  • Один экран, одна мысль. Хронология раскрывающимися строками, сравнения полосами, ритм светлого и темного вместо двадцати одинаковых экранов.
  • Расписание ставится тремя способами: облачная рутина у провайдера, cron с headless-запуском CLI на своей машине или VPS, GitHub Actions для тех, у кого машины нет.
  • Грабли автоматизации всегда одни. Пустое окружение в cron, спящий ноутбук, тихие падения без логов и повторы одних и тех же новостей без файла со ссылками.
  • Автоматизируйте только то, что уже собрали руками и остались довольны. Иначе получите ежедневную доставку того, что вам не нравится.

Полная версия гайда со всеми командами лежит на сайте.

2
1